Skip to content

Does not seem usable #6

@brablc

Description

@brablc

I wasted some hours trying to get this API work on my fork. The requirements are frozen, so it needs a fix right away. I wanted to use Events API, but it does nor produce usable return type. It is all kind of awkward.

For my purpose I wrote my code from scrap:

import os
import requests
from enum import Enum
from typing import Optional, Dict, Any
import logging


class ZendutyAlertType(Enum):
    CRITICAL = "critical"
    ERROR = "error"
    RESOLVED = "resolved"


class ZendutyClient:
    """
    A class to handle sending alerts to Zenduty service.
    """

    def __init__(self, api_key: Optional[str] = None):
        """
        Initialize the ZendutyAlerts client.

        Args:
            api_key: Zenduty API key. If not provided, will look for ZENDUTY_API_KEY env variable
        """
        self.api_key = api_key or os.getenv("ZENDUTY_API_KEY")
        if not self.api_key:
            raise ValueError(
                "ZENDUTY_API_KEY must be provided or set as environment variable"
            )

        self.logger = logging.getLogger(__name__)
        self.base_url = "https://www.zenduty.com/api/events"

    def send_alert(
        self,
        *,
        alert_type: ZendutyAlertType,
        message: str,
        entity_id: str,
        summary: str,
        payload: Optional[Dict[str, Any]] = None,
        urls: Optional[Dict[str, str]] = None,
    ):
        try:
            request_data: Dict[str, Any] = {
                "alert_type": alert_type.value,
                "entity_id": entity_id,
                "message": message,
                "summary": summary,
            }

            if payload is not None:
                request_data["payload"] = payload

            if urls is not None:
                request_data["urls"] = [
                    {"link_text": k, "link_url": v} for k, v in urls.items()
                ]

            url = f"{self.base_url}/{self.api_key}/"
            response = requests.post(
                url, json=request_data, headers={"Content-Type": "application/json"}
            )

            if self.logger.isEnabledFor(logging.DEBUG):
                self.logger.debug(f"Request data: {request_data}")
                self.logger.debug(f"Response data: {response.json()}")

            return response

        except requests.exceptions.RequestException as e:
            self.logger.error(f"Failed to send alert to Zenduty: {str(e)}")
            return False
        except Exception as e:
            self.logger.error(f"Error sending alert: {str(e)}")
            return False

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions