# -*- coding: utf-8 -*-
import re
import shlex
import subprocess
from threading import Timer
class ShellCommandExecutor:
def __init__(self, timeout=30 * 60):
self.timeout = timeout
def execute_shell_command(self, shell_cmd):
shell_cmd_list = shlex.split(shell_cmd)
proc = subprocess.Popen(shell_cmd_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
timer = Timer(self.timeout, proc.kill)
try:
timer.start()
stdout, stderr = proc.communicate()
return (stdout + stderr).strip().decode('utf-8')
finally:
timer.cancel()
class SystemSpecificationChecker(ShellCommandExecutor):
def check_cpu_cores(self):
output = self.execute_shell_command("cat /proc/stat")
cpu_cores = len(re.findall(r'^cpu\d+', output, re.MULTILINE))
return cpu_cores == 4, cpu_cores, output
def check_memory(self):
output = self.execute_shell_command("free -m")
total_memory = re.search(r'Mem:\s+(\d+)', output)
if total_memory:
total_memory = int(total_memory.group(1))
return total_memory >= 8000, total_memory, output
return False, 0, output
def check_disk_space(self, path):
output = self.execute_shell_command("df -h {}".format(path))
disk_space = re.search(r'\s+(\d+)G\s+', output)
if disk_space:
disk_space = int(disk_space.group(1))
return disk_space >= 20, disk_space, output
return False, 0, output
def check_agent_process(self):
output = self.execute_shell_command("ps -ef|grep agent")
return 'agent' in output, output
def check_file_existence(self, file_path):
output = self.execute_shell_command("ls {}".format(file_path))
return 'No such file or directory' not in output, output
def main():
checker = SystemSpecificationChecker()
print("================================================================")
cpu_result, cpu_cores, cpu_output = checker.check_cpu_cores()
print("cat /proc/stat\t\t|\t{}".format(cpu_cores))
print("-----------------------------------------------------------------")
print("Command Execution Result:")
print(cpu_output)
print("================================================================")
memory_result, total_memory, memory_output = checker.check_memory()
print("free -m\t\t\t|\t{}".format(total_memory))
print("-----------------------------------------------------------------")
print("Command Execution Result:")
print(memory_output)
print("================================================================")
disk_cloud_result, disk_cloud_space, disk_cloud_output = checker.check_disk_space("/opt/cloud")
print("df -h /opt/cloud\t\t|\t{}".format(disk_cloud_space))
print("-----------------------------------------------------------------")
print("Command Execution Result:")
print(disk_cloud_output.encode('utf-8', errors='replace'))
print("================================================================")
disk_logs_result, disk_logs_space, disk_logs_output = checker.check_disk_space("/opt/cloud/logs")
print("df -h /opt/cloud/logs\t|\t{}".format(disk_logs_space))
print("-----------------------------------------------------------------")
print("Command Execution Result:")
print(disk_logs_output.encode('utf-8', errors='replace'))
print("================================================================")
agent_result, agent_output = checker.check_agent_process()
print("ps -ef|grep agent\t|\t{}".format(agent_result))
print("-----------------------------------------------------------------")
print("Command Execution Result:")
print(agent_output.encode('utf-8', errors='replace'))
print("================================================================")
file_existence_result, file_existence_output = checker.check_file_existence("/opte/pprint/1.txt")
print("ls /opte/pprint/1.txt\t|\t{}".format(file_existence_result))
print("-----------------------------------------------------------------")
print("Command Execution Result:")
print(file_existence_output.encode('utf-8', errors='replace'))
print("================================================================")
cpu_result, cpu_cores, cpu_output = checker.check_cpu_cores()
print(" cat /proc/stat \t|\tCPU cores count as 4: {}, \t|\tActual core count: {}".format(cpu_result, cpu_cores))
memory_result, total_memory, memory_output = checker.check_memory()
print(" free -m \t|\tMemory size as 8G: {}, \t|\tActual memory size: {} MB".format(memory_result, total_memory))
disk_cloud_result, disk_cloud_space, disk_cloud_output = checker.check_disk_space("/opt/cloud")
print(" df -h /opt/cloud \t|\tDisk space as 20G: {}, \t|\tActual disk space: {} G".format(disk_cloud_result, disk_cloud_space))
disk_logs_result, disk_logs_space, disk_logs_output = checker.check_disk_space("/opt/cloud/logs")
print(" df -h /opt/cloud/logs\t|\tDisk space as 20G: {}, \t|\tActual disk space: {} G".format(disk_logs_result, disk_logs_space))
agent_result, agent_output = checker.check_agent_process()
print(" ps -ef|grep agent \t|\tAgent process normal: {}".format(agent_result))
file_existence_result, file_existence_output = checker.check_file_existence("/opte/pprint/1.txt")
print("ls /opte/pprint/1.txt \t|\t File existence: {}".format(file_existence_result))
if __name__ == "__main__":
main()
在这里插入代码片
11111111
最新推荐文章于 2024-07-13 15:45:14 发布