/*
* NOTE: This copyright does *not* cover user programs that use HQ
* program services by normal system calls through the application
* program interfaces provided as part of the Hyperic Plug-in Development
* Kit or the Hyperic Client Development Kit - this is merely considered
* normal use of the program, and does *not* fall under the heading of
* "derived work".
*
* Copyright (C) [2004, 2005, 2006], Hyperic, Inc.
* This file is part of HQ.
*
* HQ is free software; you can redistribute it and/or modify
* it under the terms version 2 of the GNU General Public License as
* published by the Free Software Foundation. This program is distributed
* in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*/
package org.hyperic.hq.plugin.coldfusion;
import org.hyperic.hq.product.LogFileTailPlugin;
import org.hyperic.hq.product.TrackEvent;
import org.hyperic.sigar.FileInfo;
import java.util.Calendar;
import java.util.Iterator;
import java.util.Map;
public class ColdfusionErrorLogPlugin extends LogFileTailPlugin
{
private static final String[] LOG_LEVELS = {
"Fatal,Error", //Error
"Warning", //Warning
"Information", //Info
"Debug" //Debug
};
public String[] getLogLevelAliases() {
return LOG_LEVELS;
}
public TrackEvent processLine(FileInfo info, String line)
{
String errorLevel;
if (null == (errorLevel = getErrorLevel(line)))
return null;
try
{
String[] toks = line.split("\",\"");
return newTrackEvent(getTimeMillis(toks[2], toks[3]),
errorLevel, info.getName(), line);
}
catch (NumberFormatException e) {
}
return null;
}
private String getErrorLevel(String line)
{
for (Iterator it=getLogLevelMap().keySet().iterator(); it.hasNext();)
{
String level = (String)it.next();
if ((line.indexOf(level)) != -1)
return level;
}
return null;
}
private String getMessage(String thread, String msg)
throws NumberFormatException
{
return thread+": "+msg;
}
private long getTimeMillis(String date, String timeOfDay)
throws NumberFormatException
{
Calendar rtn = Calendar.getInstance();
rtn.clear();
String[] dateToks = date.split("\\/"),
timeToks = timeOfDay.split(":");
if (dateToks.length != 3 || timeToks.length != 3)
return System.currentTimeMillis();
int month = Integer.parseInt(dateToks[0]),
day = Integer.parseInt(dateToks[1]),
year = Integer.parseInt(dateToks[2]),
hour = Integer.parseInt(timeToks[0]),
min = Integer.parseInt(timeToks[1]),
secs = Integer.parseInt(timeToks[2]);
rtn.set(Calendar.MONTH, month-1);
rtn.set(Calendar.DAY_OF_MONTH, day);
rtn.set(Calendar.YEAR, year);
rtn.set(Calendar.HOUR_OF_DAY, hour);
rtn.set(Calendar.MINUTE, min);
rtn.set(Calendar.SECOND, secs);
return rtn.getTimeInMillis();
}
}