#!/usr/bin/env python3
# easyNag

import requests
import os
import logging

LOGFILE = "/var/log/monitoring/notifications.log"
EASYNAG_API_URL = "https://api.easynag.com/v1/push/alert"
EASYNAG_USER_KEY = os.environ.get('NOTIFY_CONTACT_EASYNAG_USER_KEY', '')
EASYNAG_INSTANCE = os.environ.get('NOTIFY_CONTACT_EASYNAG_INSTANCE', '')

def setupLogging():
    try:
        logging.basicConfig(
            filename=LOGFILE,
            level=logging.DEBUG,
            format="%(asctime)s %(levelname)s %(message)s",
        )
    except Exception:
        logging.basicConfig(
            level=logging.DEBUG,
            format="%(asctime)s %(levelname)s %(message)s",
        )
        logging.error("Failed to open logfile, logging to stderr")

def easyNagNotify():
    if not EASYNAG_USER_KEY:
        return

    payload = {
            "user_key": EASYNAG_USER_KEY,
            "what": os.environ["NOTIFY_WHAT"],
            "type": os.environ["NOTIFY_NOTIFICATIONTYPE"],
            "state": os.environ["NOTIFY_HOSTSTATE"] if os.environ["NOTIFY_WHAT"] == "HOST" else os.environ["NOTIFY_SERVICESTATE"],
            "hostname": os.environ["NOTIFY_HOSTNAME"],
            "service": os.environ["NOTIFY_SERVICEDESC"] if os.environ["NOTIFY_WHAT"] == "SERVICE" else None,
            "output": os.environ["NOTIFY_HOSTOUTPUT"] if os.environ["NOTIFY_WHAT"] == "HOST" else os.environ["NOTIFY_SERVICEOUTPUT"],
            "date": os.environ["NOTIFY_SHORTDATETIME"],
            "author": os.environ["NOTIFY_NOTIFICATIONAUTHORALIAS"],
            "comment": os.environ["NOTIFY_NOTIFICATIONCOMMENT"],
            "instance": EASYNAG_INSTANCE,
        }

    headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}

    try:
        response = requests.post(EASYNAG_API_URL, json=payload, headers=headers, timeout=4)
        api_response = response.json().get('response', response.text)

        if response.ok:
            logging.info(f'Sent easyNag push notification to {os.environ["NOTIFY_CONTACTNAME"]} (user_key: {EASYNAG_USER_KEY}) (Response: {api_response})')
        elif api_response == "Device notifications are disabled":
            logging.info(f'Skipped easyNag push notification for {os.environ["NOTIFY_CONTACTNAME"]} (user_key: {EASYNAG_USER_KEY}) (Response: {api_response})')
        else:
            logging.info(f'Error sending easyNag push notification to {os.environ["NOTIFY_CONTACTNAME"]} (user_key: {EASYNAG_USER_KEY}) (Response: {api_response})')

    except Exception as e:
        logging.error(f"Error easyNag Request: {e}")
        logging.error(f'Error sending easyNag push notification to {os.environ["NOTIFY_CONTACTNAME"]} (user_key: {EASYNAG_USER_KEY})')

setupLogging()
easyNagNotify()
