Beispiel #1
0
def populate_all(service_id: str = None, service_name: str = None):
    """Gets the oncall for a given service id or name."""
    if True:
        print("Done populate_all")
    elif False:
        service = pypd.Service.find(query=service_name)

        if not service:
            raise DispatchPluginException(
                f"No on-call service found with service name: {service_name}")

        return get_oncall_email(service[0])

    raise DispatchPluginException(
        "Cannot fetch oncall. Must specify service_id or service_name.")
Beispiel #2
0
def get_oncall(service_id: str = None, service_name: str = None):
    """Gets the oncall for a given service id or name."""
    if service_id:
        service = pypd.Service.fetch(service_id)
        return get_oncall_email(service)
    elif service_name:
        service = pypd.Service.find(query=service_name)

        if len(service) > 1:
            raise DispatchPluginException(
                f"More than one PagerDuty service found with service name: {service_name}"
            )

        if not service:
            raise DispatchPluginException(
                f"No on-call service found with service name: {service_name}")

        return get_oncall_email(service[0])

    raise DispatchPluginException(
        f"Cannot fetch oncall. Must specify service_id or service_name.")
Beispiel #3
0
    def get(self, **kwargs) -> dict:
        """Queries slack for documents."""
        client = create_slack_client(self.configuration)
        conversations = []

        if kwargs["channels"]:
            logger.debug(f"Querying slack for documents. Channels: {kwargs['channels']}")

            channels = kwargs["channels"].split(",")
            for c in channels:
                conversations.append(get_conversation_by_name(client, c))

        if kwargs["channel_match_pattern"]:
            try:
                regex = kwargs["channel_match_pattern"]
                pattern = re.compile(regex)
            except re.error as e:
                raise DispatchPluginException(
                    message=f"Invalid regex. Is everything escaped properly? Regex: '{regex}' Message: {e}"
                )

            logger.debug(
                f"Querying slack for documents. ChannelsPattern: {kwargs['channel_match_pattern']}"
            )
            for c in list_conversations(client):
                if pattern.match(c["name"]):
                    conversations.append(c)

        for c in conversations:
            logger.info(f'Fetching channel messages. Channel Name: {c["name"]}')

            messages = list_conversation_messages(client, c["id"], lookback=kwargs["lookback"])

            logger.info(f'Found {len(messages)} messages in slack. Channel Name: {c["name"]}')

            for m in messages:
                if not message_filter(m):
                    continue

                user_email = get_user_info_by_id(client, m["user"])["user"]["profile"]["email"]

                yield {
                    "person": {"email": user_email},
                    "doc": {
                        "text": m["text"],
                        "is_private": c["is_private"],
                        "subject": c["name"],
                        "source": "slack",
                    },
                    "ref": {"timestamp": m["ts"]},
                }
Beispiel #4
0
def get_oncall() -> str:
    schedule_api = "https://api.opsgenie.com/v2/schedules"
    response = requests.get(
        f"{schedule_api}/{OPSGENIE_TEAM_ID}/on-calls",
        headers=get_auth(),
    )

    if response.status_code != 200:
        raise DispatchPluginException(response.text)

    body = response.json().get("data")

    if not body:
        raise DispatchPluginException

    return body["onCallParticipants"][0].get('name')