Возможно ли узнать как долго работал шедульный агент

  • Автор темы Автор темы Omh
  • Дата начала Дата начала
а че никто не пишет, что база зашифрована?..
 
to Akupaka

..............
К нам как-то бд приносили со скрытым дизайном, называется CMAgMa from Ibm26/InttrustMobile
а как ее вскрыть я не знаю. могу выложить, если кому интересно, да и мне охота посмотреть, что там внутри
 
не, товарищ, скрытый дизайн - это скрытый дизайн, а зашифрована - это зашифрована.
зашифрованную базу можно открыть только под учеткой того, для кого зашифровано!
гони учетку! ;))
 
TIA
Кстати, твой совет помог.
Вычитал лог агента и распарсил.
 
Покажи как получилось, очень интересно)
 
Окей.
Вот функция самописного класса APIDatabase.
Me.Handle - хендл базы данных.

Возможно, код не очень чистый, у меня на API не очень большой опыт писанины.

Вероятно, на первый взгляд это вообще кажется бредом, но если кто-то будет писать похожую функциональность, ему это очеень поможет.
Во многом я написал благодаря посту на каком-то японском форуме:

Код:
Function cGetAgentAssistRunLogInfo(AgentName As String) As String
On Error Goto Errh

Dim rv As String

If AgentName = "" Then Exit Function

Dim AgentAlias As String
AgentAlias = GetAlias(AgentName)

Dim retAgentNoteID As Long
Me.ErrorCode = NIFFindDesignNote(Me.Handle, AgentAlias, NOTE_CLASS_FILTER, retAgentNoteID)
If Me.ErrorCode <> NOERROR Then Goto Final

Dim AgentNodeHandle As Long
Me.ErrorCode = NSFNoteOpen(Me.Handle, retAgentNoteID, 0, AgentNodeHandle)
If Me.ErrorCode <> NOERROR Then Goto Final

Dim ItemBID As BLOCKID
Dim ValueBID As BLOCKID
Dim ValueType As Integer
Dim ValueLength As Long

Me.ErrorCode = NSFItemInfo(AgentNodeHandle, "$AssistRunInfo", Len("$AssistRunInfo"), ItemBID, ValueType, ValueBID, ValueLength)
If Me.ErrorCode = NOERROR Then
Dim pData As Long
pData = OSLockObject(ValueBID.pool) + ValueBID.block

Const ODS_TYPE_WORD = 0
pData = pData + ODSLength(ODS_TYPE_WORD)

Dim ObjDsc As OBJECT_DESCRIPTOR
Call MoveMemory(ObjDsc.ObjectType, Byval pData, 2)
Call MoveMemory(ObjDsc.RRV, Byval pData + 2, 4)

Dim retSize As Long
Dim retClass As Integer
Dim retPrivileges As Integer
Me.ErrorCode = NSFDbGetObjectSize(Me.Handle, ObjDsc.RRV, OBJECT_ASSIST_RUNDATA, retSize, retClass, retPrivileges)
If Me.ErrorCode = NOERROR Then

Dim hBuffer As Long
Me.ErrorCode = NSFDbReadObject(Me.Handle, ObjDsc.RRV, 0, retSize, hBuffer)
If Me.ErrorCode = NOERROR Then
Dim pBuffer As Long
pBuffer = OSLockObject(hBuffer)

Dim Offset As Long
Dim objChunk As Long
Dim memChunk As Long
Dim Chunk As Long
Dim ObjStr As String

Dim i As Integer
Dim Char As String

Const MAXCHUNK = 32000
While Offset < retSize
Chunk = retSize - Offset
If (retSize - Offset) > MAXCHUNK Then Chunk = MAXCHUNK

ObjStr = String(Chunk, "X")
CopyMemory ObjStr, pBuffer, Len(ObjStr)

For i = 1 To Len(ObjStr)
Char = Mid$(ObjStr, i, 1)
If (Asc(Char) <32) Or (Asc(Char) > 128) Then Char = " " 'Only available symbols
rv = rv + Char
Next

pBuffer = pBuffer + Chunk
Offset = Offset + Chunk
Wend

Call OSUnlockObject(hBuffer)
Call OSMemFree(hBuffer)
End If
End If

rv = Fulltrim(rv)

Call OSUnlockObject(ValueBID.pool)
End If

Final:
If AgentNodeHandle <> 0 Then Call NSFNoteClose(AgentNodeHandle)

'		If Me.ErrorCode <> NOERROR Then Print GetCAPIErrorMsg(Me.ErrorCode)

cGetAgentAssistRunLogInfo = rv

Exit Function
Errh:
Call ErrHandler
Exit Function
End Function
 
Omh, а чему равняется константа OBJECT_ASSIST_RUNDATA, если это константа?)
 
Код:
Const OBJECT_ASSIST_RUNDATA = 8 '/* Assistant run data object */
 
а не проще ли в каждый агент заюзать свою библиотеку
которая на инициализе и терминейте подсчитывает время работы и постит док в какую нить БД? :)
всего то потребуется написать библиотеку и во все агенты прописать Use "MyTimerLib"
?
 
ToxaRat
Ну у меня задача было написать тулзу, которая анализирует сторонние базы, будь то стандарнтые лотусные или поставки другого разработчика с закрытым дизайном.
Если надо анализировать только своих агентов, то, конечно, проще модифицировать своих агентов так, что бы они сообщали статистику.
 
Включить "Activity logging" с типом "Domino.AGENT" и через "Analize Server Activity" можно увидеть время выполнения агентов.
Но это администрирование, а не программирование...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!