Procházet zdrojové kódy

Add a webhook for DNAC.

Joe Clarke před 1 rokem
rodič
revize
b5de611af4
1 změnil soubory, kde provedl 63 přidání a 0 odebrání
  1. 63 0
      automation/services/dnac-hook.py

+ 63 - 0
automation/services/dnac-hook.py

@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2017-2023  Joe Clarke <jclarke@cisco.com>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+from __future__ import print_function
+import sys
+import json
+from sparker import MessageType  # type: ignore
+import requests
+from requests.packages.urllib3.exceptions import InsecureRequestWarning  # type: ignore
+
+requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
+import logging
+from cleu.config import Config as C  # type: ignore
+
+DNAC_WEBHOOK = "https://webexapis.com/v1/webhooks/incoming/Y2lzY29zcGFyazovL3VzL1dFQkhPT0svZjAxZDhmNmUtODM3OS00Mzg3LWI4MDUtNzI0YzNjYzEyMzU2"
+
+HEADERS = {"Content-Type": "application/json"}
+
+if __name__ == "__main__":
+    print("Content-type: application/json\r\n\r\n")
+
+    output = sys.stdin.read()
+
+    j = json.loads(output)
+
+    logging.basicConfig(
+        format="%(asctime)s - %(name)s - %(levelname)s : %(message)s", filename="/var/log/dnac-hook.log", level=logging.DEBUG
+    )
+    logging.debug(json.dumps(j, indent=4))
+
+    # seen_issues[det["issueId"]] = det["issueMessage"]
+    mt = MessageType.WARNING
+    if j["details"]["Assurance Issue Status"] != "active":
+        mt = MessageType.GOOD
+    elif j["details"]["Assurance Issue Priority"] == "P1":
+        mt = MessageType.BAD
+
+    message = f"{mt} Device **{j['details']['Device']}** has [issue]({j['ciscoDnaEventLink']}): {j['details']['Assurance Issue Details']}"
+
+    requests.post(DNAC_WEBHOOK, header=HEADERS, json={"message": message})