Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

44
LINES

< > BotCompany Repo | #1019502 // oshi_calcProcessCPUUsage_v2 - better handling of deleted processes

JavaX fragment (include)

scope oshi_calcProcessCPUUsage_v2.

sclass #Data {
  long cpuTime, timestamp;
  OSProcess process;
}

// key: pid
static Map<Int, Data> #map = synchroMap();

svoid _onLoad_oshi_calcProcessCPUUsage_v2 {
  ownResource(vmBus_onMessage('osProcesses, voidfunc(L processes) {
    Set<Int> keep = asHashSet(collectMethod(processes, 'getProcessID));
    for (Iterator<Int> it = map.keySet().iterator(); it.hasNext(); ) {
      Int pid = it.next();
      if (!keep.contains(pid)) {
        Data data = map.get(pid);
        print("Lost process: [" + pid + "] " + data.process.getName());
        it.remove();
      }
    }
  }));
}

// call this in proper interval (1 to 3 seconds) to work properly
static double oshi_calcProcessCPUUsage_v2(OSProcess p) {
  if (p == null) ret 0;
  int pid = p.getProcessID();
  Data data = map.get(pid);
  if (data == null)
    map.put(pid, data = nu(Data, process := p));

  long cpuTime = p.getKernelTime() + p.getUserTime();

  double result = 0;
  long now = sysNow();
  if (data.timestamp != 0)
		result = percentRatio(cpuTime-data.cpuTime, now-data.timestamp);
  data.timestamp = now;
	data.cpuTime = cpuTime;
	ret result;
}

end scope

Author comment

Began life as a copy of #1019497

download  show line numbers  debug dex  old transpilations   

Travelled to 12 computer(s): bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, irmadwmeruwu, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1019502
Snippet name: oshi_calcProcessCPUUsage_v2 - better handling of deleted processes
Eternal ID of this version: #1019502/5
Text MD5: 2e22331ef7f7e5b0f68314c4aa4d2801
Author: stefan
Category: javax / os
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2018-11-10 22:52:41
Source code size: 1209 bytes / 44 lines
Pitched / IR pitched: No / No
Views / Downloads: 197 / 252
Version history: 4 change(s)
Referenced in: [show references]