package forklift.stats; import forklift.consumer.MessageRunnable; import forklift.consumer.ProcessStep; import forklift.decorators.LifeCycle; public class StatsCollector { @LifeCycle(value=ProcessStep.Pending) public void pending(MessageRunnable mr) { setProp(mr, "pending"); } @LifeCycle(value=ProcessStep.Validating) public void validating(MessageRunnable mr) { setProp(mr, "validating"); } @LifeCycle(value=ProcessStep.Invalid) public void invalid(MessageRunnable mr) { setProp(mr, "invalid"); mr.getMsg().getProperties().put("forklift-stats-validating-total", "" + (System.currentTimeMillis() - Long.parseLong(mr.getMsg().getProperties().get("forklift-stats-validating")))); } @LifeCycle(value=ProcessStep.Processing) public void processing(MessageRunnable mr) { setProp(mr, "processing"); } @LifeCycle(value=ProcessStep.Complete) public void complete(MessageRunnable mr) { setProp(mr, "complete"); mr.getMsg().getProperties().put("forklift-stats-processing-total", "" + (System.currentTimeMillis() - Long.parseLong(mr.getMsg().getProperties().get("forklift-stats-processing")))); } @LifeCycle(value=ProcessStep.Error) public void error(MessageRunnable mr) { setProp(mr, "error"); mr.getMsg().getProperties().put("forklift-stats-processing-total", "" + (System.currentTimeMillis() - Long.parseLong(mr.getMsg().getProperties().get("forklift-stats-processing")))); } @LifeCycle(value=ProcessStep.Retrying) public void retry(MessageRunnable mr) { setProp(mr, "retrying"); } private void setProp(MessageRunnable mr, String prop) { mr.getMsg().getProperties().put("forklift-stats-" + prop, "" + System.currentTimeMillis()); } }