• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

knowledgepixels / nanopub-query / 20414263980

21 Dec 2025 06:37PM UTC coverage: 71.251%. Remained the same
20414263980

push

github

ashleycaselli
chore: code clean up

214 of 326 branches covered (65.64%)

Branch coverage included in aggregate %.

589 of 801 relevant lines covered (73.53%)

11.09 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.35
src/main/java/com/knowledgepixels/query/MetricsCollector.java
1
package com.knowledgepixels.query;
2

3
import io.micrometer.core.instrument.Gauge;
4
import io.micrometer.core.instrument.MeterRegistry;
5

6
import java.util.Map;
7
import java.util.Set;
8
import java.util.concurrent.ConcurrentHashMap;
9
import java.util.concurrent.atomic.AtomicInteger;
10

11
/**
12
 * Class to collect metrics for performance analysis.
13
 */
14
public final class MetricsCollector {
15

16
    private final AtomicInteger loadCounter = new AtomicInteger(0);
18✔
17
    private final AtomicInteger typeRepositoriesCounter = new AtomicInteger(0);
18✔
18
    private final AtomicInteger pubkeyRepositoriesCounter = new AtomicInteger(0);
18✔
19
    private final AtomicInteger fullRepositoriesCounter = new AtomicInteger(0);
18✔
20

21
    private final Map<StatusController.State, AtomicInteger> statusStates = new ConcurrentHashMap<>();
15✔
22

23
    /**
24
     * Creates new metrics collector object.
25
     *
26
     * @param meterRegistry The registry instance
27
     */
28
    public MetricsCollector(MeterRegistry meterRegistry) {
6✔
29
        // Numeric metrics
30
        Gauge.builder("registry.load.counter", loadCounter, AtomicInteger::get).register(meterRegistry);
24✔
31
        Gauge.builder("registry.type.repositories.counter", typeRepositoriesCounter, AtomicInteger::get).register(meterRegistry);
24✔
32
        Gauge.builder("registry.pubkey.repositories.counter", pubkeyRepositoriesCounter, AtomicInteger::get).register(meterRegistry);
24✔
33
        Gauge.builder("registry.full.repositories.counter", fullRepositoriesCounter, AtomicInteger::get).register(meterRegistry);
24✔
34

35
        // Status label metrics
36
        for (final var status : StatusController.State.values()) {
48✔
37
            AtomicInteger stateGauge = new AtomicInteger(0);
15✔
38
            statusStates.put(status, stateGauge);
18✔
39
            Gauge.builder("registry.server.status", stateGauge, AtomicInteger::get)
15✔
40
                    .description("Server status (1 if current)")
9✔
41
                    .tag("status", status.name())
9✔
42
                    .register(meterRegistry);
6✔
43
        }
44
    }
3✔
45

46
    /**
47
     * Updates the metrics based on the current state of the system.
48
     */
49
    public void updateMetrics() {
50
        // Update numeric metrics
51
        loadCounter.set((int) StatusController.get().getState().loadCounter);
21✔
52
        // Request repository names once, to avoid multiple calls
53
        var repoNames = TripleStore.get().getRepositoryNames();
9✔
54
        if (repoNames == null) {
6!
55
            repoNames = Set.of();
×
56
        }
57
        typeRepositoriesCounter.set(
12✔
58
                (int) repoNames
59
                        .stream()
6✔
60
                        .filter(repo -> repo.startsWith("type_"))
15✔
61
                        .count()
6✔
62
        );
63
        pubkeyRepositoriesCounter.set(
12✔
64
                (int) repoNames
65
                        .stream()
6✔
66
                        .filter(repo -> repo.startsWith("pubkey_"))
15✔
67
                        .count()
6✔
68
        );
69
        fullRepositoriesCounter.set(repoNames.size());
15✔
70

71
        // Update status gauge
72
        final var currentStatus = StatusController.get().getState().state;
12✔
73
        for (final var status : StatusController.State.values()) {
48✔
74
            statusStates.get(status).set(status.equals(currentStatus) ? 1 : 0);
39✔
75
        }
76
    }
3✔
77
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc