package external; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java.util.logging.Handler; import java.util.logging.LogRecord; import java.util.regex.Pattern; import org.das2.graph.Auralizor; import org.das2.qds.QDataSet; /** * experiment to see if auralization is useful with log messages. This will make * one of two sounds when HEAD or GET is found within the log message. *
 * from org.das2.util import LoggerManager
 * t= LoggerManager.getLogger('das2.url')
 * from external import AuralizationHandler
 * handler= AuralizationHandler()
 * handler.addSound( 'HEAD.*', getDataSet( 'http://jfaden.net/~jbf/autoplot/data/wav/dinkq.wav' ) )
 * handler.addSound( 'GET.*', getDataSet( 'http://jfaden.net/~jbf/autoplot/data/wav/ding2.wav' ) )
 * t.addHandler( handler )
 * from java.util.logging import Level
 * t.setLevel( Level.FINER )
 * t.info('GET test:')
 * sleep(2000)
 * getDataSet( 'http://jfaden.net/~jbf/autoplot/data/events/colorEvents.txt' )
 * 
* * @author jbf */ public class AuralizationHandler extends Handler { Map sounds; public AuralizationHandler() throws Exception { sounds= new LinkedHashMap<>(); } /** * auralize the sound when the pattern is encountered. * @param regex the regex, for example 'HEAD.*' * @param s the sound, for example getDataSet("http://jfaden.net/~jbf/autoplot/data/wav/dinkq.wav") */ public void addSound( String regex, QDataSet s ) { sounds.put( Pattern.compile(regex), s ); } @Override public void publish(LogRecord record) { //String s= record.getMessage(); QDataSet buf=null; for ( Entry e: sounds.entrySet() ) { if ( e.getKey().matcher(record.getMessage()).matches() ) { buf= e.getValue(); break; } } if ( buf==null ) return; final Auralizor auralizor= new Auralizor( buf ); auralizor.setScale(false); Runnable run= new Runnable() { public void run() { auralizor.playSound(); } }; new Thread(run).start(); } @Override public void flush() { } @Override public void close() throws SecurityException { } }