Fetch metrics with tags

This commit is contained in:
V Udayani
2022-10-13 17:06:26 +05:30
committed by aboyko
parent c6f905bd0f
commit 103e225f7b
8 changed files with 52 additions and 48 deletions

View File

@@ -150,7 +150,7 @@ public class SpringProcessCommandHandler {
String processKey = getProcessKey(params);
String endpoint = getArgumentByKey(params, "endpoint");
if (processKey != null) {
connectorService.refreshProcess(processKey, endpoint, "");
connectorService.refreshProcess(processKey, endpoint, "", null);
}
return CompletableFuture.completedFuture(null);
@@ -160,8 +160,9 @@ public class SpringProcessCommandHandler {
String processKey = getProcessKey(params);
String endpoint = getArgumentByKey(params, "endpoint");
String metricName = getArgumentByKey(params, "metricName");
String tags = getArgumentByKey(params, "tags");
if (processKey != null) {
connectorService.refreshProcess(processKey, endpoint, metricName);
connectorService.refreshProcess(processKey, endpoint, metricName, tags);
}
return CompletableFuture.completedFuture(null);
@@ -245,8 +246,10 @@ public class SpringProcessCommandHandler {
}
else if (arg instanceof JsonObject) {
JsonElement element = ((JsonObject) arg).get(name);
if (element != null) {
return element.getAsString();
if (element != null && element instanceof JsonObject) {
return element.toString();
} else if ( element != null) {
return element.getAsString();
}
}
}

View File

@@ -27,6 +27,6 @@ public interface SpringProcessConnector {
String getProjectName();
String getProcessId();
String getProcessName();
SpringProcessGcPausesMetricsLiveData refreshGcPausesMetrics(SpringProcessLiveData current, String metricName) throws Exception;
SpringProcessMemoryMetricsLiveData refreshMemoryMetrics(SpringProcessLiveData current, String metricName) throws Exception;
SpringProcessGcPausesMetricsLiveData refreshGcPausesMetrics(SpringProcessLiveData current, String metricName, String tags) throws Exception;
SpringProcessMemoryMetricsLiveData refreshMemoryMetrics(SpringProcessLiveData current, String metricName, String tags) throws Exception;
}

View File

@@ -104,13 +104,13 @@ public class SpringProcessConnectorOverHttp implements SpringProcessConnector {
}
@Override
public SpringProcessGcPausesMetricsLiveData refreshGcPausesMetrics(SpringProcessLiveData current, String metricName)
public SpringProcessGcPausesMetricsLiveData refreshGcPausesMetrics(SpringProcessLiveData current, String metricName, String tags)
throws Exception {
return null;
}
@Override
public SpringProcessMemoryMetricsLiveData refreshMemoryMetrics(SpringProcessLiveData current, String metricName)
public SpringProcessMemoryMetricsLiveData refreshMemoryMetrics(SpringProcessLiveData current, String metricName, String tags)
throws Exception {
return null;
}

View File

@@ -149,7 +149,7 @@ public class SpringProcessConnectorOverJMX implements SpringProcessConnector {
}
@Override
public SpringProcessMemoryMetricsLiveData refreshMemoryMetrics(SpringProcessLiveData currentData, String metricName) throws Exception {
public SpringProcessMemoryMetricsLiveData refreshMemoryMetrics(SpringProcessLiveData currentData, String metricName, String tags) throws Exception {
log.info("try to open JMX connection to: " + jmxURL);
if (jmxConnection != null) {
@@ -157,7 +157,7 @@ public class SpringProcessConnectorOverJMX implements SpringProcessConnector {
SpringProcessLiveDataExtractorOverJMX springJMXConnector = new SpringProcessLiveDataExtractorOverJMX();
log.info("retrieve live data from: " + jmxURL);
SpringProcessMemoryMetricsLiveData liveData = springJMXConnector.retrieveLiveMemoryMetricsData(getProcessType(), jmxConnection, processID, processName, currentData, metricName);
SpringProcessMemoryMetricsLiveData liveData = springJMXConnector.retrieveLiveMemoryMetricsData(getProcessType(), jmxConnection, processID, processName, currentData, metricName, tags);
if (liveData != null && liveData.getMemoryMetrics() != null && liveData.getMemoryMetrics().length > 0) {
return liveData;
@@ -172,7 +172,7 @@ public class SpringProcessConnectorOverJMX implements SpringProcessConnector {
}
@Override
public SpringProcessGcPausesMetricsLiveData refreshGcPausesMetrics(SpringProcessLiveData currentData, String metricName) throws Exception {
public SpringProcessGcPausesMetricsLiveData refreshGcPausesMetrics(SpringProcessLiveData currentData, String metricName, String tags) throws Exception {
log.info("try to open JMX connection to: " + jmxURL);
if (jmxConnection != null) {
@@ -180,7 +180,7 @@ public class SpringProcessConnectorOverJMX implements SpringProcessConnector {
SpringProcessLiveDataExtractorOverJMX springJMXConnector = new SpringProcessLiveDataExtractorOverJMX();
log.info("retrieve live data from: " + jmxURL);
SpringProcessGcPausesMetricsLiveData liveData = springJMXConnector.retrieveLiveGcPausesMetricsData(getProcessType(), jmxConnection, processID, processName, currentData, metricName);
SpringProcessGcPausesMetricsLiveData liveData = springJMXConnector.retrieveLiveGcPausesMetricsData(getProcessType(), jmxConnection, processID, processName, currentData, metricName, tags);
if (liveData != null && liveData.getGcPausesMetrics() != null && liveData.getGcPausesMetrics().length > 0) {
return liveData;

View File

@@ -99,7 +99,7 @@ public class SpringProcessConnectorService {
}
}
public void refreshProcess(String processKey, String endpoint, String metricName) {
public void refreshProcess(String processKey, String endpoint, String metricName, String tags) {
log.info("refresh process: " + processKey);
SpringProcessConnector connector = this.connectors.get(processKey);
@@ -109,7 +109,7 @@ public class SpringProcessConnectorService {
progressTask.progressBegin("Refresh", null);
scheduleRefresh(progressTask, processKey, connector, 0, TimeUnit.SECONDS, 0, endpoint, metricName);
scheduleRefresh(progressTask, processKey, connector, 0, TimeUnit.SECONDS, 0, endpoint, metricName, tags);
}
}
@@ -170,9 +170,9 @@ public class SpringProcessConnectorService {
connector.connect();
progressTask.progressDone();
refreshProcess(processKey, "", "");
refreshProcess(processKey, "metrics", "memory");
refreshProcess(processKey, "metrics", "gcPauses");
refreshProcess(processKey, "", "", "");
refreshProcess(processKey, "metrics", "memory", "area:heap");
refreshProcess(processKey, "metrics", "gcPauses", "");
}
catch (Exception e) {
log.info("problem occured during process connect", e);
@@ -220,7 +220,7 @@ public class SpringProcessConnectorService {
}, delay, unit);
}
private void scheduleRefresh(ProgressTask progressTask, String processKey, SpringProcessConnector connector, long delay, TimeUnit unit, int retryNo, String endpoint, String metricName) {
private void scheduleRefresh(ProgressTask progressTask, String processKey, SpringProcessConnector connector, long delay, TimeUnit unit, int retryNo, String endpoint, String metricName, String tags) {
String progressMessage = "Refreshing data from Spring process: " + processKey + " - retry no: " + retryNo;
log.info(progressMessage);
@@ -230,7 +230,7 @@ public class SpringProcessConnectorService {
try {
progressTask.progressEvent(progressMessage);
if(endpoint.equals("metrics") && metricName.equals("memory")) {
SpringProcessMemoryMetricsLiveData newMetricsLiveData = connector.refreshMemoryMetrics(this.liveDataProvider.getCurrent(processKey), metricName);
SpringProcessMemoryMetricsLiveData newMetricsLiveData = connector.refreshMemoryMetrics(this.liveDataProvider.getCurrent(processKey), metricName, tags);
if (newMetricsLiveData != null) {
if (!this.liveDataProvider.addMemoryMetrics(processKey, newMetricsLiveData)) {
@@ -241,7 +241,7 @@ public class SpringProcessConnectorService {
}
} else if(endpoint.equals("metrics") && metricName.equals("gcPauses")) {
SpringProcessGcPausesMetricsLiveData newMetricsLiveData = connector.refreshGcPausesMetrics(this.liveDataProvider.getCurrent(processKey), metricName);
SpringProcessGcPausesMetricsLiveData newMetricsLiveData = connector.refreshGcPausesMetrics(this.liveDataProvider.getCurrent(processKey), metricName, tags);
if (newMetricsLiveData != null) {
if (!this.liveDataProvider.addGcPausesMetrics(processKey, newMetricsLiveData)) {
@@ -270,7 +270,7 @@ public class SpringProcessConnectorService {
if (retryNo < maxRetryCount && isKnownProcessKey(processKey)) {
scheduleRefresh(progressTask, processKey, connector, retryDelayInSeconds, TimeUnit.SECONDS,
retryNo + 1, endpoint, metricName);
retryNo + 1, endpoint, metricName, tags);
}
else {
progressTask.progressDone();

View File

@@ -97,8 +97,6 @@ public class SpringProcessLiveDataExtractorOverJMX {
LiveBeansModel beans = getBeans(connection, domain);
LiveMetricsModel metrics = getMetrics(connection, domain);
StartupMetricsModel startup = getStartupMetrics(connection, domain, currentData == null ? null : currentData.getStartupMetrics());
// LiveMemoryMetricsModel[] memoryMetrics = getLiveMemoryMetrics(connection, domain);
// LiveMemoryMetricsModel gcPausesMetrics = getGcPausesMetrics(connection, domain);
if (contextPath == null) {
contextPath = getContextPath(connection, domain, environment);
@@ -123,8 +121,6 @@ public class SpringProcessLiveDataExtractorOverJMX {
properties,
metrics,
startup
// memoryMetrics,
// gcPausesMetrics
);
}
catch (Exception e) {
@@ -142,9 +138,9 @@ public class SpringProcessLiveDataExtractorOverJMX {
* @param metricName
*/
public SpringProcessMemoryMetricsLiveData retrieveLiveMemoryMetricsData(ProcessType processType, JMXConnector jmxConnector, String processID, String processName,
SpringProcessLiveData currentData, String metricName) {
SpringProcessLiveData currentData, String metricName, String tags) {
List<String> memoryTags = Arrays.asList( "jvm.memory.used", "jvm.memory.committed", "jvm.memory.max");
List<String> memoryMetrics = Arrays.asList("jvm.memory.committed", "jvm.memory.max");
try {
MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();
@@ -163,16 +159,26 @@ public class SpringProcessLiveDataExtractorOverJMX {
}
}
// if(metricName.equals("memory")) {
for(String metric : memoryTags) {
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, domain, metric);
if(metrics != null) {
memoryMetricsList.add(metrics);
}
}
// }
LiveMemoryMetricsModel jvmMemUsedMetrics = getLiveMetrics(connection, domain, "jvm.memory.used", tags);
if(jvmMemUsedMetrics != null ) {
String[] memoryZones = jvmMemUsedMetrics.getAvailableTags()[0].getValues();
Arrays.sort(memoryZones);
for(String zone : memoryZones) {
String tag = tags+",id:"+zone;
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, domain, "jvm.memory.used", tag );
if(metrics != null) {
memoryMetricsList.add(metrics);
}
}
for(String metric : memoryMetrics) {
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, domain, metric, tags );
if(metrics != null) {
memoryMetricsList.add(metrics);
}
}
}
LiveMemoryMetricsModel[] res = (LiveMemoryMetricsModel[]) memoryMetricsList.toArray(new LiveMemoryMetricsModel[memoryMetricsList.size()]);
return new SpringProcessMemoryMetricsLiveData(
processType,
@@ -196,7 +202,7 @@ public class SpringProcessLiveDataExtractorOverJMX {
* @param metricName
*/
public SpringProcessGcPausesMetricsLiveData retrieveLiveGcPausesMetricsData(ProcessType processType, JMXConnector jmxConnector, String processID, String processName,
SpringProcessLiveData currentData, String metricName) {
SpringProcessLiveData currentData, String metricName, String tags) {
try {
MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();
@@ -215,9 +221,9 @@ public class SpringProcessLiveDataExtractorOverJMX {
}
}
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, domain, "jvm.gc.pause");
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, domain, "jvm.gc.pause", tags);
if(metrics != null) {
memoryMetricsList.add(getLiveMetrics(connection, domain, "jvm.gc.pause"));
memoryMetricsList.add(getLiveMetrics(connection, domain, "jvm.gc.pause", tags));
}
@@ -368,9 +374,8 @@ public class SpringProcessLiveDataExtractorOverJMX {
}
public LiveMemoryMetricsModel getLiveMetrics(MBeanServerConnection connection, String domain, String metricName) {
public LiveMemoryMetricsModel getLiveMetrics(MBeanServerConnection connection, String domain, String metricName, String tags) {
List<Object> tags = new ArrayList<>();
Object[] params1 = new Object[] {metricName, tags};
String[] signature = new String[] {String.class.getName(), List.class.getName()};

View File

@@ -81,6 +81,5 @@ interface BeansQuery extends LiveProcessDataQuery {
interface MetricsQuery extends LiveProcessDataQuery {
endpoint: "metrics";
metricName: string;
tag?: { key: string; value: string };
}
tags?: string;
}

View File

@@ -35,14 +35,11 @@ export class ApiManager {
const COMMAND_LIVEDATA_GET_METRICS = "sts/livedata/get/metrics"
const getLiveProcessMetricsData = async (query) : Promise<LiveProcess[]> => {
console.log(query);
console.log("in get live metrics function");
return await commands.executeCommand(COMMAND_LIVEDATA_GET_METRICS, query);
}
const COMMAND_LIVEDATA_REFRESH_METRICS = "sts/livedata/refresh/metrics";
const refreshLiveProcessMetricsData = async (query) => {
console.log("in get live metrics refresh function");
return await commands.executeCommand(COMMAND_LIVEDATA_REFRESH_METRICS, query);
}