/* * Copyright (c) 2011-2013 The original author or authors * ------------------------------------------------------ * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * * The Apache License v2.0 is available at * http://www.opensource.org/licenses/apache2.0.php * * You may elect to redistribute this code under either of these licenses. */ package io.vertx.test.fakemetrics; import io.vertx.core.http.HttpClientRequest; import io.vertx.core.http.HttpClientResponse; import io.vertx.core.http.WebSocket; import io.vertx.core.http.WebSocketBase; import io.vertx.core.metrics.Measured; import io.vertx.core.net.SocketAddress; import io.vertx.core.spi.metrics.HttpClientMetrics; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; /** * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> */ public class FakeHttpClientMetrics extends FakeMetricsBase implements HttpClientMetrics<HttpClientMetric, WebSocketMetric, SocketMetric, EndpointMetric, Void> { private final String name; private final ConcurrentMap<WebSocketBase, WebSocketMetric> webSockets = new ConcurrentHashMap<>(); private final ConcurrentMap<HttpClientRequest, HttpClientMetric> requests = new ConcurrentHashMap<>(); private final ConcurrentHashMap<String, EndpointMetric> endpoints = new ConcurrentHashMap<>(); public FakeHttpClientMetrics(Measured measured, String name) { super(measured); this.name = name; } public WebSocketMetric getMetric(WebSocket ws) { return webSockets.get(ws); } public HttpClientMetric getMetric(HttpClientRequest request) { return requests.get(request); } public String getName() { return name; } public Set<String> endpoints() { return new HashSet<>(endpoints.keySet()); } public EndpointMetric endpoint(String name) { return endpoints.get(name); } public Integer queueSize(String name) { EndpointMetric server = endpoints.get(name); return server != null ? server.queueSize.get() : null; } public Integer connectionCount(String name) { EndpointMetric server = endpoints.get(name); return server != null ? server.connectionCount.get() : null; } @Override public EndpointMetric createEndpoint(String host, int port, int maxPoolSize) { EndpointMetric metric = new EndpointMetric(); endpoints.put(host + ":" + port, metric); return metric; } @Override public Void enqueueRequest(EndpointMetric endpointMetric) { endpointMetric.queueSize.incrementAndGet(); return null; } @Override public void dequeueRequest(EndpointMetric endpointMetric, Void v) { endpointMetric.queueSize.decrementAndGet(); } @Override public void closeEndpoint(String host, int port, EndpointMetric endpointMetric) { endpoints.remove(host + ":" + port); } @Override public void endpointConnected(EndpointMetric endpointMetric, SocketMetric socketMetric) { endpointMetric.connectionCount.incrementAndGet(); } @Override public void endpointDisconnected(EndpointMetric endpointMetric, SocketMetric socketMetric) { endpointMetric.connectionCount.decrementAndGet(); } @Override public WebSocketMetric connected(EndpointMetric endpointMetric, SocketMetric socketMetric, WebSocket webSocket) { WebSocketMetric metric = new WebSocketMetric(socketMetric, webSocket); webSockets.put(webSocket, metric); return metric; } @Override public void disconnected(WebSocketMetric webSocketMetric) { webSockets.remove(webSocketMetric.ws); } @Override public HttpClientMetric requestBegin(EndpointMetric endpointMetric, SocketMetric socketMetric, SocketAddress localAddress, SocketAddress remoteAddress, HttpClientRequest request) { endpointMetric.requests.incrementAndGet(); HttpClientMetric metric = new HttpClientMetric(endpointMetric, request, socketMetric); requests.put(request, metric); return metric; } @Override public void requestEnd(HttpClientMetric requestMetric) { requestMetric.requestEnded.incrementAndGet(); } @Override public void responseBegin(HttpClientMetric requestMetric, HttpClientResponse response) { requestMetric.responseBegin.incrementAndGet(); } @Override public HttpClientMetric responsePushed(EndpointMetric endpointMetric, SocketMetric socketMetric, SocketAddress localAddress, SocketAddress remoteAddress, HttpClientRequest request) { endpointMetric.requests.incrementAndGet(); HttpClientMetric metric = new HttpClientMetric(endpointMetric, request, socketMetric); requests.put(request, metric); return metric; } @Override public void requestReset(HttpClientMetric requestMetric) { requestMetric.endpoint.requests.decrementAndGet(); requestMetric.failed.set(true); requests.remove(requestMetric.request); } @Override public void responseEnd(HttpClientMetric requestMetric, HttpClientResponse response) { requestMetric.endpoint.requests.decrementAndGet(); requests.remove(requestMetric.request); } public SocketMetric connected(SocketAddress remoteAddress, String remoteName) { return new SocketMetric(remoteAddress, remoteName); } public void disconnected(SocketMetric socketMetric, SocketAddress remoteAddress) { socketMetric.connected.set(false); } @Override public void bytesRead(SocketMetric socketMetric, SocketAddress remoteAddress, long numberOfBytes) { socketMetric.bytesRead.addAndGet(numberOfBytes); } @Override public void bytesWritten(SocketMetric socketMetric, SocketAddress remoteAddress, long numberOfBytes) { socketMetric.bytesWritten.addAndGet(numberOfBytes); } @Override public void exceptionOccurred(SocketMetric socketMetric, SocketAddress remoteAddress, Throwable t) { } @Override public boolean isEnabled() { return true; } @Override public void close() { } }