disk space calculation using /sys/block/ #15

Merged
PeterSurda merged 1 commits from shailaja/idlers-agent:disk/space into main 2024-06-27 10:48:12 +02:00

View File

@ -92,13 +92,25 @@ class ServerData:
return [] return []
def get_ram_and_disk(self): def get_ram_and_disk(self):
# RAM information
with open('/proc/meminfo', 'r') as f: with open('/proc/meminfo', 'r') as f:
meminfo = f.read() meminfo = f.read()
ram = int([x for x in meminfo.split('\n') if 'MemTotal' in x][0].split()[1]) // 1024 ram = int([x for x in meminfo.split('\n') if 'MemTotal' in x][0].split()[1]) // 1024
Review

This can be rounded up, because on systems which have 1GB of RAM, it will result in 0GB (because it subtracts the amount allocated for the kernel).

This can be rounded up, because on systems which have 1GB of RAM, it will result in 0GB (because it subtracts the amount allocated for the kernel).
with open('/proc/diskstats', 'r') as f: # Disk space information
diskstats = f.read() disk = 0
disk = sum(int(x.split()[9]) for x in diskstats.split('\n') if x) * 512 // 10**9 for device in os.listdir('/sys/block'):
logging.info(f"RAM: {ram}MB, Disk: {disk}GB") device_path = '/sys/block/{}/device'.format(device)
size_path = '/sys/block/{}/size'.format(device)
if os.path.islink(device_path):
Review

There is a trick to make the code more readable. Use a negative condition and continue. This will reduce indentation.

e.g.

if not os.path.islink(device_path):
    continue
try:
    with open(size_path, 'r') as f:
...
There is a trick to make the code more readable. Use a negative condition and `continue`. This will reduce indentation. e.g. ``` if not os.path.islink(device_path): continue try: with open(size_path, 'r') as f: ... ```
try:
with open(size_path, 'r') as f:
size = int(f.read().strip())
disk += size
except Exception:
pass # Skip the device if any exception occurs
disk = disk * 512 // (1024**3) # convert to GB
logging.info("RAM: {}MB, Disk: {}GB".format(ram, disk))
return ram, disk return ram, disk
def get_cpu_count(self): def get_cpu_count(self):
@ -112,12 +124,12 @@ class ServerData:
with open('/proc/cpuinfo', 'r') as f: with open('/proc/cpuinfo', 'r') as f:
cpuinfo = f.read() cpuinfo = f.read()
cpu_count = cpuinfo.count('processor') cpu_count = cpuinfo.count('processor')
logging.info(f"CPU Count: {cpu_count}") logging.info("CPU Count: {}".format(cpu_count))
return cpu_count return cpu_count
def get_bandwidth(self): def get_bandwidth(self):
bandwidth = 2000 bandwidth = 2000
logging.info(f"Bandwidth: {bandwidth}") logging.info("Bandwidth: {}".format(bandwidth))
return bandwidth return bandwidth
def get_public_ip(self): def get_public_ip(self):
@ -125,12 +137,12 @@ class ServerData:
response = urllib.request.urlopen('https://api.ipify.org') response = urllib.request.urlopen('https://api.ipify.org')
return response.read().decode() return response.read().decode()
except Exception as e: except Exception as e:
logging.error(f"Failed to get public IP: {e}") logging.error("Failed to get public IP: {}".format(e))
return '127.0.0.1' return '127.0.0.1'
def get_os(self): def get_os(self):
os_id = 27 os_id = 27
logging.info(f"OS ID: {os_id}") logging.info("OS ID: {}".format(os_id))
return os_id return os_id
def create_post_data(self): def create_post_data(self):
@ -223,7 +235,7 @@ class ServerManager:
else: else:
return response.read().decode() return response.read().decode()
except urllib.error.HTTPError as e: except urllib.error.HTTPError as e:
logging.error(f"Request failed with {e}") logging.error("Request failed with {}".format(e))
raise raise
def get_existing_servers(self): def get_existing_servers(self):
@ -237,7 +249,7 @@ class ServerManager:
return self.send_request('POST', '/api/notes', post_data) return self.send_request('POST', '/api/notes', post_data)
def update_note(self, post_data, service_id): def update_note(self, post_data, service_id):
logging.info(f"Updating note with id {service_id}...") logging.info("Updating note with id {}...".format(service_id))
return self.send_request('PUT', '/api/notes/' + str(service_id), post_data) return self.send_request('PUT', '/api/notes/' + str(service_id), post_data)
def create_server(self, post_data): def create_server(self, post_data):
@ -248,7 +260,7 @@ class ServerManager:
# remove following keys from post_data # remove following keys from post_data
for key in NON_UPDATABLE_KEYS: for key in NON_UPDATABLE_KEYS:
post_data.pop(key, None) post_data.pop(key, None)
logging.info(f"Updating server with id {server_id}...") logging.info("Updating server with id {}...".format(server_id))
return self.send_request('PUT', '/api/servers/' + str(server_id), post_data) return self.send_request('PUT', '/api/servers/' + str(server_id), post_data)
def existing_server_id(self, post_data): def existing_server_id(self, post_data):