From d2b6599cb090eba82480112a91b709fcd24a2a55 Mon Sep 17 00:00:00 2001 From: agahhulusi Date: Fri, 11 Nov 2022 15:33:53 +0300 Subject: [PATCH] ssd and hdd list function added --- usr/share/ahenk/base/messaging/messaging.py | 9 +- .../ahenk/base/registration/registration.py | 7 ++ usr/share/ahenk/base/system/disk_info.py | 82 +++++++++++++++++++ .../resource-usage/resource_info_fetcher.py | 14 +++- 4 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 usr/share/ahenk/base/system/disk_info.py diff --git a/usr/share/ahenk/base/messaging/messaging.py b/usr/share/ahenk/base/messaging/messaging.py index caa239d..a1f5c37 100644 --- a/usr/share/ahenk/base/messaging/messaging.py +++ b/usr/share/ahenk/base/messaging/messaging.py @@ -6,6 +6,7 @@ import json from base.scope import Scope from base.system.system import System from base.util.util import Util +from base.system.disk_info import DiskInfo import os @@ -66,6 +67,7 @@ class Messaging(object): return str(json_data) def login_msg(self, username,ip=None): + ssd_list, hdd_list = DiskInfo.get_all_disks() data = dict() data['type'] = 'LOGIN' data['username'] = username @@ -82,13 +84,18 @@ class Messaging(object): self.logger.debug('USER IP : '+ str(ip)+ ' IPADDRESSES : '+ str(System.Hardware.Network.ip_addresses()).replace('[', '').replace(']', '')) - data['hardware.monitors'] = str(System.Hardware.monitors()), data['hardware.screens'] = str(System.Hardware.screens()), data['hardware.usbDevices'] = str(System.Hardware.usb_devices()), data['hardware.printers'] = str(System.Hardware.printers()), data['hardware.systemDefinitions'] = str(System.Hardware.system_definitions()), + if len(ssd_list) > 0: + data['hardware.disk.ssd.info'] = ssd_list + + if len(hdd_list) > 0: + data['hardware.disk.hdd.info'] = hdd_list + json_data = json.dumps(data) self.logger.debug('Login message was created') return json_data diff --git a/usr/share/ahenk/base/registration/registration.py b/usr/share/ahenk/base/registration/registration.py index d374c8f..2b60617 100644 --- a/usr/share/ahenk/base/registration/registration.py +++ b/usr/share/ahenk/base/registration/registration.py @@ -20,6 +20,7 @@ from base.registration.execute_cancel_sssd_authentication import ExecuteCancelSS from base.registration.execute_sssd_authentication import ExecuteSSSDAuthentication from base.registration.execute_sssd_ad_authentication import ExecuteSSSDAdAuthentication from base.registration.execute_cancel_sssd_ad_authentication import ExecuteCancelSSSDAdAuthentication +from base.system.disk_info import DiskInfo class Registration: def __init__(self): @@ -296,6 +297,12 @@ class Registration: 'processor': System.Hardware.Cpu.brand(), 'agentVersion': Util.get_agent_version(), } + + ssd_list, hdd_list = DiskInfo.get_all_disks() + if len(ssd_list) > 0: + params['hardware.disk.ssd.info'] = ssd_list + if len(hdd_list) > 0: + params['hardware.disk.hdd.info'] = hdd_list return json.dumps(params) diff --git a/usr/share/ahenk/base/system/disk_info.py b/usr/share/ahenk/base/system/disk_info.py new file mode 100644 index 0000000..af785b9 --- /dev/null +++ b/usr/share/ahenk/base/system/disk_info.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# Author: Agah Hulusi ÖZ + +from base.util.util import Util + +# HDD and SSD disk information +class DiskInfo(): + + @staticmethod + def get_all_disks(): + result_code, p_out, p_err = Util.execute("lsblk -b -o NAME,TYPE,ROTA,SIZE,RM,HOTPLUG,FSUSED | grep -v loop | awk '$5 == \"0\" { print $0 }'") + txt = p_out.split("\n") + while '' in txt: + txt.remove('') + detail_txt = [] + ssd_list = [] + hdd_list = [] + # Ignore USB from list + for item in txt: + item = item.split() + detail_txt.append(item) + # SSD and HDD list + for disk in detail_txt: + # Second element of disk equal to rotation type. + # Rotation type show that disk is SSD or HDD + # If it equals to "0" SSD + # If it equals to "1" HDD + if disk[2] == "0" and disk[1] == "disk": + ssd_list.append({ + "name": disk[0], + "type": "SSD", + "total": disk[3], + "used": 0, + }) + elif disk[2] == "1" and disk[1] == "disk": + hdd_list.append({ + "name": disk[0], + "type": "HDD", + "total": disk[3], + "used": 0, + }) + # Calculate the usage + used = 0 + ssd_list_counter = 0 + hdd_list_counter = 0 + is_first_disk = True + for item in detail_txt: + if item[1] == "disk": + if is_first_disk: + total = item[3] + name = item[0] + type = item[2] + is_first_disk = False + else: + if type == "0": + ssd_list[ssd_list_counter]["used"] = used + ssd_list_counter += 1 + elif type == "1": + hdd_list[hdd_list_counter]["used"] = used + hdd_list_counter += 1 + name = item[0] + used = 0 + total = item[3] + type = item[2] + else: + if len(item) > 6 and item[0] != "NAME": + used += int(item[6]) + if type == "0": + ssd_list[ssd_list_counter]["used"] = used + ssd_list_counter += 1 + elif type == "1": + hdd_list[hdd_list_counter]["used"] = used + hdd_list_counter += 1 + for item in ssd_list: + item["total"]= int(int(item["total"]) / (1000 * 1000)) + item["used"] = int(int(item["used"]) / (1000 * 1000)) + for item in hdd_list: + item["total"] = int(int(item["total"]) / (1000 * 1000)) + item["used"] = int(int(item["used"]) / (1000 * 1000)) + + return ssd_list, hdd_list \ No newline at end of file diff --git a/usr/share/ahenk/plugins/resource-usage/resource_info_fetcher.py b/usr/share/ahenk/plugins/resource-usage/resource_info_fetcher.py index d905f04..a1ceef5 100644 --- a/usr/share/ahenk/plugins/resource-usage/resource_info_fetcher.py +++ b/usr/share/ahenk/plugins/resource-usage/resource_info_fetcher.py @@ -3,9 +3,10 @@ # Author: Cemre ALPSOY # Author: Emre Akkaya +from psutil import disk_io_counters from base.plugin.abstract_plugin import AbstractPlugin import json - +from base.system.disk_info import DiskInfo class ResourceUsage(AbstractPlugin): def __init__(self, data, context): @@ -19,10 +20,14 @@ class ResourceUsage(AbstractPlugin): try: device = "" self.logger.debug("Gathering resource usage for disk, memory and CPU.") + + ssd_list, hdd_list = DiskInfo.get_all_disks() + for part in self.Hardware.Disk.partitions(): if len(device) != 0: device += ", " device = device + part.device + data = {'System': self.Os.name(), 'Release': self.Os.kernel_release(), 'Version': self.Os.distribution_version(), 'Machine': self.Os.architecture(), 'CPU Physical Core Count': self.Hardware.Cpu.physical_core_count(), @@ -36,6 +41,13 @@ class ResourceUsage(AbstractPlugin): 'CPU Actual Hz': self.Hardware.Cpu.hz_actual(), 'CPU Advertised Hz': self.Hardware.Cpu.hz_advertised() } + + if len(ssd_list) > 0: + data['hardware.disk.ssd.info'] = ssd_list + + if len(hdd_list) > 0: + data['hardware.disk.hdd.info'] = hdd_list + self.logger.debug("Resource usage info gathered.") self.context.create_response(code=self.message_code.TASK_PROCESSED.value, message='Anlık kaynak kullanım bilgisi başarıyla toplandı.',