From a47aa9948c6c6bd8179e347d6b892fbb6e5dacd5 Mon Sep 17 00:00:00 2001 From: Recolic Keghart <root@recolic.net> Date: Mon, 15 Jul 2019 03:40:04 -0700 Subject: [PATCH] half-done getCPU --- .../aliware/tianchi/CallbackListenerImpl.java | 2 + .../aliware/tianchi/CallbackServiceImpl.java | 51 +++++++++++++++++-- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java b/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java index f4113b4..f80022a 100644 --- a/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java +++ b/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java @@ -17,4 +17,6 @@ public class CallbackListenerImpl implements CallbackListener { System.out.println("receive msg from server :" + msg); } + private String cachedServerCpu; + } diff --git a/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java b/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java index fc9a2a9..796fd1c 100644 --- a/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java +++ b/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java @@ -3,11 +3,14 @@ package com.aliware.tianchi; import org.apache.dubbo.rpc.listener.CallbackListener; import org.apache.dubbo.rpc.service.CallbackService; -import java.util.Date; -import java.util.Map; -import java.util.Timer; -import java.util.TimerTask; +import javax.management.Attribute; +import javax.management.AttributeList; +import javax.management.MBeanServer; +import javax.management.ObjectName; +import java.lang.management.ManagementFactory; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; /** * @author daofeng.xjf @@ -23,9 +26,10 @@ public class CallbackServiceImpl implements CallbackService { @Override public void run() { if (!listeners.isEmpty()) { + String messageToPush = generateStatusMessage(); for (Map.Entry<String, CallbackListener> entry : listeners.entrySet()) { try { - entry.getValue().receiveServerMsg(System.getProperty("quota") + " " + new Date().toString()); + entry.getValue().receiveServerMsg(messageToPush); } catch (Throwable t1) { listeners.remove(entry.getKey()); } @@ -37,6 +41,20 @@ public class CallbackServiceImpl implements CallbackService { 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 * value: callback listener @@ -45,7 +63,30 @@ public class CallbackServiceImpl implements CallbackService { @Override public void addListener(String key, CallbackListener listener) { + System.out.println("Server: add Listener " + key); listeners.put(key, listener); 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; + } } -- GitLab