aboutsummaryrefslogtreecommitdiffstats
path: root/jrt/src/com/yahoo/jrt/TransportMetrics.java
blob: d074b926d3ec4bda5205f9770a453c9d9b2a1380 (plain) (blame)
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.jrt;

import java.util.concurrent.atomic.AtomicLong;
import java.util.function.ToLongFunction;

/**
 * Metric values produced by {@link Transport}.
 *
 * @author bjorncs
 */
public class TransportMetrics {

    private static final TransportMetrics instance = new TransportMetrics();

    private final AtomicLong tlsCertificateVerificationFailures = new AtomicLong(0);
    private final AtomicLong peerAuthorizationFailures = new AtomicLong(0);
    private final AtomicLong serverTlsConnectionsEstablished = new AtomicLong(0);
    private final AtomicLong clientTlsConnectionsEstablished = new AtomicLong(0);
    private final AtomicLong serverUnencryptedConnectionsEstablished = new AtomicLong(0);
    private final AtomicLong clientUnencryptedConnectionsEstablished = new AtomicLong(0);

    private TransportMetrics() {}

    public static TransportMetrics getInstance() { return instance; }

    public long tlsCertificateVerificationFailures() {
        return tlsCertificateVerificationFailures.get();
    }

    public long peerAuthorizationFailures() {
        return peerAuthorizationFailures.get();
    }

    public long serverTlsConnectionsEstablished() {
        return serverTlsConnectionsEstablished.get();
    }

    public long clientTlsConnectionsEstablished() {
        return clientTlsConnectionsEstablished.get();
    }

    public long serverUnencryptedConnectionsEstablished() {
        return serverUnencryptedConnectionsEstablished.get();
    }

    public long clientUnencryptedConnectionsEstablished() {
        return clientUnencryptedConnectionsEstablished.get();
    }

    public Snapshot snapshot() { return new Snapshot(this); }

    void incrementTlsCertificateVerificationFailures() {
        tlsCertificateVerificationFailures.incrementAndGet();
    }

    void incrementPeerAuthorizationFailures() {
        peerAuthorizationFailures.incrementAndGet();
    }

    void incrementServerTlsConnectionsEstablished() {
        serverTlsConnectionsEstablished.incrementAndGet();
    }

    void incrementClientTlsConnectionsEstablished() {
        clientTlsConnectionsEstablished.incrementAndGet();
    }

    void incrementServerUnencryptedConnectionsEstablished() {
        serverUnencryptedConnectionsEstablished.incrementAndGet();
    }

    void incrementClientUnencryptedConnectionsEstablished() {
        clientUnencryptedConnectionsEstablished.incrementAndGet();
    }

    @Override
    public String toString() {
        return "TransportMetrics{" +
                "tlsCertificateVerificationFailures=" + tlsCertificateVerificationFailures +
                ", peerAuthorizationFailures=" + peerAuthorizationFailures +
                ", serverTlsConnectionsEstablished=" + serverTlsConnectionsEstablished +
                ", clientTlsConnectionsEstablished=" + clientTlsConnectionsEstablished +
                ", serverUnencryptedConnectionsEstablished=" + serverUnencryptedConnectionsEstablished +
                ", clientUnencryptedConnectionsEstablished=" + clientUnencryptedConnectionsEstablished +
                '}';
    }

    public static class Snapshot {
        public static final Snapshot EMPTY = new Snapshot(0, 0, 0, 0, 0, 0);

        private final long tlsCertificateVerificationFailures;
        private final long peerAuthorizationFailures;
        private final long serverTlsConnectionsEstablished;
        private final long clientTlsConnectionsEstablished;
        private final long serverUnencryptedConnectionsEstablished;
        private final long clientUnencryptedConnectionsEstablished;

        private Snapshot(TransportMetrics metrics) {
            this(metrics.tlsCertificateVerificationFailures.get(),
                 metrics.peerAuthorizationFailures.get(),
                 metrics.serverTlsConnectionsEstablished.get(),
                 metrics.clientTlsConnectionsEstablished.get(),
                 metrics.serverUnencryptedConnectionsEstablished.get(),
                 metrics.clientUnencryptedConnectionsEstablished.get());
        }

        private Snapshot(long tlsCertificateVerificationFailures,
                        long peerAuthorizationFailures,
                        long serverTlsConnectionsEstablished,
                        long clientTlsConnectionsEstablished,
                        long serverUnencryptedConnectionsEstablished,
                        long clientUnencryptedConnectionsEstablished) {
            this.tlsCertificateVerificationFailures = tlsCertificateVerificationFailures;
            this.peerAuthorizationFailures = peerAuthorizationFailures;
            this.serverTlsConnectionsEstablished = serverTlsConnectionsEstablished;
            this.clientTlsConnectionsEstablished = clientTlsConnectionsEstablished;
            this.serverUnencryptedConnectionsEstablished = serverUnencryptedConnectionsEstablished;
            this.clientUnencryptedConnectionsEstablished = clientUnencryptedConnectionsEstablished;
        }

        public long tlsCertificateVerificationFailures() { return tlsCertificateVerificationFailures; }
        public long peerAuthorizationFailures() { return peerAuthorizationFailures; }
        public long serverTlsConnectionsEstablished() { return serverTlsConnectionsEstablished; }
        public long clientTlsConnectionsEstablished() { return clientTlsConnectionsEstablished; }
        public long serverUnencryptedConnectionsEstablished() { return serverUnencryptedConnectionsEstablished; }
        public long clientUnencryptedConnectionsEstablished() { return clientUnencryptedConnectionsEstablished; }

        public Snapshot changesSince(Snapshot base) {
            return new Snapshot(
                changesSince(base, Snapshot::tlsCertificateVerificationFailures),
                changesSince(base, Snapshot::peerAuthorizationFailures),
                changesSince(base, Snapshot::serverTlsConnectionsEstablished),
                changesSince(base, Snapshot::clientTlsConnectionsEstablished),
                changesSince(base, Snapshot::serverUnencryptedConnectionsEstablished),
                changesSince(base, Snapshot::clientUnencryptedConnectionsEstablished));
        }

        private long changesSince(Snapshot base, ToLongFunction<Snapshot> metricProperty) {
            return metricProperty.applyAsLong(this) - metricProperty.applyAsLong(base);
        }

        @Override
        public String toString() {
            return "Snapshot{" +
                    "tlsCertificateVerificationFailures=" + tlsCertificateVerificationFailures +
                    ", peerAuthorizationFailures=" + peerAuthorizationFailures +
                    ", serverTlsConnectionsEstablished=" + serverTlsConnectionsEstablished +
                    ", clientTlsConnectionsEstablished=" + clientTlsConnectionsEstablished +
                    ", serverUnencryptedConnectionsEstablished=" + serverUnencryptedConnectionsEstablished +
                    ", clientUnencryptedConnectionsEstablished=" + clientUnencryptedConnectionsEstablished +
                    '}';
        }
    }
}