1616package com .arpnetworking .metrics .proxy .actors ;
1717
1818import akka .actor .ActorRef ;
19- import akka .actor .Cancellable ;
2019import akka .actor .PoisonPill ;
2120import akka .actor .Props ;
2221import akka .actor .UntypedActor ;
23- import akka .dispatch .ExecutionContexts ;
2422import akka .http .javadsl .model .ws .Message ;
2523import akka .http .javadsl .model .ws .TextMessage ;
2624import com .arpnetworking .commons .jackson .databind .ObjectMapperFactory ;
2725import com .arpnetworking .logback .annotations .LogValue ;
28- import com .arpnetworking .metrics .Metrics ;
29- import com .arpnetworking .metrics .MetricsFactory ;
26+ import com .arpnetworking .metrics .incubator .PeriodicMetrics ;
3027import com .arpnetworking .metrics .proxy .models .messages .Command ;
3128import com .arpnetworking .metrics .proxy .models .messages .Connect ;
3229import com .arpnetworking .metrics .proxy .models .protocol .MessageProcessorsFactory ;
3835import com .fasterxml .jackson .databind .ObjectMapper ;
3936import com .fasterxml .jackson .databind .node .JsonNodeFactory ;
4037import com .fasterxml .jackson .databind .node .ObjectNode ;
41- import scala .concurrent .duration .FiniteDuration ;
4238
4339import java .util .List ;
44- import java .util .concurrent .TimeUnit ;
4540
4641/**
4742 * Actor class to hold the state for a single connection.
@@ -52,37 +47,29 @@ public class Connection extends UntypedActor {
5247 /**
5348 * Public constructor.
5449 *
55- * @param metricsFactory Instance of <code>MetricsFactory </code>.
50+ * @param metrics Instance of <code>PeriodicMetrics </code>.
5651 * @param processorsFactory Factory for producing the protocol's <code>MessagesProcessor</code>
5752 */
5853 public Connection (
59- final MetricsFactory metricsFactory ,
54+ final PeriodicMetrics metrics ,
6055 final MessageProcessorsFactory processorsFactory ) {
61- _metricsFactory = metricsFactory ;
62- _instrument = context ().system ().scheduler ().schedule (
63- new FiniteDuration (0 , TimeUnit .SECONDS ), // Initial delay
64- new FiniteDuration (500 , TimeUnit .MILLISECONDS ), // Interval
65- getSelf (),
66- "instrument" ,
67- ExecutionContexts .global (),
68- getSelf ());
69- _messageProcessors = processorsFactory .create (this );
70- _metrics = createMetrics ();
56+ _metrics = metrics ;
57+ _messageProcessors = processorsFactory .create (this , metrics );
7158 }
7259
7360 /**
7461 * Factory for creating a <code>Props</code> with strong typing.
7562 *
76- * @param metricsFactory Instance of <code>MetricsFactory </code>.
63+ * @param metrics Instance of <code>PeriodicMetrics </code>.
7764 * @param messageProcessorsFactory Factory to create a <code>Metrics</code> object.
7865 * @return a new Props object to create a <code>ConnectionContext</code>.
7966 */
8067 public static Props props (
81- final MetricsFactory metricsFactory ,
68+ final PeriodicMetrics metrics ,
8269 final MessageProcessorsFactory messageProcessorsFactory ) {
8370 return Props .create (
8471 Connection .class ,
85- metricsFactory ,
72+ metrics ,
8673 messageProcessorsFactory );
8774 }
8875
@@ -97,10 +84,7 @@ public void onReceive(final Object message) throws Exception {
9784 .addData ("data" , message )
9885 .addData ("channel" , _channel )
9986 .log ();
100- if ("instrument" .equals (message )) {
101- periodicInstrumentation ();
102- return ;
103- } else if (message instanceof Connect ) {
87+ if (message instanceof Connect ) {
10488 final Connect connect = (Connect ) message ;
10589 _telemetry = connect .getTelemetry ();
10690 _channel = connect .getChannel ();
@@ -142,9 +126,9 @@ public void onReceive(final Object message) throws Exception {
142126 }
143127 }
144128 if (!messageProcessed ) {
145- _metrics .incrementCounter (UNKNOWN_COUNTER );
129+ _metrics .recordCounter (UNKNOWN_COUNTER , 1 );
146130 if (message instanceof Command ) {
147- _metrics .incrementCounter ( UNKONOWN_COMMAND_COUNTER );
131+ _metrics .recordCounter ( UNKNOWN_COMMAND_COUNTER , 1 );
148132 LOGGER .warn ()
149133 .setMessage ("Unable to process message" )
150134 .addData ("reason" , "unsupported command" )
@@ -153,7 +137,7 @@ public void onReceive(final Object message) throws Exception {
153137 .log ();
154138 unhandled (message );
155139 } else {
156- _metrics .incrementCounter ("Actors/Connection/UNKNOWN" );
140+ _metrics .recordCounter ("Actors/Connection/UNKNOWN" , 1 );
157141 LOGGER .warn ()
158142 .setMessage ("Unable to process message" )
159143 .addData ("reason" , "unsupported message" )
@@ -165,15 +149,6 @@ public void onReceive(final Object message) throws Exception {
165149 }
166150 }
167151
168- /**
169- * {@inheritDoc}
170- */
171- @ Override
172- public void postStop () throws Exception {
173- _instrument .cancel ();
174- super .postStop ();
175- }
176-
177152 /**
178153 * Sends a json object to the connected client.
179154 *
@@ -236,32 +211,14 @@ public String toString() {
236211 return toLogValue ().toString ();
237212 }
238213
239- private Metrics createMetrics () {
240- final Metrics metrics = _metricsFactory .create ();
241- metrics .resetCounter (UNKONOWN_COMMAND_COUNTER );
242- metrics .resetCounter (UNKNOWN_COUNTER );
243- for (final MessagesProcessor messageProcessor : _messageProcessors ) {
244- messageProcessor .initializeMetrics (metrics );
245- }
246- return metrics ;
247- }
248-
249- private void periodicInstrumentation () {
250- _metrics .close ();
251- _metrics = createMetrics ();
252- }
253-
254214 private ActorRef _telemetry ;
255215 private ActorRef _channel ;
256216
257- private final MetricsFactory _metricsFactory ;
258- private final Cancellable _instrument ;
217+ private final PeriodicMetrics _metrics ;
259218 private final List <MessagesProcessor > _messageProcessors ;
260219
261- private Metrics _metrics ;
262-
263220 private static final String METRICS_PREFIX = "actors/connection/" ;
264- private static final String UNKONOWN_COMMAND_COUNTER = METRICS_PREFIX + "command/UNKNOWN" ;
221+ private static final String UNKNOWN_COMMAND_COUNTER = METRICS_PREFIX + "command/UNKNOWN" ;
265222 private static final String UNKNOWN_COUNTER = METRICS_PREFIX + "UNKNOWN" ;
266223
267224 private static final ObjectMapper OBJECT_MAPPER = ObjectMapperFactory .getInstance ();
0 commit comments