|
What this is
Other links
The source code
package com.ice.syslogd;
import java.util.*;
import com.ice.syslog.SyslogDefs;
public class
ConfigEntry
{
public static final String RCS_ID = "$Id: ConfigEntry.java,v 1.1.1.1 1998/02/22 05:47:54 time Exp $";
public static final String RCS_REV = "$Revision: 1.1.1.1 $";
public static final String RCS_NAME = "$Name: $";
private static final int[] repeatBackoff =
{ 15, 30, 60, 180, 600, 3600 };
private boolean hasMatch;
private boolean notMatch;
private SyslogMatch matcher;
private SyslogAction action;
private int[] facilities;
private String[] parameters;
private int backOffIdx;
private int repeatCount;
private Date repeatTimeout;
private Date prevTime;
private SyslogMessage prevMsg;
public
ConfigEntry()
{
this.matcher = null;
this.hasMatch = false;
this.notMatch = false;
this.facilities =
new int[ SyslogDefs.LOG_NFACILITIES ];
this.action = null;
this.parameters = null;
this.backOffIdx = 0;
this.repeatCount = 0;
this.prevTime = null;
this.prevMsg = null;
}
public void
setAction( SyslogAction action )
{
this.action = action;
}
public boolean
afterRepeatTimeout( Date now )
{
return now.after( this.repeatTimeout );
}
public Date
getRepeatTimeout( Date now )
{
return this.repeatTimeout;
}
public void
setFacilityLevel( int facility, int level )
{
this.facilities[ facility ] = level;
}
public void
setMatchExpr( String expr )
{
this.hasMatch = true;
this.notMatch = false;
if ( expr.startsWith( "!" ) )
{
this.notMatch = true;
expr = expr.substring(1);
}
this.matcher = new SyslogMatch();
try { this.matcher.compile( expr ); }
catch ( MatchCompileException ex )
{
this.matcher = null;
this.hasMatch = false;
this.notMatch = false;
}
}
private boolean
matchMessage( String message )
{
boolean result = false;
if ( this.hasMatch && this.matcher != null )
{
result = this.matcher.matchMessage( message );
if ( this.notMatch )
{
result = ! result;
}
}
return result;
}
public void
openAction()
{
if ( this.action != null )
{
this.action.openAction();
}
}
public void
closeAction()
{
if ( this.action != null )
{
this.action.closeAction();
}
}
public void
registerActionDisplay( String name, SyslogDisplayInterface display )
{
if ( this.action != null )
{
this.action.registerActionDisplay( name, display );
}
}
private SyslogMessage
createRepeatMsg( SyslogMessage logMsg, Date now )
{
SyslogMessage repeatMsg =
(SyslogMessage)logMsg.clone();
long repSecs =
( now.getTime()
- this.prevTime.getTime() )
/ 1000;
repeatMsg.isRepeat = true;
repeatMsg.matchVars = null;
repeatMsg.message =
"msg repeated " + this.repeatCount
+ " times in " + repSecs + " seconds.";
return repeatMsg;
}
public void
incrementBackOff()
{
if ( ConfigEntry.repeatBackoff.length
> ( this.backOffIdx + 1 ) )
{
this.backOffIdx++;
}
}
public void
computeRepeatTimer( Date now )
{
Calendar cal = Calendar.getInstance();
cal.setTime( now );
cal.add
( Calendar.SECOND,
this.repeatBackoff[ this.backOffIdx ] );
this.repeatTimeout = cal.getTime();
}
public synchronized void
checkRepeatTimeout( Date now )
{
if ( this.prevMsg != null
&& this.repeatCount > 0 )
{
if ( now.after( this.repeatTimeout ) )
{
SyslogMessage repeatMsg;
if ( this.repeatCount == 1 )
repeatMsg = this.prevMsg;
else
repeatMsg =
this.createRepeatMsg( this.prevMsg, now );
this.invokeMessageAction( repeatMsg );
this.prevMsg = null;
this.repeatCount = 0;
this.backOffIdx = 0;
}
}
}
/*
*
* @return True, if the message should be processed.
* otherwise, False, indicating a repeat.
*/
public synchronized boolean
checkForRepeats( SyslogMessage logMsg )
{
boolean result = true;
boolean newMsg = true;
Date now = new Date();
SyslogMessage repeatMsg = null;
if ( this.prevMsg != null
&& this.prevMsg.message.length()
== logMsg.message.length()
&& this.prevMsg.hostName.equals( logMsg.hostName )
&& this.prevMsg.message.equals( logMsg.message ) )
{
result = false;
newMsg = false;
if ( this.repeatCount > 0 )
{
this.repeatCount++;
if ( now.after( this.repeatTimeout ) )
{
result = true;
repeatMsg = this.createRepeatMsg( logMsg, now );
this.invokeMessageAction( repeatMsg );
this.computeRepeatTimer( now );
this.incrementBackOff();
this.prevTime = now;
this.repeatCount = 0;
}
}
else
{
this.repeatCount++;
this.computeRepeatTimer( now );
}
}
if ( newMsg )
{
if ( this.repeatCount > 0 )
{
repeatMsg = this.createRepeatMsg( logMsg, now );
this.invokeMessageAction( repeatMsg );
}
this.backOffIdx = 0;
this.prevTime = now;
this.repeatCount = 0;
}
this.prevMsg = logMsg;
return result;
}
public void
invokeMessageAction( SyslogMessage logMsg )
{
if ( this.action.isThreaded() )
{
ActionThread thread =
new ActionThread( this.action, logMsg );
thread.start();
}
else
{
this.action.processMessage( logMsg );
}
}
public void
processMessage( SyslogMessage logMsg )
{
boolean processIt = true;
if ( facilities[ logMsg.facility ] >= logMsg.priority
&& this.action != null && this.action.isOpen() )
{
if ( this.hasMatch )
{
processIt = this.matchMessage( logMsg.message );
}
if ( processIt )
{
if ( this.checkForRepeats( logMsg ) )
{
logMsg.matchVars = null;
if ( this.hasMatch && ! this.notMatch )
{
logMsg.matchVars =
this.matcher.getMatchVariables();
}
this.invokeMessageAction( logMsg );
}
}
}
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.