-
Notifications
You must be signed in to change notification settings - Fork 68
/
AmqpAdapterMetrics.java
127 lines (111 loc) · 4.36 KB
/
AmqpAdapterMetrics.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
* Copyright (c) 2022-2023 nosqlbench
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.nosqlbench.adapter.amqp.util;
import com.codahale.metrics.Counter;
import com.codahale.metrics.Histogram;
import com.codahale.metrics.Timer;
import io.nosqlbench.adapter.amqp.dispensers.AmqpBaseOpDispenser;
import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class AmqpAdapterMetrics {
private static final Logger logger = LogManager.getLogger(AmqpAdapterMetrics.class);
private final NBLabels labels;
private Histogram messageSizeHistogram;
private Timer bindTimer;
private Timer executeTimer;
// - message out of sequence error counter
private Counter msgErrOutOfSeqCounter;
// - message loss counter
private Counter msgErrLossCounter;
// - message duplicate error counter
private Counter msgErrDuplicateCounter;
public Histogram getE2eMsgProcLatencyHistogram() {
return this.e2eMsgProcLatencyHistogram;
}
// end-to-end latency
private Histogram e2eMsgProcLatencyHistogram;
private final AmqpBaseOpDispenser amqpBaseOpDispenser;
public AmqpAdapterMetrics(final AmqpBaseOpDispenser amqpBaseOpDispenser, final NBLabeledElement labeledParent) {
this.amqpBaseOpDispenser = amqpBaseOpDispenser;
labels=labeledParent.getLabels().and("name", AmqpAdapterMetrics.class.getSimpleName());
}
public void initS4JAdapterInstrumentation() {
// Histogram metrics
messageSizeHistogram = amqpBaseOpDispenser.create().histogram(
"amqp_message_size",
MetricCategory.Driver,
"AMQP message size"
);
// Timer metrics
bindTimer = amqpBaseOpDispenser.create().timer(
"amqp_bind",
MetricCategory.Driver,
"AMQP bind timer"
);
executeTimer = amqpBaseOpDispenser.create().timer(
"amqp_execute",
MetricCategory.Driver,
"AMQP execute timer"
);
// End-to-end metrics
// Latency
e2eMsgProcLatencyHistogram = amqpBaseOpDispenser.create().histogram(
"amqp_e2e_msg_latency",
MetricCategory.Driver,
"AMQP end-to-end message processing latency"
);
// Error metrics
msgErrOutOfSeqCounter = amqpBaseOpDispenser.create().counter(
"amqp_err_msg_oos",
MetricCategory.Driver,
"AMQP out-of-sequence error count"
);
msgErrLossCounter = amqpBaseOpDispenser.create().counter(
"amqp_err_msg_loss",
MetricCategory.Driver,
"AMQP lost message error count"
);
msgErrDuplicateCounter = amqpBaseOpDispenser.create().counter(
"err_msg_dup",
MetricCategory.Driver,
"AMQP duplicate message count"
);
}
public Timer getBindTimer() { return bindTimer; }
public Timer getExecuteTimer() { return executeTimer; }
public Histogram getMessagesizeHistogram() { return messageSizeHistogram; }
public Counter getMsgErrOutOfSeqCounter() {
return msgErrOutOfSeqCounter;
}
public void setMsgErrOutOfSeqCounter(Counter msgErrOutOfSeqCounter) {
this.msgErrOutOfSeqCounter = msgErrOutOfSeqCounter;
}
public Counter getMsgErrLossCounter() {
return msgErrLossCounter;
}
public void setMsgErrLossCounter(Counter msgErrLossCounter) {
this.msgErrLossCounter = msgErrLossCounter;
}
public Counter getMsgErrDuplicateCounter() {
return msgErrDuplicateCounter;
}
public void setMsgErrDuplicateCounter(Counter msgErrDuplicateCounter) {
this.msgErrDuplicateCounter = msgErrDuplicateCounter;
}
}