1 package com.github.triceo.splitlog.api;
2
3 /**
4 * Used by {@link MessageMetric} to determine how much a {@link Message} is
5 * worth. Users are discouraged from implementing these as stateful - doing so
6 * will result in unpredictable behavior, as a single instance of the class can
7 * be shared across multiple {@link MessageMetric}s.
8 *
9 * @param <T>
10 * The value type returned by the metric.
11 * @param <S>
12 * Where this is getting its {@link Message}s from.
13 */
14 public interface MessageMeasure<T extends Number, S extends MessageProducer<S>> {
15
16 /**
17 * The default value for the resulting {@link MessageMetric}.
18 *
19 * @return Whetever value that the metric should start with.
20 */
21 T initialValue();
22
23 /**
24 * Update metric after the arrival of another message.
25 *
26 * @param metric
27 * The metric that is being updated.
28 * @param evaluate
29 * The message to evaluate.
30 * @param status
31 * Current processing status of the message.
32 * @param source
33 * The notifying object.
34 * @return The new value for the metric. Message count will be incremented
35 * automatically.
36 */
37 T update(MessageMetric<T, S> metric, Message evaluate, MessageDeliveryStatus status, S source);
38
39 }