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

Тема в разделе "Lotus - Администрирование", создана пользователем cnekmp, 13 сен 2011.

  1. cnekmp

    cnekmp Гость

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

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

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

    Код (Text):
    [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 файлов.
    Пример:
    Код (Text):
    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> и т.д.). Есть ли какое либо решение чтобы убрать создание этих тегов или упростить вид лога при создании? У кого нибудь есть опыт в аудите такого плана логов?
    Очень нужен совет по решению данной проблемы.

    Спасибо.
     
  2. cnekmp

    cnekmp Гость

    70 просмотров и никакого ответа ;)
     
  3. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    799
    Симпатии:
    78
    Ну потому наверное, что ответ очевиден - все сводится к банальному парсингу лога. Там все есть. from, to, и msglen.
    Можно и распарсить смайлики и теги - благо их реально не много.
    В Sametime API по моему есть исходники - можно скомпиллировать свой вариант писалки в лог.
     
  4. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    799
    Симпатии:
    78
    Что то в этом роде:
    <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">
    Код (LotusScript):
    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
     
  5. cnekmp

    cnekmp Гость

    Примногом благодарен. Не подскажете пожалуйста как пользоватся этим кодом? Т.е. куда его надо вставить?
     
  6. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    799
    Симпатии:
    78
    Его не надо никуда вставлять - надо творчески переработать и использовать по назначению свой вариант:facepalm:
     
Загрузка...

Поделиться этой страницей