using the script from here (with some dirty hacks to quickly make a endpoint for experiment)
import psutil
import platform
from datetime import datetime
import cpuinfo
import socket
import uuid
import re
CONT = ""
def get_size(bytes, suffix="B"):
"""
Scale bytes to its proper format
e.g:
1253656 => '1.20MB'
1253656678 => '1.17GB'
"""
factor = 1024
for unit in ["", "K", "M", "G", "T", "P"]:
if bytes < factor:
return f"{bytes:.2f}{unit}{suffix}"
bytes /= factor
def System_information():
global CONT
CONT = ""
def print(*args):
global CONT
CONT = CONT + " ".join(map(str, args)) + "\n"
print("="*40, "System Information", "="*40)
uname = platform.uname()
print(f"System: {uname.system}")
print(f"Node Name: {uname.node}")
print(f"Release: {uname.release}")
print(f"Version: {uname.version}")
print(f"Machine: {uname.machine}")
print(f"Processor: {uname.processor}")
# print(f"Processor: {cpuinfo.get_cpu_info()['brand_raw']}")
print(f"Ip-Address: {socket.gethostbyname(socket.gethostname())}")
print(f"Mac-Address: {':'.join(re.findall('..', '%012x' % uuid.getnode()))}")
# Boot Time
print("="*40, "Boot Time", "="*40)
boot_time_timestamp = psutil.boot_time()
bt = datetime.fromtimestamp(boot_time_timestamp)
print(f"Boot Time: {bt.year}/{bt.month}/{bt.day} {bt.hour}:{bt.minute}:{bt.second}")
# print CPU information
print("="*40, "CPU Info", "="*40)
# number of cores
print("Physical cores:", psutil.cpu_count(logical=False))
print("Total cores:", psutil.cpu_count(logical=True))
# CPU frequencies
cpufreq = psutil.cpu_freq()
print(f"Max Frequency: {cpufreq.max:.2f}Mhz")
print(f"Min Frequency: {cpufreq.min:.2f}Mhz")
print(f"Current Frequency: {cpufreq.current:.2f}Mhz")
# CPU usage
print("CPU Usage Per Core:")
for i, percentage in enumerate(psutil.cpu_percent(percpu=True, interval=1)):
print(f"Core {i}: {percentage}%")
print(f"Total CPU Usage: {psutil.cpu_percent()}%")
# Memory Information
print("="*40, "Memory Information", "="*40)
# get the memory details
svmem = psutil.virtual_memory()
print(f"Total: {get_size(svmem.total)}")
print(f"Available: {get_size(svmem.available)}")
print(f"Used: {get_size(svmem.used)}")
print(f"Percentage: {svmem.percent}%")
print("="*20, "SWAP", "="*20)
# get the swap memory details (if exists)
swap = psutil.swap_memory()
print(f"Total: {get_size(swap.total)}")
print(f"Free: {get_size(swap.free)}")
print(f"Used: {get_size(swap.used)}")
print(f"Percentage: {swap.percent}%")
# Disk Information
print("="*40, "Disk Information", "="*40)
print("Partitions and Usage:")
# get all disk partitions
partitions = psutil.disk_partitions()
for partition in partitions:
print(f"=== Device: {partition.device} ===")
print(f" Mountpoint: {partition.mountpoint}")
print(f" File system type: {partition.fstype}")
try:
partition_usage = psutil.disk_usage(partition.mountpoint)
except PermissionError:
# this can be catched due to the disk that
# isn't ready
continue
print(f" Total Size: {get_size(partition_usage.total)}")
print(f" Used: {get_size(partition_usage.used)}")
print(f" Free: {get_size(partition_usage.free)}")
print(f" Percentage: {partition_usage.percent}%")
# get IO statistics since boot
disk_io = psutil.disk_io_counters()
# print(f"Total read: {get_size(disk_io.read_bytes)}")
# print(f"Total write: {get_size(disk_io.write_bytes)}")
## Network information
print("="*40, "Network Information", "="*40)
## get all network interfaces (virtual and physical)
if_addrs = psutil.net_if_addrs()
for interface_name, interface_addresses in if_addrs.items():
for address in interface_addresses:
print(f"=== Interface: {interface_name} ===")
if str(address.family) == 'AddressFamily.AF_INET':
print(f" IP Address: {address.address}")
print(f" Netmask: {address.netmask}")
print(f" Broadcast IP: {address.broadcast}")
elif str(address.family) == 'AddressFamily.AF_PACKET':
print(f" MAC Address: {address.address}")
print(f" Netmask: {address.netmask}")
print(f" Broadcast MAC: {address.broadcast}")
##get IO statistics since boot
net_io = psutil.net_io_counters()
print(f"Total Bytes Sent: {get_size(net_io.bytes_sent)}")
print(f"Total Bytes Received: {get_size(net_io.bytes_recv)}")
return CONT
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return System_information()
i get this output...
======================================== System Information ========================================
System: Linux
Node Name: blue-liveweb33
Release: 5.15.0-1044-aws
Version: #49~20.04.1-Ubuntu SMP Mon Aug 21 17:09:32 UTC 2023
Machine: x86_64
Processor: x86_64
Ip-Address: 127.0.0.1
Mac-Address: 0a:8a:72:43:56:5d
======================================== Boot Time ========================================
Boot Time: 2023/12/23 7:31:23
======================================== CPU Info ========================================
Physical cores: 2
Total cores: 4
Max Frequency: 0.00Mhz
Min Frequency: 0.00Mhz
Current Frequency: 2801.04Mhz
CPU Usage Per Core:
Core 0: 53.0%
Core 1: 41.2%
Core 2: 98.0%
Core 3: 35.1%
Total CPU Usage: 45.3%
======================================== Memory Information ========================================
Total: 30.89GB
Available: 1.39GB
Used: 28.97GB
Percentage: 95.5%
==================== SWAP ====================
Total: 80.00GB
Free: 48.30GB
Used: 31.70GB
Percentage: 39.6%
======================================== Disk Information ========================================
Partitions and Usage:
======================================== Network Information ========================================
=== Interface: lo ===
IP Address: 127.0.0.1
Netmask: 255.0.0.0
Broadcast IP: None
=== Interface: lo ===
=== Interface: lo ===
MAC Address: 00:00:00:00:00:00
Netmask: None
Broadcast MAC: None
=== Interface: ens5 ===
IP Address: 10.0.0.106
Netmask: 255.255.255.0
Broadcast IP: 10.0.0.255
=== Interface: ens5 ===
=== Interface: ens5 ===
MAC Address: 0a:8a:72:43:56:5d
Netmask: None
Broadcast MAC: ff:ff:ff:ff:ff:ff
=== Interface: docker0 ===
IP Address: 172.17.0.1
Netmask: 255.255.0.0
Broadcast IP: 172.17.255.255
=== Interface: docker0 ===
MAC Address: 02:42:fe:38:c8:22
Netmask: None
Broadcast MAC: ff:ff:ff:ff:ff:ff
Total Bytes Sent: 69.01GB
Total Bytes Received: 133.35GB
in "Memory Information" it says 30.89GB but 95% is being used, but my app is not using it, is it some sort of limit on RAM or a problem on my side, other than that, other information i get seems too much, how much of it is accurate, where are these numbers coming from