import operator import os import platform import socket import subprocess import psutil import matplotlib.pyplot as plt from numpy.distutils import cpuinfo import platform import cpuinfo threads_por_nucleo = psutil.cpu_count(logical=False) memoria = psutil.virtual_memory() def display_horizontal_bar(label, value, max_value=100, bar_length=20, color='\033[0m'): percentage = (value / max_value) * 100 bar_fill_length = int(bar_length * (percentage / 100)) bar = f"{color}|" + '=' * bar_fill_length + ' ' * (bar_length - bar_fill_length) + f'{color}|' print(f"{label} {bar} {percentage:.2f}%\033[0m") def get_process_states(): # Get a list of all running processes processes = psutil.process_iter(['pid', 'name', 'status']) # Initialize counters for different process states running_count = 0 sleeping_count = 0 other_count = 0 # Iterate through processes and count their states for process in processes: status = process.info['status'].lower() if 'running' in status: running_count += 1 elif 'sleeping' in status: sleeping_count += 1 else: other_count += 1 return running_count, sleeping_count, other_count def get_container_info(): container_info = [] # Iterate through all running processes for process in psutil.process_iter(['pid', 'name', 'cpu_percent']): try: # Extract information for each process pid = process.info['pid'] name = process.info['name'] cpu_percent = process.info['cpu_percent'] # Append the information to the list container_info.append({'pid': pid, 'name': name, 'cpu_percent': cpu_percent}) except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): pass return container_info def display_top_containers(container_info, n=3): # Sort the container_info list based on CPU percent sorted_containers = sorted(container_info, key=operator.itemgetter('cpu_percent'), reverse=True) # Display information for the top N containers print(f"Top {n} containers by CPU usage:") for i, container in enumerate(sorted_containers[:n], 1): print(f"{i}. PID: {container['pid']}, Name: {container['name']}, CPU Usage: {container['cpu_percent']:.2f}%") def get_running_processes(): # Using list comprehension to get information about all running processes return [proc.info for proc in psutil.process_iter(['pid', 'name', 'username'])] def get_tcp_connections(): connections = psutil.net_connections(kind='inet') return connections def get_cpu_info(): cpu_info = {} # Get generic information about the CPU using platform cpu_info['architecture'] = platform.architecture() cpu_info['machine'] = platform.machine() cpu_info['processor'] = platform.processor() # Get detailed CPU information using cpuinfo cpu_info.update(cpuinfo.get_cpu_info()) return cpu_info def display_cpu_info(cpu_info): print("CPU Information:") print(f"Architecture: {cpu_info.get('architecture', 'N/A')}") print(f"Machine: {cpu_info.get('machine', 'N/A')}") print(f"Processor: {cpu_info.get('processor', 'N/A')}") print(f"Brand: {cpu_info.get('brand_raw', 'N/A')}") print( f"Model: {cpu_info.get('brand_raw', 'N/A')} {cpu_info.get('family', 'N/A')} {cpu_info.get('model', 'N/A')} ({cpu_info.get('arch', 'N/A')})") # Check if the key 'hz_advertised_raw' exists before accessing it if 'hz_advertised_raw' in cpu_info: clock_speed_ghz = cpu_info['hz_advertised_raw'][0] / 1e6 print(f"Clock Speed: {clock_speed_ghz:.2f} GHz") else: print("Clock Speed: N/A") print(f"Cores: {cpu_info.get('count', 'N/A')}") def procesesRunning(): # Get and print information about all running processes running_processes = get_running_processes() # Print the information without a separate loop print("\n".join([f"PID: {process['pid']}, Name: {process['name']}, User: {process['username']}" for process in running_processes])) battery = psutil.sensors_battery() plugged = battery.power_plugged percent = str(battery.percent) plugged = "Plugged In" if plugged else "Not Plugged In" ans=True while ans: print(""" 1. Hilos por nucleo 2. Memoria Total, Memoria Diponible y Porcentaje de memoria utilizada 3. Modulo OS 4. Informacion sobre drives en el sistema 5. El estado de bateria 6. Procesos activados 7. El uso del CPU, memoria y swap 8. Lista de connecciones TPC 9. Temperatura 10. Socket info 11. Modulo de plataforma 12. Numero de precesos activos,dormidos y otros 13. Mostar Contenedores sorteados por CPU 14. Informacion del CPU 0.Salir """) ans=input("Elige que tipo de informacio deseas saber:") if ans=="1": print(f"Tu procesador tiene {threads_por_nucleo} hilos por núcleo.") elif ans=="2": print(f"Memoria total: {memoria.total} bytes") print(f"Memoria disponible: {memoria.available} bytes") print(f"Porcentaje de memoria utilizada: {memoria.percent}%") elif ans=="3": cpu_count = os.cpu_count() print(f"CPU Count: {cpu_count}") current_directory = os.getcwd() print(f"Current Directory: {current_directory}") elif ans == "4": result = subprocess.run(['powershell', 'Get-PSDrive'], stdout=subprocess.PIPE, text=True) print(result.stdout) elif ans == "5": print(percent+'% | '+plugged) elif ans == "6": procesesRunning() elif ans == "7": cpu_usage = psutil.cpu_percent(interval=1) memory_info = psutil.virtual_memory() swap_info = psutil.swap_memory() display_horizontal_bar('CPU', cpu_usage, color='\033[91m') display_horizontal_bar('Memoria', memory_info.percent, color='\033[94m') display_horizontal_bar('Swap', swap_info.percent, color='\033[92m') elif ans =="8": if __name__ == "__main__": tcp_connections = get_tcp_connections() for connection in tcp_connections: print(f"Local Address: {connection.laddr}") print(f"Remote Address: {connection.raddr}") print(f"Status: {connection.status}") print("-----------------------------------") elif ans=="9": try: temperatures = psutil.sensors_temperatures() print("Temperatura:") for name, entries in temperatures.items(): for entry in entries: print(f"{name}: {entry.label} - {entry.current}°C") except AttributeError: print("la informacion sobre temeratura no esta disponible ens ete sitema") elif ans == "10": hostname = socket.gethostname() ip_address = socket.gethostbyname(hostname) print(f"Hostname: {hostname}") print(f"IP Address: {ip_address}") elif ans == "11": system_info = platform.system() release_info = platform.release() print(f"System: {system_info}") print(f"Release: {release_info}") elif ans == "12": running, sleeping, other = get_process_states() print(f"Processos activos: {running}") print(f"procesos dormiendo: {sleeping}") print(f"Otros procesos: {other}") elif ans =="13": container_info = get_container_info() display_top_containers(container_info) elif ans =="14": cpu_info = get_cpu_info() display_cpu_info(cpu_info) elif ans =="0": print("\n Adios") ans = None else: print("\n no es una pocion valida")