Fetch metrics with tags
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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()};
|
||||
|
||||
|
||||
@@ -81,6 +81,5 @@ interface BeansQuery extends LiveProcessDataQuery {
|
||||
interface MetricsQuery extends LiveProcessDataQuery {
|
||||
endpoint: "metrics";
|
||||
metricName: string;
|
||||
tag?: { key: string; value: string };
|
||||
|
||||
}
|
||||
tags?: string;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user