1
- package datadog .trace .core . monitor ;
1
+ package datadog .trace .api . rum ;
2
2
3
3
import static java .util .concurrent .TimeUnit .SECONDS ;
4
4
5
5
import datadog .trace .api .StatsDClient ;
6
- import datadog .trace .api .rum .RumTelemetryCollector ;
7
6
import datadog .trace .util .AgentTaskScheduler ;
8
7
import java .util .concurrent .TimeUnit ;
9
8
import java .util .concurrent .atomic .AtomicBoolean ;
10
- import org .jctools .counters .CountersFactory ;
11
- import org .jctools .counters .FixedSizeStripedLongCounter ;
9
+ import java .util .concurrent .atomic .AtomicLong ;
12
10
import org .slf4j .Logger ;
13
11
import org .slf4j .LoggerFactory ;
14
12
15
13
// Default implementation of RumInjectorHealthMetrics that reports metrics via StatsDClient
16
14
// This class implements the RumTelemetryCollector interface, which is used to collect telemetry
17
15
// from the RumInjector in the internal-api module
18
- public class DefaultRumInjectorHealthMetrics extends RumInjectorHealthMetrics
19
- implements RumTelemetryCollector {
20
- private static final Logger log = LoggerFactory .getLogger (DefaultRumInjectorHealthMetrics .class );
16
+ public class RumInjectorMetrics implements RumTelemetryCollector {
17
+ private static final Logger log = LoggerFactory .getLogger (RumInjectorMetrics .class );
21
18
22
19
private static final String [] NO_TAGS = new String [0 ];
23
20
24
21
private final AtomicBoolean started = new AtomicBoolean (false );
25
- private volatile AgentTaskScheduler .Scheduled <DefaultRumInjectorHealthMetrics > cancellation ;
22
+ private volatile AgentTaskScheduler .Scheduled <RumInjectorMetrics > cancellation ;
26
23
27
- private final FixedSizeStripedLongCounter injectionSucceed =
28
- CountersFactory .createFixedSizeStripedCounter (8 );
29
- private final FixedSizeStripedLongCounter injectionFailed =
30
- CountersFactory .createFixedSizeStripedCounter (8 );
31
- private final FixedSizeStripedLongCounter injectionSkipped =
32
- CountersFactory .createFixedSizeStripedCounter (8 );
24
+ private final AtomicLong injectionSucceed = new AtomicLong ();
25
+ private final AtomicLong injectionFailed = new AtomicLong ();
26
+ private final AtomicLong injectionSkipped = new AtomicLong ();
33
27
34
28
private final StatsDClient statsd ;
35
29
private final long interval ;
36
30
private final TimeUnit units ;
37
31
38
- @ Override
39
32
public void start () {
40
33
if (started .compareAndSet (false , true )) {
41
34
cancellation =
@@ -44,39 +37,37 @@ public void start() {
44
37
}
45
38
}
46
39
47
- public DefaultRumInjectorHealthMetrics (final StatsDClient statsd ) {
40
+ public RumInjectorMetrics (final StatsDClient statsd ) {
48
41
this (statsd , 30 , SECONDS );
49
42
}
50
43
51
- public DefaultRumInjectorHealthMetrics (final StatsDClient statsd , long interval , TimeUnit units ) {
44
+ public RumInjectorMetrics (final StatsDClient statsd , long interval , TimeUnit units ) {
52
45
this .statsd = statsd ;
53
46
this .interval = interval ;
54
47
this .units = units ;
55
48
}
56
49
57
50
@ Override
58
51
public void onInjectionSucceed () {
59
- injectionSucceed .inc ();
52
+ injectionSucceed .incrementAndGet ();
60
53
}
61
54
62
55
@ Override
63
56
public void onInjectionFailed () {
64
- injectionFailed .inc ();
57
+ injectionFailed .incrementAndGet ();
65
58
}
66
59
67
60
@ Override
68
61
public void onInjectionSkipped () {
69
- injectionSkipped .inc ();
62
+ injectionSkipped .incrementAndGet ();
70
63
}
71
64
72
- @ Override
73
65
public void close () {
74
66
if (null != cancellation ) {
75
67
cancellation .cancel ();
76
68
}
77
69
}
78
70
79
- @ Override
80
71
public String summary () {
81
72
return "injectionSucceed="
82
73
+ injectionSucceed .get ()
@@ -86,13 +77,13 @@ public String summary() {
86
77
+ injectionSkipped .get ();
87
78
}
88
79
89
- private static class Flush implements AgentTaskScheduler .Task <DefaultRumInjectorHealthMetrics > {
80
+ private static class Flush implements AgentTaskScheduler .Task <RumInjectorMetrics > {
90
81
91
82
private final long [] previousCounts = new long [3 ]; // one per counter
92
83
private int countIndex ;
93
84
94
85
@ Override
95
- public void run (DefaultRumInjectorHealthMetrics target ) {
86
+ public void run (RumInjectorMetrics target ) {
96
87
countIndex = -1 ;
97
88
try {
98
89
reportIfChanged (target .statsd , "rum.injection.succeed" , target .injectionSucceed , NO_TAGS );
@@ -107,10 +98,7 @@ public void run(DefaultRumInjectorHealthMetrics target) {
107
98
}
108
99
109
100
private void reportIfChanged (
110
- StatsDClient statsDClient ,
111
- String aspect ,
112
- FixedSizeStripedLongCounter counter ,
113
- String [] tags ) {
101
+ StatsDClient statsDClient , String aspect , AtomicLong counter , String [] tags ) {
114
102
long count = counter .get ();
115
103
long delta = count - previousCounts [++countIndex ];
116
104
if (delta > 0 ) {
0 commit comments