8 Commits

Author SHA1 Message Date
cd56065e32 os字段新增版本和发行版
Some checks failed
Compile / build (x64, windows-latest) (push) Failing after 19s
Compile / build (x64, ubuntu-latest) (push) Failing after 35s
2024-10-05 05:34:26 +08:00
3c960896f4 修复运行时间错误的问题
Some checks failed
Compile / build (x64, windows-latest) (push) Failing after 36s
Compile / build (x64, ubuntu-latest) (push) Failing after 1m27s
2024-10-05 03:21:33 +08:00
c2a3966f37 修复运行时间错误的问题 2024-10-05 03:21:01 +08:00
3fa94f653d 修复运行时间错误的问题
Some checks failed
Compile / build (x64, windows-latest) (push) Failing after 39s
Compile / build (x64, ubuntu-latest) (push) Failing after 2m24s
2024-10-04 08:29:49 +08:00
4cb1fcdb21 添加系统启动时间 2024-10-04 07:46:00 +08:00
657cd1a80f 添加系统启动时间 2024-10-04 07:34:28 +08:00
3d14b5a18e 添加系统启动时间 2024-10-04 07:33:16 +08:00
2c3cda6e46 排除linux下无关分区
Some checks failed
Compile / build (x64, windows-latest) (push) Failing after 20s
Compile / build (x64, ubuntu-latest) (push) Failing after 35s
2024-10-03 18:49:28 +08:00
5 changed files with 161 additions and 2 deletions

View File

@@ -32,7 +32,15 @@ sudo apt install pipx
sudo pipx install server-status sudo pipx install server-status
``` ```
若出现环境问题,请从 Actions 下载构建好的二进制文件 若出现环境问题,手动部署
```yaml
git clone https://github.com/snowykami/server-status-client.git
python -m venv .venv
source .venv/bin/activate
pip install pdm
pdm install
python main.py --your-args
```
## 🎉 使用 ## 🎉 使用

View File

@@ -9,6 +9,7 @@ dependencies = [
"requests>=2.32.3", "requests>=2.32.3",
"psutil>=6.0.0", "psutil>=6.0.0",
"arclet-alconna>=1.8.30", "arclet-alconna>=1.8.30",
"pytz>=2024.2",
] ]
requires-python = ">=3.10" requires-python = ">=3.10"
readme = "README.md" readme = "README.md"

View File

@@ -6,6 +6,8 @@ from typing import Any
import psutil import psutil
import requests import requests
from server_status.timezone import get_timezone
excluded_partition_prefix = ("/var", "/boot", "/run", "/proc", "/sys", "/dev", "/tmp", "/snap") excluded_partition_prefix = ("/var", "/boot", "/run", "/proc", "/sys", "/dev", "/tmp", "/snap")
@@ -39,6 +41,8 @@ class Hardware:
disks: dict[str, dict[str, int]] = {} disks: dict[str, dict[str, int]] = {}
timezone: str = get_timezone()
net_up: int = 0 net_up: int = 0
net_down: int = 0 net_down: int = 0
net_type: str = "ethernet" net_type: str = "ethernet"
@@ -136,13 +140,13 @@ class Client:
self.link = link self.link = link
self.interval = interval self.interval = interval
self.start_time = psutil.boot_time()
self.hardware = Hardware() self.hardware = Hardware()
log("Client initialized", log("Client initialized",
f"Name: {self.name}({self.client_id}), Location: {self.location}, Labels: {self.labels}") f"Name: {self.name}({self.client_id}), Location: {self.location}, Labels: {self.labels}")
def start(self): def start(self):
self.start_time = time.time()
self.observe() self.observe()
while True: while True:
@@ -183,12 +187,16 @@ class Client:
"os": { "os": {
"name": platform.system(), "name": platform.system(),
"version": platform.version(), "version": platform.version(),
"machine": platform.machine(),
"release": platform.release(),
}, },
"labels": self.labels, "labels": self.labels,
"location": self.location, "location": self.location,
"uptime": int(time.time() - self.start_time), "uptime": int(time.time() - self.start_time),
"start_time": int(self.start_time), # 系统启动的时间
"link": self.link, "link": self.link,
"observed_at": int(time.time()), "observed_at": int(time.time()),
"timezone": self.hardware.timezone,
}, },
"hardware": { "hardware": {
"mem": { "mem": {
@@ -236,6 +244,9 @@ class Client:
continue continue
self.hardware.disks[part.device] = { self.hardware.disks[part.device] = {
"mountpoint": part.mountpoint,
"device": part.device,
"fstype": part.fstype,
"total": usage.total, "total": usage.total,
"used": usage.used, "used": usage.used,
} }

136
server_status/timezone.py Normal file
View File

@@ -0,0 +1,136 @@
import os
import platform
from zoneinfo import ZoneInfo
windows_timezone_map = {
"Dateline Standard Time": "Etc/GMT+12",
"UTC-11": "Etc/GMT+11",
"Aleutian Standard Time": "America/Adak",
"Hawaiian Standard Time": "Pacific/Honolulu",
"Marquesas Standard Time": "Pacific/Marquesas",
"Alaskan Standard Time": "America/Anchorage",
"UTC-09": "Etc/GMT+9",
"Pacific Standard Time (Mexico)": "America/Tijuana",
"UTC-08": "Etc/GMT+8",
"Pacific Standard Time": "America/Los_Angeles",
"US Mountain Standard Time": "America/Phoenix",
"Mountain Standard Time (Mexico)": "America/Chihuahua",
"Mountain Standard Time": "America/Denver",
"Central America Standard Time": "America/Guatemala",
"Central Standard Time": "America/Chicago",
"Easter Island Standard Time": "Pacific/Easter",
"Central Standard Time (Mexico)": "America/Mexico_City",
"Canada Central Standard Time": "America/Regina",
"SA Pacific Standard Time": "America/Bogota",
"Eastern Standard Time (Mexico)": "America/Cancun",
"Eastern Standard Time": "America/New_York",
"Haiti Standard Time": "America/Port-au-Prince",
"Cuba Standard Time": "America/Havana",
"US Eastern Standard Time": "America/Indianapolis",
"Turks And Caicos Standard Time": "America/Grand_Turk",
"Paraguay Standard Time": "America/Asuncion",
"Atlantic Standard Time": "America/Halifax",
"Venezuela Standard Time": "America/Caracas",
"Central Brazilian Standard Time": "America/Cuiaba",
"SA Western Standard Time": "America/La_Paz",
"Pacific SA Standard Time": "America/Santiago",
"SA Eastern Standard Time": "America/Cayenne",
"Argentina Standard Time": "America/Buenos_Aires",
"Greenland Standard Time": "America/Godthab",
"Montevideo Standard Time": "America/Montevideo",
"Bahia Standard Time": "America/Bahia",
"UTC-02": "Etc/GMT+2",
"Azores Standard Time": "Atlantic/Azores",
"Cape Verde Standard Time": "Atlantic/Cape_Verde",
"UTC": "Etc/GMT",
"GMT Standard Time": "Europe/London",
"Greenwich Standard Time": "Atlantic/Reykjavik",
"W. Europe Standard Time": "Europe/Berlin",
"Central Europe Standard Time": "Europe/Budapest",
"Romance Standard Time": "Europe/Paris",
"Central European Standard Time": "Europe/Warsaw",
"W. Central Africa Standard Time": "Africa/Lagos",
"Namibia Standard Time": "Africa/Windhoek",
"GTB Standard Time": "Europe/Bucharest",
"Middle East Standard Time": "Asia/Beirut",
"Egypt Standard Time": "Africa/Cairo",
"Syria Standard Time": "Asia/Damascus",
"E. Europe Standard Time": "Europe/Chisinau",
"South Africa Standard Time": "Africa/Johannesburg",
"FLE Standard Time": "Europe/Kiev",
"Turkey Standard Time": "Europe/Istanbul",
"Israel Standard Time": "Asia/Jerusalem",
"Jordan Standard Time": "Asia/Amman",
"Arabic Standard Time": "Asia/Riyadh",
"Kaliningrad Standard Time": "Europe/Kaliningrad",
"Arab Standard Time": "Asia/Riyadh",
"E. Africa Standard Time": "Africa/Nairobi",
"Iran Standard Time": "Asia/Tehran",
"Arabian Standard Time": "Asia/Dubai",
"Astrakhan Standard Time": "Europe/Astrakhan",
"Russian Standard Time": "Europe/Moscow",
"E. Europe Standard Time": "Europe/Chisinau",
"W. Australia Standard Time": "Australia/Perth",
"Moscow Standard Time": "Europe/Moscow",
"Pakistan Standard Time": "Asia/Karachi",
"India Standard Time": "Asia/Kolkata",
"Sri Lanka Standard Time": "Asia/Colombo",
"Nepal Standard Time": "Asia/Kathmandu",
"Bangladesh Standard Time": "Asia/Dhaka",
"Afghanistan Standard Time": "Asia/Kabul",
"Myanmar Standard Time": "Asia/Yangon",
"SE Asia Standard Time": "Asia/Bangkok",
"North Asia Standard Time": "Asia/Krasnoyarsk",
"China Standard Time": "Asia/Shanghai",
"Singapore Standard Time": "Asia/Singapore",
"W. Australia Standard Time": "Australia/Perth",
"Taipei Standard Time": "Asia/Taipei",
"Ulaanbaatar Standard Time": "Asia/Ulaanbaatar",
"North Asia East Standard Time": "Asia/Irkutsk",
"Korea Standard Time": "Asia/Seoul",
"Tokyo Standard Time": "Asia/Tokyo",
"Yakutsk Standard Time": "Asia/Yakutsk",
"Cen. Australia Standard Time": "Australia/Adelaide",
"AUS Central Standard Time": "Australia/Darwin",
"E. Australia Standard Time": "Australia/Brisbane",
"AUS Eastern Standard Time": "Australia/Sydney",
"West Pacific Standard Time": "Pacific/Port_Moresby",
"Tasmania Standard Time": "Australia/Hobart",
"Magadan Standard Time": "Asia/Magadan",
"Vladivostok Standard Time": "Asia/Vladivostok",
"Russia Time Zone 10": "Asia/Srednekolymsk",
"Central Pacific Standard Time": "Pacific/Guadalcanal",
"Fiji Standard Time": "Pacific/Fiji",
"New Zealand Standard Time": "Pacific/Auckland",
"UTC+12": "Etc/GMT-12",
"Kamchatka Standard Time": "Asia/Kamchatka",
"Tonga Standard Time": "Pacific/Tongatapu",
"Samoa Standard Time": "Pacific/Apia",
"Line Islands Standard Time": "Pacific/Kiritimati",
}
def get_timezone() -> str:
try:
# 尝试获取系统的本地时区
if 'TZ' in os.environ:
return os.environ['TZ']
# 如果环境变量中没有TZ尝试获取系统时区
if platform.system() == "Linux":
# Linux:
with open("/etc/timezone", "r") as f:
return f.read().strip()
elif platform.system() == "Darwin":
# macOS:
return ZoneInfo.from_file(open("/etc/localtime")).key
elif platform.system() == "Windows":
# Windows:
import winreg
with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SYSTEM\CurrentControlSet\Control\TimeZoneInformation") as key:
tz = winreg.QueryValueEx(key, "TimeZoneKeyName")[0]
return windows_timezone_map.get(tz) or tz
else:
return "UTC"
except Exception as e:
return "UTC"

3
test_tz.py Normal file
View File

@@ -0,0 +1,3 @@
from server_status.timezone import get_timezone
print(get_timezone())