Última atividade 10 months ago

這段程式碼建立了一個簡單的 HTTP 伺服器,透過 /disk-usage API 端點提供磁碟空間使用狀況的查詢功能。使用者可以透過 GET 請求並指定 path 參數來獲取該目錄的總空間、已使用空間、可用空間及使用率,適用於系統監控或遠端管理工具。

timmy revisou este gist 10 months ago. Ir para a revisão

Sem alterações

timmy revisou este gist 10 months ago. Ir para a revisão

Sem alterações

timmy revisou este gist 10 months ago. Ir para a revisão

Sem alterações

timmy revisou este gist 10 months ago. Ir para a revisão

1 file changed, 66 insertions

disk_usage_http_server.py(arquivo criado)

@@ -0,0 +1,66 @@
1 + import json
2 + from http.server import BaseHTTPRequestHandler, HTTPServer
3 + from urllib.parse import urlparse, parse_qs
4 + import shutil
5 +
6 +
7 + class DiskUsage:
8 + def __init__(self, path="/"):
9 + self.path = path
10 +
11 + def get_usage(self):
12 + try:
13 + total, used, free = shutil.disk_usage(self.path)
14 + usage_percent = (used / total) * 100 if total > 0 else 0
15 + return {
16 + "path": self.path,
17 + "total_space": total,
18 + "used_space": used,
19 + "free_space": free,
20 + "usage_percent": usage_percent,
21 + }
22 + except Exception as e:
23 + return {"error": str(e)}
24 +
25 + @staticmethod
26 + def format_size(size_in_bytes):
27 + for unit in ["B", "KB", "MB", "GB", "TB"]:
28 + if size_in_bytes < 1024:
29 + return f"{size_in_bytes:.2f} {unit}"
30 + size_in_bytes /= 1024
31 + return f"{size_in_bytes:.2f} PB"
32 +
33 +
34 + class DiskUsageHandler(BaseHTTPRequestHandler):
35 + def do_GET(self):
36 + parsed_path = urlparse(self.path)
37 + if parsed_path.path == "/disk-usage":
38 + # 取得 query string 中的 path 參數
39 + query = parse_qs(parsed_path.query)
40 + path = query.get("path", ["/"])[0]
41 +
42 + # 執行 DiskUsage 並取得結果
43 + disk_usage = DiskUsage(path)
44 + usage = disk_usage.get_usage()
45 +
46 + # 回傳 JSON 結果
47 + self.send_response(200)
48 + self.send_header("Content-Type", "application/json")
49 + self.end_headers()
50 + self.wfile.write(json.dumps(usage).encode("utf-8"))
51 + else:
52 + self.send_response(404)
53 + self.send_header("Content-Type", "application/json")
54 + self.end_headers()
55 + self.wfile.write(json.dumps({"error": "Not Found"}).encode("utf-8"))
56 +
57 +
58 + def run(server_class=HTTPServer, handler_class=DiskUsageHandler, port=8000):
59 + server_address = ("", port)
60 + httpd = server_class(server_address, handler_class)
61 + print(f"Starting server on port {port}...")
62 + httpd.serve_forever()
63 +
64 +
65 + if __name__ == "__main__":
66 + run()
Próximo Anterior