package org.codehaus.mojo.syslog; import java.io.BufferedReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.codehaus.mojo.truezip.util.DefaultTrueZip; import org.codehaus.mojo.truezip.util.TrueZip; import org.codehaus.mojo.truezip.util.TrueZipFileSet; import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.StringUtils; import org.productivity.java.syslog4j.Syslog; import org.productivity.java.syslog4j.SyslogIF; import org.productivity.java.syslog4j.SyslogMessageProcessorIF; import de.schlichtherle.io.File; import de.schlichtherle.io.FileReader; /** * Send a syslog message, or messages in a TrueZip fileset * @goal send * @requiresProject false */ public class SendSyslogMojo extends AbstractSyslogMojo { /** * Single message to send. It is ignored when <i>directory</i> configured * @parameter expression="${message}" */ private String message; /** * Syslog host to send to * @parameter expression="${host}" default-value="127.0.0.1" */ private String host; /** * The original host that message created. * @parameter expression="${messageHost}" */ private String messageHost; /** * Regular or TrueZIP directory to pickup data files * @parameter expression="${directory} */ private java.io.File directory; /** * comma separate list of ANT's includes expression * @parameter expression="${includes}" */ private String includes; /** * comma separate list of ANT's exclude expression * @parameter expression="${excludes}" */ private String excludes; /** * Number of delay milliseconds between syslog sends * @parameter expression="${delay}" default-value="0" */ private int delay = 0; private SyslogIF syslog; public void execute() throws MojoExecutionException, MojoFailureException { syslog = Syslog.getInstance( protocol ); if ( StringUtils.isBlank( this.messageHost ) ) { RedirectSyslogMessageStructureProcessor msgProcessor = new RedirectSyslogMessageStructureProcessor(); msgProcessor.setFromHost( this.messageHost ); syslog.setMessageProcessor( msgProcessor ); } syslog.getConfig().setHost( host ); syslog.getConfig().setPort( port ); syslog.getConfig().setUseStructuredData( true ); if ( directory == null ) { sendSingleMessage( message ); return; } sendFiles(); } private void sendSingleMessage( String message ) { if ( message == null ) { message = "testing send message"; sendLine( message ); } return; } private void sendFiles() throws MojoExecutionException, MojoFailureException { TrueZipFileSet fileSet = new TrueZipFileSet(); fileSet.setDirectory( directory.getAbsolutePath() ); if ( includes != null ) { fileSet.setIncludes( tokenize( includes ) ); } if ( excludes != null ) { fileSet.setExcludes( tokenize( excludes ) ); } TrueZip truezip = new DefaultTrueZip(); List fileList = truezip.list( fileSet ); for ( int i = 0; i < fileList.size(); ++i ) { this.getLog().info( "Sending " + fileList.get( i ) ); sendFile( (File) fileList.get( i ) ); } } private static List tokenize( String values ) { String[] tokens = StringUtils.split( values, ", " ); List list = new ArrayList(); for ( int i = 0; i < tokens.length; ++i ) { list.add( tokens[i] ); } return list; } private void sendFile( File file ) throws MojoExecutionException, MojoFailureException { BufferedReader reader = null; try { reader = new BufferedReader( new FileReader( file ) ); while ( true ) { String line = reader.readLine(); if ( line == null ) { break; } if ( !StringUtils.isBlank( line ) ) { sendLine( line ); if ( delay != 0 ) { Thread.sleep( delay ); } } } } catch ( IOException e ) { throw new MojoExecutionException( e.getMessage(), e ); } catch ( InterruptedException e ) { } finally { IOUtil.close( reader ); } } private void sendLine( String line ) { syslog.info( line ); } }