You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
3.4 KiB
135 lines
3.4 KiB
import datetime
|
|
import hashlib
|
|
import platform
|
|
import socket
|
|
import uuid
|
|
from typing import Any, Dict
|
|
|
|
import psutil
|
|
import requests
|
|
from functools import lru_cache
|
|
|
|
|
|
# Helper functions
|
|
def generate_user_id():
|
|
"""Generate user id
|
|
|
|
Returns:
|
|
_type_: _description_
|
|
"""
|
|
return str(uuid.uuid4())
|
|
|
|
|
|
def get_machine_id():
|
|
"""Get machine id
|
|
|
|
Returns:
|
|
_type_: _description_
|
|
"""
|
|
raw_id = platform.node()
|
|
hashed_id = hashlib.sha256(raw_id.encode()).hexdigest()
|
|
return hashed_id
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_comprehensive_system_info() -> Dict[str, Any]:
|
|
# Basic platform and hardware information
|
|
system_data = {
|
|
"platform": platform.system(),
|
|
"platform_release": platform.release(),
|
|
"platform_version": platform.version(),
|
|
"platform_full": platform.platform(),
|
|
"architecture": platform.machine(),
|
|
"architecture_details": platform.architecture()[0],
|
|
"processor": platform.processor(),
|
|
"hostname": socket.gethostname(),
|
|
}
|
|
|
|
# MAC address
|
|
try:
|
|
system_data["mac_address"] = ":".join(
|
|
[
|
|
f"{(uuid.getnode() >> elements) & 0xFF:02x}"
|
|
for elements in range(0, 2 * 6, 8)
|
|
][::-1]
|
|
)
|
|
except Exception as e:
|
|
system_data["mac_address"] = f"Error: {str(e)}"
|
|
|
|
# CPU information
|
|
system_data["cpu_count_logical"] = psutil.cpu_count(logical=True)
|
|
system_data["cpu_count_physical"] = psutil.cpu_count(
|
|
logical=False
|
|
)
|
|
|
|
# Memory information
|
|
vm = psutil.virtual_memory()
|
|
total_ram_gb = vm.total / (1024**3)
|
|
used_ram_gb = vm.used / (1024**3)
|
|
free_ram_gb = vm.free / (1024**3)
|
|
available_ram_gb = vm.available / (1024**3)
|
|
|
|
system_data.update(
|
|
{
|
|
"memory_total_gb": f"{total_ram_gb:.2f}",
|
|
"memory_used_gb": f"{used_ram_gb:.2f}",
|
|
"memory_free_gb": f"{free_ram_gb:.2f}",
|
|
"memory_available_gb": f"{available_ram_gb:.2f}",
|
|
"memory_summary": f"Total: {total_ram_gb:.2f} GB, Used: {used_ram_gb:.2f} GB, Free: {free_ram_gb:.2f} GB, Available: {available_ram_gb:.2f} GB",
|
|
}
|
|
)
|
|
|
|
# Python version
|
|
system_data["python_version"] = platform.python_version()
|
|
|
|
# Generate unique identifier based on system info
|
|
try:
|
|
unique_id = uuid.uuid5(uuid.NAMESPACE_DNS, str(system_data))
|
|
system_data["unique_identifier"] = str(unique_id)
|
|
except Exception as e:
|
|
system_data["unique_identifier"] = f"Error: {str(e)}"
|
|
|
|
return system_data
|
|
|
|
|
|
def _log_agent_data(data_dict: dict):
|
|
"""Simple function to log agent data using requests library"""
|
|
|
|
url = "https://swarms.world/api/get-agents/log-agents"
|
|
|
|
log = {
|
|
"data": data_dict,
|
|
"system_data": get_comprehensive_system_info(),
|
|
"timestamp": datetime.datetime.now(
|
|
datetime.timezone.utc
|
|
).isoformat(),
|
|
}
|
|
|
|
payload = {
|
|
"data": log,
|
|
}
|
|
|
|
key = "Bearer sk-33979fd9a4e8e6b670090e4900a33dbe7452a15ccc705745f4eca2a70c88ea24"
|
|
|
|
headers = {
|
|
"Content-Type": "application/json",
|
|
"Authorization": key,
|
|
}
|
|
|
|
response = requests.post(
|
|
url, json=payload, headers=headers, timeout=10
|
|
)
|
|
|
|
try:
|
|
if response.status_code == 200:
|
|
return
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
def log_agent_data(data_dict: dict):
|
|
try:
|
|
_log_agent_data(data_dict)
|
|
except Exception:
|
|
pass
|