package com.salesmanager.admin.system;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.salesmanager.admin.data.system.SystemData;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.DumpEndpoint;
import org.springframework.boot.actuate.endpoint.EnvironmentEndpoint;
import org.springframework.boot.actuate.endpoint.HealthEndpoint;
import org.springframework.boot.actuate.endpoint.MetricsEndpoint;
import org.springframework.stereotype.Component;
import java.lang.management.ManagementFactory;
import java.util.Map;
import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.MBeanServer;
import javax.management.ObjectName;
/**
* Created by umesh on 3/10/17.
*/
@Component(value = "smAccurator")
public class SmAccurator {
private ObjectMapper mapper = new ObjectMapper();
@Autowired
private DumpEndpoint dumpEndpoint;
@Autowired
private EnvironmentEndpoint envEndpoint;
@Autowired
private MetricsEndpoint metricsEndpoint;
@Autowired
private HealthEndpoint healthEndpoint;
public int getProcessCpuLoad() throws Exception {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = ObjectName.getInstance("java.lang:type=OperatingSystem");
AttributeList list = mbs.getAttributes(name, new String[]{ "ProcessCpuLoad" });
if (list.isEmpty()) return (int) Double.NaN;
Attribute att = (Attribute)list.get(0);
Double value = (Double)att.getValue();
// usually takes a couple of seconds before we get real values
if (value == -1.0) return (int) Double.NaN;
// returns a percentage value with 1 decimal point precision
return (int) ((value * 1000) / 10.0);
}
public String getEnvironment() throws JsonProcessingException {
return mapper.writeValueAsString(envEndpoint.invoke());
}
public String getDump() throws JsonProcessingException {
return mapper.writeValueAsString(dumpEndpoint.invoke());
}
public SystemData getMetrics() throws JsonProcessingException{
SystemData systemInfo=new SystemData();
Map<String,Object> metrics = metricsEndpoint.invoke();
if(MapUtils.isNotEmpty(metrics)){
systemInfo.setMemory((Long) metrics.get("mem"));
systemInfo.setFreeMemory((Long) metrics.get("mem.free"));
// systemInfo.setNumberOfProcessor((Long) metrics.get("processors"));
systemInfo.setSystemLoad((Double) metrics.get("systemload.average"));
//systemInfo.setHttpActiveSession((Long) metrics.get("httpsessions.active"));
systemInfo.setNumberOfThread((Long) metrics.get("threads"));
}
// return mapper.writeValueAsString(metricsEndpoint.invoke());
return systemInfo;
}
public String getHealthStatus() throws JsonProcessingException{
return mapper.writeValueAsString(healthEndpoint.invoke());
}
}