added ram, swap, and cpu

main
Paco Hope 2023-10-05 09:21:06 -04:00
parent 4de517f792
commit 33b6ba5941
1 changed files with 43 additions and 3 deletions

View File

@ -7,6 +7,7 @@ To test, run ``pip install -e .`` which will install the command ``hetrixtools``
import argparse import argparse
import logging import logging
import time
import sys import sys
import subprocess import subprocess
import base64 import base64
@ -48,7 +49,7 @@ class Update:
self.load15 = "" # getSysCtlInfo self.load15 = "" # getSysCtlInfo
self.ramsize = "" # getSysCtlInfo self.ramsize = "" # getSysCtlInfo
self.ram = "" self.ram = ""
self.ramswapsize = "" self.ramswapsize = "" # getSysCtlInfo
self.ramswap = "" self.ramswap = ""
self.rambuff = "" self.rambuff = ""
self.ramcache = "" self.ramcache = ""
@ -83,6 +84,45 @@ class Update:
result = subprocess.run(command, stdout=subprocess.PIPE) result = subprocess.run(command, stdout=subprocess.PIPE)
return result.stdout.decode(encoding="utf-8") return result.stdout.decode(encoding="utf-8")
def getVMStatInfo(self):
# Linux:
# vmstat 3 2
# procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
# r b swpd free buff cache si so bi bo in cs us sy id wa st
# 1 0 725024 184732 98836 5720268 0 0 41 653 1963 3761 3 4 88 5 1
# FreeBSD
# procs memory page disks faults cpu
# r b w avm fre flt re pi po fr sr ad0 cd0 in sy cs us sy id
# 1 0 0 496M 1.4G 124 0 0 0 179 1 0 0 81 232 152 0 0 100
vminfo = json.loads( self.callCommand(command=['vmstat', '3', '2', '--libxo', 'json']) )
cpustats = vminfo.get('cpu-statistics', None)
faults = vminfo.get('fault-rates', None)
procs = vminfo.get('processes', None)
if( procs is not None ):
self.wa = procs.get('waiting', 0)
# Time stealing hard-coded to 0. I had to find a blog post from 2010 to even explain
# what it is. And it's not defined on FreeBSD anyways.
# http://web.archive.org/web/20120215064222/http://adrianotto.com/2010/02/time-stolen-from-a-virtual-machine/
self.st = 0
# Need my own way to get similar stats for FreeBSD:
# kern.cp_time returns 5 values for the the system that are the total amount
# of time since boot spent in user, nice, system, interrupt and idle
# We take to samples with a 2-second sleep in the middle, subtract t0 from t1,
# and calculate the percentage.
t0 = self.callCommand(command=['sysctl', '-n', 'kern.cp_time']).split(" ")
time.sleep(2.0)
t1 = self.callCommand(command=['sysctl', '-n', 'kern.cp_time']).split(" ")
user = t1[0] - t0[0]
nice = t1[1] - t0[1]
system = t1[2] - t0[2]
interrupt = t1[3] - t0[3]
idle = t1[4] - t0[4]
total = user + nice + system + interrupt + idle
# cpu "busy" == everything that wasn't "idle"
self.cpu = 1 - (idle/total)
self.us = user/total
self.system = system/total
def getSysCtlInfo(self): def getSysCtlInfo(self):
""" Parses all the things that can be gotten from sysctl and sets all the """ Parses all the things that can be gotten from sysctl and sets all the
values in the data structure. Other values can come from other places. values in the data structure. Other values can come from other places.
@ -106,8 +146,8 @@ class Update:
(self.load1, self.load5, self.load15) = self.sysctl.get('vm.loadavg').split(" ")[1:4] (self.load1, self.load5, self.load15) = self.sysctl.get('vm.loadavg').split(" ")[1:4]
# Memory and Swap # Memory and Swap
self.ramsize = int(self.sysctl.get('hw.physmem', 0)) / 1024 self.ramsize = int(int(self.sysctl.get('hw.physmem', 0)) / 1024)
self.ramswapsize = int(self.sysctl.get('vm.swap_total', 0)) / 1024 self.ramswapsize = int(int(self.sysctl.get('vm.swap_total', 0)) / 1024)
def toJsonString(self): def toJsonString(self):
"""Return the object as a JSON string.""" """Return the object as a JSON string."""