A client API for emitting measurements and counters into the SIGINT analytics system.
application=app1 node=node1 queue.size=10000 mode=amqp format=bson|json amqp=one, two ampq.one.connection=amqp://username:password@host1:port/virtualhost amqp.one.exchange=sigint ampq.two.connection=amqp://username:password@host2:port/virtualhost amqp.two.exchange=sigint
applicationThe name of application
nodeThe name of the node running the application
queue.sizeThe max number of emissions to be queued for sending. The earliest queued entries will be dropped to make room for newer ones when the queue is full
modeSpecifying the publish mode. Valid values are 'noop' and 'amqp'.
formatSpecifying the publish format. Valid values are 'bson' and 'json'.
amqpThe list of keys for each broker to load-balance publish into
amqp.<key>.exchangeThe name of the exchange to publish emissions into for the broker
ampq.<key>.connectionAn AMQP URI describing how to connect to the AMQP broker for
Static Singleton vs Context
SIGINT can be used as either a static singleton, or from a context (i.e. per-thread).
To configure a static singleton, call
SIGINT.configureCurrent when your application starts up:
//Do this at app startup SIGINT.configureCurrent(new File("/path/to/sigint.properties")); ... //Then you can do this from anywhere in your app SIGINT.current().time("myop").duration(10).emit();
To configure a contextual instance:
//Create a context that can be passed around or stored with a thread Context sigint = SIGINT.createContext(new File("/path/to/sigint.properties")); ... //Then you can do this from anywhere that is injected with the context object sigint.time("myop").duration(10).emit();
//Emit a counter with a data value of 1 SIGINT.current().time("myop").emit(); //Emit a counter with a data value of 14 SIGINT.current().time("myop").times(14).emit();
Timer (Explicit Duration)
//Emit a timer with a data value of 100 milliseconds SIGINT.current().time("sp_slow_sproc").duration(100).emit();
Timer (Implicit Duration)
Stopwatch timer = SIGINT.current().time("sp_slow_sproc").start(); ...some timeable work... //Stop the stopwatch and emit a timer with the data value of the time measured timer.emit();
Emitting The Result Of A Call To An Upstream Service
All the operation metrics include an
againstApplication() method which can be used for specifying the name of the upstream application:
//Emit a timer with a data value of 10 milliseconds against the validate_token operation of the idm system: SIGINT.current().time("validate_token").againstApplication("idm").duration(10).emit();
An announcement should be emitted whenever the application is started or restarted. It includes a hook to supply the version of the application, as well as the versions of any stack dependencies.
SIGINT.current().announce().version("1.2.3").addStackItem("java", "1.2.3").addStackItem("junit","1.2.6").emit(); ...or many stack items can be added at once... Map<String, String> stack = new HashMap<String, String>(); stack.put("java", "1.2.3"); stack.put("junit", "1.2.6"); SIGINT.current().announce().version("1.2.3").addStackItems(stack).emit();
All logging is performed via the Simple Log4J interface.
ant release and look for the jars in the dist folder. The "-nodeps.jar" file has all of the dependencies merged into one jar.
v0.1 - 1/9/2012 - Emission Spec v1
* Initial cut
v0.2 - 1/18/2012 - Emission Spec v1
* Added support for publishing into multiple AMQP brokers in a round-robin way.
v0.3 - 1/25/2012 - Emission Spec v1
* Added config option to publish emissions in BSON or JSON.
v0.4 - 2/1/2012 - Emission Spec v1
* Added the Error emission type.