mirror of
https://github.com/Telecominfraproject/wlan-cloud-opensync-controller.git
synced 2025-11-01 11:07:49 +00:00
WIFI-1652 - implement performance counters for ovsdb, cassandra, and kafka
This commit is contained in:
@@ -23,6 +23,15 @@ import com.google.protobuf.Descriptors;
|
||||
import com.google.protobuf.MessageOrBuilder;
|
||||
import com.google.protobuf.util.JsonFormat;
|
||||
import com.google.protobuf.util.JsonFormat.TypeRegistry;
|
||||
import com.netflix.servo.DefaultMonitorRegistry;
|
||||
import com.netflix.servo.monitor.BasicCounter;
|
||||
import com.netflix.servo.monitor.BasicTimer;
|
||||
import com.netflix.servo.monitor.Counter;
|
||||
import com.netflix.servo.monitor.MonitorConfig;
|
||||
import com.netflix.servo.monitor.Stopwatch;
|
||||
import com.netflix.servo.monitor.Timer;
|
||||
import com.netflix.servo.tag.TagList;
|
||||
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface;
|
||||
import com.telecominfraproject.wlan.opensync.util.ZlibUtil;
|
||||
|
||||
@@ -43,9 +52,30 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
|
||||
|
||||
public static Charset utf8 = Charset.forName("UTF-8");
|
||||
|
||||
private final TagList tags = CloudMetricsTags.commonTags;
|
||||
|
||||
private final Counter messagesReceived = new BasicCounter(
|
||||
MonitorConfig.builder("osgw-mqtt-messagesReceived").withTags(tags).build());
|
||||
|
||||
private final Counter messageBytesReceived = new BasicCounter(
|
||||
MonitorConfig.builder("osgw-mqtt-messageBytesReceived").withTags(tags).build());
|
||||
|
||||
private final Timer timerMessageProcess = new BasicTimer(
|
||||
MonitorConfig.builder("osgw-mqtt-messageProcessTimer").withTags(tags).build());
|
||||
|
||||
|
||||
@Autowired
|
||||
private OpensyncExternalIntegrationInterface extIntegrationInterface;
|
||||
|
||||
// dtop: use anonymous constructor to ensure that the following code always
|
||||
// get executed,
|
||||
// even when somebody adds another constructor in here
|
||||
{
|
||||
DefaultMonitorRegistry.getInstance().register(messagesReceived);
|
||||
DefaultMonitorRegistry.getInstance().register(messageBytesReceived);
|
||||
DefaultMonitorRegistry.getInstance().register(timerMessageProcess);
|
||||
}
|
||||
|
||||
//
|
||||
// See https://github.com/fusesource/mqtt-client for the docs
|
||||
//
|
||||
@@ -180,6 +210,10 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
|
||||
// queue
|
||||
mqttMsg.ack();
|
||||
|
||||
messagesReceived.increment();
|
||||
messageBytesReceived.increment(payload.length);
|
||||
Stopwatch stopwatchTimerMessageProcess = timerMessageProcess.start();
|
||||
|
||||
LOG.trace("received message on topic {} size {}", mqttMsg.getTopic(), payload.length);
|
||||
|
||||
if (payload[0] == 0x78) {
|
||||
@@ -189,6 +223,7 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
|
||||
payload = ZlibUtil.decompress(payload);
|
||||
}
|
||||
|
||||
|
||||
// attempt to parse the message as protobuf
|
||||
MessageOrBuilder encodedMsg = null;
|
||||
try {
|
||||
@@ -198,7 +233,6 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
|
||||
MQTT_LOG.info("topic = {} Report = {}", mqttMsg.getTopic(),
|
||||
jsonPrinter.print(encodedMsg));
|
||||
|
||||
|
||||
extIntegrationInterface.processMqttMessage(mqttMsg.getTopic(), (Report) encodedMsg);
|
||||
|
||||
} catch (Exception e) {
|
||||
@@ -231,6 +265,8 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
|
||||
MQTT_LOG.info("topic = {} message = {}", mqttMsg.getTopic(), msgStr);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
stopwatchTimerMessageProcess.stop();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,13 +1,24 @@
|
||||
package com.telecominfraproject.wlan.opensync.ovsdb;
|
||||
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.RejectedExecutionHandler;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import com.netflix.servo.DefaultMonitorRegistry;
|
||||
import com.netflix.servo.monitor.BasicCounter;
|
||||
import com.netflix.servo.monitor.Counter;
|
||||
import com.netflix.servo.monitor.MonitorConfig;
|
||||
import com.netflix.servo.monitor.NumberGauge;
|
||||
import com.netflix.servo.tag.TagList;
|
||||
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
|
||||
import com.vmware.ovsdb.service.OvsdbPassiveConnectionListener;
|
||||
import com.vmware.ovsdb.service.impl.OvsdbPassiveConnectionListenerImpl;
|
||||
|
||||
@@ -16,12 +27,68 @@ public class OvsdbListenerConfig {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(OvsdbListenerConfig.class);
|
||||
|
||||
private final TagList tags = CloudMetricsTags.commonTags;
|
||||
|
||||
final Counter rejectedTasks = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-rejectedTasks").withTags(tags).build());
|
||||
final Counter submittedTasks = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-submittedTasks").withTags(tags).build());
|
||||
final Counter completedTasks = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-completedTasks").withTags(tags).build());
|
||||
|
||||
private AtomicInteger tasksInFlight = new AtomicInteger(0);
|
||||
|
||||
private final NumberGauge tasksInFlightGauge = new NumberGauge(
|
||||
MonitorConfig.builder("osgw-ovsdb-tasksInFlight").withTags(tags).build(), tasksInFlight);
|
||||
|
||||
// dtop: use anonymous constructor to ensure that the following code always
|
||||
// get executed,
|
||||
// even when somebody adds another constructor in here
|
||||
{
|
||||
DefaultMonitorRegistry.getInstance().register(rejectedTasks);
|
||||
DefaultMonitorRegistry.getInstance().register(submittedTasks);
|
||||
DefaultMonitorRegistry.getInstance().register(completedTasks);
|
||||
DefaultMonitorRegistry.getInstance().register(tasksInFlightGauge);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public OvsdbPassiveConnectionListener ovsdbPassiveConnectionListener(
|
||||
@org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.listener.threadPoolSize:10}")
|
||||
int threadPoolSize) {
|
||||
LOG.debug("Configuring OvsdbPassiveConnectionListener with thread pool size {}", threadPoolSize);
|
||||
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(threadPoolSize);
|
||||
|
||||
ThreadFactory threadFactory = new ThreadFactory() {
|
||||
private AtomicInteger thrNum = new AtomicInteger();
|
||||
|
||||
@Override
|
||||
public Thread newThread(Runnable r) {
|
||||
Thread thr = new Thread(r, "ovsdb-exec-pool-" + thrNum.incrementAndGet());
|
||||
thr.setDaemon(true);
|
||||
return thr;
|
||||
}
|
||||
};
|
||||
|
||||
RejectedExecutionHandler rejectedExecHandler = new ThreadPoolExecutor.AbortPolicy() {
|
||||
@Override
|
||||
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
|
||||
rejectedTasks.increment();
|
||||
super.rejectedExecution(r, executor);
|
||||
}
|
||||
};
|
||||
|
||||
ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(threadPoolSize, threadFactory, rejectedExecHandler) {
|
||||
@Override
|
||||
protected void beforeExecute(Thread t, Runnable r) {
|
||||
submittedTasks.increment();
|
||||
tasksInFlight.incrementAndGet();
|
||||
super.beforeExecute(t, r);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void afterExecute(Runnable r, Throwable t) {
|
||||
completedTasks.increment();
|
||||
tasksInFlight.decrementAndGet();
|
||||
super.afterExecute(r, t);
|
||||
}
|
||||
};
|
||||
|
||||
OvsdbPassiveConnectionListener listener = new OvsdbPassiveConnectionListenerImpl(executorService);
|
||||
return listener;
|
||||
}
|
||||
|
||||
@@ -1,14 +1,21 @@
|
||||
package com.telecominfraproject.wlan.opensync.ovsdb;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.netflix.servo.DefaultMonitorRegistry;
|
||||
import com.netflix.servo.monitor.MonitorConfig;
|
||||
import com.netflix.servo.monitor.Monitors;
|
||||
import com.netflix.servo.monitor.NumberGauge;
|
||||
import com.netflix.servo.tag.TagList;
|
||||
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSession;
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface;
|
||||
import com.vmware.ovsdb.service.OvsdbClient;
|
||||
@@ -17,9 +24,23 @@ import com.vmware.ovsdb.service.OvsdbClient;
|
||||
public class OvsdbSessionMap implements OvsdbSessionMapInterface {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(OvsdbSessionMap.class);
|
||||
|
||||
private final TagList tags = CloudMetricsTags.commonTags;
|
||||
|
||||
private AtomicInteger totalEquipmentConnections = new AtomicInteger(0);
|
||||
|
||||
private final NumberGauge totalEquipmentConnectionsGauge = new NumberGauge(
|
||||
MonitorConfig.builder("osgw-totalEquipmentConnections").withTags(tags).build(), totalEquipmentConnections);
|
||||
|
||||
private final ConcurrentHashMap<String, OvsdbSession> connectedClients = new ConcurrentHashMap<>();
|
||||
|
||||
// dtop: use anonymous constructor to ensure that the following code always
|
||||
// get executed,
|
||||
// even when somebody adds another constructor in here
|
||||
{
|
||||
DefaultMonitorRegistry.getInstance().register(totalEquipmentConnectionsGauge);
|
||||
}
|
||||
|
||||
@Override
|
||||
public OvsdbSession getSession(String apId) {
|
||||
LOG.info("Get session for AP {}", apId);
|
||||
@@ -29,7 +50,11 @@ public class OvsdbSessionMap implements OvsdbSessionMapInterface {
|
||||
@Override
|
||||
public OvsdbSession removeSession(String apId) {
|
||||
LOG.info("Removing session for AP {}", apId);
|
||||
return connectedClients.remove(apId);
|
||||
OvsdbSession ret = connectedClients.remove(apId);
|
||||
if(ret!=null) {
|
||||
totalEquipmentConnections.decrementAndGet();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -37,7 +62,7 @@ public class OvsdbSessionMap implements OvsdbSessionMapInterface {
|
||||
try {
|
||||
LOG.info("Close session for AP {}", apId);
|
||||
connectedClients.get(apId).getOvsdbClient().shutdown();
|
||||
connectedClients.remove(apId);
|
||||
removeSession(apId);
|
||||
LOG.info("Closed ovsdb session for {}", apId);
|
||||
}catch (Exception e) {
|
||||
// do nothing
|
||||
@@ -58,6 +83,8 @@ public class OvsdbSessionMap implements OvsdbSessionMapInterface {
|
||||
}catch (Exception e) {
|
||||
// do nothing
|
||||
}
|
||||
} else {
|
||||
totalEquipmentConnections.incrementAndGet();
|
||||
}
|
||||
|
||||
LOG.info("Created new ovsdb session for {}", apId);
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
package com.telecominfraproject.wlan.opensync.ovsdb;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.netflix.servo.DefaultMonitorRegistry;
|
||||
import com.netflix.servo.monitor.BasicCounter;
|
||||
import com.netflix.servo.monitor.Counter;
|
||||
import com.netflix.servo.monitor.MonitorConfig;
|
||||
import com.netflix.servo.monitor.Monitors;
|
||||
import com.netflix.servo.tag.TagList;
|
||||
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
|
||||
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
|
||||
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface;
|
||||
@@ -10,6 +17,8 @@ import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSession;
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface;
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.models.*;
|
||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.OvsdbDao;
|
||||
import com.telecominfraproject.wlan.opensync.ovsdb.metrics.OvsdbClientWithMetrics;
|
||||
import com.telecominfraproject.wlan.opensync.ovsdb.metrics.OvsdbMetrics;
|
||||
import com.telecominfraproject.wlan.opensync.util.OvsdbStringConstants;
|
||||
import com.telecominfraproject.wlan.opensync.util.SslUtil;
|
||||
import com.vmware.ovsdb.callback.ConnectionCallback;
|
||||
@@ -36,6 +45,21 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(TipWlanOvsdbClient.class);
|
||||
|
||||
private final TagList tags = CloudMetricsTags.commonTags;
|
||||
|
||||
private final Counter connectionsAttempted = new BasicCounter(
|
||||
MonitorConfig.builder("osgw-connectionsAttempted").withTags(tags).build());
|
||||
|
||||
private final Counter connectionsFailed = new BasicCounter(
|
||||
MonitorConfig.builder("osgw-connectionsFailed").withTags(tags).build());
|
||||
|
||||
private final Counter connectionsCreated = new BasicCounter(
|
||||
MonitorConfig.builder("osgw-connectionsCreated").withTags(tags).build());
|
||||
|
||||
private final Counter connectionsDropped = new BasicCounter(
|
||||
MonitorConfig.builder("osgw-connectionsDropped").withTags(tags).build());
|
||||
|
||||
|
||||
@org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.listenPort:6640}")
|
||||
private int ovsdbListenPort;
|
||||
|
||||
@@ -63,9 +87,22 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
|
||||
@Autowired
|
||||
private OvsdbSessionMapInterface ovsdbSessionMapInterface;
|
||||
|
||||
@Autowired
|
||||
private OvsdbMetrics ovsdbMetrics;
|
||||
|
||||
@org.springframework.beans.factory.annotation.Value("${tip.wlan.manager.collectionIntervalSec.event:60}")
|
||||
private long collectionIntervalSecEvent;
|
||||
|
||||
// dtop: use anonymous constructor to ensure that the following code always
|
||||
// get executed,
|
||||
// even when somebody adds another constructor in here
|
||||
{
|
||||
DefaultMonitorRegistry.getInstance().register(connectionsAttempted);
|
||||
DefaultMonitorRegistry.getInstance().register(connectionsCreated);
|
||||
DefaultMonitorRegistry.getInstance().register(connectionsDropped);
|
||||
DefaultMonitorRegistry.getInstance().register(connectionsFailed);
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
private void postCreate() {
|
||||
listenForConnections();
|
||||
@@ -78,6 +115,12 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
|
||||
@Override
|
||||
public void connected(OvsdbClient ovsdbClient) {
|
||||
|
||||
connectionsAttempted.increment();
|
||||
|
||||
if(! (ovsdbClient instanceof OvsdbClientWithMetrics )) {
|
||||
ovsdbClient = new OvsdbClientWithMetrics(ovsdbClient, ovsdbMetrics);
|
||||
}
|
||||
|
||||
String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress();
|
||||
int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
|
||||
String subjectDn;
|
||||
@@ -102,14 +145,17 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
|
||||
|
||||
monitorOvsdbStateTables(ovsdbClient, key);
|
||||
|
||||
connectionsCreated.increment();
|
||||
LOG.info("ovsdbClient connected from {} on port {} AP {} ", remoteHost, localPort, key);
|
||||
LOG.info("ovsdbClient connectedClients = {}", ovsdbSessionMapInterface.getNumSessions());
|
||||
|
||||
} catch (IllegalStateException e) {
|
||||
connectionsFailed.increment();
|
||||
LOG.error("autoprovisioning error {}", e.getMessage(), e);
|
||||
// something is wrong with the SSL
|
||||
ovsdbClient.shutdown();
|
||||
} catch (Exception e) {
|
||||
connectionsFailed.increment();
|
||||
LOG.error("ovsdbClient error", e);
|
||||
// something is wrong with the SSL
|
||||
ovsdbClient.shutdown();
|
||||
@@ -120,6 +166,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
|
||||
@Override
|
||||
public void disconnected(OvsdbClient ovsdbClient) {
|
||||
|
||||
connectionsDropped.increment();
|
||||
|
||||
String remoteHost;
|
||||
int localPort;
|
||||
String clientCn;
|
||||
|
||||
@@ -10,6 +10,13 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.netflix.servo.DefaultMonitorRegistry;
|
||||
import com.netflix.servo.monitor.BasicCounter;
|
||||
import com.netflix.servo.monitor.Counter;
|
||||
import com.netflix.servo.monitor.MonitorConfig;
|
||||
import com.netflix.servo.monitor.Monitors;
|
||||
import com.netflix.servo.tag.TagList;
|
||||
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
|
||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.OvsdbDao;
|
||||
import com.telecominfraproject.wlan.opensync.util.SslUtil;
|
||||
import com.vmware.ovsdb.callback.ConnectionCallback;
|
||||
@@ -24,6 +31,20 @@ public class TipWlanOvsdbRedirector {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(TipWlanOvsdbRedirector.class);
|
||||
|
||||
private final TagList tags = CloudMetricsTags.commonTags;
|
||||
|
||||
private final Counter connectionsAttempted = new BasicCounter(
|
||||
MonitorConfig.builder("osgw-redirector-connectionsAttempted").withTags(tags).build());
|
||||
|
||||
private final Counter connectionsFailed = new BasicCounter(
|
||||
MonitorConfig.builder("osgw-redirector-connectionsFailed").withTags(tags).build());
|
||||
|
||||
private final Counter connectionsCreated = new BasicCounter(
|
||||
MonitorConfig.builder("osgw-redirector-connectionsCreated").withTags(tags).build());
|
||||
|
||||
private final Counter connectionsDropped = new BasicCounter(
|
||||
MonitorConfig.builder("osgw-redirector-connectionsDropped").withTags(tags).build());
|
||||
|
||||
@org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.redirector.listenPort:6643}")
|
||||
private int ovsdbRedirectorListenPort;
|
||||
|
||||
@@ -41,10 +62,21 @@ public class TipWlanOvsdbRedirector {
|
||||
listenForConnections();
|
||||
}
|
||||
|
||||
// dtop: use anonymous constructor to ensure that the following code always
|
||||
// get executed,
|
||||
// even when somebody adds another constructor in here
|
||||
{
|
||||
DefaultMonitorRegistry.getInstance().register(connectionsAttempted);
|
||||
DefaultMonitorRegistry.getInstance().register(connectionsCreated);
|
||||
DefaultMonitorRegistry.getInstance().register(connectionsDropped);
|
||||
DefaultMonitorRegistry.getInstance().register(connectionsFailed);
|
||||
}
|
||||
|
||||
public void listenForConnections() {
|
||||
|
||||
ConnectionCallback connectionCallback = new ConnectionCallback() {
|
||||
public void connected(OvsdbClient ovsdbClient) {
|
||||
connectionsAttempted.increment();
|
||||
String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress();
|
||||
int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
|
||||
String subjectDn = null;
|
||||
@@ -54,8 +86,9 @@ public class TipWlanOvsdbRedirector {
|
||||
String clientCn = SslUtil.extractCN(subjectDn);
|
||||
LOG.info("ovsdbClient redirector connected from {} on port {} clientCn {}", remoteHost, localPort, clientCn);
|
||||
ovsdbDao.performRedirect(ovsdbClient, clientCn);
|
||||
|
||||
connectionsCreated.increment();
|
||||
} catch (Exception e) {
|
||||
connectionsFailed.increment();
|
||||
//something is wrong with the SSL or with the redirect
|
||||
ovsdbClient.shutdown();
|
||||
return;
|
||||
@@ -63,6 +96,7 @@ public class TipWlanOvsdbRedirector {
|
||||
}
|
||||
|
||||
public void disconnected(OvsdbClient ovsdbClient) {
|
||||
connectionsDropped.increment();
|
||||
String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress();
|
||||
int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
|
||||
String subjectDn = null;
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
package com.telecominfraproject.wlan.opensync.ovsdb.metrics;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import com.vmware.ovsdb.callback.LockCallback;
|
||||
import com.vmware.ovsdb.callback.MonitorCallback;
|
||||
import com.vmware.ovsdb.exception.OvsdbClientException;
|
||||
import com.vmware.ovsdb.protocol.methods.LockResult;
|
||||
import com.vmware.ovsdb.protocol.methods.MonitorRequests;
|
||||
import com.vmware.ovsdb.protocol.methods.TableUpdates;
|
||||
import com.vmware.ovsdb.protocol.operation.Operation;
|
||||
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
|
||||
import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
|
||||
import com.vmware.ovsdb.service.OvsdbClient;
|
||||
import com.vmware.ovsdb.service.OvsdbConnectionInfo;
|
||||
|
||||
public class OvsdbClientWithMetrics implements OvsdbClient {
|
||||
|
||||
private final OvsdbMetrics metrics;
|
||||
private final OvsdbClient delegate;
|
||||
|
||||
public OvsdbClientWithMetrics(OvsdbClient delegate, OvsdbMetrics metrics) {
|
||||
this.delegate = delegate;
|
||||
this.metrics = metrics;
|
||||
}
|
||||
|
||||
public CompletableFuture<String[]> listDatabases() throws OvsdbClientException {
|
||||
metrics.listDatabases.increment();
|
||||
return delegate.listDatabases();
|
||||
}
|
||||
|
||||
public CompletableFuture<DatabaseSchema> getSchema(String dbName) throws OvsdbClientException {
|
||||
metrics.getSchema.increment();
|
||||
return delegate.getSchema(dbName);
|
||||
}
|
||||
|
||||
public CompletableFuture<OperationResult[]> transact(String dbName, List<Operation> operations)
|
||||
throws OvsdbClientException {
|
||||
metrics.transact.increment();
|
||||
return delegate.transact(dbName, operations);
|
||||
}
|
||||
|
||||
public CompletableFuture<TableUpdates> monitor(String dbName, String monitorId, MonitorRequests monitorRequests,
|
||||
MonitorCallback monitorCallback) throws OvsdbClientException {
|
||||
metrics.monitor.increment();
|
||||
return delegate.monitor(dbName, monitorId, monitorRequests, monitorCallback);
|
||||
}
|
||||
|
||||
public CompletableFuture<Void> cancelMonitor(String monitorId) throws OvsdbClientException {
|
||||
metrics.cancelMonitor.increment();
|
||||
return delegate.cancelMonitor(monitorId);
|
||||
}
|
||||
|
||||
public CompletableFuture<LockResult> lock(String lockId, LockCallback lockCallback) throws OvsdbClientException {
|
||||
metrics.lock.increment();
|
||||
return delegate.lock(lockId, lockCallback);
|
||||
}
|
||||
|
||||
public CompletableFuture<LockResult> steal(String lockId, LockCallback lockCallback) throws OvsdbClientException {
|
||||
metrics.steal.increment();
|
||||
return delegate.steal(lockId, lockCallback);
|
||||
}
|
||||
|
||||
public CompletableFuture<Void> unlock(String lockId) throws OvsdbClientException {
|
||||
metrics.unlock.increment();
|
||||
return delegate.unlock(lockId);
|
||||
}
|
||||
|
||||
public OvsdbConnectionInfo getConnectionInfo() {
|
||||
return delegate.getConnectionInfo();
|
||||
}
|
||||
|
||||
public void shutdown() {
|
||||
delegate.shutdown();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.telecominfraproject.wlan.opensync.ovsdb.metrics;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.netflix.servo.DefaultMonitorRegistry;
|
||||
import com.netflix.servo.monitor.BasicCounter;
|
||||
import com.netflix.servo.monitor.Counter;
|
||||
import com.netflix.servo.monitor.MonitorConfig;
|
||||
import com.netflix.servo.tag.TagList;
|
||||
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
|
||||
|
||||
@Component
|
||||
public class OvsdbMetrics {
|
||||
|
||||
private final TagList tags = CloudMetricsTags.commonTags;
|
||||
|
||||
final Counter listDatabases = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-listDatabases").withTags(tags).build());
|
||||
final Counter getSchema = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-getSchema").withTags(tags).build());
|
||||
final Counter transact = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-transact").withTags(tags).build());
|
||||
final Counter monitor = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-monitor").withTags(tags).build());
|
||||
final Counter cancelMonitor = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-cancelMonitor").withTags(tags).build());
|
||||
final Counter lock = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-lock").withTags(tags).build());
|
||||
final Counter steal = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-steal").withTags(tags).build());
|
||||
final Counter unlock = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-unlock").withTags(tags).build());
|
||||
|
||||
// dtop: use anonymous constructor to ensure that the following code always
|
||||
// get executed,
|
||||
// even when somebody adds another constructor in here
|
||||
{
|
||||
DefaultMonitorRegistry.getInstance().register(listDatabases);
|
||||
DefaultMonitorRegistry.getInstance().register(getSchema);
|
||||
DefaultMonitorRegistry.getInstance().register(transact);
|
||||
DefaultMonitorRegistry.getInstance().register(monitor);
|
||||
DefaultMonitorRegistry.getInstance().register(cancelMonitor);
|
||||
DefaultMonitorRegistry.getInstance().register(lock);
|
||||
DefaultMonitorRegistry.getInstance().register(steal);
|
||||
DefaultMonitorRegistry.getInstance().register(unlock);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -30,6 +30,7 @@ import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSession;
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface;
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
|
||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.OvsdbDao;
|
||||
import com.telecominfraproject.wlan.opensync.ovsdb.metrics.OvsdbMetrics;
|
||||
import com.telecominfraproject.wlan.profile.network.models.ApNetworkConfiguration;
|
||||
import com.vmware.ovsdb.callback.MonitorCallback;
|
||||
import com.vmware.ovsdb.exception.OvsdbClientException;
|
||||
@@ -47,7 +48,7 @@ import io.netty.handler.ssl.SslContext;
|
||||
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = OpensyncGatewayTipWlanOvsdbClientTest.class)
|
||||
@Import(value = { OpensyncGatewayTipWlanOvsdbClientTest.Config.class, TipWlanOvsdbClient.class,
|
||||
TipWlanOvsdbRedirector.class, OvsdbListenerConfig.class, OvsdbSessionMapInterface.class, OvsdbDao.class,
|
||||
OpensyncExternalIntegrationInterface.class, OvsdbSession.class, SslContext.class })
|
||||
OpensyncExternalIntegrationInterface.class, OvsdbSession.class, OvsdbMetrics.class, SslContext.class })
|
||||
public class OpensyncGatewayTipWlanOvsdbClientTest {
|
||||
|
||||
@MockBean
|
||||
|
||||
Reference in New Issue
Block a user