NotesLog Errors Read JavaAgent

/**
 * Created: 2014.01.12.7.06.AM
 * NotesLogEventListProcessing
 * NotesLog items to be converted to TXT/CSV/XML data for Xpages
 * TODO: Before running code, be sure to remove System.outs, meant for Testing...
 */
import lotus.domino.*;
import java.util.*;

/**
 * @author Dököll Solutions, Inc.
 * @version 2014.01.12.7.06.AM
 * 
 */
public class JavaAgent extends AgentBase {
	
	//TODO: Create TXT, CSV, and XML files with the results, feed to Xpages
	public void NotesMain() {

		try {
			//Grab session, yank database out of that
			Session session = getSession();
			System.out.println("FOUND_SESSION " + session);
			//...
			Database database = session.getDatabase("", "log.nsf");
			System.out.println("FOUND_DATABASE " + session);
			//Create a date based on session, we want today's date
			DateTime dtToday = session.createDateTime("Today");
			System.out.println("FOUND_DATE " + dtToday);
			//Convert this date to String, endsWith or startsWith can't search therefore
			String ConvertDateToString = dtToday.toString();
			System.out.println("FOUND_DATE_CONVERSION " + ConvertDateToString);
			//Fetch EventList through Forms, by pass the MiscEvents view
			//TODO: Grab EventList View if you need specific dates
			DocumentCollection docColl = database.search("Form = 'Events'");
			Document logDoc = docColl.getFirstDocument();
			//Enter Loop, we are looking at only todays docs/Events
			System.out.println("BEGIN LOOP...");
			while (logDoc != null) {
				// Grab EventList items
				//System.out.println("Grabbing EventList items...");
				Vector itemsList = logDoc.getItemValue("EventList");
				//Run through Events line by line
				for (Enumeration values = itemsList.elements(); values
						.hasMoreElements();) {
					String eventFetch = (String) values.nextElement();
					//grab only the Events that match the search criteria, date and text
					if (eventFetch.startsWith(ConvertDateToString)
							&& eventFetch.endsWith("Anonymous")) {
						eventFetch = eventFetch.substring(0, eventFetch.indexOf("Anonymous"));
						//TODO: Perhaps beign conversion to XML and so on here...
						System.out.println("FOUND_LOG " + eventFetch);
					}
					//...
					if (eventFetch.startsWith(ConvertDateToString)
							&& eventFetch.endsWith("docucontent.nsf")) {
						eventFetch = eventFetch.substring(0, eventFetch.indexOf("docucontent.nsf"));
						//...
						System.out.println("FOUND_DB " + eventFetch);
					}

				}
				//grab additional log items, as necessary...
				logDoc = docColl.getNextDocument();
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}//end of program...

}

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>
//UPDATE: 2014.01.14.8.13.PM
//If you want to throw the log retrieved to your browser, you might want to try the following, 
//which would then give you the ability to split it into parts and be consumed in such way that is understandable, columns and so on
//thus further remove the need to add a CSV or TXT file to  File Server, example C:\\temp\\la la la... you can go dynamic on this thing

			//DateTime dtToday = session.createDateTime("Today");
			// PrintWriter...
			PrintWriter pw = getAgentOutput();
			// Content type set at Txt
			// TODO: Figure out a better version to load a CSV file to browser
			// currently, the csv downloads to local directory
			pw.println("Content-type:text/txt");
			
			String dtToday = ("01/12/2014");
			System.out.println("FOUND_DATE " + dtToday);
			String ConvertDateToString = dtToday.toString();
			System.out.println("FOUND_DATE_CONVERSION " + ConvertDateToString);
			DocumentCollection docColl = database.search("Form = 'Events'");
			Document logDoc = docColl.getFirstDocument();
			System.out.println("BEGIN LOOP...");
			while (logDoc != null) {
				// Grab EventList items
				System.out.println("Grabbing EventList items...");
				Vector itemsList = logDoc.getItemValue("EventList");
				for (Enumeration values = itemsList.elements(); values
						.hasMoreElements();) {
					String eventFetch = (String) values.nextElement();
					if (eventFetch.startsWith(ConvertDateToString)
							&& eventFetch.endsWith("Anonymous")) {
						eventFetch = eventFetch.substring(0, eventFetch.indexOf("Anonymous"));
						
						
							// write records from view into a Text file and show it in the
							// browser
							pw.println(eventFetch);


						//System.out.println("FOUND_LOG " + eventFetch);

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>
//UPDATE: 2014.01.22.9.01.PM
//say you had a need to match new NotesLog errors against researched items, troubleshooting logs and so on... you might want to try below, 
//load specific/understandable values, split as columns to be paired against other v iew items, where fix exists

 //Run through Events line by line
        for (Enumeration values = itemsList.elements(); values
            .hasMoreElements();) {
          String eventFetch = (String) values.nextElement();
          //grab only the Events that match the search criteria, date and text
          //TODO: Retrieve multiple error types and language
          if (eventFetch.startsWith(ConvertDateToString)
              && eventFetch.endsWith("(Unknown Source)")) {
            eventFetch = eventFetch.substring(0, eventFetch.indexOf("(Unknown Source)"));
            //TODO: Perhaps begin conversion to XML and so on here...
            //Adding to Notes View
            //...
            String strEventBitsReplace = eventFetch.toString();
            //Write this block better, or add on one line
            strEventBitsReplace = strEventBitsReplace.replaceAll(":", ",");
            strEventBitsReplace = strEventBitsReplace.replaceAll(" ", ",");
            //Split items and load to awaiting array variable...
            String[] strColSplit = strEventBitsReplace.split(",");
      
            //plug array values into local String variables
            String strDateTime = strColSplit[0].trim(); //DateAndTime
            String strHour = strColSplit[1].trim(); //Hour
            String strMinute = strColSplit[2].trim(); //Minute
            String strSeconds = strColSplit[3].trim(); //Seconds
            String strAmPm = strColSplit[4].trim(); //AmPm
            String strErrorLang = strColSplit[5].trim(); //ErrorLang
            String strErrorRequest = strColSplit[6].trim(); //ErrorRequest
            String strErrorOrig = strColSplit[7].trim(); // ErrorOrig
            //Troubleshoot this one, but do not add to NSF back-end
            String strErrorDummy = strColSplit[8].trim(); //Dummy
            String strErrorAt = strColSplit[9].trim(); //ErrorAt
            String strErrorDescrip = strColSplit[10].trim(); //ErrorDescrip
            //Convert/format time data for FileTime column
            String ConvertStringToString = strHour +":"+ strMinute +":"+ strSeconds;
            
            //FOR DEBUG ONLY: 
            //use this sparingly, you are re-populating Log.nsf
            //throw the data in a CSV file, or test Notes documents created
            //...
            //System.out.println("FOUND_LOG " + DateTime + " " + ConvertStringToString + " " + AmPm+ " " + ErrorLang + " " + ErrorOrig+ " " + ErrorSpace+ " " + ErrorDummy+ " " + ErrorAt+ " " + ErrorDescrip);
            //...
            //these documents will be available in docucontent.nsf
            Database currDatabase = session.getDatabase("", "docucontent.nsf");
            System.out.println("FOUND_DATABASE " + session);
            //Create a date based on session, we want today's date
            //DateTime dtToday = session.createDateTime("Today");
                   
          //declare and initialise document variable
    		//create document(s)
    		Document submitDocument = (Document) currDatabase.createDocument();
    		//load to form in your back-end
   
    		submitDocument.replaceItemValue("Form", "NewNotesLogErrorsReport");
    		submitDocument.replaceItemValue("FileDate", strDateTime);
    		submitDocument.replaceItemValue("FileTime", ConvertStringToString);
    		submitDocument.replaceItemValue("ErrorAmPm", strAmPm);
    		submitDocument.replaceItemValue("ErrorRequest", strErrorRequest);
    		submitDocument.replaceItemValue("ErrorDescrip", strErrorDescrip);
    		submitDocument.replaceItemValue("ErrorAt", strErrorAt);	
    		submitDocument.replaceItemValue("ErrorOrigin", strErrorOrig);	
    	
            //save this document, otherwise it is not recorded in the back-end
            submitDocument.save();
 
    		}





Use this XSnippet to read Log.nsf EventList, info that can later be dissected to fit into Xpages, TXT, CSV files...  See Log results to make a connection with the code...  Please note: Normally you would not add values already retrieved back into the Log, this was meant for our exercise.

Instructions:
(1) You want to give the Notes User at least Author access in Log.nsf
(2) Further, you would want your Admin to do this
(3) You would also suggest a copy of the Log database be made prior

Added Info:
Add code to onBeforePageLoad within Xpages to run the Agent, you may also add a JavaBean, add a button to runOnServer

via Xpages

<xp:eventHandler event="onclick" submit="true" refreshMode="complete" immediate="false" save="true" id="eventHandler4">

<xp:this.action><![CDATA[#{javascript:RunNotesLogEventListJavaBean.doRunNotesLogErrorEvents()}]]></xp:this.action>
</xp:eventHandler>

via JavaBean

database.getAgent("NotesLogEventListProcessing").runOnServer();

//UPDATE: 2014.01.14.8.13.PM

As per the update above, you would also need to configure your Agent properties to reflect, as one example: javaagentnewnoteslogretrieved.txt, in which case when run through your browser, you would add: http://yourserverName/docucontent.nsf/javaagentnewnoteslogretrieved.txt

Added info:  You can also add code to ensure you are actually getting the search strings you need, thus the date or the string you hope to retrieve...  you would then modify the following to your linking

if (eventFetch.startsWith(ConvertDateToString)
&& eventFetch.endsWith("Anonymous")) {
eventFetch = eventFetch.substring(0, eventFetch.indexOf("Anonymous"));

Java
Köll S Cherizard
January 12, 2014 2:59 PM
Rating
9

All code submitted to OpenNTF XSnippets, whether submitted as a "Snippet" or in the body of a Comment, is provided under the Apache License Version 2.0. See Terms of Use for full details.



No comments yetLogin first to comment...