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.")
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.")
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"]}, }
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')