timmy 修订了这个 Gist 10 months ago. 转到此修订
没有任何变更
timmy 修订了这个 Gist 10 months ago. 转到此修订
没有任何变更
timmy 修订了这个 Gist 10 months ago. 转到此修订
没有任何变更
timmy 修订了这个 Gist 10 months ago. 转到此修订
1 file changed, 66 insertions
disk_usage_http_server.py(文件已创建)
| @@ -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() | |
上一页
下一页