Das Notes Forum

Lotus Notes / Domino Sonstiges => Tools & Downloads => Thema gestartet von: eknori am 12.09.03 - 09:47:28

Titel: Search Log
Beitrag von: eknori am 12.09.03 - 09:47:28
Hallo zusammen;

hat jemand eigentlich mal das SearchLog aus der Sandbox ( http://www-10.lotus.com/ldd/sandbox.nsf/ecc552f1ab6e46e4852568a90055c4cd/3441e2c58ee03cd185256865005eba0b?OpenDocument&Highlight=0,Search ) mal für R6 umgebaut ??
Titel: Re:Search Log
Beitrag von: jofa am 03.11.03 - 15:13:14
Hi Ulrich,

ich habe einfach eine weitere Action "Get Log R6" in der Maske definiert:

---snip---
Sub Initialize
   Dim s As New notessession
   Dim ws As New notesuiworkspace
   Dim logdb As notesdatabase
   Dim logview As notesview
   Dim logdcc As notesdocumentcollection
   Dim logdoc As notesdocument
   Dim uidoc As notesuidocument
   Dim curdoc As notesdocument
   Dim item As NotesItem
   Dim Lookupkey(1) As String
   Dim date1 As String
'   Dim tmpevents As String
   Dim rtitem As notesrichtextitem
   Dim searchstring As String
   Dim result As Integer
   Dim richStyle As NotesRichTextStyle
   
   Set richStyle = s.CreateRichTextStyle
   richStyle.FontSize = 8
   richStyle.Bold = False
   richStyle.Bold = False
   richStyle.NotesColor = 0
   richStyle.NotesFont = FONT_COURIER
   
   
   result = 0
   
   Set uidoc = ws.currentdocument
   Set curdoc = uidoc.document
   
   curdoc.removeitem("LogOutput")
   
   Set rtitem = curdoc.CreateRichTextITem("LogOutput")
   Call rtitem.AppendStyle(richStyle)
   
   Set logdb = New notesdatabase(curdoc.mailserver(0),"log.nsf")
   If Not(logdb.isopen) Then
      Msgbox "Could not open log database."
      Exit Sub
   End If
   
   Set logview = logdb.getview("Mail-Routing-Ereignisse")
   If logview Is Nothing Then
      Msgbox "Could not open view Mail Routing Events in log database."
      Exit Sub
   End If
   
   
   Dim sdate As New notesdatetime(Today)
   Call sdate.adjustday(1-Val(curdoc.days(0)))
   
   Print sdate.timeonly
   Call sdate.adjusthour(-Val(Left(Cstr(sdate.timeonly),2)))
   
   
   CheckDate = Cdat(sdate.dateonly)
   
   Print CheckDate
   
   Stop    
   searchstring = "Form = """ & Curdoc.Event(0) & """"
   
   Dim dcc As notesdocumentcollection
   Set dcc = logdb.search(searchstring,sdate,0)
   Print dcc.count
   Set logdoc = dcc.getfirstdocument()
   Do While Not(logdoc Is Nothing)
      Set item = logdoc.GetFirstItem( "EventList" )
      Forall v In item.Values
         If Instr(1,v,curdoc.TrackText(0),5) Then
            Print "Extracting log information"
'            Messagebox( v )
            Call rtitem.appendtext(v)
            Call rtitem.addnewline(1,True)
            result = result + 1
         End If    
      End Forall
      Set logdoc = dcc.getnextdocument(logdoc)
   Loop
   
   curdoc.SearchResults = result
   Call curdoc.save(1,0)
   curdoc.saveoptions = "0"
   Call uidoc.close
   Call ws.viewrefresh
   Call ws.editdocument(True,curdoc)
End Sub
---snap---

So muss man nur wissen ob das zu durchsuchende Log-File mit einer R5er oder R6 Schablone erstellt ist ;-))

have fun ...

Gruss JoFa
Titel: Re:Search Log
Beitrag von: jofa am 04.11.03 - 17:23:33
Hi @all,

ich habe alles auch in einen JavaAgent überführt, läuft schneller und erlaubt Regex, allerdings rufe ich diesen ja auch einem NotesUIDocument auf und bekomme leider die Ergebnisse nicht direkt angezeigt.

Weiss jemand, wie man über einen Script-Button dieses lösen könnte ?

Gruss JoFa
Titel: Re:Search Log
Beitrag von: jofa am 04.11.03 - 18:40:12
Hi @all,

hier kommt noch der JavaAgent:

---snip---
import lotus.domino.*;
import java.util.Vector;
import java.io.*;
import jregex.*;
// von http://jregex.sourceforge.net

//import java.util.regex.*;
               


public class JavaAgent extends AgentBase {
   public void NotesMain() {
      try {
         Session session = getSession();
         AgentContext agentContext = session.getAgentContext();

         Database db = agentContext.getCurrentDatabase();
         Agent agent = agentContext.getCurrentAgent();

         Document doc =   db.getDocumentByID(agent.getParameterDocID());

         String strServer = doc.getItemValueString("MailServer");
         String strSearch = doc.getItemValueString("TrackText");
         String strForm = doc.getItemValueString("Event");
         String strLine = "========================================================================";
         
         String strDays = doc.getItemValueString("Days");
         int intDays =  Integer.valueOf(strDays).intValue();
         intDays = intDays * -1;
         DateTime dtToday = session.createDateTime("Today");
         DateTime dtNow = session.createDateTime("Today");
         DateTime dtEvent = session.createDateTime("Today");
         dtToday.setNow();
         dtNow.setNow();
         dtToday.adjustDay(intDays, true);
         
         DbDirectory dir = session.getDbDirectory( strServer );
         Database dbLog = dir.openDatabase("log.nsf");
         
         doc.removeItem( "LogOutput" );
         RichTextItem rtitem = doc.createRichTextItem("LogOutput");
         
         RichTextStyle header = session.createRichTextStyle();
         header.setBold(RichTextStyle.YES);
         header.setColor(RichTextStyle.COLOR_BLACK);
         header.setEffects(RichTextStyle.EFFECTS_NONE);
         header.setFont(RichTextStyle.FONT_COURIER);
         header.setFontSize(8);
         
         rtitem.appendStyle(header);
         rtitem.appendText(strLine);
         rtitem.addNewLine();
         rtitem.appendText("Suchabfrage vom: " + dtNow.getLocalTime());
         rtitem.addNewLine();
         rtitem.appendText(strLine);
         rtitem.addNewLine();
         rtitem.appendText("Server.........: " + strServer);
         rtitem.addNewLine();
         rtitem.appendText("Suchstring.....: " + strSearch);
         rtitem.addNewLine();
         rtitem.appendText("Suchabfrage ab.: " + dtToday.getLocalTime());
         rtitem.addNewLine();
         rtitem.appendText(strLine);
         rtitem.addNewLine();
         
         View view = db.getView("MailRoutingEvents");

         String strGetSearch = "Form = \"" + strForm + "\"";
         DocumentCollection dc = dbLog.search(strGetSearch, dtToday);
         
         rtitem.appendText("Log-Einträge...: " + dc.getCount());
         rtitem.addNewLine();
         rtitem.appendText(strLine);
         rtitem.addNewLine();
         rtitem.appendText("Get Search Str.: " + strGetSearch);
         rtitem.addNewLine();
         rtitem.appendText(strLine);
         rtitem.addNewLine();
            
         Vector iM;
         String strEvent;
         int count = 0;
         
         Pattern pSearch = new Pattern(".*" + strSearch + ".*", "i");

         Document docLog = dc.getFirstDocument();
         while (docLog != null) {
            
            iM = docLog.getItemValue("EventList");

            for (int i=0; i<iM.size(); i++) {
               strEvent = (String)iM.elementAt(i);
         
               Matcher mSearch = pSearch.matcher(strEvent);
   
               if (mSearch.matches()) {
                  count++;
                  rtitem.appendText(strEvent);
                  rtitem.addNewLine();
               }
            }
            
            docLog = dc.getNextDocument();
         }

         dtNow.setNow();
         rtitem.appendText(strLine);
         rtitem.addNewLine();
         rtitem.appendText("Suchabfrage END: " + dtNow.getLocalTime());
         rtitem.addNewLine();

         doc.appendItemValue("SearchResults", count);
         doc.save(true, true);

         } catch(Exception e) {
            e.printStackTrace();
         }
   }
}

---snap---

Meine Weiterentwicklung basiert auf dem SearchLog aus der Sandbox (Link s.o.)

Gruss Jofa
Titel: Re:Search Log
Beitrag von: jofa am 11.11.03 - 12:01:46
Hi @all,

ich habe die fertige DB zur Auswertung von R5er und R6er Log mit Java-Agenten fertig, vielleicht hat ja jemand Interesse (Siehe Anhang).

Bin über jedes Feedback dankbar ;-)

Gruss JoFa