View Javadoc
1   package com.github.triceo.splitlog.api;
2   
3   /**
4    * Allows users to track various statistics on classes implementing
5    * {@link MessageProducer}. These classes are intended for measuring only, and
6    * will therefore not store the {@link Message}s that have passed through them.
7    *
8    * @param <T>
9    *            Type of the value that the metric is measuring.
10   * @param <S>
11   *            Where this is getting its {@link Message}s from.
12   */
13  public interface MessageMetric<T extends Number, S extends MessageProducer<S>> extends MessageConsumer<S>,
14  SupportsExpectations<S, MessageMetricCondition<T, S>> {
15  
16      /**
17       * Retrieves the measure that is used to produce the value of this metric.
18       *
19       * @return Never null.
20       */
21      MessageMeasure<T, S> getMeasure();
22  
23      /**
24       * Retrieve the number of times that the metric has been invoked on a
25       * {@link Message}.
26       *
27       * @return Always 0 or more.
28       */
29      long getMessageCount();
30  
31      /**
32       * Retrieve the number of times that the metric has been invoked on a
33       * {@link Message}, at the time immediately after a given message has been
34       * processed.
35       *
36       * @param timestamp
37       *            The point in time after this message was processed.
38       * @return 0 when timestamp is null. -1 in case no such message was ever
39       *         processed by this metric. The proper value otherwise.
40       */
41      long getMessageCount(Message timestamp);
42  
43      /**
44       * Retrieve the instance that is responsible for notifying this metric of
45       * new {@link Message}s-
46       *
47       * @return Typically the instance that was used to retrieve this metric.
48       */
49      S getSource();
50  
51      /**
52       * Retrieve the value of this metric, which is a sum of the return values of
53       * all of this metric's {@link MessageMeasure} invocations.
54       *
55       * @return Whatever, depends on the measure. Initial value, before any
56       *         messages arrive, is null
57       */
58      T getValue();
59  
60      /**
61       * Retrieve the value of this metric, which is a sum of the return values of
62       * all of this metric's {@link MessageMeasure} invocations, at the time
63       * immediately after a given message has been processed.
64       *
65       * @param timestamp
66       *            The point in time after this message was processed. Null will
67       *            retrieve the initial state.
68       * @return Whatever, depends on the measure. Initial state, before any
69       *         messages arrive, is {@link MessageMeasure#initialValue()}. Null
70       *         is returned in case no such message was ever processed by this
71       *         metric.
72       */
73      T getValue(Message timestamp);
74  
75  }