blob: 80edd45e290dc72a6813589cb2d82ed05d9c2d9e [file] [log] [blame]
// Copyright (C) 2020 The Android Open Source Project
//
// 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 com.google.gerrit.pgm.http.jetty;
import com.google.common.collect.ImmutableSet;
import com.google.gerrit.metrics.CallbackMetric;
import com.google.gerrit.metrics.CallbackMetric0;
import com.google.gerrit.metrics.Description;
import com.google.gerrit.metrics.Description.Units;
import com.google.gerrit.metrics.MetricMaker;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class JettyMetrics {
@Inject
JettyMetrics(JettyServer jetty, MetricMaker metrics) {
CallbackMetric0<Integer> minPoolSize =
metrics.newCallbackMetric(
"http/server/jetty/threadpool/min_pool_size",
Integer.class,
new Description("Minimum thread pool size").setGauge());
CallbackMetric0<Integer> maxPoolSize =
metrics.newCallbackMetric(
"http/server/jetty/threadpool/max_pool_size",
Integer.class,
new Description("Maximum thread pool size").setGauge());
CallbackMetric0<Integer> poolSize =
metrics.newCallbackMetric(
"http/server/jetty/threadpool/pool_size",
Integer.class,
new Description("Current thread pool size").setGauge());
CallbackMetric0<Integer> idleThreads =
metrics.newCallbackMetric(
"http/server/jetty/threadpool/idle_threads",
Integer.class,
new Description("Idle threads").setGauge());
CallbackMetric0<Integer> busyThreads =
metrics.newCallbackMetric(
"http/server/jetty/threadpool/active_threads",
Integer.class,
new Description("Active threads").setGauge());
CallbackMetric0<Integer> reservedThreads =
metrics.newCallbackMetric(
"http/server/jetty/threadpool/reserved_threads",
Integer.class,
new Description("Reserved threads").setGauge());
CallbackMetric0<Integer> queueSize =
metrics.newCallbackMetric(
"http/server/jetty/threadpool/queue_size",
Integer.class,
new Description("Queued requests waiting for a thread").setGauge());
CallbackMetric0<Boolean> lowOnThreads =
metrics.newCallbackMetric(
"http/server/jetty/threadpool/is_low_on_threads",
Boolean.class,
new Description("Whether thread pool is low on threads").setGauge());
CallbackMetric0<Long> connections =
metrics.newCallbackMetric(
"http/server/jetty/connections/connections",
Long.class,
new Description("The current number of open connections").setGauge());
CallbackMetric0<Long> connectionsTotal =
metrics.newCallbackMetric(
"http/server/jetty/connections/connections_total",
Long.class,
new Description("The total number of connections opened").setGauge());
CallbackMetric0<Long> connectionDurationMax =
metrics.newCallbackMetric(
"http/server/jetty/connections/connections_duration_max",
Long.class,
new Description("The max duration of a connection")
.setGauge()
.setUnit(Units.MILLISECONDS));
CallbackMetric0<Double> connectionDurationMean =
metrics.newCallbackMetric(
"http/server/jetty/connections/connections_duration_mean",
Double.class,
new Description("The mean duration of a connection")
.setGauge()
.setUnit(Units.MILLISECONDS));
CallbackMetric0<Double> connectionDurationStDev =
metrics.newCallbackMetric(
"http/server/jetty/connections/connections_duration_stdev",
Double.class,
new Description("The standard deviation of the duration of a connection")
.setGauge()
.setUnit(Units.MILLISECONDS));
CallbackMetric0<Long> receivedMessages =
metrics.newCallbackMetric(
"http/server/jetty/connections/received_messages",
Long.class,
new Description("The total number of messages received").setGauge());
CallbackMetric0<Long> sentMessages =
metrics.newCallbackMetric(
"http/server/jetty/connections/sent_messages",
Long.class,
new Description("The total number of messages sent").setGauge());
CallbackMetric0<Long> receivedBytes =
metrics.newCallbackMetric(
"http/server/jetty/connections/received_bytes",
Long.class,
new Description("Total number of bytes received by tracked connections")
.setGauge()
.setUnit(Units.BYTES));
CallbackMetric0<Long> sentBytes =
metrics.newCallbackMetric(
"http/server/jetty/connections/sent_bytes",
Long.class,
new Description("Total number of bytes sent by tracked connections")
.setGauge()
.setUnit(Units.BYTES));
JettyServer.Metrics jettyMetrics = jetty.getMetrics();
metrics.newTrigger(
ImmutableSet.<CallbackMetric<?>>of(
idleThreads,
busyThreads,
reservedThreads,
minPoolSize,
maxPoolSize,
poolSize,
queueSize,
lowOnThreads,
connections,
connectionsTotal,
connectionDurationMax,
connectionDurationMean,
connectionDurationStDev,
receivedMessages,
sentMessages,
receivedBytes,
sentBytes),
() -> {
minPoolSize.set(jettyMetrics.getMinThreads());
maxPoolSize.set(jettyMetrics.getMaxThreads());
poolSize.set(jettyMetrics.getThreads());
idleThreads.set(jettyMetrics.getIdleThreads());
busyThreads.set(jettyMetrics.getBusyThreads());
reservedThreads.set(jettyMetrics.getReservedThreads());
queueSize.set(jettyMetrics.getQueueSize());
lowOnThreads.set(jettyMetrics.isLowOnThreads());
connections.set(jettyMetrics.getConnections());
connectionsTotal.set(jettyMetrics.getConnectionsTotal());
connectionDurationMax.set(jettyMetrics.getConnectionDurationMax());
connectionDurationMean.set(jettyMetrics.getConnectionDurationMean());
connectionDurationStDev.set(jettyMetrics.getConnectionDurationStdDev());
receivedMessages.set(jettyMetrics.getReceivedMessages());
sentMessages.set(jettyMetrics.getSentMessages());
receivedBytes.set(jettyMetrics.getReceivedBytes());
sentBytes.set(jettyMetrics.getSentBytes());
});
}
}