소스 검색

Initial commit of plugins\p1-meter\libexec\agent_p1

Michael Honkoop 1 일 전
부모
커밋
322673c7ae
1개의 변경된 파일55개의 추가작업 그리고 0개의 파일을 삭제
  1. 55 0
      plugins/p1-meter/libexec/agent_p1

+ 55 - 0
plugins/p1-meter/libexec/agent_p1

@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+
+import json
+import sys
+from urllib.error import HTTPError, URLError
+from urllib.request import urlopen
+
+
+API_PATH = "/api/v1/data"
+TIMEOUT = 10
+
+
+def main():
+    if len(sys.argv) != 2:
+        print("Usage: agent_p1 IP_OR_FQDN", file=sys.stderr)
+        sys.exit(1)
+
+    address = sys.argv[1]
+    url = f"http://{address}{API_PATH}"
+
+    try:
+        with urlopen(url, timeout=TIMEOUT) as response:
+            data = json.load(response)
+
+    except HTTPError as exc:
+        print(
+            f"P1 API HTTP error: {exc.code} {exc.reason}",
+            file=sys.stderr,
+        )
+        sys.exit(1)
+
+    except URLError as exc:
+        print(
+            f"P1 API connection error: {exc.reason}",
+            file=sys.stderr,
+        )
+        sys.exit(1)
+
+    except TimeoutError:
+        print("P1 API request timed out", file=sys.stderr)
+        sys.exit(1)
+
+    except json.JSONDecodeError as exc:
+        print(
+            f"P1 API returned invalid JSON: {exc}",
+            file=sys.stderr,
+        )
+        sys.exit(1)
+
+    print("<<<p1:sep(0)>>>")
+    print(json.dumps(data, separators=(",", ":")))
+
+
+if __name__ == "__main__":
+    main()