All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.micrometer.core.instrument.binder.jetty.JettySslHandshakeMetrics Maven / Gradle / Ivy

There is a newer version: 1.13.0
Show newest version
/**
 * Copyright 2020 VMware, Inc.
 * 

* 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 *

* https://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.micrometer.core.instrument.binder.jetty; import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.Tags; import io.micrometer.core.instrument.binder.BaseUnits; import org.eclipse.jetty.io.ssl.SslHandshakeListener; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import javax.net.ssl.SSLSession; /** * Jetty SSL/TLS handshake metrics.

*

* Usage example: * *

{@code
 * MeterRegistry registry = ...;
 * Server server = new Server(0);
 * Connector connector = new ServerConnector(server);
 * connector.addBean(new JettySslHandshakeMetrics(registry));
 * server.setConnectors(new Connector[] { connector });
 * }
* * Alternatively, configure on all connectors with {@link JettySslHandshakeMetrics#addToAllConnectors(Server, MeterRegistry, Iterable)}. * * @author John Karp * @author Johnny Lim * @since 1.5.0 */ public class JettySslHandshakeMetrics implements SslHandshakeListener { private static final String METER_NAME = "jetty.ssl.handshakes"; private static final String DESCRIPTION = "SSL/TLS handshakes"; private static final String TAG_RESULT = "result"; private static final String TAG_PROTOCOL = "protocol"; private static final String TAG_CIPHER_SUITE = "ciphersuite"; private static final String TAG_VALUE_UNKNOWN = "unknown"; private final MeterRegistry registry; private final Iterable tags; private final Counter handshakesFailed; public JettySslHandshakeMetrics(MeterRegistry registry) { this(registry, Tags.empty()); } public JettySslHandshakeMetrics(MeterRegistry registry, Iterable tags) { this.registry = registry; this.tags = tags; this.handshakesFailed = Counter.builder(METER_NAME) .baseUnit(BaseUnits.EVENTS) .description(DESCRIPTION) .tag(TAG_RESULT, "failed") .tag(TAG_PROTOCOL, TAG_VALUE_UNKNOWN) .tag(TAG_CIPHER_SUITE, TAG_VALUE_UNKNOWN) .tags(tags) .register(registry); } @Override public void handshakeSucceeded(Event event) { SSLSession session = event.getSSLEngine().getSession(); Counter.builder(METER_NAME) .baseUnit(BaseUnits.EVENTS) .description(DESCRIPTION) .tag(TAG_RESULT, "succeeded") .tag(TAG_PROTOCOL, session.getProtocol()) .tag(TAG_CIPHER_SUITE, session.getCipherSuite()) .tags(tags) .register(registry) .increment(); } @Override public void handshakeFailed(Event event, Throwable failure) { handshakesFailed.increment(); } public static void addToAllConnectors(Server server, MeterRegistry registry, Iterable tags) { for (Connector connector : server.getConnectors()) { if (connector != null) { connector.addBean(new JettySslHandshakeMetrics(registry, tags)); } } } public static void addToAllConnectors(Server server, MeterRegistry registry) { addToAllConnectors(server, registry, Tags.empty()); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy