Skip to content
Snippets Groups Projects
Commit a47aa994 authored by Recolic Keghart's avatar Recolic Keghart
Browse files

half-done getCPU

parent 372be0ec
No related branches found
No related tags found
No related merge requests found
...@@ -17,4 +17,6 @@ public class CallbackListenerImpl implements CallbackListener { ...@@ -17,4 +17,6 @@ public class CallbackListenerImpl implements CallbackListener {
System.out.println("receive msg from server :" + msg); System.out.println("receive msg from server :" + msg);
} }
private String cachedServerCpu;
} }
...@@ -3,11 +3,14 @@ package com.aliware.tianchi; ...@@ -3,11 +3,14 @@ package com.aliware.tianchi;
import org.apache.dubbo.rpc.listener.CallbackListener; import org.apache.dubbo.rpc.listener.CallbackListener;
import org.apache.dubbo.rpc.service.CallbackService; import org.apache.dubbo.rpc.service.CallbackService;
import java.util.Date; import javax.management.Attribute;
import java.util.Map; import javax.management.AttributeList;
import java.util.Timer; import javax.management.MBeanServer;
import java.util.TimerTask; import javax.management.ObjectName;
import java.lang.management.ManagementFactory;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/** /**
* @author daofeng.xjf * @author daofeng.xjf
...@@ -23,9 +26,10 @@ public class CallbackServiceImpl implements CallbackService { ...@@ -23,9 +26,10 @@ public class CallbackServiceImpl implements CallbackService {
@Override @Override
public void run() { public void run() {
if (!listeners.isEmpty()) { if (!listeners.isEmpty()) {
String messageToPush = generateStatusMessage();
for (Map.Entry<String, CallbackListener> entry : listeners.entrySet()) { for (Map.Entry<String, CallbackListener> entry : listeners.entrySet()) {
try { try {
entry.getValue().receiveServerMsg(System.getProperty("quota") + " " + new Date().toString()); entry.getValue().receiveServerMsg(messageToPush);
} catch (Throwable t1) { } catch (Throwable t1) {
listeners.remove(entry.getKey()); listeners.remove(entry.getKey());
} }
...@@ -37,6 +41,20 @@ public class CallbackServiceImpl implements CallbackService { ...@@ -37,6 +41,20 @@ public class CallbackServiceImpl implements CallbackService {
private Timer timer = new Timer(); private Timer timer = new Timer();
private String generateStatusMessage() {
try {
List<String> cpuLoadList = getProcessCpuLoad().stream().map(Object::toString).collect(Collectors.toList());
String cpuLoadString = String.join(",", cpuLoadList);
System.out.println("Server push " + cpuLoadString);
return "cpu=" + cpuLoadString;
}
catch(Exception ex) {
return "error";
}
}
/** /**
* key: listener type * key: listener type
* value: callback listener * value: callback listener
...@@ -45,7 +63,30 @@ public class CallbackServiceImpl implements CallbackService { ...@@ -45,7 +63,30 @@ public class CallbackServiceImpl implements CallbackService {
@Override @Override
public void addListener(String key, CallbackListener listener) { public void addListener(String key, CallbackListener listener) {
System.out.println("Server: add Listener " + key);
listeners.put(key, listener); listeners.put(key, listener);
listener.receiveServerMsg(new Date().toString()); // send notification for change listener.receiveServerMsg(new Date().toString()); // send notification for change
} }
// System status impl
private static List<Double> getProcessCpuLoad() throws Exception {
List<Double> result = new ArrayList<>();
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = ObjectName.getInstance("java.lang:type=OperatingSystem");
AttributeList list = mbs.getAttributes(name, new String[]{ "ProcessCpuLoad" });
for(int i = 0; i < list.size(); ++i) {
Attribute att = (Attribute) list.get(i);
Double value = (Double)att.getValue();
if(value == -1.0)
// usually takes a couple of seconds before we get real values
result.add(Double.NaN);
else
// returns a percentage value with 1 decimal point precision
result.add(((int)(value * 1000) / 10.0));
}
return result;
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment