%
Получение параметра статистики сервера используя вызовы Notes API.
Некоторые параметры из Notes-клиента недоступны,
для их получения нужно вызывать агент на сервере.
Недокументированная API функция Cmovmem используется в этом примере
под псевдонимом CopyBufferToString - она копирует содержимое буфера
и возвращает данные в виде строки в LotusScript.
Julian Robichaux -- http://www.nsftools.com
%END
Option Public
Option Declare
Declare Function OSLockObject Lib "nnotes.dll" (ByVal objectHandle As Long) As Long
Declare Function OSUnlockObject Lib "nnotes.dll" (ByVal objectHandle As Long) As Integer
Declare Function OSMemFree Lib "nnotes" (ByVal handle As Long) As Integer
Declare Sub CopyBufferToString Lib "nnotes.dll" Alias "Cmovmem" (ByVal lpSrc As Long, ByVal lpDest As String, ByVal lSize As Long)
Declare Sub CopyBuffer Lib "nnotes.dll" Alias "Cmovmem" (ByVal lpSrc As Long, lpDest As Any, ByVal lSize As Long)
Declare Private Function NSFGetServerStats Lib "nnotes" Alias "NSFGetServerStats" (ByVal ServerName As LMBCS String, ByVal Facility As LMBCS String, ByVal StatName As LMBCS String, hRetTable As Long, nRetSize As Long) As Integer
Declare Function StatQueryTime Lib "nnotes" (ByVal facility As String, ByVal statName As Any, _
ByVal headerString As String, ByVal namePrefix As String, ByVal valuePrefix As String, ByVal lineSuffix As String, _
hRetTable As Long, nRetSize As Long) As Integer
%
Function GetStatParam
Возвращает параметр статистики с указанного сервера с помощью NSFGetServerStats
На клиенте работает со всеми параметрами статистики, в отличие от GetStatParamFull, возвращая даты в EN-формате
%END
Function GetStatParam(sServerName As String, sFacility As String, sStat As String) As String
Dim nError As Integer
Dim hRetTable As Long
Dim nRetSize As Long
nError = NSFGetServerStats(sServerName, sFacility, sStat, hRetTable, nRetSize)
If nError = 0 Then
GetStatParam = GetBufferAsString(hRetTable, nRetSize, 0, True)
If Len(GetStatParam) <> 0 Then
GetStatParam = StrRight(GetStatParam, Chr(9))
GetStatParam = Replace(Replace(GetStatParam, Chr(10), ""), Chr(13), "")
Else
Error 4375, "Параметр статистики '" + sFacility + "." + sStat + "' отсутствует либо недоступен"
End If
Else
Error nError, "Ошибка вызова API-функции NSFGetServerStats"
End If
End Function
%
Function GetStatParamFull
Возвращает параметр статистики с текущего сервера с помощью StatQueryTime;
даты возвращаются в расширенном формате: EN-формат [формат локали]
На клиенте не работает с некоторыми параметрами; для получения нужно использовать GetStatParamFull либо запускать агент на сервере.
%END
Function GetStatParamFull(sFacility As String, sStat As String) As String
Dim nError As Integer
Dim hRetTable As Long
Dim nRetSize As Long
nError = StatQueryTime(sFacility, sStat, "", "", Chr(9), "", hRetTable, nRetSize)
If nError = 0 Then
GetStatParamFull = GetBufferAsString(hRetTable, nRetSize, 0, True)
If Len(GetStatParamFull) <> 0 Then
GetStatParamFull = StrRight(GetStatParamFull, Chr(9))
Else
Error 4375, "Параметр статистики '" + sFacility + "." + sStat + "' отсутствует либо недоступен"
End If
Else
Error nError, "Ошибка вызова API-функции StatQueryTime"
End If
End Function
%
Function GetStatDate
Description: возвращает дату-время из параметра статистики в формате текущей локали сервера
%END
Public Function GetStatDate(sFacility As String, sStat As String) As Variant
Dim s As String
s = GetStatParamFull(sFacility, sStat)
s = StrLeft(StrRight(s, "["), "]")
If IsDate(s) Then
GetStatDate = CDat(s)
Else
Error 4045, "Параметр статистики '" + sFacility + "." + sStat + "' содержит значение '" + s + "', не являющееся датой"
End If
End Function
%
Копирование информации из буфера в строку
используя недокументированную функцию Cmovmem API (вместо CopyMemory+ из kernel32).
Параметры:
* buffer - адрес буфера
* bufferLen - количество байт для копирования
* offset - точка отсчета начала копирования
* bFreeMem - индикатор? - очищать очищать буфер
или оставить для дальнейшего использования
Julian Robichaux -- http://www.nsftools.com
%END
Function GetBufferAsString(buffer As Long, bufferLen As Long, offset As Long, bFreeMem As Boolean) As String
Dim pointer As Long
Dim bufferText As String
bufferText = Space(bufferLen)
pointer = OSLockObject(buffer)
Call CopyBufferToString(pointer + offset, bufferText, bufferLen)
Call OSUnlockObject(buffer)
If bFreeMem Then
Call OSMemFree(buffer)
End If
GetBufferAsString = bufferText
End Function