|
8 | 8 | import java.util.Map;
|
9 | 9 | import java.util.concurrent.ArrayBlockingQueue;
|
10 | 10 | import java.util.concurrent.BlockingQueue;
|
11 |
| -import java.util.concurrent.ConcurrentMap; |
12 |
| -import java.util.concurrent.ConcurrentSkipListMap; |
13 | 11 | import java.util.concurrent.atomic.AtomicInteger;
|
14 | 12 | import java.util.concurrent.atomic.AtomicLong;
|
15 | 13 | import java.util.concurrent.atomic.AtomicLongArray;
|
@@ -53,8 +51,8 @@ private WafMetricCollector() {
|
53 | 51 | new AtomicLongArray(RuleType.getNumValues());
|
54 | 52 | private static final AtomicLongArray raspTimeoutCounter =
|
55 | 53 | new AtomicLongArray(RuleType.getNumValues());
|
56 |
| - private static final ConcurrentMap<Integer, AtomicLongArray> raspErrorCodeCounter = |
57 |
| - new ConcurrentSkipListMap<>(); |
| 54 | + private static final AtomicLongArray raspErrorCodeCounter = |
| 55 | + new AtomicLongArray(WafErrorCode.values().length * RuleType.getNumValues()); |
58 | 56 | private static final AtomicLongArray wafErrorCodeCounter =
|
59 | 57 | new AtomicLongArray(WafErrorCode.values().length);
|
60 | 58 | private static final AtomicLongArray missingUserLoginQueue =
|
@@ -143,10 +141,14 @@ public void raspTimeout(final RuleType ruleType) {
|
143 | 141 | raspTimeoutCounter.incrementAndGet(ruleType.ordinal());
|
144 | 142 | }
|
145 | 143 |
|
146 |
| - public void raspErrorCode(final RuleType ruleType, final int errorCode) { |
147 |
| - raspErrorCodeCounter |
148 |
| - .computeIfAbsent(errorCode, code -> new AtomicLongArray(RuleType.getNumValues())) |
149 |
| - .incrementAndGet(ruleType.ordinal()); |
| 144 | + public void raspErrorCode(RuleType ruleType, final int errorCode) { |
| 145 | + WafErrorCode wafErrorCode = WafErrorCode.fromCode(errorCode); |
| 146 | + // Unsupported waf error code |
| 147 | + if (wafErrorCode == null) { |
| 148 | + return; |
| 149 | + } |
| 150 | + int index = wafErrorCode.ordinal() * RuleType.getNumValues() + ruleType.ordinal(); |
| 151 | + raspErrorCodeCounter.incrementAndGet(index); |
150 | 152 | }
|
151 | 153 |
|
152 | 154 | public void wafErrorCode(final int errorCode) {
|
@@ -319,15 +321,13 @@ public void prepareMetrics() {
|
319 | 321 | }
|
320 | 322 |
|
321 | 323 | // RASP rule type for each possible error code
|
322 |
| - for (Map.Entry<Integer, AtomicLongArray> entry : raspErrorCodeCounter.entrySet()) { |
323 |
| - int errorCode = entry.getKey(); |
324 |
| - AtomicLongArray counters = entry.getValue(); |
325 |
| - |
| 324 | + for (WafErrorCode errorCode : WafErrorCode.values()) { |
326 | 325 | for (RuleType ruleType : RuleType.values()) {
|
327 |
| - long count = counters.getAndSet(ruleType.ordinal(), 0); |
| 326 | + int index = errorCode.ordinal() * RuleType.getNumValues() + ruleType.ordinal(); |
| 327 | + long count = raspErrorCodeCounter.getAndSet(index, 0); |
328 | 328 | if (count > 0) {
|
329 | 329 | if (!rawMetricsQueue.offer(
|
330 |
| - new RaspError(count, ruleType, WafMetricCollector.wafVersion, errorCode))) { |
| 330 | + new RaspError(count, ruleType, WafMetricCollector.wafVersion, errorCode.getCode()))) { |
331 | 331 | return;
|
332 | 332 | }
|
333 | 333 | }
|
|
0 commit comments