Giter VIP home page Giter VIP logo

jstataggr's Introduction

Statistics Aggregator

Description

jStatAggr (Java Statistics Aggregator) is a number of libaries to simplify aggregation of statistics data.

Main goal is to provide easy-to-use and simple way to handle most-commmon used aggregations (min/max values etc.) and show this results back to user.

Main functionality (jstataggr-core module)

This library provides annotation-based way to handle statistics. To have all benefits of jStatAggr you just need to do two simple things

  • define a bean that represents a piece of data to be aggregated
  • define implementation of IStatisticsHandler

Let's have a look to simple example of statistics bean. Imagine you need to have statistics for some http proxy that should show you min/max/average time of request handling for each processed URL. In this case smallest piece of data will contain URL and duration of request:

public class Statistics {

	private String url;
	
	private long duration;
	
	//getters and setters

}

Than we should add some annotations to have a bean that jStatAggr can understand:

@StatisticsEntry("proxy_statistics")
public class Statistics {
	@StatisticsKey
	private String url;
	
	@Aggregated({ AggregationType.MIN, AggregationType.MAX, AggregationType.AVERAGE })
	private long duration;
	
	//getters and setters
}

Let's have a look to used annotaion:

  • @StatisticsEntry - mark a bean to be used as piece of statistics data. Value of this annotation is not mandatory and if it missing it will be used bean class name.
  • @StatisticsKey - marks a field to be used key of collected statistics. In the example above it will mean that collected statistics for duration will be separated for each URL. Class can have more than one @StatisticsKey.
  • @Aggregated - defines number of aggregation types that should be applied to value of this field

Next step is to instantiate this bean, set properties and provide it to IStatisticsHandler

IStatisticsHandler handler = createHandler(); //instantiating handler

Statistics statistics = collectStatistics(); //collecting statistics info

handler.handleStatistics(statistics);

That's all!

Include jStatAggr in my project

jStatAggr is available on Bintray jcenter repository. Here is example of simple gradle script to include this library to your project

repositories {
	jcenter()
}

dependencies {
	compile group: 'org.gerzog.jstataggr',	name: 'jstataggr-core',	version: JSTATAGGR_VERSION
}

jStatAggr have two parallel branches - one is for full Java8 support and another one is adapted for Java7, both versions available on jcenter. Current versions are: 0.1.0-java7 and 0.1.0-java8

View collected statistics

To view collected statistics jStatAggr provided interface called IStatisticsWriter. At current moment only CSV export implemented (see below).

Main workflow for statistics writing - is to define implementation of IStatisticsWriter, register it in IStatisticsHandler. After this just call one of methods in IStatisticsHandler

  • writeStatistics(boolean cleanup) - collects and send to writers all available statistics
  • writeStatistics(String statisticsName, boolean cleanup) - collects and send to writers only statistics by corresponding name (e.g. only for one class marked by @StatisticsEntry)
  • writeStatistics(String statisticsName, IStatisticsFilter filter, boolean cleanup) - collects and sent to writers statistics by name with additional filtering cleanup parameter of all methods forces (if set to true) handler to remove all statistics that was exported, e.g. sent to writers

EL support (jstataggr-el/jstataggr-spel)

In some cases you need to aggregate not a raw value but formatted/updated by some rules. An easy example - each of Statistics piece will have a timestamp property as a key

@StatisticsEntry
public class Statistics {

	@StatisticsKey
	private long timestamp;
	
	@Aggregated(AggregationType.SUM)
	private long value;
	
	public Statistics() {
		this.timestamp = System.currentTimeMillis()
	}
	
	//getters and setters
}

But in a result we'd like to see per-minute aggregated statistics. In this case we can add extra rules that will be applied for value of a bean field:

	@StatisticsKey
	@Expression("#this / 1000 / 60")
	private long timestamp;

Value of @Expression will be processed with EL-engine provided by one of extra-dependencies (that should be applied to project):

  • jstataggr-spel - SPeL (Spring Expression Language) engine, #this variable will be binded to original value of field.
  • jstataggr-juel - JUEL (Java Unified Expression Language) engine, this variable will be binded to original value of field.

CSV writer (jstataggr-csv module)

Code Status

  • Build Status

jstataggr's People

Watchers

Nikolay Lagutko avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.