69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
#!/usr/bin/env python3
|
|
"""提供健康检查,并验证平台重启容器后 /app 中的文件是否保留。"""
|
|
|
|
import json
|
|
import os
|
|
import socket
|
|
import sys
|
|
import threading
|
|
import time
|
|
from datetime import datetime, timezone
|
|
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
|
|
from pathlib import Path
|
|
|
|
|
|
PORT = int(os.getenv("PORT", "8080"))
|
|
RUN_SECONDS = int(os.getenv("RUN_SECONDS", "60"))
|
|
MARKER = Path(os.getenv("MARKER_FILE", "/app/restart-marker.txt"))
|
|
|
|
|
|
class Handler(BaseHTTPRequestHandler):
|
|
def do_GET(self) -> None:
|
|
if self.path != "/health":
|
|
self.send_error(404)
|
|
return
|
|
payload = json.dumps({"status": "ok"}).encode()
|
|
self.send_response(200)
|
|
self.send_header("Content-Type", "application/json")
|
|
self.send_header("Content-Length", str(len(payload)))
|
|
self.end_headers()
|
|
self.wfile.write(payload)
|
|
|
|
def log_message(self, _format: str, *_args: object) -> None:
|
|
return
|
|
|
|
|
|
def main() -> int:
|
|
now = datetime.now(timezone.utc).astimezone().isoformat()
|
|
pod_name = os.getenv("POD_NAME", socket.gethostname())
|
|
pod_uid = os.getenv("POD_UID", "unknown")
|
|
existed = MARKER.exists()
|
|
previous = MARKER.read_text().strip() if existed else "<missing>"
|
|
|
|
print("=" * 70, flush=True)
|
|
print(f"time={now}", flush=True)
|
|
print(f"pod_name={pod_name}", flush=True)
|
|
print(f"pod_uid={pod_uid}", flush=True)
|
|
print(f"marker={MARKER}", flush=True)
|
|
print(f"marker_existed_before_start={str(existed).lower()}", flush=True)
|
|
print(f"marker_previous_content={previous}", flush=True)
|
|
|
|
MARKER.parent.mkdir(parents=True, exist_ok=True)
|
|
MARKER.write_text(f"pod={pod_name} uid={pod_uid} written_at={now}\n")
|
|
print("marker_written=true", flush=True)
|
|
|
|
server = ThreadingHTTPServer(("0.0.0.0", PORT), Handler)
|
|
server_thread = threading.Thread(target=server.serve_forever, daemon=True)
|
|
server_thread.start()
|
|
print(f"health_url=http://0.0.0.0:{PORT}/health", flush=True)
|
|
print(f"will_exit_normally_after={RUN_SECONDS}s", flush=True)
|
|
time.sleep(RUN_SECONDS)
|
|
server.shutdown()
|
|
server.server_close()
|
|
print("program completed; exiting normally with code 0", flush=True)
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|