Sametime: аудит логов чата

  • Автор темы cnekmp
  • Дата начала
C

cnekmp

#1
Здравствуйте,

В данный момент Sametime установлен на RedHat машине и настроено логирование чата пользователей.

В sametime.ini указано:

Код:
[Chat]
CHAT_LOG_SUPPORT=1
[Library]
BB_CL_LIBRARY_PATH=/lotus/IBM_TECHNICAL_SUPPORT/chatlogs
[ST_BB_NAMES]
ST_AUTH_TOKEN=notes
ST_CHAT_LOG=N/A
Всё работает отлично, проблема только в самой структуре созданных *.dat файлов.
Пример:
Код:
13/Sep/11, 05:54:09: Session started for organization 
13/Sep/11, 05:54:09: Add UserId CN=User2/O=Corporation 
13/Sep/11, 05:54:09: Add UserId CN=User1/O=Corporation 
13/Sep/11, 05:54:18: Send Message from UserId CN=User1/O=Corporation to UserId CN=User2/O=Corporation msgLen 94 msg: <span style="font-size:8pt;font-family:Tahoma;color:#000000;" class="left">just testing</span>
13/Sep/11, 05:54:22: Remove UserId CN=User1/O=Corporation
13/Sep/11, 05:54:22: Remove UserId CN=User2/O=Corporation
13/Sep/11, 05:54:22: Session ended 
***************
В предыдущем логе понять всё понятно, но становится сложнее когда пользователи вставляют смайлы и т.д. (появляются слишком много лишних тегов и несколько строк сообщений приростают в целую гору текста с тегами <span> и т.д.). Есть ли какое либо решение чтобы убрать создание этих тегов или упростить вид лога при создании? У кого нибудь есть опыт в аудите такого плана логов?
Очень нужен совет по решению данной проблемы.

Спасибо.
 

rinsk

Lotus team
12.11.2009
900
44
#3
70 просмотров и никакого ответа :facepalm:
Ну потому наверное, что ответ очевиден - все сводится к банальному парсингу лога. Там все есть. from, to, и msglen.
Можно и распарсить смайлики и теги - благо их реально не много.
В Sametime API по моему есть исходники - можно скомпиллировать свой вариант писалки в лог.
 

rinsk

Lotus team
12.11.2009
900
44
#4
Ну потому наверное, что ответ очевиден - все сводится к банальному парсингу лога.
Что то в этом роде:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content">
Код:
Sub Initialize
Dim doc As NotesDocument
Dim st As NotesStream
Dim stLog As NotesStream
Dim dt As NotesDateTime
Dim dtTmp As NotesDateTime
Set s= New NotesSession
Set st=s.CreateStream
Set stLog=s.CreateStream
Set db=s.CurrentDatabase
Set pdoc=db.GetProfileDocument("StHash")
On Error Goto traps
''''''
Dim FilePath As String
Dim FileName As String
Dim txtPoz As Long
Dim txtLen As Long
Dim txtLast As Long
Dim txt As String
Dim FlagKill As Variant
''''''''''
Dim txt1,txt2,txt4,txt5,txtLine
Dim txtMsg As String
txt1=": Send Message from "
txt2=" to UserId "
txt4="d msg: "
txt5=": Session ended "
''''''''''
FilePath="\\ST\D$\Lotus\Domino\ChatLog\"
FilePath="\\VM-ST\C$\Lotus\Domino\CLData\"
Call stLog.Open(FilePath+"LogFile.Log")
stLog.Position=stLog.Bytes
'''''''''''''''
Forall x In pdoc.GetItemValue("FileList")
If x<>"" Then
If Dir(FilePath+Strleft(x,";"))<>"" Then
pList(Strleft(x,";"))=Val(Strrightback(x,";"))
Else
Call stLog.WriteText(Now & ": Remove FileID:" & x,0)
End If
End If
End Forall	
'''''''''''''''
FileName=Dir(FilePath+"*.dat")
Do While Not FileName=""
'''''''''''''''''''
'Stop
Print FileName
txtLast=1
FlagKill=False
If Iselement (pList(FileName)) Then TxtLast=pList(FileName)
Call stLog.WriteText(Now & ": process file:" & FileName & " at:" &txtLast,0)
If txtLast>Filelen(FilePath+FileName)+4 Then txtLast=1
If Filelen(FilePath+FileName)>txtLast Then
Call st.Open(FilePath+FileName)
txt=st.ReadText()
If Right(txt,2)<>Chr(13)+Chr(10) Then txt=txt+Chr(13)+Chr(10)
Call st.Close
txtPoz=Instr(txtLast,txt,Chr(13)+Chr(10))
Do While txtPoz>0
txtPoz=txtPoz+2
txtLine=Mid(txt,txtLast,TxtPoz-TxtLast)
Call stLog.WriteText("Line:" & txtLine,0)
If Instr(19,txtLine,txt5)=20 Then
FlagKill=True
Exit Do
End If
If Instr(19,txtLine,txt1)=20 Then
txtLen=Val(Strrightback(Strleft(txtLine,txt4)," "))
If txtLen>0 Then
txtPoz=Instr(txtLast,txt,txt4)+Len(txt4)
txtMsg=Mid(txt,txtPoz,txtLen)
'						If CountCR(txtMsg)>0 Then
'						Print txtlen 
txtMsg=Mid(txt,txtPoz,txtLen+CountCR(txtMsg))
txtPoz=txtPoz+Len(txtMsg)
'						Else
'txtPoz=txtPoz+txtLen
'						End If

'						Call stLog.WriteText("CountCR:" & CountCR(txtMsg),0)
'						Print "Len:" & Len(txtMsg)
txtMsg=Left(txtMsg,32000)
Call ConvertLineEncoding(txtMsg, txtMsg, Len(txtMsg), "UTF8_TO_LMBCS")
Else 
txtMsg	=""
End If
'					Call stLog.WriteText("MSG:" & txtMsg,0)
Set dt=New NotesDateTime(convertDate(Left(txtLine,19)))					
Set doc=db.CreateDocument
Call doc.ReplaceItemValue("Form","Chat")
Call doc.ReplaceItemValue("Date_Time",dt)
If Instr(txtLine," SectionId ") Then
Call doc.ReplaceItemValue("Sender",Strrightback(Strleft(txtLine," to SectionId ")," from UserId "))
Call doc.ReplaceItemValue("Receiver",Strright(Strleft(txtLine," msgLen ")," SectionId "))
Else
Call doc.ReplaceItemValue("Sender",Strrightback(Strleft(txtLine," to UserId ")," from UserId "))
Call doc.ReplaceItemValue("Receiver",Strright(Strleft(txtLine," msgLen ")," to UserId "))
End If
Call doc.ReplaceItemValue("Message",txtMsg)
Call doc.Save(True,False)
pList(FileName)=txtPoz
Else
pList(FileName)=txtPoz-2
End If
txtLast=TxtPoz
txtPoz=Instr(txtLast,txt,Chr(13)+Chr(10))
Loop
End If
If FlagKill Then 
Kill FilePath+FileName
If Iselement(pList(FileName)) Then Erase pList(FileName)
Call stLog.WriteText(Now & ": Kill file:" & FileName ,0)
Else
Set dt=New NotesDateTime(Filedatetime(FilePath+FileName))
Set dtTmp=New NotesDateTime(Now)
If dtTmp.TimeDifferenceDouble(dt)>45000 Then 
Kill FilePath+FileName
If Iselement(pList(FileName)) Then Erase pList(FileName)
Call stLog.WriteText(Now & ": Kill file:" & FileName & " Time expired ..." ,0)
End If	
End If
FileName=Dir()
Loop
Exit Sub

traps:
Print Error & " number:" &Err & " in line:" Erl & " "& FilePath+FileName
End Sub
 

rinsk

Lotus team
12.11.2009
900
44
#6
Примногом благодарен. Не подскажете пожалуйста как пользоватся этим кодом? Т.е. куда его надо вставить?
Его не надо никуда вставлять - надо творчески переработать и использовать по назначению свой вариант:facepalm: