diff --git a/drdroid_debug_toolkit/core/integrations/source_api_processors/metabase_api_processor.py b/drdroid_debug_toolkit/core/integrations/source_api_processors/metabase_api_processor.py index 3602267..30b9338 100644 --- a/drdroid_debug_toolkit/core/integrations/source_api_processors/metabase_api_processor.py +++ b/drdroid_debug_toolkit/core/integrations/source_api_processors/metabase_api_processor.py @@ -44,3 +44,107 @@ def test_connection(self): except Exception as e: logger.error(f"Exception occurred while testing Metabase connection: {e}") raise e + + # Alert endpoints + + def list_alerts(self): + try: + url = f"{self.__host}/api/alert" + response = requests.get(url, headers=self.headers, timeout=EXTERNAL_CALL_TIMEOUT) + response.raise_for_status() + return response.json() + except Exception as e: + logger.error(f"MetabaseApiProcessor.list_alerts:: Error listing alerts: {e}") + raise + + def get_alert(self, alert_id): + try: + url = f"{self.__host}/api/alert/{alert_id}" + response = requests.get(url, headers=self.headers, timeout=EXTERNAL_CALL_TIMEOUT) + response.raise_for_status() + return response.json() + except Exception as e: + logger.error(f"MetabaseApiProcessor.get_alert:: Error getting alert {alert_id}: {e}") + raise + + def create_alert(self, payload): + try: + url = f"{self.__host}/api/alert" + response = requests.post(url, headers=self.headers, json=payload, timeout=EXTERNAL_CALL_TIMEOUT) + response.raise_for_status() + return response.json() + except Exception as e: + logger.error(f"MetabaseApiProcessor.create_alert:: Error creating alert: {e}") + raise + + def update_alert(self, alert_id, payload): + try: + url = f"{self.__host}/api/alert/{alert_id}" + response = requests.put(url, headers=self.headers, json=payload, timeout=EXTERNAL_CALL_TIMEOUT) + response.raise_for_status() + return response.json() + except Exception as e: + logger.error(f"MetabaseApiProcessor.update_alert:: Error updating alert {alert_id}: {e}") + raise + + def delete_alert(self, alert_id): + try: + url = f"{self.__host}/api/alert/{alert_id}" + response = requests.delete(url, headers=self.headers, timeout=EXTERNAL_CALL_TIMEOUT) + response.raise_for_status() + return True + except Exception as e: + logger.error(f"MetabaseApiProcessor.delete_alert:: Error deleting alert {alert_id}: {e}") + raise + + # Pulse endpoints + + def list_pulses(self): + try: + url = f"{self.__host}/api/pulse" + response = requests.get(url, headers=self.headers, timeout=EXTERNAL_CALL_TIMEOUT) + response.raise_for_status() + return response.json() + except Exception as e: + logger.error(f"MetabaseApiProcessor.list_pulses:: Error listing pulses: {e}") + raise + + def get_pulse(self, pulse_id): + try: + url = f"{self.__host}/api/pulse/{pulse_id}" + response = requests.get(url, headers=self.headers, timeout=EXTERNAL_CALL_TIMEOUT) + response.raise_for_status() + return response.json() + except Exception as e: + logger.error(f"MetabaseApiProcessor.get_pulse:: Error getting pulse {pulse_id}: {e}") + raise + + def create_pulse(self, payload): + try: + url = f"{self.__host}/api/pulse" + response = requests.post(url, headers=self.headers, json=payload, timeout=EXTERNAL_CALL_TIMEOUT) + response.raise_for_status() + return response.json() + except Exception as e: + logger.error(f"MetabaseApiProcessor.create_pulse:: Error creating pulse: {e}") + raise + + def update_pulse(self, pulse_id, payload): + try: + url = f"{self.__host}/api/pulse/{pulse_id}" + response = requests.put(url, headers=self.headers, json=payload, timeout=EXTERNAL_CALL_TIMEOUT) + response.raise_for_status() + return response.json() + except Exception as e: + logger.error(f"MetabaseApiProcessor.update_pulse:: Error updating pulse {pulse_id}: {e}") + raise + + def delete_pulse(self, pulse_id): + try: + url = f"{self.__host}/api/pulse/{pulse_id}" + response = requests.delete(url, headers=self.headers, timeout=EXTERNAL_CALL_TIMEOUT) + response.raise_for_status() + return True + except Exception as e: + logger.error(f"MetabaseApiProcessor.delete_pulse:: Error deleting pulse {pulse_id}: {e}") + raise diff --git a/drdroid_debug_toolkit/core/integrations/source_managers/metabase_source_manager.py b/drdroid_debug_toolkit/core/integrations/source_managers/metabase_source_manager.py index 4d7a558..e451d25 100644 --- a/drdroid_debug_toolkit/core/integrations/source_managers/metabase_source_manager.py +++ b/drdroid_debug_toolkit/core/integrations/source_managers/metabase_source_manager.py @@ -1,13 +1,20 @@ import logging +from google.protobuf.struct_pb2 import Struct from google.protobuf.wrappers_pb2 import StringValue from core.integrations.source_api_processors.metabase_api_processor import MetabaseApiProcessor from core.integrations.source_manager import SourceManager -from core.protos.base_pb2 import Source, SourceKeyType -from core.protos.literal_pb2 import LiteralType +from core.protos.base_pb2 import Source, SourceKeyType, SourceModelType, TimeRange +from core.protos.connectors.connector_pb2 import Connector as ConnectorProto +from core.protos.literal_pb2 import LiteralType, Literal +from core.protos.playbooks.playbook_commons_pb2 import PlaybookTaskResult, PlaybookTaskResultType, ApiResponseResult, \ + TextResult +from core.protos.playbooks.source_task_definitions.metabase_task_pb2 import Metabase from core.protos.ui_definition_pb2 import FormField, FormFieldType -from core.utils.credentilal_utils import generate_credentials_dict, get_connector_key_type_string, DISPLAY_NAME, CATEGORY, ANALYTICS +from core.utils.credentilal_utils import generate_credentials_dict, get_connector_key_type_string, DISPLAY_NAME, \ + CATEGORY, ANALYTICS +from core.utils.proto_utils import dict_to_proto, proto_to_dict logger = logging.getLogger(__name__) @@ -16,8 +23,258 @@ class MetabaseSourceManager(SourceManager): def __init__(self): self.source = Source.METABASE - self.task_proto = None - self.task_type_callable_map = {} + self.task_proto = Metabase + self.task_type_callable_map = { + Metabase.TaskType.LIST_ALERTS: { + 'executor': self.list_alerts, + 'model_types': [SourceModelType.METABASE_SUBSCRIPTION], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'List Metabase Alerts', + 'category': 'Alerts', + 'form_fields': [] + }, + Metabase.TaskType.GET_ALERT: { + 'executor': self.get_alert, + 'model_types': [SourceModelType.METABASE_SUBSCRIPTION], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Get Metabase Alert', + 'category': 'Alerts', + 'form_fields': [ + FormField( + key_name=StringValue(value="alert_id"), + display_name=StringValue(value="Alert ID"), + description=StringValue(value='e.g. 1, 42'), + helper_text=StringValue(value='Enter the Metabase alert ID'), + data_type=LiteralType.LONG, + form_field_type=FormFieldType.TEXT_FT + ), + ] + }, + Metabase.TaskType.CREATE_ALERT: { + 'executor': self.create_alert, + 'model_types': [SourceModelType.METABASE_CARD], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Create Metabase Alert', + 'category': 'Alerts', + 'form_fields': [ + FormField( + key_name=StringValue(value="card_id"), + display_name=StringValue(value="Card ID"), + description=StringValue(value='e.g. 1, 42'), + helper_text=StringValue(value='Enter the card/question ID to alert on'), + data_type=LiteralType.LONG, + form_field_type=FormFieldType.TEXT_FT + ), + FormField( + key_name=StringValue(value="alert_condition"), + display_name=StringValue(value="Alert Condition"), + description=StringValue(value='When to trigger the alert'), + helper_text=StringValue(value='Select alert condition'), + data_type=LiteralType.STRING, + valid_values=[ + Literal(type=LiteralType.STRING, string=StringValue(value="rows")), + Literal(type=LiteralType.STRING, string=StringValue(value="goal")), + ], + form_field_type=FormFieldType.DROPDOWN_FT + ), + FormField( + key_name=StringValue(value="alert_above_goal"), + display_name=StringValue(value="Alert Above Goal"), + description=StringValue(value='For goal alerts: alert when above goal (true) or below (false)'), + helper_text=StringValue(value='true or false'), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + is_optional=True + ), + FormField( + key_name=StringValue(value="alert_first_only"), + display_name=StringValue(value="Alert First Only"), + description=StringValue(value='Only alert on the first trigger (true/false)'), + helper_text=StringValue(value='true or false'), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + is_optional=True + ), + FormField( + key_name=StringValue(value="channels"), + display_name=StringValue(value="Channels (JSON)"), + description=StringValue(value='JSON object with "channels" array, e.g. {"channels": [{"channel_type": "email", "enabled": true, "recipients": [{"email": "user@example.com"}]}]}'), + helper_text=StringValue(value='Enter channels configuration as JSON'), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.MULTILINE_FT + ), + ] + }, + Metabase.TaskType.UPDATE_ALERT: { + 'executor': self.update_alert, + 'model_types': [SourceModelType.METABASE_SUBSCRIPTION], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Update Metabase Alert', + 'category': 'Alerts', + 'form_fields': [ + FormField( + key_name=StringValue(value="alert_id"), + display_name=StringValue(value="Alert ID"), + description=StringValue(value='e.g. 1, 42'), + helper_text=StringValue(value='Enter the Metabase alert ID'), + data_type=LiteralType.LONG, + form_field_type=FormFieldType.TEXT_FT + ), + FormField( + key_name=StringValue(value="updates"), + display_name=StringValue(value="Updates (JSON)"), + description=StringValue(value='JSON object with fields to update, e.g. {"alert_condition": "goal", "alert_above_goal": true}'), + helper_text=StringValue(value='Enter updates as JSON'), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.MULTILINE_FT + ), + ] + }, + Metabase.TaskType.DELETE_ALERT: { + 'executor': self.delete_alert, + 'model_types': [SourceModelType.METABASE_SUBSCRIPTION], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Delete Metabase Alert', + 'category': 'Alerts', + 'form_fields': [ + FormField( + key_name=StringValue(value="alert_id"), + display_name=StringValue(value="Alert ID"), + description=StringValue(value='e.g. 1, 42'), + helper_text=StringValue(value='Enter the Metabase alert ID to delete'), + data_type=LiteralType.LONG, + form_field_type=FormFieldType.TEXT_FT + ), + ] + }, + Metabase.TaskType.LIST_PULSES: { + 'executor': self.list_pulses, + 'model_types': [SourceModelType.METABASE_SUBSCRIPTION], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'List Metabase Pulses', + 'category': 'Pulses', + 'form_fields': [] + }, + Metabase.TaskType.GET_PULSE: { + 'executor': self.get_pulse, + 'model_types': [SourceModelType.METABASE_SUBSCRIPTION], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Get Metabase Pulse', + 'category': 'Pulses', + 'form_fields': [ + FormField( + key_name=StringValue(value="pulse_id"), + display_name=StringValue(value="Pulse ID"), + description=StringValue(value='e.g. 1, 42'), + helper_text=StringValue(value='Enter the Metabase pulse ID'), + data_type=LiteralType.LONG, + form_field_type=FormFieldType.TEXT_FT + ), + ] + }, + Metabase.TaskType.CREATE_PULSE: { + 'executor': self.create_pulse, + 'model_types': [SourceModelType.METABASE_DASHBOARD, SourceModelType.METABASE_CARD], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Create Metabase Pulse', + 'category': 'Pulses', + 'form_fields': [ + FormField( + key_name=StringValue(value="name"), + display_name=StringValue(value="Name"), + description=StringValue(value='e.g. "Weekly Sales Report"'), + helper_text=StringValue(value='Enter pulse name'), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT + ), + FormField( + key_name=StringValue(value="dashboard_id"), + display_name=StringValue(value="Dashboard ID"), + description=StringValue(value='e.g. 1, 42'), + helper_text=StringValue(value='Enter dashboard ID (optional)'), + data_type=LiteralType.LONG, + form_field_type=FormFieldType.TEXT_FT, + is_optional=True + ), + FormField( + key_name=StringValue(value="collection_id"), + display_name=StringValue(value="Collection ID"), + description=StringValue(value='e.g. 1, 42'), + helper_text=StringValue(value='Enter collection ID (optional)'), + data_type=LiteralType.LONG, + form_field_type=FormFieldType.TEXT_FT, + is_optional=True + ), + FormField( + key_name=StringValue(value="cards"), + display_name=StringValue(value="Cards (JSON)"), + description=StringValue(value='JSON object with "cards" array, e.g. {"cards": [{"id": 1, "include_csv": false, "include_xls": false}]}'), + helper_text=StringValue(value='Enter cards configuration as JSON'), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.MULTILINE_FT + ), + FormField( + key_name=StringValue(value="channels"), + display_name=StringValue(value="Channels (JSON)"), + description=StringValue(value='JSON object with "channels" array, e.g. {"channels": [{"channel_type": "email", "enabled": true, "recipients": [{"email": "user@example.com"}], "schedule_type": "daily", "schedule_hour": 8}]}'), + helper_text=StringValue(value='Enter channels configuration as JSON'), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.MULTILINE_FT + ), + FormField( + key_name=StringValue(value="skip_if_empty"), + display_name=StringValue(value="Skip If Empty"), + description=StringValue(value='Skip sending if results are empty (true/false)'), + helper_text=StringValue(value='true or false'), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + is_optional=True + ), + ] + }, + Metabase.TaskType.UPDATE_PULSE: { + 'executor': self.update_pulse, + 'model_types': [SourceModelType.METABASE_SUBSCRIPTION], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Update Metabase Pulse', + 'category': 'Pulses', + 'form_fields': [ + FormField( + key_name=StringValue(value="pulse_id"), + display_name=StringValue(value="Pulse ID"), + description=StringValue(value='e.g. 1, 42'), + helper_text=StringValue(value='Enter the Metabase pulse ID'), + data_type=LiteralType.LONG, + form_field_type=FormFieldType.TEXT_FT + ), + FormField( + key_name=StringValue(value="updates"), + display_name=StringValue(value="Updates (JSON)"), + description=StringValue(value='JSON object with fields to update, e.g. {"name": "New Name", "skip_if_empty": true}'), + helper_text=StringValue(value='Enter updates as JSON'), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.MULTILINE_FT + ), + ] + }, + Metabase.TaskType.DELETE_PULSE: { + 'executor': self.delete_pulse, + 'model_types': [SourceModelType.METABASE_SUBSCRIPTION], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Delete Metabase Pulse', + 'category': 'Pulses', + 'form_fields': [ + FormField( + key_name=StringValue(value="pulse_id"), + display_name=StringValue(value="Pulse ID"), + description=StringValue(value='e.g. 1, 42'), + helper_text=StringValue(value='Enter the Metabase pulse ID to delete'), + data_type=LiteralType.LONG, + form_field_type=FormFieldType.TEXT_FT + ), + ] + }, + } self.connector_form_configs = [ { @@ -56,12 +313,6 @@ def get_connector_processor(self, metabase_connector, **kwargs): return MetabaseApiProcessor(**generated_credentials) def test_connector_processor(self, connector, **kwargs): - """ - Test the Metabase connector by calling the test_connection method. - - Returns: - Tuple[bool, str]: (success_status, message) - """ try: processor = self.get_connector_processor(connector, **kwargs) if processor.test_connection(): @@ -70,3 +321,363 @@ def test_connector_processor(self, connector, **kwargs): except Exception as e: logger.error(f"Error testing Metabase connection: {e}") return False, str(e) + + # Alert executors + + def list_alerts(self, time_range: TimeRange, metabase_task: Metabase, + metabase_connector: ConnectorProto): + try: + if not metabase_connector: + raise ValueError("No Metabase source found") + + processor = self.get_connector_processor(metabase_connector) + result = processor.list_alerts() + + response_struct = dict_to_proto({'alerts': result}, Struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=ApiResponseResult(response_body=response_struct) + ) + except Exception as e: + error_msg = f"Error listing Metabase alerts: {str(e)}" + logger.error(error_msg, exc_info=True) + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value=error_msg)), + source=self.source + ) + + def get_alert(self, time_range: TimeRange, metabase_task: Metabase, + metabase_connector: ConnectorProto): + try: + if not metabase_connector: + raise ValueError("No Metabase source found") + + task = metabase_task.get_alert + alert_id = task.alert_id.value + if not alert_id: + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value="Missing required field: alert_id")), + source=self.source + ) + + processor = self.get_connector_processor(metabase_connector) + result = processor.get_alert(alert_id) + + response_struct = dict_to_proto({'alert': result}, Struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=ApiResponseResult(response_body=response_struct) + ) + except Exception as e: + error_msg = f"Error getting Metabase alert: {str(e)}" + logger.error(error_msg, exc_info=True) + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value=error_msg)), + source=self.source + ) + + def create_alert(self, time_range: TimeRange, metabase_task: Metabase, + metabase_connector: ConnectorProto): + try: + if not metabase_connector: + raise ValueError("No Metabase source found") + + task = metabase_task.create_alert + card_id = task.card_id.value + alert_condition = task.alert_condition.value + + if not card_id or not alert_condition: + missing = [] + if not card_id: missing.append("card_id") + if not alert_condition: missing.append("alert_condition") + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value=f"Missing required fields: {', '.join(missing)}")), + source=self.source + ) + + payload = { + "card": {"id": card_id}, + "alert_condition": alert_condition, + } + + if task.HasField('alert_above_goal'): + payload["alert_above_goal"] = task.alert_above_goal.value + if task.HasField('alert_first_only'): + payload["alert_first_only"] = task.alert_first_only.value + + if task.HasField('channels'): + channels_dict = proto_to_dict(task.channels) + if 'channels' in channels_dict: + payload["channels"] = channels_dict["channels"] + + processor = self.get_connector_processor(metabase_connector) + result = processor.create_alert(payload) + + response_struct = dict_to_proto({'alert': result, 'status': 'Created'}, Struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=ApiResponseResult(response_body=response_struct) + ) + except Exception as e: + error_msg = f"Error creating Metabase alert: {str(e)}" + logger.error(error_msg, exc_info=True) + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value=error_msg)), + source=self.source + ) + + def update_alert(self, time_range: TimeRange, metabase_task: Metabase, + metabase_connector: ConnectorProto): + try: + if not metabase_connector: + raise ValueError("No Metabase source found") + + task = metabase_task.update_alert + alert_id = task.alert_id.value + if not alert_id: + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value="Missing required field: alert_id")), + source=self.source + ) + + updates = proto_to_dict(task.updates) if task.HasField('updates') else {} + + processor = self.get_connector_processor(metabase_connector) + result = processor.update_alert(alert_id, updates) + + response_struct = dict_to_proto({'alert': result, 'status': 'Updated'}, Struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=ApiResponseResult(response_body=response_struct) + ) + except Exception as e: + error_msg = f"Error updating Metabase alert: {str(e)}" + logger.error(error_msg, exc_info=True) + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value=error_msg)), + source=self.source + ) + + def delete_alert(self, time_range: TimeRange, metabase_task: Metabase, + metabase_connector: ConnectorProto): + try: + if not metabase_connector: + raise ValueError("No Metabase source found") + + task = metabase_task.delete_alert + alert_id = task.alert_id.value + if not alert_id: + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value="Missing required field: alert_id")), + source=self.source + ) + + processor = self.get_connector_processor(metabase_connector) + processor.delete_alert(alert_id) + + response_struct = dict_to_proto({'alert_id': alert_id, 'status': 'Deleted'}, Struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=ApiResponseResult(response_body=response_struct) + ) + except Exception as e: + error_msg = f"Error deleting Metabase alert: {str(e)}" + logger.error(error_msg, exc_info=True) + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value=error_msg)), + source=self.source + ) + + # Pulse executors + + def list_pulses(self, time_range: TimeRange, metabase_task: Metabase, + metabase_connector: ConnectorProto): + try: + if not metabase_connector: + raise ValueError("No Metabase source found") + + processor = self.get_connector_processor(metabase_connector) + result = processor.list_pulses() + + response_struct = dict_to_proto({'pulses': result}, Struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=ApiResponseResult(response_body=response_struct) + ) + except Exception as e: + error_msg = f"Error listing Metabase pulses: {str(e)}" + logger.error(error_msg, exc_info=True) + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value=error_msg)), + source=self.source + ) + + def get_pulse(self, time_range: TimeRange, metabase_task: Metabase, + metabase_connector: ConnectorProto): + try: + if not metabase_connector: + raise ValueError("No Metabase source found") + + task = metabase_task.get_pulse + pulse_id = task.pulse_id.value + if not pulse_id: + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value="Missing required field: pulse_id")), + source=self.source + ) + + processor = self.get_connector_processor(metabase_connector) + result = processor.get_pulse(pulse_id) + + response_struct = dict_to_proto({'pulse': result}, Struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=ApiResponseResult(response_body=response_struct) + ) + except Exception as e: + error_msg = f"Error getting Metabase pulse: {str(e)}" + logger.error(error_msg, exc_info=True) + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value=error_msg)), + source=self.source + ) + + def create_pulse(self, time_range: TimeRange, metabase_task: Metabase, + metabase_connector: ConnectorProto): + try: + if not metabase_connector: + raise ValueError("No Metabase source found") + + task = metabase_task.create_pulse + name = task.name.value + + if not name: + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value="Missing required field: name")), + source=self.source + ) + + payload = {"name": name} + + if task.HasField('dashboard_id'): + payload["dashboard_id"] = task.dashboard_id.value + if task.HasField('collection_id'): + payload["collection_id"] = task.collection_id.value + if task.HasField('skip_if_empty'): + payload["skip_if_empty"] = task.skip_if_empty.value + + if task.HasField('cards'): + cards_dict = proto_to_dict(task.cards) + if 'cards' in cards_dict: + payload["cards"] = cards_dict["cards"] + + if task.HasField('channels'): + channels_dict = proto_to_dict(task.channels) + if 'channels' in channels_dict: + payload["channels"] = channels_dict["channels"] + + processor = self.get_connector_processor(metabase_connector) + result = processor.create_pulse(payload) + + response_struct = dict_to_proto({'pulse': result, 'status': 'Created'}, Struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=ApiResponseResult(response_body=response_struct) + ) + except Exception as e: + error_msg = f"Error creating Metabase pulse: {str(e)}" + logger.error(error_msg, exc_info=True) + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value=error_msg)), + source=self.source + ) + + def update_pulse(self, time_range: TimeRange, metabase_task: Metabase, + metabase_connector: ConnectorProto): + try: + if not metabase_connector: + raise ValueError("No Metabase source found") + + task = metabase_task.update_pulse + pulse_id = task.pulse_id.value + if not pulse_id: + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value="Missing required field: pulse_id")), + source=self.source + ) + + updates = proto_to_dict(task.updates) if task.HasField('updates') else {} + + processor = self.get_connector_processor(metabase_connector) + result = processor.update_pulse(pulse_id, updates) + + response_struct = dict_to_proto({'pulse': result, 'status': 'Updated'}, Struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=ApiResponseResult(response_body=response_struct) + ) + except Exception as e: + error_msg = f"Error updating Metabase pulse: {str(e)}" + logger.error(error_msg, exc_info=True) + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value=error_msg)), + source=self.source + ) + + def delete_pulse(self, time_range: TimeRange, metabase_task: Metabase, + metabase_connector: ConnectorProto): + try: + if not metabase_connector: + raise ValueError("No Metabase source found") + + task = metabase_task.delete_pulse + pulse_id = task.pulse_id.value + if not pulse_id: + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value="Missing required field: pulse_id")), + source=self.source + ) + + processor = self.get_connector_processor(metabase_connector) + processor.delete_pulse(pulse_id) + + response_struct = dict_to_proto({'pulse_id': pulse_id, 'status': 'Deleted'}, Struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=ApiResponseResult(response_body=response_struct) + ) + except Exception as e: + error_msg = f"Error deleting Metabase pulse: {str(e)}" + logger.error(error_msg, exc_info=True) + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value=error_msg)), + source=self.source + ) diff --git a/drdroid_debug_toolkit/core/protos/base.proto b/drdroid_debug_toolkit/core/protos/base.proto index 895f2a7..0fbccae 100644 --- a/drdroid_debug_toolkit/core/protos/base.proto +++ b/drdroid_debug_toolkit/core/protos/base.proto @@ -630,6 +630,13 @@ enum SourceModelType { LINEAR_TEAMS = 9201; LINEAR_USERS = 9202; LINEAR_PROJECTS = 9203; + + // Metabase Models + METABASE_DASHBOARD = 9301; + METABASE_CARD = 9302; + METABASE_DATABASE = 9303; + METABASE_COLLECTION = 9304; + METABASE_SUBSCRIPTION = 9305; } message EventKey { diff --git a/drdroid_debug_toolkit/core/protos/base_pb2.py b/drdroid_debug_toolkit/core/protos/base_pb2.py index 4bc2614..0e9cbad 100644 --- a/drdroid_debug_toolkit/core/protos/base_pb2.py +++ b/drdroid_debug_toolkit/core/protos/base_pb2.py @@ -25,7 +25,7 @@ from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x63ore/protos/base.proto\x12\x0b\x63ore.protos\x1a\x1egoogle/protobuf/wrappers.proto\".\n\tTimeRange\x12\x10\n\x08time_geq\x18\x01 \x01(\x04\x12\x0f\n\x07time_lt\x18\x02 \x01(\x04\"a\n\x04Page\x12+\n\x05limit\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12,\n\x06offset\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\"a\n\rOpDescription\x12\x1b\n\x02op\x18\x01 \x01(\x0e\x32\x0f.core.protos.Op\x12\r\n\x05label\x18\x02 \x01(\t\x12\x10\n\x08is_unary\x18\x03 \x01(\x08\x12\x12\n\nis_logical\x18\x04 \x01(\x08\"\xc7\x02\n\x10TaskCronSchedule\x12-\n\x07minutes\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05hours\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x10\x64\x61ys_of_the_week\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x11\x64\x61ys_of_the_month\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x10\x64\x61ys_of_the_year\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08timezone\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"I\n\x0cTaskInterval\x12\x39\n\x13interval_in_seconds\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\"j\n\x0cTaskCronRule\x12*\n\x04rule\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08timezone\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\xef\x01\n\x08\x45ventKey\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0b\n\x03key\x18\x02 \x01(\t\x12/\n\x08key_type\x18\x03 \x01(\x0e\x32\x1d.core.protos.EventKey.KeyType\x12\x31\n\nevent_type\x18\x04 \x01(\x0b\x32\x1d.core.protos.EventTypePartial\"f\n\x07KeyType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06STRING\x10\x01\x12\x08\n\x04LONG\x10\x02\x12\n\n\x06\x44OUBLE\x10\x03\x12\x0b\n\x07\x42OOLEAN\x10\x04\x12\x08\n\x04\x42YTE\x10\x05\x12\t\n\x05\x41RRAY\x10\x06\x12\n\n\x06OBJECT\x10\x07\"\x81\x01\n\tEventType\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0c\n\x04name\x18\x02 \x01(\t\x12#\n\x04keys\x18\x03 \x03(\x0b\x32\x15.core.protos.EventKey\x12\x35\n\revent_sources\x18\x04 \x03(\x0e\x32\x1e.core.protos.Event.EventSource\"\xaa\x01\n\x0e\x45ventTypeStats\x12\x30\n\nkeys_count\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x31\n\x0b\x65vent_count\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x33\n\rmonitor_count\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\",\n\x10\x45ventTypePartial\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0c\n\x04name\x18\x02 \x01(\t\"q\n\x10\x45ventTypeSummary\x12\x31\n\nevent_type\x18\x01 \x01(\x0b\x32\x1d.core.protos.EventTypePartial\x12*\n\x05stats\x18\x02 \x01(\x0b\x32\x1b.core.protos.EventTypeStats\"m\n\x13\x45ventTypeDefinition\x12*\n\nevent_type\x18\x01 \x01(\x0b\x32\x16.core.protos.EventType\x12*\n\x05stats\x18\x02 \x01(\x0b\x32\x1b.core.protos.EventTypeStats\"\xdd\x02\n\x05\x45vent\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x31\n\nevent_type\x18\x02 \x01(\x0b\x32\x1d.core.protos.EventTypePartial\x12\"\n\x03kvs\x18\x03 \x03(\x0b\x32\x15.core.protos.KeyValue\x12\x11\n\ttimestamp\x18\x04 \x01(\x10\x12\x34\n\x0c\x65vent_source\x18\x05 \x01(\x0e\x32\x1e.core.protos.Event.EventSource\"\xa7\x01\n\x0b\x45ventSource\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06SAMPLE\x10\x01\x12\x07\n\x03\x41PI\x10\x02\x12\x07\n\x03SDK\x10\x03\x12\x0b\n\x07SEGMENT\x10\x04\x12\r\n\tAMPLITUDE\x10\x05\x12\x07\n\x03SNS\x10\x06\x12\x0e\n\nCLOUDWATCH\x10\x07\x12\r\n\tCOLLECTOR\x10\x08\x12\x0f\n\x0b\x41WS_KINESIS\x10\t\x12\t\n\x05SLACK\x10\n\x12\r\n\tOPS_GENIE\x10\x0b\"\xe5\x01\n\x05Value\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x14\n\nbool_value\x18\x02 \x01(\x08H\x00\x12\x13\n\tint_value\x18\x03 \x01(\x03H\x00\x12\x16\n\x0c\x64ouble_value\x18\x04 \x01(\x01H\x00\x12.\n\x0b\x61rray_value\x18\x05 \x01(\x0b\x32\x17.core.protos.ArrayValueH\x00\x12\x31\n\x0ckvlist_value\x18\x06 \x01(\x0b\x32\x19.core.protos.KeyValueListH\x00\x12\x15\n\x0b\x62ytes_value\x18\x07 \x01(\x0cH\x00\x42\x07\n\x05value\"0\n\nArrayValue\x12\"\n\x06values\x18\x01 \x03(\x0b\x32\x12.core.protos.Value\"5\n\x0cKeyValueList\x12%\n\x06values\x18\x01 \x03(\x0b\x32\x15.core.protos.KeyValue\":\n\x08KeyValue\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.core.protos.Value*Q\n\x08\x46unction\x12\r\n\tUNKNOWN_F\x10\x00\x12\t\n\x05\x41VG_F\x10\x01\x12\t\n\x05SUM_F\x10\x02\x12\t\n\x05MIN_F\x10\x03\x12\t\n\x05MAX_F\x10\x04\x12\n\n\x06LAST_F\x10\x05*\xb7\x01\n\x08Operator\x12\r\n\tUNKNOWN_O\x10\x00\x12\x12\n\x0eGREATER_THAN_O\x10\x01\x12\x18\n\x14GREATER_THAN_EQUAL_O\x10\x02\x12\x0f\n\x0bLESS_THAN_O\x10\x03\x12\x15\n\x11LESS_THAN_EQUAL_O\x10\x04\x12\x0b\n\x07\x45QUAL_O\x10\x05\x12\x0f\n\x0bNOT_EQUAL_O\x10\x06\x12\n\n\x06LIKE_O\x10\x07\x12\x0c\n\x08\x45XISTS_O\x10\x08\x12\x0e\n\nCONTAINS_O\x10\t*D\n\x0fLogicalOperator\x12\x0e\n\nUNKNOWN_LO\x10\x00\x12\n\n\x06\x41ND_LO\x10\x01\x12\t\n\x05OR_LO\x10\x02\x12\n\n\x06NOT_LO\x10\x03*\x9c\x01\n\x02Op\x12\x0e\n\nUNKNOWN_OP\x10\x00\x12\x06\n\x02\x45Q\x10\x01\x12\x07\n\x03NEQ\x10\x02\x12\x06\n\x02GT\x10\x03\x12\x06\n\x02LT\x10\x04\x12\x07\n\x03GTE\x10\x05\x12\x07\n\x03LTE\x10\x06\x12\x06\n\x02IN\x10\x07\x12\n\n\x06NOT_IN\x10\x08\x12\x0b\n\x07IS_NULL\x10\t\x12\n\n\x06\x45XISTS\x10\n\x12\x0c\n\x08\x43ONTAINS\x10\x0b\x12\x07\n\x03\x41ND\x10\x14\x12\x06\n\x02OR\x10\x15\x12\x07\n\x03NOT\x10\x16*\xb7\t\n\x06Source\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06SENTRY\x10\x01\x12\x0b\n\x07SEGMENT\x10\x02\x12\x12\n\x0e\x45LASTIC_SEARCH\x10\x03\x12\r\n\tAMPLITUDE\x10\x04\x12\x0f\n\x0b\x41WS_KINESIS\x10\x05\x12\x0e\n\nCLOUDWATCH\x10\x06\x12\r\n\tCLEVERTAP\x10\x07\x12\x0f\n\x0bRUDDERSTACK\x10\x08\x12\x0c\n\x08MOENGAGE\x10\t\x12\t\n\x05\x43RIBL\x10\n\x12\t\n\x05KAFKA\x10\x0b\x12\x0b\n\x07\x44\x41TADOG\x10\x0c\x12\x0c\n\x08\x46ILEBEAT\x10\r\x12\x0c\n\x08LOGSTASH\x10\x0e\x12\x0b\n\x07\x46LUENTD\x10\x0f\x12\r\n\tFLUENTBIT\x10\x10\x12\x0e\n\nPAGER_DUTY\x10\x11\x12\r\n\tNEW_RELIC\x10\x12\x12\t\n\x05SLACK\x10\x13\x12\x0f\n\x0bHONEYBADGER\x10\x14\x12\x0f\n\x0bGOOGLE_CHAT\x10\x15\x12\x11\n\rDATADOG_OAUTH\x10\x16\x12\x07\n\x03GCM\x10\x17\x12\x0e\n\nPROMETHEUS\x10\x18\x12\x0f\n\x0b\x45LASTIC_APM\x10\x19\x12\x14\n\x10VICTORIA_METRICS\x10\x1a\x12\x11\n\rSLACK_CONNECT\x10\x1b\x12\x0b\n\x07GRAFANA\x10\x1c\x12\x0e\n\nCLICKHOUSE\x10\x1d\x12\x11\n\rDOCUMENTATION\x10\x1e\x12\x0c\n\x08POSTGRES\x10\x1f\x12\r\n\tOPS_GENIE\x10 \x12\x07\n\x03\x45KS\x10!\x12\x0f\n\x0b\x41GENT_PROXY\x10\"\x12\x0f\n\x0bGRAFANA_VPC\x10#\x12\n\n\x06GITHUB\x10$\x12\x1b\n\x17SQL_DATABASE_CONNECTION\x10%\x12\x0b\n\x07OPEN_AI\x10&\x12\x11\n\rREMOTE_SERVER\x10\'\x12\x07\n\x03\x41PI\x10(\x12\x08\n\x04\x42\x41SH\x10)\x12\t\n\x05\x41ZURE\x10*\x12\x11\n\rGRAFANA_MIMIR\x10+\x12\x07\n\x03GKE\x10,\x12\x0c\n\x08MS_TEAMS\x10-\x12\x10\n\x0cGRAFANA_LOKI\x10.\x12\x0e\n\nKUBERNETES\x10/\x12\x08\n\x04SMTP\x10\x30\x12\r\n\tBIG_QUERY\x10\x31\x12\x0b\n\x07ZENDUTY\x10\x32\x12\n\n\x06ROOTLY\x10\x33\x12\x0e\n\nJIRA_CLOUD\x10\x34\x12\t\n\x05\x41SANA\x10\x35\x12\x14\n\x10\x43ONFLUENCE_CLOUD\x10\x36\x12\x1a\n\x16\x43ONFLUENCE_SELF_HOSTED\x10\x37\x12\x10\n\x0cGOOGLE_DRIVE\x10\x38\x12\n\n\x06NOTION\x10\x39\x12\x13\n\x0f\x44RD_PROXY_AGENT\x10:\x12\x0b\n\x07MONGODB\x10;\x12\x0f\n\x0bOPEN_SEARCH\x10<\x12\n\n\x06LINEAR\x10=\x12\x0b\n\x07JENKINS\x10>\x12\x12\n\x0eGITHUB_ACTIONS\x10?\x12\x15\n\x11\x43USTOM_STRATEGIES\x10@\x12\n\n\x06\x41RGOCD\x10\x41\x12\x15\n\x11\x44RD_ALERT_WEBHOOK\x10\x42\x12\x0b\n\x07ROLLBAR\x10\x43\x12\n\n\x06LAMBDA\x10\x44\x12\x0b\n\x07\x42ROWSER\x10\x45\x12\x0b\n\x07POSTHOG\x10\x46\x12\x0c\n\x08MIXPANEL\x10G\x12\n\n\x06SIGNOZ\x10H\x12\r\n\tBITBUCKET\x10I\x12\r\n\tCORALOGIX\x10J\x12\n\n\x06RENDER\x10K\x12\x0e\n\nMCP_SERVER\x10L\x12\x11\n\rVICTORIA_LOGS\x10M\x12\x0c\n\x08METABASE\x10N*\x81\x1d\n\rSourceKeyType\x12\x0f\n\x0bUNKNOWN_SKT\x10\x00\x12\x12\n\x0eSENTRY_API_KEY\x10\x01\x12\x13\n\x0fSENTRY_ORG_SLUG\x10\x06\x12\x13\n\x0f\x44\x41TADOG_APP_KEY\x10\x02\x12\x13\n\x0f\x44\x41TADOG_API_KEY\x10\x03\x12\x16\n\x12\x44\x41TADOG_AUTH_TOKEN\x10\x0f\x12\x16\n\x12\x44\x41TADOG_API_DOMAIN\x10\x12\x12\x14\n\x10NEWRELIC_API_KEY\x10\x04\x12\x13\n\x0fNEWRELIC_APP_ID\x10\x05\x12\x16\n\x12NEWRELIC_QUERY_KEY\x10\x07\x12\x17\n\x13NEWRELIC_API_DOMAIN\x10\x13\x12\x18\n\x14SLACK_BOT_AUTH_TOKEN\x10\x08\x12\x15\n\x11SLACK_CHANNEL_SKT\x10\t\x12\x10\n\x0cSLACK_APP_ID\x10.\x12\x18\n\x13SLACK_APP_CLIENT_ID\x10\x8d\x01\x12\x1c\n\x17SLACK_APP_CLIENT_SECRET\x10\x8e\x01\x12\x1d\n\x18SLACK_APP_SIGNING_SECRET\x10\x8f\x01\x12\x18\n\x14HONEYBADGER_USERNAME\x10\n\x12\x18\n\x14HONEYBADGER_PASSWORD\x10\x0b\x12\x1a\n\x16HONEYBADGER_PROJECT_ID\x10\x0c\x12\x12\n\x0e\x41WS_ACCESS_KEY\x10\r\x12\x12\n\x0e\x41WS_SECRET_KEY\x10\x0e\x12\x0e\n\nAWS_REGION\x10\x14\x12\x18\n\x14\x41WS_ASSUMED_ROLE_ARN\x10\x17\x12\x10\n\x0c\x45KS_ROLE_ARN\x10(\x12\x1a\n\x16\x41WS_DRD_CLOUD_ROLE_ARN\x10]\x12\x1f\n\x1bGOOGLE_CHAT_BOT_OAUTH_TOKEN\x10\x10\x12\x1a\n\x16GOOGLE_CHAT_BOT_SPACES\x10\x11\x12\x10\n\x0cGRAFANA_HOST\x10\x15\x12\x13\n\x0fGRAFANA_API_KEY\x10\x16\x12\x16\n\x11GRAFANA_TEAM_HOST\x10\x99\x01\x12\x18\n\x14\x43LICKHOUSE_INTERFACE\x10\x18\x12\x13\n\x0f\x43LICKHOUSE_HOST\x10\x19\x12\x13\n\x0f\x43LICKHOUSE_PORT\x10\x1a\x12\x13\n\x0f\x43LICKHOUSE_USER\x10\x1b\x12\x17\n\x13\x43LICKHOUSE_PASSWORD\x10\x1c\x12\x12\n\x0eGCM_PROJECT_ID\x10\x1d\x12\x13\n\x0fGCM_PRIVATE_KEY\x10\x1e\x12\x14\n\x10GCM_CLIENT_EMAIL\x10\x1f\x12\x11\n\rGCM_TOKEN_URI\x10 \x12\x1c\n\x18GCM_SERVICE_ACCOUNT_JSON\x10p\x12\x11\n\rPOSTGRES_HOST\x10!\x12\x11\n\rPOSTGRES_USER\x10\"\x12\x15\n\x11POSTGRES_PASSWORD\x10#\x12\x11\n\rPOSTGRES_PORT\x10$\x12\x15\n\x11POSTGRES_DATABASE\x10%\x12\x14\n\x10POSTGRES_OPTIONS\x10&\x12&\n\"SQL_DATABASE_CONNECTION_STRING_URI\x10\'\x12\x16\n\x12PAGER_DUTY_API_KEY\x10)\x12\x1f\n\x1bPAGER_DUTY_CONFIGURED_EMAIL\x10?\x12\x15\n\x11OPS_GENIE_API_KEY\x10*\x12\x14\n\x10\x41GENT_PROXY_HOST\x10+\x12\x17\n\x13\x41GENT_PROXY_API_KEY\x10,\x12\x10\n\x0cGITHUB_TOKEN\x10-\x12\x0e\n\nGITHUB_ORG\x10i\x12\x13\n\x0fOPEN_AI_API_KEY\x10/\x12\x15\n\x11REMOTE_SERVER_PEM\x10\x31\x12\x16\n\x12REMOTE_SERVER_USER\x10\x32\x12\x16\n\x12REMOTE_SERVER_HOST\x10\x33\x12\x1a\n\x16REMOTE_SERVER_PASSWORD\x10\x34\x12\x16\n\x12REMOTE_SERVER_PORT\x10o\x12\x0e\n\nMIMIR_HOST\x10\x35\x12\x12\n\x0eX_SCOPE_ORG_ID\x10\x36\x12\x0e\n\nSSL_VERIFY\x10\x37\x12\x19\n\x15\x41ZURE_SUBSCRIPTION_ID\x10\x38\x12\x13\n\x0f\x41ZURE_TENANT_ID\x10\x39\x12\x13\n\x0f\x41ZURE_CLIENT_ID\x10:\x12\x17\n\x13\x41ZURE_CLIENT_SECRET\x10;\x12\x12\n\x0eGKE_PROJECT_ID\x10<\x12\x1c\n\x18GKE_SERVICE_ACCOUNT_JSON\x10=\x12\"\n\x1eMS_TEAMS_CONNECTOR_WEBHOOK_URL\x10>\x12\x1b\n\x17\x45LASTIC_SEARCH_PROTOCOL\x10@\x12\x17\n\x13\x45LASTIC_SEARCH_HOST\x10\x41\x12\x17\n\x13\x45LASTIC_SEARCH_PORT\x10\x42\x12\x1d\n\x19\x45LASTIC_SEARCH_API_KEY_ID\x10\x43\x12\x1a\n\x16\x45LASTIC_SEARCH_API_KEY\x10\x44\x12\x19\n\x15GRAFANA_LOKI_PROTOCOL\x10\x45\x12\x15\n\x11GRAFANA_LOKI_HOST\x10\x46\x12\x15\n\x11GRAFANA_LOKI_PORT\x10G\x12\x1b\n\x17KUBERNETES_CLUSTER_NAME\x10H\x12!\n\x1dKUBERNETES_CLUSTER_API_SERVER\x10I\x12\x1c\n\x18KUBERNETES_CLUSTER_TOKEN\x10J\x12\x31\n-KUBERNETES_CLUSTER_CERTIFICATE_AUTHORITY_DATA\x10K\x12\x31\n-KUBERNETES_CLUSTER_CERTIFICATE_AUTHORITY_PATH\x10L\x12\r\n\tSMTP_HOST\x10M\x12\r\n\tSMTP_PORT\x10N\x12\r\n\tSMTP_USER\x10O\x12\x11\n\rSMTP_PASSWORD\x10P\x12\x18\n\x14\x42IG_QUERY_PROJECT_ID\x10Q\x12\"\n\x1e\x42IG_QUERY_SERVICE_ACCOUNT_JSON\x10R\x12\x13\n\x0fZENDUTY_API_KEY\x10S\x12\x12\n\x0eROOTLY_API_KEY\x10T\x12\x16\n\x12JIRA_CLOUD_API_KEY\x10U\x12\x0f\n\x0bJIRA_DOMAIN\x10m\x12\x0e\n\nJIRA_EMAIL\x10n\x12\x16\n\x12\x41SANA_ACCESS_TOKEN\x10V\x12\x1c\n\x18\x43ONFLUENCE_CLOUD_API_KEY\x10W\x12\x1e\n\x19\x43ONFLUENCE_CLOUD_SITE_URL\x10\x8b\x01\x12-\n(CONFLUENCE_CLOUD_ATLASSIAN_ACCOUNT_EMAIL\x10\x8c\x01\x12\x12\n\x0eNOTION_API_KEY\x10X\x12\x18\n\x14\x44RD_PROXY_AGENT_HOST\x10Y\x12\x1d\n\x19\x44RD_PROXY_AGENT_API_TOKEN\x10Z\x12\x1b\n\x17\x44RD_PROXY_AGENT_API_KEY\x10[\x12\x1d\n\x19MONGODB_CONNECTION_STRING\x10\\\x12\x18\n\x14OPEN_SEARCH_PROTOCOL\x10^\x12\x14\n\x10OPEN_SEARCH_HOST\x10_\x12\x14\n\x10OPEN_SEARCH_PORT\x10`\x12\x18\n\x14OPEN_SEARCH_USERNAME\x10\x61\x12\x18\n\x14OPEN_SEARCH_PASSWORD\x10\x62\x12\x12\n\x0eLINEAR_API_KEY\x10\x63\x12\x0f\n\x0bJENKINS_URL\x10\x64\x12\x14\n\x10JENKINS_USERNAME\x10\x65\x12\x15\n\x11JENKINS_API_TOKEN\x10\x66\x12\x11\n\rJENKINS_CRUMB\x10q\x12\x18\n\x14GITHUB_ACTIONS_TOKEN\x10g\x12 \n\x1c\x43USTOM_STRATEGIES_ACCOUNT_ID\x10h\x12\x11\n\rARGOCD_SERVER\x10j\x12\x10\n\x0c\x41RGOCD_TOKEN\x10k\x12\x18\n\x14ROLLBAR_ACCESS_TOKEN\x10l\x12\x13\n\x0fPOSTHOG_API_KEY\x10y\x12\x14\n\x10POSTHOG_APP_HOST\x10z\x12\x16\n\x12POSTHOG_PROJECT_ID\x10{\x12&\n!MIXPANEL_SERVICE_ACCOUNT_USERNAME\x10\x83\x01\x12$\n\x1fMIXPANEL_SERVICE_ACCOUNT_SECRET\x10\x84\x01\x12\x14\n\x0fMIXPANEL_DOMAIN\x10\x85\x01\x12\x18\n\x13MIXPANEL_PROJECT_ID\x10\x86\x01\x12\x1a\n\x15MIXPANEL_WORKSPACE_ID\x10\x87\x01\x12\x13\n\x0eSIGNOZ_API_URL\x10\x88\x01\x12\x15\n\x10SIGNOZ_API_TOKEN\x10\x89\x01\x12\x10\n\x0bKIBANA_HOST\x10\x8a\x01\x12\x18\n\x13\x42ITBUCKET_WORKSPACE\x10\x90\x01\x12\x16\n\x11\x42ITBUCKET_API_KEY\x10\x91\x01\x12\x13\n\x0e\x42ITBUCKET_REPO\x10\x92\x01\x12\x13\n\x0eRENDER_API_KEY\x10\x93\x01\x12\x16\n\x11\x43ORALOGIX_API_KEY\x10\x94\x01\x12\x17\n\x12\x43ORALOGIX_ENDPOINT\x10\x95\x01\x12\x15\n\x10\x43ORALOGIX_DOMAIN\x10\x98\x01\x12\x18\n\x13MCP_SERVER_BASE_URL\x10\x96\x01\x12\x1c\n\x17MCP_SERVER_AUTH_HEADERS\x10\x97\x01\x12\x1f\n\x1aMCP_SERVER_PASS_USER_EMAIL\x10\xa4\x01\x12\x1b\n\x16VICTORIA_LOGS_PROTOCOL\x10\x9a\x01\x12\x17\n\x12VICTORIA_LOGS_HOST\x10\x9b\x01\x12\x17\n\x12VICTORIA_LOGS_PORT\x10\x9c\x01\x12\x1a\n\x15VICTORIA_LOGS_HEADERS\x10\x9d\x01\x12\x12\n\rGITHUB_APP_ID\x10\x9e\x01\x12\x1b\n\x16GITHUB_APP_PRIVATE_KEY\x10\x9f\x01\x12\x1f\n\x1aGITHUB_APP_INSTALLATION_ID\x10\xa0\x01\x12\x1c\n\x17GITHUB_APP_ACCESS_TOKEN\x10\xa1\x01\x12\x11\n\x0cMETABASE_URL\x10\xa2\x01\x12\x15\n\x10METABASE_API_KEY\x10\xa3\x01*\xc5\x1f\n\x0fSourceModelType\x12\x0e\n\nUNKNOWN_MT\x10\x00\x12\x14\n\x10NEW_RELIC_POLICY\x10\x01\x12\x17\n\x13NEW_RELIC_CONDITION\x10\x02\x12\x14\n\x10NEW_RELIC_ENTITY\x10\x03\x12\x1e\n\x1aNEW_RELIC_ENTITY_DASHBOARD\x10\x04\x12 \n\x1cNEW_RELIC_ENTITY_APPLICATION\x10\x05\x12\x12\n\x0eNEW_RELIC_NRQL\x10\x06\x12!\n\x1dNEW_RELIC_ENTITY_DASHBOARD_V2\x10\x07\x12\x13\n\x0f\x44\x41TADOG_MONITOR\x10\x65\x12\x15\n\x11\x44\x41TADOG_DASHBOARD\x10\x66\x12 \n\x1c\x44\x41TADOG_LIVE_INTEGRATION_AWS\x10g\x12$\n DATADOG_LIVE_INTEGRATION_AWS_LOG\x10h\x12\"\n\x1e\x44\x41TADOG_LIVE_INTEGRATION_AZURE\x10i\x12\'\n#DATADOG_LIVE_INTEGRATION_CLOUDFLARE\x10j\x12#\n\x1f\x44\x41TADOG_LIVE_INTEGRATION_FASTLY\x10k\x12 \n\x1c\x44\x41TADOG_LIVE_INTEGRATION_GCP\x10l\x12&\n\"DATADOG_LIVE_INTEGRATION_CONFLUENT\x10m\x12\x13\n\x0f\x44\x41TADOG_SERVICE\x10n\x12\x12\n\x0e\x44\x41TADOG_METRIC\x10o\x12\x11\n\rDATADOG_QUERY\x10p\x12\x0f\n\x0b\x44\x41TADOG_APM\x10q\x12\x12\n\x0e\x44\x41TADOG_FIELDS\x10r\x12\x16\n\x11\x43LOUDWATCH_METRIC\x10\xc9\x01\x12\x19\n\x14\x43LOUDWATCH_LOG_GROUP\x10\xca\x01\x12\x1f\n\x1a\x43LOUDWATCH_LOG_GROUP_QUERY\x10\xcb\x01\x12\x16\n\x11\x43LOUDWATCH_ALARMS\x10\xcc\x01\x12\x12\n\rRDS_INSTANCES\x10\xcd\x01\x12\x19\n\x14\x43LOUDWATCH_DASHBOARD\x10\xce\x01\x12\x17\n\x12GRAFANA_DATASOURCE\x10\xad\x02\x12\x16\n\x11GRAFANA_DASHBOARD\x10\xae\x02\x12!\n\x1cGRAFANA_TARGET_METRIC_PROMQL\x10\xaf\x02\x12\"\n\x1dGRAFANA_PROMETHEUS_DATASOURCE\x10\xb0\x02\x12\x17\n\x12GRAFANA_ALERT_RULE\x10\xb1\x02\x12\x1c\n\x17GRAFANA_LOKI_DATASOURCE\x10\xb2\x02\x12\x18\n\x13\x43LICKHOUSE_DATABASE\x10\x91\x03\x12\x15\n\x10\x43LICKHOUSE_TABLE\x10\x92\x03\x12\x12\n\rSLACK_CHANNEL\x10\xf5\x03\x12\r\n\x08MARKDOWN\x10\xd9\x04\x12\x0b\n\x06IFRAME\x10\xda\x04\x12\x13\n\x0ePOSTGRES_QUERY\x10\xbd\x05\x12\x13\n\x0ePOSTGRES_TABLE\x10\xbe\x05\x12\x10\n\x0b\x45KS_CLUSTER\x10\xa1\x06\x12\x12\n\rEKS_NAMESPACE\x10\xa2\x06\x12\x10\n\x0b\x45KS_SERVICE\x10\xa3\x06\x12\x13\n\x0e\x45KS_DEPLOYMENT\x10\xa4\x06\x12\x10\n\x0b\x45KS_INGRESS\x10\xa5\x06\x12\x17\n\x12\x45KS_NETWORK_POLICY\x10\xa6\x06\x12\x0c\n\x07\x45KS_HPA\x10\xa7\x06\x12\x13\n\x0e\x45KS_REPLICASET\x10\xa8\x06\x12\x14\n\x0f\x45KS_STATEFULSET\x10\xa9\x06\x12&\n!SQL_DATABASE_CONNECTION_RAW_QUERY\x10\x85\x07\x12\x17\n\x12SQL_DATABASE_TABLE\x10\x86\x07\x12\x14\n\x0f\x41ZURE_WORKSPACE\x10\xe9\x07\x12\x13\n\x0e\x41ZURE_RESOURCE\x10\xea\x07\x12\x16\n\x11\x41ZURE_AKS_CLUSTER\x10\xeb\x07\x12\x18\n\x13\x41ZURE_AKS_NAMESPACE\x10\xec\x07\x12\x19\n\x14\x41ZURE_AKS_DEPLOYMENT\x10\xed\x07\x12\x16\n\x11\x41ZURE_AKS_SERVICE\x10\xee\x07\x12\x16\n\x11\x41ZURE_AKS_INGRESS\x10\xef\x07\x12\x1d\n\x18\x41ZURE_AKS_NETWORK_POLICY\x10\xf0\x07\x12\x12\n\rAZURE_AKS_HPA\x10\xf1\x07\x12\x19\n\x14\x41ZURE_AKS_REPLICASET\x10\xf2\x07\x12\x1a\n\x15\x41ZURE_AKS_STATEFULSET\x10\xf3\x07\x12\x1a\n\x15\x41ZURE_VIRTUAL_MACHINE\x10\xf4\x07\x12\x0f\n\nAZURE_VMSS\x10\xf5\x07\x12\x1a\n\x15\x41ZURE_STORAGE_ACCOUNT\x10\xf6\x07\x12\x19\n\x14\x41ZURE_BLOB_CONTAINER\x10\xf7\x07\x12\x15\n\x10\x41ZURE_SQL_SERVER\x10\xf8\x07\x12\x17\n\x12\x41ZURE_SQL_DATABASE\x10\xf9\x07\x12\x19\n\x14\x41ZURE_COSMOS_ACCOUNT\x10\xfa\x07\x12\x1a\n\x15\x41ZURE_POSTGRES_SERVER\x10\xfb\x07\x12\x1c\n\x17\x41ZURE_POSTGRES_DATABASE\x10\xfc\x07\x12\x17\n\x12\x41ZURE_METRIC_ALERT\x10\xfd\x07\x12\x17\n\x12\x41ZURE_ACTION_GROUP\x10\xfe\x07\x12\x19\n\x14\x41ZURE_RESOURCE_GROUP\x10\xff\x07\x12\x16\n\x11\x41ZURE_REDIS_CACHE\x10\x80\x08\x12\x0f\n\nSSH_SERVER\x10\xcc\x08\x12\r\n\x08SSH_USER\x10\xcd\x08\x12\x19\n\x14GRAFANA_MIMIR_PROMQL\x10\xb1\t\x12\x10\n\x0bGKE_CLUSTER\x10\x95\n\x12\x12\n\rGKE_NAMESPACE\x10\x96\n\x12\x10\n\x0bGKE_SERVICE\x10\x97\n\x12\x13\n\x0eGKE_DEPLOYMENT\x10\x98\n\x12\x10\n\x0bGKE_INGRESS\x10\x99\n\x12\x17\n\x12GKE_NETWORK_POLICY\x10\x9a\n\x12\x0c\n\x07GKE_HPA\x10\x9b\n\x12\x13\n\x0eGKE_REPLICASET\x10\x9c\n\x12\x14\n\x0fGKE_STATEFULSET\x10\x9d\n\x12\x19\n\x14GCP_COMPUTE_INSTANCE\x10\x9e\n\x12\x17\n\x12GCP_INSTANCE_GROUP\x10\x9f\n\x12\x17\n\x12GCP_STORAGE_BUCKET\x10\xa0\n\x12\x1b\n\x16GCP_CLOUD_SQL_INSTANCE\x10\xa1\n\x12\x1b\n\x16GCP_CLOUD_SQL_DATABASE\x10\xa2\n\x12\x1a\n\x15GCP_MEMORYSTORE_REDIS\x10\xa3\n\x12\x15\n\x10GCP_ALERT_POLICY\x10\xa4\n\x12\x1d\n\x18GCP_NOTIFICATION_CHANNEL\x10\xa5\n\x12\x17\n\x12GCP_CLOUD_FUNCTION\x10\xa6\n\x12\x1a\n\x15GCP_CLOUD_RUN_SERVICE\x10\xa7\n\x12\x15\n\x10GCP_PUBSUB_TOPIC\x10\xa8\n\x12\x1c\n\x17GCP_PUBSUB_SUBSCRIPTION\x10\xa9\n\x12\x19\n\x14GCP_BIGQUERY_DATASET\x10\xaa\n\x12\x17\n\x12GCP_BIGQUERY_TABLE\x10\xab\n\x12\x14\n\x0fGCP_VPC_NETWORK\x10\xac\n\x12\x13\n\x0eGCP_SUBNETWORK\x10\xad\n\x12\x16\n\x11GCP_FIREWALL_RULE\x10\xae\n\x12\x16\n\x11GCP_LOAD_BALANCER\x10\xaf\n\x12\x0f\n\nGCP_SECRET\x10\xb0\n\x12\x18\n\x13GCP_SERVICE_ACCOUNT\x10\xb1\n\x12\x11\n\x0cGCP_LOG_SINK\x10\xb2\n\x12\x13\n\x0eGCP_LOG_METRIC\x10\xb3\n\x12\x15\n\x10MS_TEAMS_CHANNEL\x10\xf9\n\x12\x17\n\x12PAGERDUTY_INCIDENT\x10\xdd\x0b\x12\x19\n\x14\x45LASTIC_SEARCH_INDEX\x10\xc1\x0c\x12\x1c\n\x17\x45LASTIC_SEARCH_SERVICES\x10\xc2\x0c\x12\x1e\n\x19\x45LASTIC_SEARCH_DASHBOARDS\x10\xc3\x0c\x12\"\n\x1d\x45LASTIC_SEARCH_INDEX_PATTERNS\x10\xc4\x0c\x12\x0f\n\nGCM_METRIC\x10\xa5\r\x12\x12\n\rGCM_DASHBOARD\x10\xa6\r\x12$\n\x1fGCM_CLOUD_RUN_SERVICE_DASHBOARD\x10\xa7\r\x12\x15\n\x10ZENDUTY_INCIDENT\x10\x89\x0e\x12\x14\n\x0fROOTLY_INCIDENT\x10\xed\x0e\x12\x19\n\x14OPS_GENIE_ESCALATION\x10\xd1\x0f\x12\x13\n\x0eOPS_GENIE_TEAM\x10\xd2\x0f\x12\x16\n\x11GOOGLE_CHAT_SPACE\x10\xb5\x10\x12\x15\n\x10MONGODB_DATABASE\x10\x99\x11\x12\x17\n\x12MONGODB_COLLECTION\x10\x9a\x11\x12\x16\n\x11OPEN_SEARCH_INDEX\x10\xfd\x11\x12\x12\n\rASANA_PROJECT\x10\xe1\x12\x12\x12\n\rMODELS_ACTIVE\x10\xc5\x13\x12\x16\n\x11GITHUB_REPOSITORY\x10\xa9\x14\x12\x12\n\rGITHUB_MEMBER\x10\xaa\x14\x12\x11\n\x0cJIRA_PROJECT\x10\x8d\x15\x12\x0e\n\tJIRA_USER\x10\x8e\x15\x12\x10\n\x0b\x41RGOCD_APPS\x10\xf1\x15\x12\x11\n\x0cJENKINS_JOBS\x10\xd5\x16\x12\x13\n\x0ePOSTHOG_PERSON\x10\xb9\x17\x12\x12\n\rPOSTHOG_GROUP\x10\xba\x17\x12\x13\n\x0ePOSTHOG_COHORT\x10\xbb\x17\x12\x15\n\x10POSTHOG_PROPERTY\x10\xbc\x17\x12\x16\n\x11POSTHOG_DASHBOARD\x10\xbd\x17\x12\x14\n\x0fPOSTHOG_PROJECT\x10\xbe\x17\x12\x10\n\x0b\x45\x43S_CLUSTER\x10\xa1\x1f\x12\r\n\x08\x45\x43S_TASK\x10\xa2\x1f\x12\x10\n\x0b\x45\x43S_SERVICE\x10\xa3\x1f\x12\x15\n\x10SIGNOZ_DASHBOARD\x10\x89\'\x12\x11\n\x0cSIGNOZ_ALERT\x10\x8a\'\x12\x12\n\rSIGNOZ_METRIC\x10\x8b\'\x12\x13\n\x0eSIGNOZ_SERVICE\x10\x8c\'\x12\x1a\n\x15SIGNOZ_LOG_ATTRIBUTES\x10\x8d\'\x12\x19\n\x14KUBERNETES_NAMESPACE\x10\xf1.\x12\x17\n\x12KUBERNETES_SERVICE\x10\xf2.\x12\x1a\n\x15KUBERNETES_DEPLOYMENT\x10\xf3.\x12\x17\n\x12KUBERNETES_INGRESS\x10\xf4.\x12\x1e\n\x19KUBERNETES_NETWORK_POLICY\x10\xf5.\x12\x13\n\x0eKUBERNETES_HPA\x10\xf6.\x12\x1a\n\x15KUBERNETES_REPLICASET\x10\xf7.\x12\x1b\n\x16KUBERNETES_STATEFULSET\x10\xf8.\x12\x1b\n\x16KUBERNETES_NETWORK_MAP\x10\xf9.\x12\x13\n\x0eSENTRY_PROJECT\x10\xd9\x36\x12\x18\n\x13\x43ORALOGIX_DASHBOARD\x10\xc1>\x12\x1c\n\x17\x43ORALOGIX_INDEX_MAPPING\x10\xc2>\x12\x18\n\x13VICTORIA_LOGS_FIELD\x10\xa9\x46\x12\x0e\n\tMCP_TOOLS\x10\x8dG\x12\x11\n\x0cLINEAR_TEAMS\x10\xf1G\x12\x11\n\x0cLINEAR_USERS\x10\xf2G\x12\x14\n\x0fLINEAR_PROJECTS\x10\xf3G*\xac\x02\n\x07\x43ontext\x12\r\n\tUNKNOWN_C\x10\x00\x12\t\n\x05\x45VENT\x10\x01\x12\x17\n\x13MONITOR_TRANSACTION\x10\x02\x12\x13\n\x0f\x45NTITY_INSTANCE\x10\x03\x12\x0e\n\nEVENT_TYPE\x10\x04\x12\x0b\n\x07MONITOR\x10\x05\x12\n\n\x06\x45NTITY\x10\x06\x12\x15\n\x11\x45VENTS_CLICKHOUSE\x10\x07\x12\x0e\n\nPANEL_NAME\x10\x08\x12\x12\n\x0e\x44\x41SHBOARD_NAME\x10\t\x12\x1f\n\x1b\x45VENTS_ALERT_OPS_CLICKHOUSE\x10\n\x12\x0f\n\x0bSLACK_ALERT\x10\x0b\x12\x1e\n\x1a\x45VENTS_PRODIGAL_CLICKHOUSE\x10\x0c\x12\r\n\tALERT_OPS\x10\r\x12\x14\n\x10\x41LERT_MIDDLEWARE\x10\x0e*\x92\x02\n\x12RecentArtifactType\x12\x0e\n\nRA_UNKNOWN\x10\x00\x12\x12\n\x0eRA_GITHUB_REPO\x10\x01\x12\x14\n\x10RA_GITHUB_COMMIT\x10\x02\x12\x10\n\x0cRA_GITHUB_PR\x10\x03\x12\x15\n\x11RA_GITHUB_RELEASE\x10\x04\x12\x12\n\x0eRA_GITLAB_REPO\x10\x65\x12\x14\n\x10RA_GITLAB_COMMIT\x10\x66\x12\x10\n\x0cRA_GITLAB_MR\x10g\x12\x15\n\x11RA_GITLAB_RELEASE\x10h\x12\x16\n\x11RA_BITBUCKET_REPO\x10\xc9\x01\x12\x18\n\x13RA_BITBUCKET_COMMIT\x10\xca\x01\x12\x14\n\x0fRA_BITBUCKET_PR\x10\xcb\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x63ore/protos/base.proto\x12\x0b\x63ore.protos\x1a\x1egoogle/protobuf/wrappers.proto\".\n\tTimeRange\x12\x10\n\x08time_geq\x18\x01 \x01(\x04\x12\x0f\n\x07time_lt\x18\x02 \x01(\x04\"a\n\x04Page\x12+\n\x05limit\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12,\n\x06offset\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\"a\n\rOpDescription\x12\x1b\n\x02op\x18\x01 \x01(\x0e\x32\x0f.core.protos.Op\x12\r\n\x05label\x18\x02 \x01(\t\x12\x10\n\x08is_unary\x18\x03 \x01(\x08\x12\x12\n\nis_logical\x18\x04 \x01(\x08\"\xc7\x02\n\x10TaskCronSchedule\x12-\n\x07minutes\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05hours\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x10\x64\x61ys_of_the_week\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x11\x64\x61ys_of_the_month\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x10\x64\x61ys_of_the_year\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08timezone\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"I\n\x0cTaskInterval\x12\x39\n\x13interval_in_seconds\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\"j\n\x0cTaskCronRule\x12*\n\x04rule\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08timezone\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\xef\x01\n\x08\x45ventKey\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0b\n\x03key\x18\x02 \x01(\t\x12/\n\x08key_type\x18\x03 \x01(\x0e\x32\x1d.core.protos.EventKey.KeyType\x12\x31\n\nevent_type\x18\x04 \x01(\x0b\x32\x1d.core.protos.EventTypePartial\"f\n\x07KeyType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06STRING\x10\x01\x12\x08\n\x04LONG\x10\x02\x12\n\n\x06\x44OUBLE\x10\x03\x12\x0b\n\x07\x42OOLEAN\x10\x04\x12\x08\n\x04\x42YTE\x10\x05\x12\t\n\x05\x41RRAY\x10\x06\x12\n\n\x06OBJECT\x10\x07\"\x81\x01\n\tEventType\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0c\n\x04name\x18\x02 \x01(\t\x12#\n\x04keys\x18\x03 \x03(\x0b\x32\x15.core.protos.EventKey\x12\x35\n\revent_sources\x18\x04 \x03(\x0e\x32\x1e.core.protos.Event.EventSource\"\xaa\x01\n\x0e\x45ventTypeStats\x12\x30\n\nkeys_count\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x31\n\x0b\x65vent_count\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x33\n\rmonitor_count\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\",\n\x10\x45ventTypePartial\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0c\n\x04name\x18\x02 \x01(\t\"q\n\x10\x45ventTypeSummary\x12\x31\n\nevent_type\x18\x01 \x01(\x0b\x32\x1d.core.protos.EventTypePartial\x12*\n\x05stats\x18\x02 \x01(\x0b\x32\x1b.core.protos.EventTypeStats\"m\n\x13\x45ventTypeDefinition\x12*\n\nevent_type\x18\x01 \x01(\x0b\x32\x16.core.protos.EventType\x12*\n\x05stats\x18\x02 \x01(\x0b\x32\x1b.core.protos.EventTypeStats\"\xdd\x02\n\x05\x45vent\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x31\n\nevent_type\x18\x02 \x01(\x0b\x32\x1d.core.protos.EventTypePartial\x12\"\n\x03kvs\x18\x03 \x03(\x0b\x32\x15.core.protos.KeyValue\x12\x11\n\ttimestamp\x18\x04 \x01(\x10\x12\x34\n\x0c\x65vent_source\x18\x05 \x01(\x0e\x32\x1e.core.protos.Event.EventSource\"\xa7\x01\n\x0b\x45ventSource\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06SAMPLE\x10\x01\x12\x07\n\x03\x41PI\x10\x02\x12\x07\n\x03SDK\x10\x03\x12\x0b\n\x07SEGMENT\x10\x04\x12\r\n\tAMPLITUDE\x10\x05\x12\x07\n\x03SNS\x10\x06\x12\x0e\n\nCLOUDWATCH\x10\x07\x12\r\n\tCOLLECTOR\x10\x08\x12\x0f\n\x0b\x41WS_KINESIS\x10\t\x12\t\n\x05SLACK\x10\n\x12\r\n\tOPS_GENIE\x10\x0b\"\xe5\x01\n\x05Value\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x14\n\nbool_value\x18\x02 \x01(\x08H\x00\x12\x13\n\tint_value\x18\x03 \x01(\x03H\x00\x12\x16\n\x0c\x64ouble_value\x18\x04 \x01(\x01H\x00\x12.\n\x0b\x61rray_value\x18\x05 \x01(\x0b\x32\x17.core.protos.ArrayValueH\x00\x12\x31\n\x0ckvlist_value\x18\x06 \x01(\x0b\x32\x19.core.protos.KeyValueListH\x00\x12\x15\n\x0b\x62ytes_value\x18\x07 \x01(\x0cH\x00\x42\x07\n\x05value\"0\n\nArrayValue\x12\"\n\x06values\x18\x01 \x03(\x0b\x32\x12.core.protos.Value\"5\n\x0cKeyValueList\x12%\n\x06values\x18\x01 \x03(\x0b\x32\x15.core.protos.KeyValue\":\n\x08KeyValue\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.core.protos.Value*Q\n\x08\x46unction\x12\r\n\tUNKNOWN_F\x10\x00\x12\t\n\x05\x41VG_F\x10\x01\x12\t\n\x05SUM_F\x10\x02\x12\t\n\x05MIN_F\x10\x03\x12\t\n\x05MAX_F\x10\x04\x12\n\n\x06LAST_F\x10\x05*\xb7\x01\n\x08Operator\x12\r\n\tUNKNOWN_O\x10\x00\x12\x12\n\x0eGREATER_THAN_O\x10\x01\x12\x18\n\x14GREATER_THAN_EQUAL_O\x10\x02\x12\x0f\n\x0bLESS_THAN_O\x10\x03\x12\x15\n\x11LESS_THAN_EQUAL_O\x10\x04\x12\x0b\n\x07\x45QUAL_O\x10\x05\x12\x0f\n\x0bNOT_EQUAL_O\x10\x06\x12\n\n\x06LIKE_O\x10\x07\x12\x0c\n\x08\x45XISTS_O\x10\x08\x12\x0e\n\nCONTAINS_O\x10\t*D\n\x0fLogicalOperator\x12\x0e\n\nUNKNOWN_LO\x10\x00\x12\n\n\x06\x41ND_LO\x10\x01\x12\t\n\x05OR_LO\x10\x02\x12\n\n\x06NOT_LO\x10\x03*\x9c\x01\n\x02Op\x12\x0e\n\nUNKNOWN_OP\x10\x00\x12\x06\n\x02\x45Q\x10\x01\x12\x07\n\x03NEQ\x10\x02\x12\x06\n\x02GT\x10\x03\x12\x06\n\x02LT\x10\x04\x12\x07\n\x03GTE\x10\x05\x12\x07\n\x03LTE\x10\x06\x12\x06\n\x02IN\x10\x07\x12\n\n\x06NOT_IN\x10\x08\x12\x0b\n\x07IS_NULL\x10\t\x12\n\n\x06\x45XISTS\x10\n\x12\x0c\n\x08\x43ONTAINS\x10\x0b\x12\x07\n\x03\x41ND\x10\x14\x12\x06\n\x02OR\x10\x15\x12\x07\n\x03NOT\x10\x16*\xb7\t\n\x06Source\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06SENTRY\x10\x01\x12\x0b\n\x07SEGMENT\x10\x02\x12\x12\n\x0e\x45LASTIC_SEARCH\x10\x03\x12\r\n\tAMPLITUDE\x10\x04\x12\x0f\n\x0b\x41WS_KINESIS\x10\x05\x12\x0e\n\nCLOUDWATCH\x10\x06\x12\r\n\tCLEVERTAP\x10\x07\x12\x0f\n\x0bRUDDERSTACK\x10\x08\x12\x0c\n\x08MOENGAGE\x10\t\x12\t\n\x05\x43RIBL\x10\n\x12\t\n\x05KAFKA\x10\x0b\x12\x0b\n\x07\x44\x41TADOG\x10\x0c\x12\x0c\n\x08\x46ILEBEAT\x10\r\x12\x0c\n\x08LOGSTASH\x10\x0e\x12\x0b\n\x07\x46LUENTD\x10\x0f\x12\r\n\tFLUENTBIT\x10\x10\x12\x0e\n\nPAGER_DUTY\x10\x11\x12\r\n\tNEW_RELIC\x10\x12\x12\t\n\x05SLACK\x10\x13\x12\x0f\n\x0bHONEYBADGER\x10\x14\x12\x0f\n\x0bGOOGLE_CHAT\x10\x15\x12\x11\n\rDATADOG_OAUTH\x10\x16\x12\x07\n\x03GCM\x10\x17\x12\x0e\n\nPROMETHEUS\x10\x18\x12\x0f\n\x0b\x45LASTIC_APM\x10\x19\x12\x14\n\x10VICTORIA_METRICS\x10\x1a\x12\x11\n\rSLACK_CONNECT\x10\x1b\x12\x0b\n\x07GRAFANA\x10\x1c\x12\x0e\n\nCLICKHOUSE\x10\x1d\x12\x11\n\rDOCUMENTATION\x10\x1e\x12\x0c\n\x08POSTGRES\x10\x1f\x12\r\n\tOPS_GENIE\x10 \x12\x07\n\x03\x45KS\x10!\x12\x0f\n\x0b\x41GENT_PROXY\x10\"\x12\x0f\n\x0bGRAFANA_VPC\x10#\x12\n\n\x06GITHUB\x10$\x12\x1b\n\x17SQL_DATABASE_CONNECTION\x10%\x12\x0b\n\x07OPEN_AI\x10&\x12\x11\n\rREMOTE_SERVER\x10\'\x12\x07\n\x03\x41PI\x10(\x12\x08\n\x04\x42\x41SH\x10)\x12\t\n\x05\x41ZURE\x10*\x12\x11\n\rGRAFANA_MIMIR\x10+\x12\x07\n\x03GKE\x10,\x12\x0c\n\x08MS_TEAMS\x10-\x12\x10\n\x0cGRAFANA_LOKI\x10.\x12\x0e\n\nKUBERNETES\x10/\x12\x08\n\x04SMTP\x10\x30\x12\r\n\tBIG_QUERY\x10\x31\x12\x0b\n\x07ZENDUTY\x10\x32\x12\n\n\x06ROOTLY\x10\x33\x12\x0e\n\nJIRA_CLOUD\x10\x34\x12\t\n\x05\x41SANA\x10\x35\x12\x14\n\x10\x43ONFLUENCE_CLOUD\x10\x36\x12\x1a\n\x16\x43ONFLUENCE_SELF_HOSTED\x10\x37\x12\x10\n\x0cGOOGLE_DRIVE\x10\x38\x12\n\n\x06NOTION\x10\x39\x12\x13\n\x0f\x44RD_PROXY_AGENT\x10:\x12\x0b\n\x07MONGODB\x10;\x12\x0f\n\x0bOPEN_SEARCH\x10<\x12\n\n\x06LINEAR\x10=\x12\x0b\n\x07JENKINS\x10>\x12\x12\n\x0eGITHUB_ACTIONS\x10?\x12\x15\n\x11\x43USTOM_STRATEGIES\x10@\x12\n\n\x06\x41RGOCD\x10\x41\x12\x15\n\x11\x44RD_ALERT_WEBHOOK\x10\x42\x12\x0b\n\x07ROLLBAR\x10\x43\x12\n\n\x06LAMBDA\x10\x44\x12\x0b\n\x07\x42ROWSER\x10\x45\x12\x0b\n\x07POSTHOG\x10\x46\x12\x0c\n\x08MIXPANEL\x10G\x12\n\n\x06SIGNOZ\x10H\x12\r\n\tBITBUCKET\x10I\x12\r\n\tCORALOGIX\x10J\x12\n\n\x06RENDER\x10K\x12\x0e\n\nMCP_SERVER\x10L\x12\x11\n\rVICTORIA_LOGS\x10M\x12\x0c\n\x08METABASE\x10N*\x81\x1d\n\rSourceKeyType\x12\x0f\n\x0bUNKNOWN_SKT\x10\x00\x12\x12\n\x0eSENTRY_API_KEY\x10\x01\x12\x13\n\x0fSENTRY_ORG_SLUG\x10\x06\x12\x13\n\x0f\x44\x41TADOG_APP_KEY\x10\x02\x12\x13\n\x0f\x44\x41TADOG_API_KEY\x10\x03\x12\x16\n\x12\x44\x41TADOG_AUTH_TOKEN\x10\x0f\x12\x16\n\x12\x44\x41TADOG_API_DOMAIN\x10\x12\x12\x14\n\x10NEWRELIC_API_KEY\x10\x04\x12\x13\n\x0fNEWRELIC_APP_ID\x10\x05\x12\x16\n\x12NEWRELIC_QUERY_KEY\x10\x07\x12\x17\n\x13NEWRELIC_API_DOMAIN\x10\x13\x12\x18\n\x14SLACK_BOT_AUTH_TOKEN\x10\x08\x12\x15\n\x11SLACK_CHANNEL_SKT\x10\t\x12\x10\n\x0cSLACK_APP_ID\x10.\x12\x18\n\x13SLACK_APP_CLIENT_ID\x10\x8d\x01\x12\x1c\n\x17SLACK_APP_CLIENT_SECRET\x10\x8e\x01\x12\x1d\n\x18SLACK_APP_SIGNING_SECRET\x10\x8f\x01\x12\x18\n\x14HONEYBADGER_USERNAME\x10\n\x12\x18\n\x14HONEYBADGER_PASSWORD\x10\x0b\x12\x1a\n\x16HONEYBADGER_PROJECT_ID\x10\x0c\x12\x12\n\x0e\x41WS_ACCESS_KEY\x10\r\x12\x12\n\x0e\x41WS_SECRET_KEY\x10\x0e\x12\x0e\n\nAWS_REGION\x10\x14\x12\x18\n\x14\x41WS_ASSUMED_ROLE_ARN\x10\x17\x12\x10\n\x0c\x45KS_ROLE_ARN\x10(\x12\x1a\n\x16\x41WS_DRD_CLOUD_ROLE_ARN\x10]\x12\x1f\n\x1bGOOGLE_CHAT_BOT_OAUTH_TOKEN\x10\x10\x12\x1a\n\x16GOOGLE_CHAT_BOT_SPACES\x10\x11\x12\x10\n\x0cGRAFANA_HOST\x10\x15\x12\x13\n\x0fGRAFANA_API_KEY\x10\x16\x12\x16\n\x11GRAFANA_TEAM_HOST\x10\x99\x01\x12\x18\n\x14\x43LICKHOUSE_INTERFACE\x10\x18\x12\x13\n\x0f\x43LICKHOUSE_HOST\x10\x19\x12\x13\n\x0f\x43LICKHOUSE_PORT\x10\x1a\x12\x13\n\x0f\x43LICKHOUSE_USER\x10\x1b\x12\x17\n\x13\x43LICKHOUSE_PASSWORD\x10\x1c\x12\x12\n\x0eGCM_PROJECT_ID\x10\x1d\x12\x13\n\x0fGCM_PRIVATE_KEY\x10\x1e\x12\x14\n\x10GCM_CLIENT_EMAIL\x10\x1f\x12\x11\n\rGCM_TOKEN_URI\x10 \x12\x1c\n\x18GCM_SERVICE_ACCOUNT_JSON\x10p\x12\x11\n\rPOSTGRES_HOST\x10!\x12\x11\n\rPOSTGRES_USER\x10\"\x12\x15\n\x11POSTGRES_PASSWORD\x10#\x12\x11\n\rPOSTGRES_PORT\x10$\x12\x15\n\x11POSTGRES_DATABASE\x10%\x12\x14\n\x10POSTGRES_OPTIONS\x10&\x12&\n\"SQL_DATABASE_CONNECTION_STRING_URI\x10\'\x12\x16\n\x12PAGER_DUTY_API_KEY\x10)\x12\x1f\n\x1bPAGER_DUTY_CONFIGURED_EMAIL\x10?\x12\x15\n\x11OPS_GENIE_API_KEY\x10*\x12\x14\n\x10\x41GENT_PROXY_HOST\x10+\x12\x17\n\x13\x41GENT_PROXY_API_KEY\x10,\x12\x10\n\x0cGITHUB_TOKEN\x10-\x12\x0e\n\nGITHUB_ORG\x10i\x12\x13\n\x0fOPEN_AI_API_KEY\x10/\x12\x15\n\x11REMOTE_SERVER_PEM\x10\x31\x12\x16\n\x12REMOTE_SERVER_USER\x10\x32\x12\x16\n\x12REMOTE_SERVER_HOST\x10\x33\x12\x1a\n\x16REMOTE_SERVER_PASSWORD\x10\x34\x12\x16\n\x12REMOTE_SERVER_PORT\x10o\x12\x0e\n\nMIMIR_HOST\x10\x35\x12\x12\n\x0eX_SCOPE_ORG_ID\x10\x36\x12\x0e\n\nSSL_VERIFY\x10\x37\x12\x19\n\x15\x41ZURE_SUBSCRIPTION_ID\x10\x38\x12\x13\n\x0f\x41ZURE_TENANT_ID\x10\x39\x12\x13\n\x0f\x41ZURE_CLIENT_ID\x10:\x12\x17\n\x13\x41ZURE_CLIENT_SECRET\x10;\x12\x12\n\x0eGKE_PROJECT_ID\x10<\x12\x1c\n\x18GKE_SERVICE_ACCOUNT_JSON\x10=\x12\"\n\x1eMS_TEAMS_CONNECTOR_WEBHOOK_URL\x10>\x12\x1b\n\x17\x45LASTIC_SEARCH_PROTOCOL\x10@\x12\x17\n\x13\x45LASTIC_SEARCH_HOST\x10\x41\x12\x17\n\x13\x45LASTIC_SEARCH_PORT\x10\x42\x12\x1d\n\x19\x45LASTIC_SEARCH_API_KEY_ID\x10\x43\x12\x1a\n\x16\x45LASTIC_SEARCH_API_KEY\x10\x44\x12\x19\n\x15GRAFANA_LOKI_PROTOCOL\x10\x45\x12\x15\n\x11GRAFANA_LOKI_HOST\x10\x46\x12\x15\n\x11GRAFANA_LOKI_PORT\x10G\x12\x1b\n\x17KUBERNETES_CLUSTER_NAME\x10H\x12!\n\x1dKUBERNETES_CLUSTER_API_SERVER\x10I\x12\x1c\n\x18KUBERNETES_CLUSTER_TOKEN\x10J\x12\x31\n-KUBERNETES_CLUSTER_CERTIFICATE_AUTHORITY_DATA\x10K\x12\x31\n-KUBERNETES_CLUSTER_CERTIFICATE_AUTHORITY_PATH\x10L\x12\r\n\tSMTP_HOST\x10M\x12\r\n\tSMTP_PORT\x10N\x12\r\n\tSMTP_USER\x10O\x12\x11\n\rSMTP_PASSWORD\x10P\x12\x18\n\x14\x42IG_QUERY_PROJECT_ID\x10Q\x12\"\n\x1e\x42IG_QUERY_SERVICE_ACCOUNT_JSON\x10R\x12\x13\n\x0fZENDUTY_API_KEY\x10S\x12\x12\n\x0eROOTLY_API_KEY\x10T\x12\x16\n\x12JIRA_CLOUD_API_KEY\x10U\x12\x0f\n\x0bJIRA_DOMAIN\x10m\x12\x0e\n\nJIRA_EMAIL\x10n\x12\x16\n\x12\x41SANA_ACCESS_TOKEN\x10V\x12\x1c\n\x18\x43ONFLUENCE_CLOUD_API_KEY\x10W\x12\x1e\n\x19\x43ONFLUENCE_CLOUD_SITE_URL\x10\x8b\x01\x12-\n(CONFLUENCE_CLOUD_ATLASSIAN_ACCOUNT_EMAIL\x10\x8c\x01\x12\x12\n\x0eNOTION_API_KEY\x10X\x12\x18\n\x14\x44RD_PROXY_AGENT_HOST\x10Y\x12\x1d\n\x19\x44RD_PROXY_AGENT_API_TOKEN\x10Z\x12\x1b\n\x17\x44RD_PROXY_AGENT_API_KEY\x10[\x12\x1d\n\x19MONGODB_CONNECTION_STRING\x10\\\x12\x18\n\x14OPEN_SEARCH_PROTOCOL\x10^\x12\x14\n\x10OPEN_SEARCH_HOST\x10_\x12\x14\n\x10OPEN_SEARCH_PORT\x10`\x12\x18\n\x14OPEN_SEARCH_USERNAME\x10\x61\x12\x18\n\x14OPEN_SEARCH_PASSWORD\x10\x62\x12\x12\n\x0eLINEAR_API_KEY\x10\x63\x12\x0f\n\x0bJENKINS_URL\x10\x64\x12\x14\n\x10JENKINS_USERNAME\x10\x65\x12\x15\n\x11JENKINS_API_TOKEN\x10\x66\x12\x11\n\rJENKINS_CRUMB\x10q\x12\x18\n\x14GITHUB_ACTIONS_TOKEN\x10g\x12 \n\x1c\x43USTOM_STRATEGIES_ACCOUNT_ID\x10h\x12\x11\n\rARGOCD_SERVER\x10j\x12\x10\n\x0c\x41RGOCD_TOKEN\x10k\x12\x18\n\x14ROLLBAR_ACCESS_TOKEN\x10l\x12\x13\n\x0fPOSTHOG_API_KEY\x10y\x12\x14\n\x10POSTHOG_APP_HOST\x10z\x12\x16\n\x12POSTHOG_PROJECT_ID\x10{\x12&\n!MIXPANEL_SERVICE_ACCOUNT_USERNAME\x10\x83\x01\x12$\n\x1fMIXPANEL_SERVICE_ACCOUNT_SECRET\x10\x84\x01\x12\x14\n\x0fMIXPANEL_DOMAIN\x10\x85\x01\x12\x18\n\x13MIXPANEL_PROJECT_ID\x10\x86\x01\x12\x1a\n\x15MIXPANEL_WORKSPACE_ID\x10\x87\x01\x12\x13\n\x0eSIGNOZ_API_URL\x10\x88\x01\x12\x15\n\x10SIGNOZ_API_TOKEN\x10\x89\x01\x12\x10\n\x0bKIBANA_HOST\x10\x8a\x01\x12\x18\n\x13\x42ITBUCKET_WORKSPACE\x10\x90\x01\x12\x16\n\x11\x42ITBUCKET_API_KEY\x10\x91\x01\x12\x13\n\x0e\x42ITBUCKET_REPO\x10\x92\x01\x12\x13\n\x0eRENDER_API_KEY\x10\x93\x01\x12\x16\n\x11\x43ORALOGIX_API_KEY\x10\x94\x01\x12\x17\n\x12\x43ORALOGIX_ENDPOINT\x10\x95\x01\x12\x15\n\x10\x43ORALOGIX_DOMAIN\x10\x98\x01\x12\x18\n\x13MCP_SERVER_BASE_URL\x10\x96\x01\x12\x1c\n\x17MCP_SERVER_AUTH_HEADERS\x10\x97\x01\x12\x1f\n\x1aMCP_SERVER_PASS_USER_EMAIL\x10\xa4\x01\x12\x1b\n\x16VICTORIA_LOGS_PROTOCOL\x10\x9a\x01\x12\x17\n\x12VICTORIA_LOGS_HOST\x10\x9b\x01\x12\x17\n\x12VICTORIA_LOGS_PORT\x10\x9c\x01\x12\x1a\n\x15VICTORIA_LOGS_HEADERS\x10\x9d\x01\x12\x12\n\rGITHUB_APP_ID\x10\x9e\x01\x12\x1b\n\x16GITHUB_APP_PRIVATE_KEY\x10\x9f\x01\x12\x1f\n\x1aGITHUB_APP_INSTALLATION_ID\x10\xa0\x01\x12\x1c\n\x17GITHUB_APP_ACCESS_TOKEN\x10\xa1\x01\x12\x11\n\x0cMETABASE_URL\x10\xa2\x01\x12\x15\n\x10METABASE_API_KEY\x10\xa3\x01*\xc0 \n\x0fSourceModelType\x12\x0e\n\nUNKNOWN_MT\x10\x00\x12\x14\n\x10NEW_RELIC_POLICY\x10\x01\x12\x17\n\x13NEW_RELIC_CONDITION\x10\x02\x12\x14\n\x10NEW_RELIC_ENTITY\x10\x03\x12\x1e\n\x1aNEW_RELIC_ENTITY_DASHBOARD\x10\x04\x12 \n\x1cNEW_RELIC_ENTITY_APPLICATION\x10\x05\x12\x12\n\x0eNEW_RELIC_NRQL\x10\x06\x12!\n\x1dNEW_RELIC_ENTITY_DASHBOARD_V2\x10\x07\x12\x13\n\x0f\x44\x41TADOG_MONITOR\x10\x65\x12\x15\n\x11\x44\x41TADOG_DASHBOARD\x10\x66\x12 \n\x1c\x44\x41TADOG_LIVE_INTEGRATION_AWS\x10g\x12$\n DATADOG_LIVE_INTEGRATION_AWS_LOG\x10h\x12\"\n\x1e\x44\x41TADOG_LIVE_INTEGRATION_AZURE\x10i\x12\'\n#DATADOG_LIVE_INTEGRATION_CLOUDFLARE\x10j\x12#\n\x1f\x44\x41TADOG_LIVE_INTEGRATION_FASTLY\x10k\x12 \n\x1c\x44\x41TADOG_LIVE_INTEGRATION_GCP\x10l\x12&\n\"DATADOG_LIVE_INTEGRATION_CONFLUENT\x10m\x12\x13\n\x0f\x44\x41TADOG_SERVICE\x10n\x12\x12\n\x0e\x44\x41TADOG_METRIC\x10o\x12\x11\n\rDATADOG_QUERY\x10p\x12\x0f\n\x0b\x44\x41TADOG_APM\x10q\x12\x12\n\x0e\x44\x41TADOG_FIELDS\x10r\x12\x16\n\x11\x43LOUDWATCH_METRIC\x10\xc9\x01\x12\x19\n\x14\x43LOUDWATCH_LOG_GROUP\x10\xca\x01\x12\x1f\n\x1a\x43LOUDWATCH_LOG_GROUP_QUERY\x10\xcb\x01\x12\x16\n\x11\x43LOUDWATCH_ALARMS\x10\xcc\x01\x12\x12\n\rRDS_INSTANCES\x10\xcd\x01\x12\x19\n\x14\x43LOUDWATCH_DASHBOARD\x10\xce\x01\x12\x17\n\x12GRAFANA_DATASOURCE\x10\xad\x02\x12\x16\n\x11GRAFANA_DASHBOARD\x10\xae\x02\x12!\n\x1cGRAFANA_TARGET_METRIC_PROMQL\x10\xaf\x02\x12\"\n\x1dGRAFANA_PROMETHEUS_DATASOURCE\x10\xb0\x02\x12\x17\n\x12GRAFANA_ALERT_RULE\x10\xb1\x02\x12\x1c\n\x17GRAFANA_LOKI_DATASOURCE\x10\xb2\x02\x12\x18\n\x13\x43LICKHOUSE_DATABASE\x10\x91\x03\x12\x15\n\x10\x43LICKHOUSE_TABLE\x10\x92\x03\x12\x12\n\rSLACK_CHANNEL\x10\xf5\x03\x12\r\n\x08MARKDOWN\x10\xd9\x04\x12\x0b\n\x06IFRAME\x10\xda\x04\x12\x13\n\x0ePOSTGRES_QUERY\x10\xbd\x05\x12\x13\n\x0ePOSTGRES_TABLE\x10\xbe\x05\x12\x10\n\x0b\x45KS_CLUSTER\x10\xa1\x06\x12\x12\n\rEKS_NAMESPACE\x10\xa2\x06\x12\x10\n\x0b\x45KS_SERVICE\x10\xa3\x06\x12\x13\n\x0e\x45KS_DEPLOYMENT\x10\xa4\x06\x12\x10\n\x0b\x45KS_INGRESS\x10\xa5\x06\x12\x17\n\x12\x45KS_NETWORK_POLICY\x10\xa6\x06\x12\x0c\n\x07\x45KS_HPA\x10\xa7\x06\x12\x13\n\x0e\x45KS_REPLICASET\x10\xa8\x06\x12\x14\n\x0f\x45KS_STATEFULSET\x10\xa9\x06\x12&\n!SQL_DATABASE_CONNECTION_RAW_QUERY\x10\x85\x07\x12\x17\n\x12SQL_DATABASE_TABLE\x10\x86\x07\x12\x14\n\x0f\x41ZURE_WORKSPACE\x10\xe9\x07\x12\x13\n\x0e\x41ZURE_RESOURCE\x10\xea\x07\x12\x16\n\x11\x41ZURE_AKS_CLUSTER\x10\xeb\x07\x12\x18\n\x13\x41ZURE_AKS_NAMESPACE\x10\xec\x07\x12\x19\n\x14\x41ZURE_AKS_DEPLOYMENT\x10\xed\x07\x12\x16\n\x11\x41ZURE_AKS_SERVICE\x10\xee\x07\x12\x16\n\x11\x41ZURE_AKS_INGRESS\x10\xef\x07\x12\x1d\n\x18\x41ZURE_AKS_NETWORK_POLICY\x10\xf0\x07\x12\x12\n\rAZURE_AKS_HPA\x10\xf1\x07\x12\x19\n\x14\x41ZURE_AKS_REPLICASET\x10\xf2\x07\x12\x1a\n\x15\x41ZURE_AKS_STATEFULSET\x10\xf3\x07\x12\x1a\n\x15\x41ZURE_VIRTUAL_MACHINE\x10\xf4\x07\x12\x0f\n\nAZURE_VMSS\x10\xf5\x07\x12\x1a\n\x15\x41ZURE_STORAGE_ACCOUNT\x10\xf6\x07\x12\x19\n\x14\x41ZURE_BLOB_CONTAINER\x10\xf7\x07\x12\x15\n\x10\x41ZURE_SQL_SERVER\x10\xf8\x07\x12\x17\n\x12\x41ZURE_SQL_DATABASE\x10\xf9\x07\x12\x19\n\x14\x41ZURE_COSMOS_ACCOUNT\x10\xfa\x07\x12\x1a\n\x15\x41ZURE_POSTGRES_SERVER\x10\xfb\x07\x12\x1c\n\x17\x41ZURE_POSTGRES_DATABASE\x10\xfc\x07\x12\x17\n\x12\x41ZURE_METRIC_ALERT\x10\xfd\x07\x12\x17\n\x12\x41ZURE_ACTION_GROUP\x10\xfe\x07\x12\x19\n\x14\x41ZURE_RESOURCE_GROUP\x10\xff\x07\x12\x16\n\x11\x41ZURE_REDIS_CACHE\x10\x80\x08\x12\x0f\n\nSSH_SERVER\x10\xcc\x08\x12\r\n\x08SSH_USER\x10\xcd\x08\x12\x19\n\x14GRAFANA_MIMIR_PROMQL\x10\xb1\t\x12\x10\n\x0bGKE_CLUSTER\x10\x95\n\x12\x12\n\rGKE_NAMESPACE\x10\x96\n\x12\x10\n\x0bGKE_SERVICE\x10\x97\n\x12\x13\n\x0eGKE_DEPLOYMENT\x10\x98\n\x12\x10\n\x0bGKE_INGRESS\x10\x99\n\x12\x17\n\x12GKE_NETWORK_POLICY\x10\x9a\n\x12\x0c\n\x07GKE_HPA\x10\x9b\n\x12\x13\n\x0eGKE_REPLICASET\x10\x9c\n\x12\x14\n\x0fGKE_STATEFULSET\x10\x9d\n\x12\x19\n\x14GCP_COMPUTE_INSTANCE\x10\x9e\n\x12\x17\n\x12GCP_INSTANCE_GROUP\x10\x9f\n\x12\x17\n\x12GCP_STORAGE_BUCKET\x10\xa0\n\x12\x1b\n\x16GCP_CLOUD_SQL_INSTANCE\x10\xa1\n\x12\x1b\n\x16GCP_CLOUD_SQL_DATABASE\x10\xa2\n\x12\x1a\n\x15GCP_MEMORYSTORE_REDIS\x10\xa3\n\x12\x15\n\x10GCP_ALERT_POLICY\x10\xa4\n\x12\x1d\n\x18GCP_NOTIFICATION_CHANNEL\x10\xa5\n\x12\x17\n\x12GCP_CLOUD_FUNCTION\x10\xa6\n\x12\x1a\n\x15GCP_CLOUD_RUN_SERVICE\x10\xa7\n\x12\x15\n\x10GCP_PUBSUB_TOPIC\x10\xa8\n\x12\x1c\n\x17GCP_PUBSUB_SUBSCRIPTION\x10\xa9\n\x12\x19\n\x14GCP_BIGQUERY_DATASET\x10\xaa\n\x12\x17\n\x12GCP_BIGQUERY_TABLE\x10\xab\n\x12\x14\n\x0fGCP_VPC_NETWORK\x10\xac\n\x12\x13\n\x0eGCP_SUBNETWORK\x10\xad\n\x12\x16\n\x11GCP_FIREWALL_RULE\x10\xae\n\x12\x16\n\x11GCP_LOAD_BALANCER\x10\xaf\n\x12\x0f\n\nGCP_SECRET\x10\xb0\n\x12\x18\n\x13GCP_SERVICE_ACCOUNT\x10\xb1\n\x12\x11\n\x0cGCP_LOG_SINK\x10\xb2\n\x12\x13\n\x0eGCP_LOG_METRIC\x10\xb3\n\x12\x15\n\x10MS_TEAMS_CHANNEL\x10\xf9\n\x12\x17\n\x12PAGERDUTY_INCIDENT\x10\xdd\x0b\x12\x19\n\x14\x45LASTIC_SEARCH_INDEX\x10\xc1\x0c\x12\x1c\n\x17\x45LASTIC_SEARCH_SERVICES\x10\xc2\x0c\x12\x1e\n\x19\x45LASTIC_SEARCH_DASHBOARDS\x10\xc3\x0c\x12\"\n\x1d\x45LASTIC_SEARCH_INDEX_PATTERNS\x10\xc4\x0c\x12\x0f\n\nGCM_METRIC\x10\xa5\r\x12\x12\n\rGCM_DASHBOARD\x10\xa6\r\x12$\n\x1fGCM_CLOUD_RUN_SERVICE_DASHBOARD\x10\xa7\r\x12\x15\n\x10ZENDUTY_INCIDENT\x10\x89\x0e\x12\x14\n\x0fROOTLY_INCIDENT\x10\xed\x0e\x12\x19\n\x14OPS_GENIE_ESCALATION\x10\xd1\x0f\x12\x13\n\x0eOPS_GENIE_TEAM\x10\xd2\x0f\x12\x16\n\x11GOOGLE_CHAT_SPACE\x10\xb5\x10\x12\x15\n\x10MONGODB_DATABASE\x10\x99\x11\x12\x17\n\x12MONGODB_COLLECTION\x10\x9a\x11\x12\x16\n\x11OPEN_SEARCH_INDEX\x10\xfd\x11\x12\x12\n\rASANA_PROJECT\x10\xe1\x12\x12\x12\n\rMODELS_ACTIVE\x10\xc5\x13\x12\x16\n\x11GITHUB_REPOSITORY\x10\xa9\x14\x12\x12\n\rGITHUB_MEMBER\x10\xaa\x14\x12\x11\n\x0cJIRA_PROJECT\x10\x8d\x15\x12\x0e\n\tJIRA_USER\x10\x8e\x15\x12\x10\n\x0b\x41RGOCD_APPS\x10\xf1\x15\x12\x11\n\x0cJENKINS_JOBS\x10\xd5\x16\x12\x13\n\x0ePOSTHOG_PERSON\x10\xb9\x17\x12\x12\n\rPOSTHOG_GROUP\x10\xba\x17\x12\x13\n\x0ePOSTHOG_COHORT\x10\xbb\x17\x12\x15\n\x10POSTHOG_PROPERTY\x10\xbc\x17\x12\x16\n\x11POSTHOG_DASHBOARD\x10\xbd\x17\x12\x14\n\x0fPOSTHOG_PROJECT\x10\xbe\x17\x12\x10\n\x0b\x45\x43S_CLUSTER\x10\xa1\x1f\x12\r\n\x08\x45\x43S_TASK\x10\xa2\x1f\x12\x10\n\x0b\x45\x43S_SERVICE\x10\xa3\x1f\x12\x15\n\x10SIGNOZ_DASHBOARD\x10\x89\'\x12\x11\n\x0cSIGNOZ_ALERT\x10\x8a\'\x12\x12\n\rSIGNOZ_METRIC\x10\x8b\'\x12\x13\n\x0eSIGNOZ_SERVICE\x10\x8c\'\x12\x1a\n\x15SIGNOZ_LOG_ATTRIBUTES\x10\x8d\'\x12\x19\n\x14KUBERNETES_NAMESPACE\x10\xf1.\x12\x17\n\x12KUBERNETES_SERVICE\x10\xf2.\x12\x1a\n\x15KUBERNETES_DEPLOYMENT\x10\xf3.\x12\x17\n\x12KUBERNETES_INGRESS\x10\xf4.\x12\x1e\n\x19KUBERNETES_NETWORK_POLICY\x10\xf5.\x12\x13\n\x0eKUBERNETES_HPA\x10\xf6.\x12\x1a\n\x15KUBERNETES_REPLICASET\x10\xf7.\x12\x1b\n\x16KUBERNETES_STATEFULSET\x10\xf8.\x12\x1b\n\x16KUBERNETES_NETWORK_MAP\x10\xf9.\x12\x13\n\x0eSENTRY_PROJECT\x10\xd9\x36\x12\x18\n\x13\x43ORALOGIX_DASHBOARD\x10\xc1>\x12\x1c\n\x17\x43ORALOGIX_INDEX_MAPPING\x10\xc2>\x12\x18\n\x13VICTORIA_LOGS_FIELD\x10\xa9\x46\x12\x0e\n\tMCP_TOOLS\x10\x8dG\x12\x11\n\x0cLINEAR_TEAMS\x10\xf1G\x12\x11\n\x0cLINEAR_USERS\x10\xf2G\x12\x14\n\x0fLINEAR_PROJECTS\x10\xf3G\x12\x17\n\x12METABASE_DASHBOARD\x10\xd5H\x12\x12\n\rMETABASE_CARD\x10\xd6H\x12\x16\n\x11METABASE_DATABASE\x10\xd7H\x12\x18\n\x13METABASE_COLLECTION\x10\xd8H\x12\x1a\n\x15METABASE_SUBSCRIPTION\x10\xd9H*\xac\x02\n\x07\x43ontext\x12\r\n\tUNKNOWN_C\x10\x00\x12\t\n\x05\x45VENT\x10\x01\x12\x17\n\x13MONITOR_TRANSACTION\x10\x02\x12\x13\n\x0f\x45NTITY_INSTANCE\x10\x03\x12\x0e\n\nEVENT_TYPE\x10\x04\x12\x0b\n\x07MONITOR\x10\x05\x12\n\n\x06\x45NTITY\x10\x06\x12\x15\n\x11\x45VENTS_CLICKHOUSE\x10\x07\x12\x0e\n\nPANEL_NAME\x10\x08\x12\x12\n\x0e\x44\x41SHBOARD_NAME\x10\t\x12\x1f\n\x1b\x45VENTS_ALERT_OPS_CLICKHOUSE\x10\n\x12\x0f\n\x0bSLACK_ALERT\x10\x0b\x12\x1e\n\x1a\x45VENTS_PRODIGAL_CLICKHOUSE\x10\x0c\x12\r\n\tALERT_OPS\x10\r\x12\x14\n\x10\x41LERT_MIDDLEWARE\x10\x0e*\x92\x02\n\x12RecentArtifactType\x12\x0e\n\nRA_UNKNOWN\x10\x00\x12\x12\n\x0eRA_GITHUB_REPO\x10\x01\x12\x14\n\x10RA_GITHUB_COMMIT\x10\x02\x12\x10\n\x0cRA_GITHUB_PR\x10\x03\x12\x15\n\x11RA_GITHUB_RELEASE\x10\x04\x12\x12\n\x0eRA_GITLAB_REPO\x10\x65\x12\x14\n\x10RA_GITLAB_COMMIT\x10\x66\x12\x10\n\x0cRA_GITLAB_MR\x10g\x12\x15\n\x11RA_GITLAB_RELEASE\x10h\x12\x16\n\x11RA_BITBUCKET_REPO\x10\xc9\x01\x12\x18\n\x13RA_BITBUCKET_COMMIT\x10\xca\x01\x12\x14\n\x0fRA_BITBUCKET_PR\x10\xcb\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -45,11 +45,11 @@ _globals['_SOURCEKEYTYPE']._serialized_start=4107 _globals['_SOURCEKEYTYPE']._serialized_end=7820 _globals['_SOURCEMODELTYPE']._serialized_start=7823 - _globals['_SOURCEMODELTYPE']._serialized_end=11860 - _globals['_CONTEXT']._serialized_start=11863 - _globals['_CONTEXT']._serialized_end=12163 - _globals['_RECENTARTIFACTTYPE']._serialized_start=12166 - _globals['_RECENTARTIFACTTYPE']._serialized_end=12440 + _globals['_SOURCEMODELTYPE']._serialized_end=11983 + _globals['_CONTEXT']._serialized_start=11986 + _globals['_CONTEXT']._serialized_end=12286 + _globals['_RECENTARTIFACTTYPE']._serialized_start=12289 + _globals['_RECENTARTIFACTTYPE']._serialized_end=12563 _globals['_TIMERANGE']._serialized_start=71 _globals['_TIMERANGE']._serialized_end=117 _globals['_PAGE']._serialized_start=119 diff --git a/drdroid_debug_toolkit/core/protos/base_pb2.pyi b/drdroid_debug_toolkit/core/protos/base_pb2.pyi index 1a15fef..effe710 100644 --- a/drdroid_debug_toolkit/core/protos/base_pb2.pyi +++ b/drdroid_debug_toolkit/core/protos/base_pb2.pyi @@ -841,6 +841,12 @@ class _SourceModelTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper """Linear Models""" LINEAR_USERS: _SourceModelType.ValueType # 9202 LINEAR_PROJECTS: _SourceModelType.ValueType # 9203 + METABASE_DASHBOARD: _SourceModelType.ValueType # 9301 + """Metabase Models""" + METABASE_CARD: _SourceModelType.ValueType # 9302 + METABASE_DATABASE: _SourceModelType.ValueType # 9303 + METABASE_COLLECTION: _SourceModelType.ValueType # 9304 + METABASE_SUBSCRIPTION: _SourceModelType.ValueType # 9305 class SourceModelType(_SourceModelType, metaclass=_SourceModelTypeEnumTypeWrapper): ... @@ -1056,6 +1062,12 @@ LINEAR_TEAMS: SourceModelType.ValueType # 9201 """Linear Models""" LINEAR_USERS: SourceModelType.ValueType # 9202 LINEAR_PROJECTS: SourceModelType.ValueType # 9203 +METABASE_DASHBOARD: SourceModelType.ValueType # 9301 +"""Metabase Models""" +METABASE_CARD: SourceModelType.ValueType # 9302 +METABASE_DATABASE: SourceModelType.ValueType # 9303 +METABASE_COLLECTION: SourceModelType.ValueType # 9304 +METABASE_SUBSCRIPTION: SourceModelType.ValueType # 9305 global___SourceModelType = SourceModelType class _Context: diff --git a/drdroid_debug_toolkit/core/protos/playbooks/playbook.proto b/drdroid_debug_toolkit/core/protos/playbooks/playbook.proto index e6430c4..b5597cc 100644 --- a/drdroid_debug_toolkit/core/protos/playbooks/playbook.proto +++ b/drdroid_debug_toolkit/core/protos/playbooks/playbook.proto @@ -46,6 +46,7 @@ import "core/protos/playbooks/source_task_definitions/opsgenie_task.proto"; import "core/protos/playbooks/source_task_definitions/victoria_logs_task.proto"; import "core/protos/playbooks/source_task_definitions/render_task.proto"; import "core/protos/playbooks/source_task_definitions/mcp_task.proto"; +import "core/protos/playbooks/source_task_definitions/metabase_task.proto"; message Variable { google.protobuf.StringValue name = 1; @@ -153,6 +154,7 @@ message PlaybookTask { OpsGenie ops_genie = 143; VictoriaLogs victoria_logs = 144; McpServer mcp_server = 145; + Metabase metabase = 146; } } diff --git a/drdroid_debug_toolkit/core/protos/playbooks/playbook_pb2.py b/drdroid_debug_toolkit/core/protos/playbooks/playbook_pb2.py index 9db8ac1..30ebb24 100644 --- a/drdroid_debug_toolkit/core/protos/playbooks/playbook_pb2.py +++ b/drdroid_debug_toolkit/core/protos/playbooks/playbook_pb2.py @@ -65,61 +65,62 @@ from core.protos.playbooks.source_task_definitions import victoria_logs_task_pb2 as core_dot_protos_dot_playbooks_dot_source__task__definitions_dot_victoria__logs__task__pb2 from core.protos.playbooks.source_task_definitions import render_task_pb2 as core_dot_protos_dot_playbooks_dot_source__task__definitions_dot_render__task__pb2 from core.protos.playbooks.source_task_definitions import mcp_task_pb2 as core_dot_protos_dot_playbooks_dot_source__task__definitions_dot_mcp__task__pb2 +from core.protos.playbooks.source_task_definitions import metabase_task_pb2 as core_dot_protos_dot_playbooks_dot_source__task__definitions_dot_metabase__task__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$core/protos/playbooks/playbook.proto\x12\x15\x63ore.protos.playbooks\x1a\x16\x63ore/protos/base.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a,core/protos/playbooks/playbook_commons.proto\x1a:core/protos/playbooks/intelligence_layer/interpreter.proto\x1a:core/protos/playbooks/playbook_task_result_evaluator.proto\x1a:core/protos/playbooks/playbook_step_result_evaluator.proto\x1a\x43\x63ore/protos/playbooks/source_task_definitions/cloudwatch_task.proto\x1a@core/protos/playbooks/source_task_definitions/grafana_task.proto\x1a\x42\x63ore/protos/playbooks/source_task_definitions/new_relic_task.proto\x1a@core/protos/playbooks/source_task_definitions/datadog_task.proto\x1acore/protos/playbooks/source_task_definitions/azure_task.proto\x1acore/protos/playbooks/source_task_definitions/email_task.proto\x1aHcore/protos/playbooks/source_task_definitions/lambda_function_task.proto\x1a>core/protos/playbooks/source_task_definitions/slack_task.proto\x1a\x42\x63ore/protos/playbooks/source_task_definitions/big_query_task.proto\x1a@core/protos/playbooks/source_task_definitions/mongodb_task.proto\x1a\x44\x63ore/protos/playbooks/source_task_definitions/open_search_task.proto\x1a@core/protos/playbooks/source_task_definitions/jenkins_task.proto\x1a?core/protos/playbooks/source_task_definitions/github_task.proto\x1aHcore/protos/playbooks/source_task_definitions/drd_proxy_agent_task.proto\x1a?core/protos/playbooks/source_task_definitions/sentry_task.proto\x1aGcore/protos/playbooks/source_task_definitions/github_actions_task.proto\x1a?core/protos/playbooks/source_task_definitions/argocd_task.proto\x1a=core/protos/playbooks/source_task_definitions/jira_task.proto\x1a?core/protos/playbooks/source_task_definitions/signoz_task.proto\x1a@core/protos/playbooks/source_task_definitions/posthog_task.proto\x1a\x42\x63ore/protos/playbooks/source_task_definitions/coralogix_task.proto\x1a\x41\x63ore/protos/playbooks/source_task_definitions/opsgenie_task.proto\x1a\x46\x63ore/protos/playbooks/source_task_definitions/victoria_logs_task.proto\x1a?core/protos/playbooks/source_task_definitions/render_task.proto\x1a\n\x0e\x65lastic_search\x18s \x01(\x0b\x32$.core.protos.playbooks.ElasticSearchH\x00\x12:\n\x0cgrafana_loki\x18t \x01(\x0b\x32\".core.protos.playbooks.GrafanaLokiH\x00\x12\x34\n\nkubernetes\x18u \x01(\x0b\x32\x1e.core.protos.playbooks.KubectlH\x00\x12)\n\x03gcm\x18v \x01(\x0b\x32\x1a.core.protos.playbooks.GcmH\x00\x12+\n\x04smtp\x18w \x01(\x0b\x32\x1b.core.protos.playbooks.SMTPH\x00\x12-\n\x05slack\x18x \x01(\x0b\x32\x1c.core.protos.playbooks.SlackH\x00\x12\x34\n\tbig_query\x18y \x01(\x0b\x32\x1f.core.protos.playbooks.BigQueryH\x00\x12\x31\n\x07mongodb\x18{ \x01(\x0b\x32\x1e.core.protos.playbooks.MongoDBH\x00\x12\x38\n\x0bopen_search\x18| \x01(\x0b\x32!.core.protos.playbooks.OpenSearchH\x00\x12\x31\n\x07jenkins\x18} \x01(\x0b\x32\x1e.core.protos.playbooks.JenkinsH\x00\x12/\n\x06github\x18~ \x01(\x0b\x32\x1d.core.protos.playbooks.GithubH\x00\x12/\n\x06sentry\x18\x7f \x01(\x0b\x32\x1d.core.protos.playbooks.SentryH\x00\x12?\n\x0egithub_actions\x18\x80\x01 \x01(\x0b\x32$.core.protos.playbooks.GithubActionsH\x00\x12\x30\n\x06\x61rgocd\x18\x82\x01 \x01(\x0b\x32\x1d.core.protos.playbooks.ArgoCDH\x00\x12\x32\n\njira_cloud\x18\x83\x01 \x01(\x0b\x32\x1b.core.protos.playbooks.JiraH\x00\x12\x30\n\x06lambda\x18\x84\x01 \x01(\x0b\x32\x1d.core.protos.playbooks.LambdaH\x00\x12@\n\x0f\x64rd_proxy_agent\x18\x85\x01 \x01(\x0b\x32$.core.protos.playbooks.DrdProxyAgentH\x00\x12\x32\n\x07posthog\x18\x88\x01 \x01(\x0b\x32\x1e.core.protos.playbooks.PostHogH\x00\x12\x30\n\x06signoz\x18\x89\x01 \x01(\x0b\x32\x1d.core.protos.playbooks.SignozH\x00\x12\x30\n\x06render\x18\x8b\x01 \x01(\x0b\x32\x1d.core.protos.playbooks.RenderH\x00\x12\x36\n\tcoralogix\x18\x8d\x01 \x01(\x0b\x32 .core.protos.playbooks.CoralogixH\x00\x12\x35\n\tops_genie\x18\x8f\x01 \x01(\x0b\x32\x1f.core.protos.playbooks.OpsGenieH\x00\x12=\n\rvictoria_logs\x18\x90\x01 \x01(\x0b\x32#.core.protos.playbooks.VictoriaLogsH\x00\x12\x37\n\nmcp_server\x18\x91\x01 \x01(\x0b\x32 .core.protos.playbooks.McpServerH\x00\x1a\x84\x02\n\x1bPlaybookTaskConnectorSource\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12#\n\x06source\x18\x02 \x01(\x0e\x32\x13.core.protos.Source\x12*\n\x04name\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x10is_proxy_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x0eproxy_agent_id\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x1a\x87\x04\n\x16\x45xecutionConfiguration\x12\x35\n\x11is_bulk_execution\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12>\n\x18\x62ulk_execution_var_field\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x1a\n\x12timeseries_offsets\x18\x03 \x03(\r\x12\x41\n\x1dis_result_transformer_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12R\n\"result_transformer_lambda_function\x18\x05 \x01(\x0b\x32&.core.protos.playbooks.Lambda.Function\x12\x38\n\x14is_approval_required\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12?\n\x19result_transformer_prompt\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12H\n$is_result_transformer_prompt_enabled\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x06\n\x04task\"\x97\x03\n\x16PlaybookTaskResultRule\x12;\n\x04type\x18\x01 \x01(\x0e\x32-.core.protos.playbooks.PlaybookTaskResultType\x12\x31\n\x04task\x18\x02 \x01(\x0b\x32#.core.protos.playbooks.PlaybookTask\x12\x41\n\ntimeseries\x18\x65 \x01(\x0b\x32+.core.protos.playbooks.TimeseriesResultRuleH\x00\x12\x37\n\x05table\x18\x66 \x01(\x0b\x32&.core.protos.playbooks.TableResultRuleH\x00\x12\x36\n\x04logs\x18g \x01(\x0b\x32&.core.protos.playbooks.TableResultRuleH\x00\x12Q\n\x13\x62\x61sh_command_output\x18h \x01(\x0b\x32\x32.core.protos.playbooks.BashCommandOutputResultRuleH\x00\x42\x06\n\x04rule\"\xcb\x06\n\x18PlaybookTaskExecutionLog\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x11\n\ttimestamp\x18\x02 \x01(\x10\x12\x31\n\x04task\x18\x03 \x01(\x0b\x32#.core.protos.playbooks.PlaybookTask\x12\x39\n\x06result\x18\x04 \x01(\x0b\x32).core.protos.playbooks.PlaybookTaskResult\x12=\n\x0einterpretation\x18\x05 \x01(\x0b\x32%.core.protos.playbooks.Interpretation\x12*\n\ntime_range\x18\x06 \x01(\x0b\x32\x16.core.protos.TimeRange\x12\x30\n\ncreated_by\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12>\n\x1d\x65xecution_global_variable_set\x18\x08 \x01(\x0b\x32\x17.google.protobuf.Struct\x12@\n\x1aproxy_execution_request_id\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x42\n\x06status\x18\n \x01(\x0e\x32\x32.core.protos.playbooks.PlaybookExecutionStatusType\x12Y\n\x10\x61pproval_context\x18\x0b \x01(\x0b\x32?.core.protos.playbooks.PlaybookTaskExecutionLog.ApprovalContext\x1a\xc5\x01\n\x0f\x41pprovalContext\x12/\n\x0bis_approved\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x13\n\x0b\x61pproved_at\x18\x02 \x01(\x10\x12\x31\n\x0b\x61pproved_by\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x39\n\x13\x61pproval_request_id\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\xe9\x02\n\x1bPlaybookStepResultCondition\x12\x36\n\x10logical_operator\x18\x01 \x01(\x0e\x32\x1c.core.protos.LogicalOperator\x12M\n\trule_sets\x18\x02 \x03(\x0b\x32:.core.protos.playbooks.PlaybookStepResultCondition.RuleSet\x1a\xc2\x01\n\x07RuleSet\x12\x36\n\x10logical_operator\x18\x01 \x01(\x0e\x32\x1c.core.protos.LogicalOperator\x12<\n\x05rules\x18\x02 \x03(\x0b\x32-.core.protos.playbooks.PlaybookTaskResultRule\x12\x41\n\nstep_rules\x18\x03 \x03(\x0b\x32-.core.protos.playbooks.PlaybookStepResultRule\"\xea\x03\n\x0cPlaybookStep\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x32\n\x0creference_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04name\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0b\x64\x65scription\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05notes\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x0e\x65xternal_links\x18\x06 \x03(\x0b\x32#.core.protos.playbooks.ExternalLink\x12@\n\x10interpreter_type\x18\x07 \x01(\x0e\x32&.core.protos.playbooks.InterpreterType\x12\x32\n\x05tasks\x18\x08 \x03(\x0b\x32#.core.protos.playbooks.PlaybookTask\x12=\n\x08\x63hildren\x18\t \x03(\x0b\x32+.core.protos.playbooks.PlaybookStepRelation\"\x9f\x02\n\x14PlaybookStepRelation\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x33\n\x06parent\x18\x02 \x01(\x0b\x32#.core.protos.playbooks.PlaybookStep\x12\x32\n\x05\x63hild\x18\x03 \x01(\x0b\x32#.core.protos.playbooks.PlaybookStep\x12\x45\n\tcondition\x18\x04 \x01(\x0b\x32\x32.core.protos.playbooks.PlaybookStepResultCondition\x12-\n\tis_active\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\"\xc3\x02\n PlaybookStepRelationExecutionLog\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12=\n\x08relation\x18\x02 \x01(\x0b\x32+.core.protos.playbooks.PlaybookStepRelation\x12\x35\n\x11\x65valuation_result\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x11\x65valuation_output\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12K\n\x1cstep_relation_interpretation\x18\x05 \x01(\x0b\x32%.core.protos.playbooks.Interpretation\"\x8b\x04\n\x18PlaybookStepExecutionLog\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x11\n\ttimestamp\x18\x02 \x01(\x10\x12\x35\n\x0fplaybook_run_id\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x04step\x18\x04 \x01(\x0b\x32#.core.protos.playbooks.PlaybookStep\x12L\n\x13task_execution_logs\x18\x05 \x03(\x0b\x32/.core.protos.playbooks.PlaybookTaskExecutionLog\x12X\n\x17relation_execution_logs\x18\x06 \x03(\x0b\x32\x37.core.protos.playbooks.PlaybookStepRelationExecutionLog\x12\x42\n\x13step_interpretation\x18\x07 \x01(\x0b\x32%.core.protos.playbooks.Interpretation\x12*\n\ntime_range\x18\x08 \x01(\x0b\x32\x16.core.protos.TimeRange\x12\x30\n\ncreated_by\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\x90\x04\n\x08Playbook\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12*\n\x04name\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0b\x64\x65scription\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x13global_variable_set\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x30\n\ncreated_by\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\tis_active\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x12\n\ncreated_at\x18\x07 \x01(\x10\x12\x13\n\x0blast_run_at\x18\x08 \x01(\x10\x12\x42\n\x06status\x18\t \x01(\x0e\x32\x32.core.protos.playbooks.PlaybookExecutionStatusType\x12\x32\n\x05steps\x18\n \x03(\x0b\x32#.core.protos.playbooks.PlaybookStep\x12\x43\n\x0estep_relations\x18\x0b \x03(\x0b\x32+.core.protos.playbooks.PlaybookStepRelation\"\x94\x04\n\x11PlaybookExecution\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x35\n\x0fplaybook_run_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x08playbook\x18\x03 \x01(\x0b\x32\x1f.core.protos.playbooks.Playbook\x12\x42\n\x06status\x18\x04 \x01(\x0e\x32\x32.core.protos.playbooks.PlaybookExecutionStatusType\x12\x12\n\ncreated_at\x18\x05 \x01(\x10\x12\x12\n\nstarted_at\x18\x06 \x01(\x10\x12\x13\n\x0b\x66inished_at\x18\x07 \x01(\x10\x12*\n\ntime_range\x18\x08 \x01(\x0b\x32\x16.core.protos.TimeRange\x12\x30\n\ncreated_by\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12L\n\x13step_execution_logs\x18\x0b \x03(\x0b\x32/.core.protos.playbooks.PlaybookStepExecutionLog\x12>\n\x1d\x65xecution_global_variable_set\x18\x0c \x01(\x0b\x32\x17.google.protobuf.Struct\"\x8f\x05\n\x10UpdatePlaybookOp\x12\x36\n\x02op\x18\x01 \x01(\x0e\x32*.core.protos.playbooks.UpdatePlaybookOp.Op\x12Z\n\x14update_playbook_name\x18\x02 \x01(\x0b\x32:.core.protos.playbooks.UpdatePlaybookOp.UpdatePlaybookNameH\x00\x12^\n\x16update_playbook_status\x18\x03 \x01(\x0b\x32<.core.protos.playbooks.UpdatePlaybookOp.UpdatePlaybookStatusH\x00\x12Q\n\x0fupdate_playbook\x18\x04 \x01(\x0b\x32\x36.core.protos.playbooks.UpdatePlaybookOp.UpdatePlaybookH\x00\x1a@\n\x12UpdatePlaybookName\x12*\n\x04name\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x1a\x45\n\x14UpdatePlaybookStatus\x12-\n\tis_active\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x1a\x43\n\x0eUpdatePlaybook\x12\x31\n\x08playbook\x18\x01 \x01(\x0b\x32\x1f.core.protos.playbooks.Playbook\"\\\n\x02Op\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x18\n\x14UPDATE_PLAYBOOK_NAME\x10\x01\x12\x1a\n\x16UPDATE_PLAYBOOK_STATUS\x10\x02\x12\x13\n\x0fUPDATE_PLAYBOOK\x10\x03\x42\x08\n\x06updateb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$core/protos/playbooks/playbook.proto\x12\x15\x63ore.protos.playbooks\x1a\x16\x63ore/protos/base.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a,core/protos/playbooks/playbook_commons.proto\x1a:core/protos/playbooks/intelligence_layer/interpreter.proto\x1a:core/protos/playbooks/playbook_task_result_evaluator.proto\x1a:core/protos/playbooks/playbook_step_result_evaluator.proto\x1a\x43\x63ore/protos/playbooks/source_task_definitions/cloudwatch_task.proto\x1a@core/protos/playbooks/source_task_definitions/grafana_task.proto\x1a\x42\x63ore/protos/playbooks/source_task_definitions/new_relic_task.proto\x1a@core/protos/playbooks/source_task_definitions/datadog_task.proto\x1acore/protos/playbooks/source_task_definitions/azure_task.proto\x1acore/protos/playbooks/source_task_definitions/email_task.proto\x1aHcore/protos/playbooks/source_task_definitions/lambda_function_task.proto\x1a>core/protos/playbooks/source_task_definitions/slack_task.proto\x1a\x42\x63ore/protos/playbooks/source_task_definitions/big_query_task.proto\x1a@core/protos/playbooks/source_task_definitions/mongodb_task.proto\x1a\x44\x63ore/protos/playbooks/source_task_definitions/open_search_task.proto\x1a@core/protos/playbooks/source_task_definitions/jenkins_task.proto\x1a?core/protos/playbooks/source_task_definitions/github_task.proto\x1aHcore/protos/playbooks/source_task_definitions/drd_proxy_agent_task.proto\x1a?core/protos/playbooks/source_task_definitions/sentry_task.proto\x1aGcore/protos/playbooks/source_task_definitions/github_actions_task.proto\x1a?core/protos/playbooks/source_task_definitions/argocd_task.proto\x1a=core/protos/playbooks/source_task_definitions/jira_task.proto\x1a?core/protos/playbooks/source_task_definitions/signoz_task.proto\x1a@core/protos/playbooks/source_task_definitions/posthog_task.proto\x1a\x42\x63ore/protos/playbooks/source_task_definitions/coralogix_task.proto\x1a\x41\x63ore/protos/playbooks/source_task_definitions/opsgenie_task.proto\x1a\x46\x63ore/protos/playbooks/source_task_definitions/victoria_logs_task.proto\x1a?core/protos/playbooks/source_task_definitions/render_task.proto\x1a\n\x0e\x65lastic_search\x18s \x01(\x0b\x32$.core.protos.playbooks.ElasticSearchH\x00\x12:\n\x0cgrafana_loki\x18t \x01(\x0b\x32\".core.protos.playbooks.GrafanaLokiH\x00\x12\x34\n\nkubernetes\x18u \x01(\x0b\x32\x1e.core.protos.playbooks.KubectlH\x00\x12)\n\x03gcm\x18v \x01(\x0b\x32\x1a.core.protos.playbooks.GcmH\x00\x12+\n\x04smtp\x18w \x01(\x0b\x32\x1b.core.protos.playbooks.SMTPH\x00\x12-\n\x05slack\x18x \x01(\x0b\x32\x1c.core.protos.playbooks.SlackH\x00\x12\x34\n\tbig_query\x18y \x01(\x0b\x32\x1f.core.protos.playbooks.BigQueryH\x00\x12\x31\n\x07mongodb\x18{ \x01(\x0b\x32\x1e.core.protos.playbooks.MongoDBH\x00\x12\x38\n\x0bopen_search\x18| \x01(\x0b\x32!.core.protos.playbooks.OpenSearchH\x00\x12\x31\n\x07jenkins\x18} \x01(\x0b\x32\x1e.core.protos.playbooks.JenkinsH\x00\x12/\n\x06github\x18~ \x01(\x0b\x32\x1d.core.protos.playbooks.GithubH\x00\x12/\n\x06sentry\x18\x7f \x01(\x0b\x32\x1d.core.protos.playbooks.SentryH\x00\x12?\n\x0egithub_actions\x18\x80\x01 \x01(\x0b\x32$.core.protos.playbooks.GithubActionsH\x00\x12\x30\n\x06\x61rgocd\x18\x82\x01 \x01(\x0b\x32\x1d.core.protos.playbooks.ArgoCDH\x00\x12\x32\n\njira_cloud\x18\x83\x01 \x01(\x0b\x32\x1b.core.protos.playbooks.JiraH\x00\x12\x30\n\x06lambda\x18\x84\x01 \x01(\x0b\x32\x1d.core.protos.playbooks.LambdaH\x00\x12@\n\x0f\x64rd_proxy_agent\x18\x85\x01 \x01(\x0b\x32$.core.protos.playbooks.DrdProxyAgentH\x00\x12\x32\n\x07posthog\x18\x88\x01 \x01(\x0b\x32\x1e.core.protos.playbooks.PostHogH\x00\x12\x30\n\x06signoz\x18\x89\x01 \x01(\x0b\x32\x1d.core.protos.playbooks.SignozH\x00\x12\x30\n\x06render\x18\x8b\x01 \x01(\x0b\x32\x1d.core.protos.playbooks.RenderH\x00\x12\x36\n\tcoralogix\x18\x8d\x01 \x01(\x0b\x32 .core.protos.playbooks.CoralogixH\x00\x12\x35\n\tops_genie\x18\x8f\x01 \x01(\x0b\x32\x1f.core.protos.playbooks.OpsGenieH\x00\x12=\n\rvictoria_logs\x18\x90\x01 \x01(\x0b\x32#.core.protos.playbooks.VictoriaLogsH\x00\x12\x37\n\nmcp_server\x18\x91\x01 \x01(\x0b\x32 .core.protos.playbooks.McpServerH\x00\x12\x34\n\x08metabase\x18\x92\x01 \x01(\x0b\x32\x1f.core.protos.playbooks.MetabaseH\x00\x1a\x84\x02\n\x1bPlaybookTaskConnectorSource\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12#\n\x06source\x18\x02 \x01(\x0e\x32\x13.core.protos.Source\x12*\n\x04name\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x10is_proxy_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x0eproxy_agent_id\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x1a\x87\x04\n\x16\x45xecutionConfiguration\x12\x35\n\x11is_bulk_execution\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12>\n\x18\x62ulk_execution_var_field\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x1a\n\x12timeseries_offsets\x18\x03 \x03(\r\x12\x41\n\x1dis_result_transformer_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12R\n\"result_transformer_lambda_function\x18\x05 \x01(\x0b\x32&.core.protos.playbooks.Lambda.Function\x12\x38\n\x14is_approval_required\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12?\n\x19result_transformer_prompt\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12H\n$is_result_transformer_prompt_enabled\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x06\n\x04task\"\x97\x03\n\x16PlaybookTaskResultRule\x12;\n\x04type\x18\x01 \x01(\x0e\x32-.core.protos.playbooks.PlaybookTaskResultType\x12\x31\n\x04task\x18\x02 \x01(\x0b\x32#.core.protos.playbooks.PlaybookTask\x12\x41\n\ntimeseries\x18\x65 \x01(\x0b\x32+.core.protos.playbooks.TimeseriesResultRuleH\x00\x12\x37\n\x05table\x18\x66 \x01(\x0b\x32&.core.protos.playbooks.TableResultRuleH\x00\x12\x36\n\x04logs\x18g \x01(\x0b\x32&.core.protos.playbooks.TableResultRuleH\x00\x12Q\n\x13\x62\x61sh_command_output\x18h \x01(\x0b\x32\x32.core.protos.playbooks.BashCommandOutputResultRuleH\x00\x42\x06\n\x04rule\"\xcb\x06\n\x18PlaybookTaskExecutionLog\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x11\n\ttimestamp\x18\x02 \x01(\x10\x12\x31\n\x04task\x18\x03 \x01(\x0b\x32#.core.protos.playbooks.PlaybookTask\x12\x39\n\x06result\x18\x04 \x01(\x0b\x32).core.protos.playbooks.PlaybookTaskResult\x12=\n\x0einterpretation\x18\x05 \x01(\x0b\x32%.core.protos.playbooks.Interpretation\x12*\n\ntime_range\x18\x06 \x01(\x0b\x32\x16.core.protos.TimeRange\x12\x30\n\ncreated_by\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12>\n\x1d\x65xecution_global_variable_set\x18\x08 \x01(\x0b\x32\x17.google.protobuf.Struct\x12@\n\x1aproxy_execution_request_id\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x42\n\x06status\x18\n \x01(\x0e\x32\x32.core.protos.playbooks.PlaybookExecutionStatusType\x12Y\n\x10\x61pproval_context\x18\x0b \x01(\x0b\x32?.core.protos.playbooks.PlaybookTaskExecutionLog.ApprovalContext\x1a\xc5\x01\n\x0f\x41pprovalContext\x12/\n\x0bis_approved\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x13\n\x0b\x61pproved_at\x18\x02 \x01(\x10\x12\x31\n\x0b\x61pproved_by\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x39\n\x13\x61pproval_request_id\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\xe9\x02\n\x1bPlaybookStepResultCondition\x12\x36\n\x10logical_operator\x18\x01 \x01(\x0e\x32\x1c.core.protos.LogicalOperator\x12M\n\trule_sets\x18\x02 \x03(\x0b\x32:.core.protos.playbooks.PlaybookStepResultCondition.RuleSet\x1a\xc2\x01\n\x07RuleSet\x12\x36\n\x10logical_operator\x18\x01 \x01(\x0e\x32\x1c.core.protos.LogicalOperator\x12<\n\x05rules\x18\x02 \x03(\x0b\x32-.core.protos.playbooks.PlaybookTaskResultRule\x12\x41\n\nstep_rules\x18\x03 \x03(\x0b\x32-.core.protos.playbooks.PlaybookStepResultRule\"\xea\x03\n\x0cPlaybookStep\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x32\n\x0creference_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04name\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0b\x64\x65scription\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05notes\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x0e\x65xternal_links\x18\x06 \x03(\x0b\x32#.core.protos.playbooks.ExternalLink\x12@\n\x10interpreter_type\x18\x07 \x01(\x0e\x32&.core.protos.playbooks.InterpreterType\x12\x32\n\x05tasks\x18\x08 \x03(\x0b\x32#.core.protos.playbooks.PlaybookTask\x12=\n\x08\x63hildren\x18\t \x03(\x0b\x32+.core.protos.playbooks.PlaybookStepRelation\"\x9f\x02\n\x14PlaybookStepRelation\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x33\n\x06parent\x18\x02 \x01(\x0b\x32#.core.protos.playbooks.PlaybookStep\x12\x32\n\x05\x63hild\x18\x03 \x01(\x0b\x32#.core.protos.playbooks.PlaybookStep\x12\x45\n\tcondition\x18\x04 \x01(\x0b\x32\x32.core.protos.playbooks.PlaybookStepResultCondition\x12-\n\tis_active\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\"\xc3\x02\n PlaybookStepRelationExecutionLog\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12=\n\x08relation\x18\x02 \x01(\x0b\x32+.core.protos.playbooks.PlaybookStepRelation\x12\x35\n\x11\x65valuation_result\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x11\x65valuation_output\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12K\n\x1cstep_relation_interpretation\x18\x05 \x01(\x0b\x32%.core.protos.playbooks.Interpretation\"\x8b\x04\n\x18PlaybookStepExecutionLog\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x11\n\ttimestamp\x18\x02 \x01(\x10\x12\x35\n\x0fplaybook_run_id\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x04step\x18\x04 \x01(\x0b\x32#.core.protos.playbooks.PlaybookStep\x12L\n\x13task_execution_logs\x18\x05 \x03(\x0b\x32/.core.protos.playbooks.PlaybookTaskExecutionLog\x12X\n\x17relation_execution_logs\x18\x06 \x03(\x0b\x32\x37.core.protos.playbooks.PlaybookStepRelationExecutionLog\x12\x42\n\x13step_interpretation\x18\x07 \x01(\x0b\x32%.core.protos.playbooks.Interpretation\x12*\n\ntime_range\x18\x08 \x01(\x0b\x32\x16.core.protos.TimeRange\x12\x30\n\ncreated_by\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\x90\x04\n\x08Playbook\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12*\n\x04name\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0b\x64\x65scription\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x13global_variable_set\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x30\n\ncreated_by\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\tis_active\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x12\n\ncreated_at\x18\x07 \x01(\x10\x12\x13\n\x0blast_run_at\x18\x08 \x01(\x10\x12\x42\n\x06status\x18\t \x01(\x0e\x32\x32.core.protos.playbooks.PlaybookExecutionStatusType\x12\x32\n\x05steps\x18\n \x03(\x0b\x32#.core.protos.playbooks.PlaybookStep\x12\x43\n\x0estep_relations\x18\x0b \x03(\x0b\x32+.core.protos.playbooks.PlaybookStepRelation\"\x94\x04\n\x11PlaybookExecution\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x35\n\x0fplaybook_run_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x08playbook\x18\x03 \x01(\x0b\x32\x1f.core.protos.playbooks.Playbook\x12\x42\n\x06status\x18\x04 \x01(\x0e\x32\x32.core.protos.playbooks.PlaybookExecutionStatusType\x12\x12\n\ncreated_at\x18\x05 \x01(\x10\x12\x12\n\nstarted_at\x18\x06 \x01(\x10\x12\x13\n\x0b\x66inished_at\x18\x07 \x01(\x10\x12*\n\ntime_range\x18\x08 \x01(\x0b\x32\x16.core.protos.TimeRange\x12\x30\n\ncreated_by\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12L\n\x13step_execution_logs\x18\x0b \x03(\x0b\x32/.core.protos.playbooks.PlaybookStepExecutionLog\x12>\n\x1d\x65xecution_global_variable_set\x18\x0c \x01(\x0b\x32\x17.google.protobuf.Struct\"\x8f\x05\n\x10UpdatePlaybookOp\x12\x36\n\x02op\x18\x01 \x01(\x0e\x32*.core.protos.playbooks.UpdatePlaybookOp.Op\x12Z\n\x14update_playbook_name\x18\x02 \x01(\x0b\x32:.core.protos.playbooks.UpdatePlaybookOp.UpdatePlaybookNameH\x00\x12^\n\x16update_playbook_status\x18\x03 \x01(\x0b\x32<.core.protos.playbooks.UpdatePlaybookOp.UpdatePlaybookStatusH\x00\x12Q\n\x0fupdate_playbook\x18\x04 \x01(\x0b\x32\x36.core.protos.playbooks.UpdatePlaybookOp.UpdatePlaybookH\x00\x1a@\n\x12UpdatePlaybookName\x12*\n\x04name\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x1a\x45\n\x14UpdatePlaybookStatus\x12-\n\tis_active\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x1a\x43\n\x0eUpdatePlaybook\x12\x31\n\x08playbook\x18\x01 \x01(\x0b\x32\x1f.core.protos.playbooks.Playbook\"\\\n\x02Op\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x18\n\x14UPDATE_PLAYBOOK_NAME\x10\x01\x12\x1a\n\x16UPDATE_PLAYBOOK_STATUS\x10\x02\x12\x13\n\x0fUPDATE_PLAYBOOK\x10\x03\x42\x08\n\x06updateb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'core.protos.playbooks.playbook_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: DESCRIPTOR._loaded_options = None - _globals['_VARIABLE']._serialized_start=2782 - _globals['_VARIABLE']._serialized_end=3114 - _globals['_UPDATEVARIABLEOP']._serialized_start=3117 - _globals['_UPDATEVARIABLEOP']._serialized_end=3554 - _globals['_UPDATEVARIABLEOP_UPDATEVARIABLE']._serialized_start=3355 - _globals['_UPDATEVARIABLEOP_UPDATEVARIABLE']._serialized_end=3422 - _globals['_UPDATEVARIABLEOP_UPDATESTATUS']._serialized_start=3424 - _globals['_UPDATEVARIABLEOP_UPDATESTATUS']._serialized_end=3485 - _globals['_UPDATEVARIABLEOP_OP']._serialized_start=3487 - _globals['_UPDATEVARIABLEOP_OP']._serialized_end=3544 - _globals['_PLAYBOOKTASK']._serialized_start=3557 - _globals['_PLAYBOOKTASK']._serialized_end=7027 - _globals['_PLAYBOOKTASK_PLAYBOOKTASKCONNECTORSOURCE']._serialized_start=6237 - _globals['_PLAYBOOKTASK_PLAYBOOKTASKCONNECTORSOURCE']._serialized_end=6497 - _globals['_PLAYBOOKTASK_EXECUTIONCONFIGURATION']._serialized_start=6500 - _globals['_PLAYBOOKTASK_EXECUTIONCONFIGURATION']._serialized_end=7019 - _globals['_PLAYBOOKTASKRESULTRULE']._serialized_start=7030 - _globals['_PLAYBOOKTASKRESULTRULE']._serialized_end=7437 - _globals['_PLAYBOOKTASKEXECUTIONLOG']._serialized_start=7440 - _globals['_PLAYBOOKTASKEXECUTIONLOG']._serialized_end=8283 - _globals['_PLAYBOOKTASKEXECUTIONLOG_APPROVALCONTEXT']._serialized_start=8086 - _globals['_PLAYBOOKTASKEXECUTIONLOG_APPROVALCONTEXT']._serialized_end=8283 - _globals['_PLAYBOOKSTEPRESULTCONDITION']._serialized_start=8286 - _globals['_PLAYBOOKSTEPRESULTCONDITION']._serialized_end=8647 - _globals['_PLAYBOOKSTEPRESULTCONDITION_RULESET']._serialized_start=8453 - _globals['_PLAYBOOKSTEPRESULTCONDITION_RULESET']._serialized_end=8647 - _globals['_PLAYBOOKSTEP']._serialized_start=8650 - _globals['_PLAYBOOKSTEP']._serialized_end=9140 - _globals['_PLAYBOOKSTEPRELATION']._serialized_start=9143 - _globals['_PLAYBOOKSTEPRELATION']._serialized_end=9430 - _globals['_PLAYBOOKSTEPRELATIONEXECUTIONLOG']._serialized_start=9433 - _globals['_PLAYBOOKSTEPRELATIONEXECUTIONLOG']._serialized_end=9756 - _globals['_PLAYBOOKSTEPEXECUTIONLOG']._serialized_start=9759 - _globals['_PLAYBOOKSTEPEXECUTIONLOG']._serialized_end=10282 - _globals['_PLAYBOOK']._serialized_start=10285 - _globals['_PLAYBOOK']._serialized_end=10813 - _globals['_PLAYBOOKEXECUTION']._serialized_start=10816 - _globals['_PLAYBOOKEXECUTION']._serialized_end=11348 - _globals['_UPDATEPLAYBOOKOP']._serialized_start=11351 - _globals['_UPDATEPLAYBOOKOP']._serialized_end=12006 - _globals['_UPDATEPLAYBOOKOP_UPDATEPLAYBOOKNAME']._serialized_start=11698 - _globals['_UPDATEPLAYBOOKOP_UPDATEPLAYBOOKNAME']._serialized_end=11762 - _globals['_UPDATEPLAYBOOKOP_UPDATEPLAYBOOKSTATUS']._serialized_start=11764 - _globals['_UPDATEPLAYBOOKOP_UPDATEPLAYBOOKSTATUS']._serialized_end=11833 - _globals['_UPDATEPLAYBOOKOP_UPDATEPLAYBOOK']._serialized_start=11835 - _globals['_UPDATEPLAYBOOKOP_UPDATEPLAYBOOK']._serialized_end=11902 - _globals['_UPDATEPLAYBOOKOP_OP']._serialized_start=11904 - _globals['_UPDATEPLAYBOOKOP_OP']._serialized_end=11996 + _globals['_VARIABLE']._serialized_start=2849 + _globals['_VARIABLE']._serialized_end=3181 + _globals['_UPDATEVARIABLEOP']._serialized_start=3184 + _globals['_UPDATEVARIABLEOP']._serialized_end=3621 + _globals['_UPDATEVARIABLEOP_UPDATEVARIABLE']._serialized_start=3422 + _globals['_UPDATEVARIABLEOP_UPDATEVARIABLE']._serialized_end=3489 + _globals['_UPDATEVARIABLEOP_UPDATESTATUS']._serialized_start=3491 + _globals['_UPDATEVARIABLEOP_UPDATESTATUS']._serialized_end=3552 + _globals['_UPDATEVARIABLEOP_OP']._serialized_start=3554 + _globals['_UPDATEVARIABLEOP_OP']._serialized_end=3611 + _globals['_PLAYBOOKTASK']._serialized_start=3624 + _globals['_PLAYBOOKTASK']._serialized_end=7148 + _globals['_PLAYBOOKTASK_PLAYBOOKTASKCONNECTORSOURCE']._serialized_start=6358 + _globals['_PLAYBOOKTASK_PLAYBOOKTASKCONNECTORSOURCE']._serialized_end=6618 + _globals['_PLAYBOOKTASK_EXECUTIONCONFIGURATION']._serialized_start=6621 + _globals['_PLAYBOOKTASK_EXECUTIONCONFIGURATION']._serialized_end=7140 + _globals['_PLAYBOOKTASKRESULTRULE']._serialized_start=7151 + _globals['_PLAYBOOKTASKRESULTRULE']._serialized_end=7558 + _globals['_PLAYBOOKTASKEXECUTIONLOG']._serialized_start=7561 + _globals['_PLAYBOOKTASKEXECUTIONLOG']._serialized_end=8404 + _globals['_PLAYBOOKTASKEXECUTIONLOG_APPROVALCONTEXT']._serialized_start=8207 + _globals['_PLAYBOOKTASKEXECUTIONLOG_APPROVALCONTEXT']._serialized_end=8404 + _globals['_PLAYBOOKSTEPRESULTCONDITION']._serialized_start=8407 + _globals['_PLAYBOOKSTEPRESULTCONDITION']._serialized_end=8768 + _globals['_PLAYBOOKSTEPRESULTCONDITION_RULESET']._serialized_start=8574 + _globals['_PLAYBOOKSTEPRESULTCONDITION_RULESET']._serialized_end=8768 + _globals['_PLAYBOOKSTEP']._serialized_start=8771 + _globals['_PLAYBOOKSTEP']._serialized_end=9261 + _globals['_PLAYBOOKSTEPRELATION']._serialized_start=9264 + _globals['_PLAYBOOKSTEPRELATION']._serialized_end=9551 + _globals['_PLAYBOOKSTEPRELATIONEXECUTIONLOG']._serialized_start=9554 + _globals['_PLAYBOOKSTEPRELATIONEXECUTIONLOG']._serialized_end=9877 + _globals['_PLAYBOOKSTEPEXECUTIONLOG']._serialized_start=9880 + _globals['_PLAYBOOKSTEPEXECUTIONLOG']._serialized_end=10403 + _globals['_PLAYBOOK']._serialized_start=10406 + _globals['_PLAYBOOK']._serialized_end=10934 + _globals['_PLAYBOOKEXECUTION']._serialized_start=10937 + _globals['_PLAYBOOKEXECUTION']._serialized_end=11469 + _globals['_UPDATEPLAYBOOKOP']._serialized_start=11472 + _globals['_UPDATEPLAYBOOKOP']._serialized_end=12127 + _globals['_UPDATEPLAYBOOKOP_UPDATEPLAYBOOKNAME']._serialized_start=11819 + _globals['_UPDATEPLAYBOOKOP_UPDATEPLAYBOOKNAME']._serialized_end=11883 + _globals['_UPDATEPLAYBOOKOP_UPDATEPLAYBOOKSTATUS']._serialized_start=11885 + _globals['_UPDATEPLAYBOOKOP_UPDATEPLAYBOOKSTATUS']._serialized_end=11954 + _globals['_UPDATEPLAYBOOKOP_UPDATEPLAYBOOK']._serialized_start=11956 + _globals['_UPDATEPLAYBOOKOP_UPDATEPLAYBOOK']._serialized_end=12023 + _globals['_UPDATEPLAYBOOKOP_OP']._serialized_start=12025 + _globals['_UPDATEPLAYBOOKOP_OP']._serialized_end=12117 # @@protoc_insertion_point(module_scope) diff --git a/drdroid_debug_toolkit/core/protos/playbooks/playbook_pb2.pyi b/drdroid_debug_toolkit/core/protos/playbooks/playbook_pb2.pyi index cd7aed0..23bbbac 100644 --- a/drdroid_debug_toolkit/core/protos/playbooks/playbook_pb2.pyi +++ b/drdroid_debug_toolkit/core/protos/playbooks/playbook_pb2.pyi @@ -33,6 +33,7 @@ import core.protos.playbooks.source_task_definitions.jira_task_pb2 import core.protos.playbooks.source_task_definitions.kubectl_task_pb2 import core.protos.playbooks.source_task_definitions.lambda_function_task_pb2 import core.protos.playbooks.source_task_definitions.mcp_task_pb2 +import core.protos.playbooks.source_task_definitions.metabase_task_pb2 import core.protos.playbooks.source_task_definitions.mongodb_task_pb2 import core.protos.playbooks.source_task_definitions.new_relic_task_pb2 import core.protos.playbooks.source_task_definitions.open_search_task_pb2 @@ -302,6 +303,7 @@ class PlaybookTask(google.protobuf.message.Message): OPS_GENIE_FIELD_NUMBER: builtins.int VICTORIA_LOGS_FIELD_NUMBER: builtins.int MCP_SERVER_FIELD_NUMBER: builtins.int + METABASE_FIELD_NUMBER: builtins.int @property def id(self) -> google.protobuf.wrappers_pb2.UInt64Value: ... source: core.protos.base_pb2.Source.ValueType @@ -396,6 +398,8 @@ class PlaybookTask(google.protobuf.message.Message): def victoria_logs(self) -> core.protos.playbooks.source_task_definitions.victoria_logs_task_pb2.VictoriaLogs: ... @property def mcp_server(self) -> core.protos.playbooks.source_task_definitions.mcp_task_pb2.McpServer: ... + @property + def metabase(self) -> core.protos.playbooks.source_task_definitions.metabase_task_pb2.Metabase: ... def __init__( self, *, @@ -447,10 +451,11 @@ class PlaybookTask(google.protobuf.message.Message): ops_genie: core.protos.playbooks.source_task_definitions.opsgenie_task_pb2.OpsGenie | None = ..., victoria_logs: core.protos.playbooks.source_task_definitions.victoria_logs_task_pb2.VictoriaLogs | None = ..., mcp_server: core.protos.playbooks.source_task_definitions.mcp_task_pb2.McpServer | None = ..., + metabase: core.protos.playbooks.source_task_definitions.metabase_task_pb2.Metabase | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["api", b"api", "argocd", b"argocd", "azure", b"azure", "bash", b"bash", "big_query", b"big_query", "clickhouse", b"clickhouse", "cloudwatch", b"cloudwatch", "coralogix", b"coralogix", "created_by", b"created_by", "datadog", b"datadog", "description", b"description", "documentation", b"documentation", "drd_proxy_agent", b"drd_proxy_agent", "eks", b"eks", "elastic_search", b"elastic_search", "execution_configuration", b"execution_configuration", "gcm", b"gcm", "github", b"github", "github_actions", b"github_actions", "gke", b"gke", "global_variable_set", b"global_variable_set", "grafana", b"grafana", "grafana_loki", b"grafana_loki", "grafana_mimir", b"grafana_mimir", "id", b"id", "jenkins", b"jenkins", "jira_cloud", b"jira_cloud", "kubernetes", b"kubernetes", "lambda", b"lambda", "mcp_server", b"mcp_server", "mongodb", b"mongodb", "name", b"name", "new_relic", b"new_relic", "notes", b"notes", "open_search", b"open_search", "ops_genie", b"ops_genie", "postgres", b"postgres", "posthog", b"posthog", "reference_id", b"reference_id", "render", b"render", "sentry", b"sentry", "signoz", b"signoz", "slack", b"slack", "smtp", b"smtp", "sql_database_connection", b"sql_database_connection", "task", b"task", "victoria_logs", b"victoria_logs"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["api", b"api", "argocd", b"argocd", "azure", b"azure", "bash", b"bash", "big_query", b"big_query", "clickhouse", b"clickhouse", "cloudwatch", b"cloudwatch", "coralogix", b"coralogix", "created_by", b"created_by", "datadog", b"datadog", "description", b"description", "documentation", b"documentation", "drd_proxy_agent", b"drd_proxy_agent", "eks", b"eks", "elastic_search", b"elastic_search", "execution_configuration", b"execution_configuration", "gcm", b"gcm", "github", b"github", "github_actions", b"github_actions", "gke", b"gke", "global_variable_set", b"global_variable_set", "grafana", b"grafana", "grafana_loki", b"grafana_loki", "grafana_mimir", b"grafana_mimir", "id", b"id", "interpreter_type", b"interpreter_type", "jenkins", b"jenkins", "jira_cloud", b"jira_cloud", "kubernetes", b"kubernetes", "lambda", b"lambda", "mcp_server", b"mcp_server", "mongodb", b"mongodb", "name", b"name", "new_relic", b"new_relic", "notes", b"notes", "open_search", b"open_search", "ops_genie", b"ops_genie", "postgres", b"postgres", "posthog", b"posthog", "reference_id", b"reference_id", "render", b"render", "sentry", b"sentry", "signoz", b"signoz", "slack", b"slack", "smtp", b"smtp", "source", b"source", "sql_database_connection", b"sql_database_connection", "task", b"task", "task_connector_sources", b"task_connector_sources", "victoria_logs", b"victoria_logs"]) -> None: ... - def WhichOneof(self, oneof_group: typing_extensions.Literal["task", b"task"]) -> typing_extensions.Literal["documentation", "cloudwatch", "grafana", "new_relic", "datadog", "clickhouse", "postgres", "eks", "sql_database_connection", "api", "bash", "grafana_mimir", "azure", "gke", "elastic_search", "grafana_loki", "kubernetes", "gcm", "smtp", "slack", "big_query", "mongodb", "open_search", "jenkins", "github", "sentry", "github_actions", "argocd", "jira_cloud", "lambda", "drd_proxy_agent", "posthog", "signoz", "render", "coralogix", "ops_genie", "victoria_logs", "mcp_server"] | None: ... + def HasField(self, field_name: typing_extensions.Literal["api", b"api", "argocd", b"argocd", "azure", b"azure", "bash", b"bash", "big_query", b"big_query", "clickhouse", b"clickhouse", "cloudwatch", b"cloudwatch", "coralogix", b"coralogix", "created_by", b"created_by", "datadog", b"datadog", "description", b"description", "documentation", b"documentation", "drd_proxy_agent", b"drd_proxy_agent", "eks", b"eks", "elastic_search", b"elastic_search", "execution_configuration", b"execution_configuration", "gcm", b"gcm", "github", b"github", "github_actions", b"github_actions", "gke", b"gke", "global_variable_set", b"global_variable_set", "grafana", b"grafana", "grafana_loki", b"grafana_loki", "grafana_mimir", b"grafana_mimir", "id", b"id", "jenkins", b"jenkins", "jira_cloud", b"jira_cloud", "kubernetes", b"kubernetes", "lambda", b"lambda", "mcp_server", b"mcp_server", "metabase", b"metabase", "mongodb", b"mongodb", "name", b"name", "new_relic", b"new_relic", "notes", b"notes", "open_search", b"open_search", "ops_genie", b"ops_genie", "postgres", b"postgres", "posthog", b"posthog", "reference_id", b"reference_id", "render", b"render", "sentry", b"sentry", "signoz", b"signoz", "slack", b"slack", "smtp", b"smtp", "sql_database_connection", b"sql_database_connection", "task", b"task", "victoria_logs", b"victoria_logs"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["api", b"api", "argocd", b"argocd", "azure", b"azure", "bash", b"bash", "big_query", b"big_query", "clickhouse", b"clickhouse", "cloudwatch", b"cloudwatch", "coralogix", b"coralogix", "created_by", b"created_by", "datadog", b"datadog", "description", b"description", "documentation", b"documentation", "drd_proxy_agent", b"drd_proxy_agent", "eks", b"eks", "elastic_search", b"elastic_search", "execution_configuration", b"execution_configuration", "gcm", b"gcm", "github", b"github", "github_actions", b"github_actions", "gke", b"gke", "global_variable_set", b"global_variable_set", "grafana", b"grafana", "grafana_loki", b"grafana_loki", "grafana_mimir", b"grafana_mimir", "id", b"id", "interpreter_type", b"interpreter_type", "jenkins", b"jenkins", "jira_cloud", b"jira_cloud", "kubernetes", b"kubernetes", "lambda", b"lambda", "mcp_server", b"mcp_server", "metabase", b"metabase", "mongodb", b"mongodb", "name", b"name", "new_relic", b"new_relic", "notes", b"notes", "open_search", b"open_search", "ops_genie", b"ops_genie", "postgres", b"postgres", "posthog", b"posthog", "reference_id", b"reference_id", "render", b"render", "sentry", b"sentry", "signoz", b"signoz", "slack", b"slack", "smtp", b"smtp", "source", b"source", "sql_database_connection", b"sql_database_connection", "task", b"task", "task_connector_sources", b"task_connector_sources", "victoria_logs", b"victoria_logs"]) -> None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["task", b"task"]) -> typing_extensions.Literal["documentation", "cloudwatch", "grafana", "new_relic", "datadog", "clickhouse", "postgres", "eks", "sql_database_connection", "api", "bash", "grafana_mimir", "azure", "gke", "elastic_search", "grafana_loki", "kubernetes", "gcm", "smtp", "slack", "big_query", "mongodb", "open_search", "jenkins", "github", "sentry", "github_actions", "argocd", "jira_cloud", "lambda", "drd_proxy_agent", "posthog", "signoz", "render", "coralogix", "ops_genie", "victoria_logs", "mcp_server", "metabase"] | None: ... global___PlaybookTask = PlaybookTask diff --git a/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/metabase_task.proto b/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/metabase_task.proto new file mode 100644 index 0000000..aaaee29 --- /dev/null +++ b/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/metabase_task.proto @@ -0,0 +1,82 @@ +syntax = "proto3"; +package core.protos.playbooks; + +import "google/protobuf/wrappers.proto"; +import "google/protobuf/struct.proto"; + +message Metabase { + enum TaskType { + UNKNOWN = 0; + LIST_ALERTS = 1; + GET_ALERT = 2; + CREATE_ALERT = 3; + UPDATE_ALERT = 4; + DELETE_ALERT = 5; + LIST_PULSES = 6; + GET_PULSE = 7; + CREATE_PULSE = 8; + UPDATE_PULSE = 9; + DELETE_PULSE = 10; + } + + message ListAlerts {} + + message GetAlert { + google.protobuf.Int64Value alert_id = 1; + } + + message CreateAlert { + google.protobuf.Int64Value card_id = 1; + google.protobuf.StringValue alert_condition = 2; + optional google.protobuf.BoolValue alert_above_goal = 3; + optional google.protobuf.BoolValue alert_first_only = 4; + google.protobuf.Struct channels = 5; + } + + message UpdateAlert { + google.protobuf.Int64Value alert_id = 1; + google.protobuf.Struct updates = 2; + } + + message DeleteAlert { + google.protobuf.Int64Value alert_id = 1; + } + + message ListPulses {} + + message GetPulse { + google.protobuf.Int64Value pulse_id = 1; + } + + message CreatePulse { + google.protobuf.StringValue name = 1; + optional google.protobuf.Int64Value dashboard_id = 2; + optional google.protobuf.Int64Value collection_id = 3; + google.protobuf.Struct cards = 4; + google.protobuf.Struct channels = 5; + optional google.protobuf.BoolValue skip_if_empty = 6; + } + + message UpdatePulse { + google.protobuf.Int64Value pulse_id = 1; + google.protobuf.Struct updates = 2; + } + + message DeletePulse { + google.protobuf.Int64Value pulse_id = 1; + } + + TaskType type = 1; + oneof task { + ListAlerts list_alerts = 2; + GetAlert get_alert = 3; + CreateAlert create_alert = 4; + UpdateAlert update_alert = 5; + DeleteAlert delete_alert = 6; + ListPulses list_pulses = 7; + GetPulse get_pulse = 8; + CreatePulse create_pulse = 9; + UpdatePulse update_pulse = 10; + DeletePulse delete_pulse = 11; + } +} diff --git a/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/metabase_task_pb2.py b/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/metabase_task_pb2.py new file mode 100644 index 0000000..5fc2d80 --- /dev/null +++ b/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/metabase_task_pb2.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: core/protos/playbooks/source_task_definitions/metabase_task.proto +# Protobuf Python Version: 5.29.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 0, + '', + 'core/protos/playbooks/source_task_definitions/metabase_task.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\nAcore/protos/playbooks/source_task_definitions/metabase_task.proto\x12\x15\x63ore.protos.playbooks\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xbd\x10\n\x08Metabase\x12\x36\n\x04type\x18\x01 \x01(\x0e\x32(.core.protos.playbooks.Metabase.TaskType\x12\x41\n\x0blist_alerts\x18\x02 \x01(\x0b\x32*.core.protos.playbooks.Metabase.ListAlertsH\x00\x12=\n\tget_alert\x18\x03 \x01(\x0b\x32(.core.protos.playbooks.Metabase.GetAlertH\x00\x12\x43\n\x0c\x63reate_alert\x18\x04 \x01(\x0b\x32+.core.protos.playbooks.Metabase.CreateAlertH\x00\x12\x43\n\x0cupdate_alert\x18\x05 \x01(\x0b\x32+.core.protos.playbooks.Metabase.UpdateAlertH\x00\x12\x43\n\x0c\x64\x65lete_alert\x18\x06 \x01(\x0b\x32+.core.protos.playbooks.Metabase.DeleteAlertH\x00\x12\x41\n\x0blist_pulses\x18\x07 \x01(\x0b\x32*.core.protos.playbooks.Metabase.ListPulsesH\x00\x12=\n\tget_pulse\x18\x08 \x01(\x0b\x32(.core.protos.playbooks.Metabase.GetPulseH\x00\x12\x43\n\x0c\x63reate_pulse\x18\t \x01(\x0b\x32+.core.protos.playbooks.Metabase.CreatePulseH\x00\x12\x43\n\x0cupdate_pulse\x18\n \x01(\x0b\x32+.core.protos.playbooks.Metabase.UpdatePulseH\x00\x12\x43\n\x0c\x64\x65lete_pulse\x18\x0b \x01(\x0b\x32+.core.protos.playbooks.Metabase.DeletePulseH\x00\x1a\x0c\n\nListAlerts\x1a\x39\n\x08GetAlert\x12-\n\x08\x61lert_id\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x1a\xbd\x02\n\x0b\x43reateAlert\x12,\n\x07\x63\x61rd_id\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x35\n\x0f\x61lert_condition\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x39\n\x10\x61lert_above_goal\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueH\x00\x88\x01\x01\x12\x39\n\x10\x61lert_first_only\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueH\x01\x88\x01\x01\x12)\n\x08\x63hannels\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructB\x13\n\x11_alert_above_goalB\x13\n\x11_alert_first_only\x1a\x66\n\x0bUpdateAlert\x12-\n\x08\x61lert_id\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12(\n\x07updates\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x1a<\n\x0b\x44\x65leteAlert\x12-\n\x08\x61lert_id\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x1a\x0c\n\nListPulses\x1a\x39\n\x08GetPulse\x12-\n\x08pulse_id\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x1a\xea\x02\n\x0b\x43reatePulse\x12*\n\x04name\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x0c\x64\x61shboard_id\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64ValueH\x00\x88\x01\x01\x12\x37\n\rcollection_id\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int64ValueH\x01\x88\x01\x01\x12&\n\x05\x63\x61rds\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12)\n\x08\x63hannels\x18\x05 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x36\n\rskip_if_empty\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueH\x02\x88\x01\x01\x42\x0f\n\r_dashboard_idB\x10\n\x0e_collection_idB\x10\n\x0e_skip_if_empty\x1a\x66\n\x0bUpdatePulse\x12-\n\x08pulse_id\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12(\n\x07updates\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x1a<\n\x0b\x44\x65letePulse\x12-\n\x08pulse_id\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\"\xc3\x01\n\x08TaskType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0f\n\x0bLIST_ALERTS\x10\x01\x12\r\n\tGET_ALERT\x10\x02\x12\x10\n\x0c\x43REATE_ALERT\x10\x03\x12\x10\n\x0cUPDATE_ALERT\x10\x04\x12\x10\n\x0c\x44\x45LETE_ALERT\x10\x05\x12\x0f\n\x0bLIST_PULSES\x10\x06\x12\r\n\tGET_PULSE\x10\x07\x12\x10\n\x0c\x43REATE_PULSE\x10\x08\x12\x10\n\x0cUPDATE_PULSE\x10\t\x12\x10\n\x0c\x44\x45LETE_PULSE\x10\nB\x06\n\x04taskb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'core.protos.playbooks.source_task_definitions.metabase_task_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_METABASE']._serialized_start=155 + _globals['_METABASE']._serialized_end=2264 + _globals['_METABASE_LISTALERTS']._serialized_start=897 + _globals['_METABASE_LISTALERTS']._serialized_end=909 + _globals['_METABASE_GETALERT']._serialized_start=911 + _globals['_METABASE_GETALERT']._serialized_end=968 + _globals['_METABASE_CREATEALERT']._serialized_start=971 + _globals['_METABASE_CREATEALERT']._serialized_end=1288 + _globals['_METABASE_UPDATEALERT']._serialized_start=1290 + _globals['_METABASE_UPDATEALERT']._serialized_end=1392 + _globals['_METABASE_DELETEALERT']._serialized_start=1394 + _globals['_METABASE_DELETEALERT']._serialized_end=1454 + _globals['_METABASE_LISTPULSES']._serialized_start=1456 + _globals['_METABASE_LISTPULSES']._serialized_end=1468 + _globals['_METABASE_GETPULSE']._serialized_start=1470 + _globals['_METABASE_GETPULSE']._serialized_end=1527 + _globals['_METABASE_CREATEPULSE']._serialized_start=1530 + _globals['_METABASE_CREATEPULSE']._serialized_end=1892 + _globals['_METABASE_UPDATEPULSE']._serialized_start=1894 + _globals['_METABASE_UPDATEPULSE']._serialized_end=1996 + _globals['_METABASE_DELETEPULSE']._serialized_start=1998 + _globals['_METABASE_DELETEPULSE']._serialized_end=2058 + _globals['_METABASE_TASKTYPE']._serialized_start=2061 + _globals['_METABASE_TASKTYPE']._serialized_end=2256 +# @@protoc_insertion_point(module_scope) diff --git a/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/metabase_task_pb2.pyi b/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/metabase_task_pb2.pyi new file mode 100644 index 0000000..93d952b --- /dev/null +++ b/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/metabase_task_pb2.pyi @@ -0,0 +1,297 @@ +""" +@generated by mypy-protobuf. Do not edit manually! +isort:skip_file +""" +import builtins +import google.protobuf.descriptor +import google.protobuf.internal.enum_type_wrapper +import google.protobuf.message +import google.protobuf.struct_pb2 +import google.protobuf.wrappers_pb2 +import sys +import typing + +if sys.version_info >= (3, 10): + import typing as typing_extensions +else: + import typing_extensions + +DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + +@typing_extensions.final +class Metabase(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + class _TaskType: + ValueType = typing.NewType("ValueType", builtins.int) + V: typing_extensions.TypeAlias = ValueType + + class _TaskTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Metabase._TaskType.ValueType], builtins.type): # noqa: F821 + DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + UNKNOWN: Metabase._TaskType.ValueType # 0 + LIST_ALERTS: Metabase._TaskType.ValueType # 1 + GET_ALERT: Metabase._TaskType.ValueType # 2 + CREATE_ALERT: Metabase._TaskType.ValueType # 3 + UPDATE_ALERT: Metabase._TaskType.ValueType # 4 + DELETE_ALERT: Metabase._TaskType.ValueType # 5 + LIST_PULSES: Metabase._TaskType.ValueType # 6 + GET_PULSE: Metabase._TaskType.ValueType # 7 + CREATE_PULSE: Metabase._TaskType.ValueType # 8 + UPDATE_PULSE: Metabase._TaskType.ValueType # 9 + DELETE_PULSE: Metabase._TaskType.ValueType # 10 + + class TaskType(_TaskType, metaclass=_TaskTypeEnumTypeWrapper): ... + UNKNOWN: Metabase.TaskType.ValueType # 0 + LIST_ALERTS: Metabase.TaskType.ValueType # 1 + GET_ALERT: Metabase.TaskType.ValueType # 2 + CREATE_ALERT: Metabase.TaskType.ValueType # 3 + UPDATE_ALERT: Metabase.TaskType.ValueType # 4 + DELETE_ALERT: Metabase.TaskType.ValueType # 5 + LIST_PULSES: Metabase.TaskType.ValueType # 6 + GET_PULSE: Metabase.TaskType.ValueType # 7 + CREATE_PULSE: Metabase.TaskType.ValueType # 8 + UPDATE_PULSE: Metabase.TaskType.ValueType # 9 + DELETE_PULSE: Metabase.TaskType.ValueType # 10 + + @typing_extensions.final + class ListAlerts(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + def __init__( + self, + ) -> None: ... + + @typing_extensions.final + class GetAlert(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + ALERT_ID_FIELD_NUMBER: builtins.int + @property + def alert_id(self) -> google.protobuf.wrappers_pb2.Int64Value: ... + def __init__( + self, + *, + alert_id: google.protobuf.wrappers_pb2.Int64Value | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["alert_id", b"alert_id"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["alert_id", b"alert_id"]) -> None: ... + + @typing_extensions.final + class CreateAlert(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + CARD_ID_FIELD_NUMBER: builtins.int + ALERT_CONDITION_FIELD_NUMBER: builtins.int + ALERT_ABOVE_GOAL_FIELD_NUMBER: builtins.int + ALERT_FIRST_ONLY_FIELD_NUMBER: builtins.int + CHANNELS_FIELD_NUMBER: builtins.int + @property + def card_id(self) -> google.protobuf.wrappers_pb2.Int64Value: ... + @property + def alert_condition(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def alert_above_goal(self) -> google.protobuf.wrappers_pb2.BoolValue: ... + @property + def alert_first_only(self) -> google.protobuf.wrappers_pb2.BoolValue: ... + @property + def channels(self) -> google.protobuf.struct_pb2.Struct: ... + def __init__( + self, + *, + card_id: google.protobuf.wrappers_pb2.Int64Value | None = ..., + alert_condition: google.protobuf.wrappers_pb2.StringValue | None = ..., + alert_above_goal: google.protobuf.wrappers_pb2.BoolValue | None = ..., + alert_first_only: google.protobuf.wrappers_pb2.BoolValue | None = ..., + channels: google.protobuf.struct_pb2.Struct | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["_alert_above_goal", b"_alert_above_goal", "_alert_first_only", b"_alert_first_only", "alert_above_goal", b"alert_above_goal", "alert_condition", b"alert_condition", "alert_first_only", b"alert_first_only", "card_id", b"card_id", "channels", b"channels"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["_alert_above_goal", b"_alert_above_goal", "_alert_first_only", b"_alert_first_only", "alert_above_goal", b"alert_above_goal", "alert_condition", b"alert_condition", "alert_first_only", b"alert_first_only", "card_id", b"card_id", "channels", b"channels"]) -> None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing_extensions.Literal["_alert_above_goal", b"_alert_above_goal"]) -> typing_extensions.Literal["alert_above_goal"] | None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing_extensions.Literal["_alert_first_only", b"_alert_first_only"]) -> typing_extensions.Literal["alert_first_only"] | None: ... + + @typing_extensions.final + class UpdateAlert(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + ALERT_ID_FIELD_NUMBER: builtins.int + UPDATES_FIELD_NUMBER: builtins.int + @property + def alert_id(self) -> google.protobuf.wrappers_pb2.Int64Value: ... + @property + def updates(self) -> google.protobuf.struct_pb2.Struct: ... + def __init__( + self, + *, + alert_id: google.protobuf.wrappers_pb2.Int64Value | None = ..., + updates: google.protobuf.struct_pb2.Struct | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["alert_id", b"alert_id", "updates", b"updates"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["alert_id", b"alert_id", "updates", b"updates"]) -> None: ... + + @typing_extensions.final + class DeleteAlert(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + ALERT_ID_FIELD_NUMBER: builtins.int + @property + def alert_id(self) -> google.protobuf.wrappers_pb2.Int64Value: ... + def __init__( + self, + *, + alert_id: google.protobuf.wrappers_pb2.Int64Value | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["alert_id", b"alert_id"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["alert_id", b"alert_id"]) -> None: ... + + @typing_extensions.final + class ListPulses(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + def __init__( + self, + ) -> None: ... + + @typing_extensions.final + class GetPulse(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + PULSE_ID_FIELD_NUMBER: builtins.int + @property + def pulse_id(self) -> google.protobuf.wrappers_pb2.Int64Value: ... + def __init__( + self, + *, + pulse_id: google.protobuf.wrappers_pb2.Int64Value | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["pulse_id", b"pulse_id"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["pulse_id", b"pulse_id"]) -> None: ... + + @typing_extensions.final + class CreatePulse(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + NAME_FIELD_NUMBER: builtins.int + DASHBOARD_ID_FIELD_NUMBER: builtins.int + COLLECTION_ID_FIELD_NUMBER: builtins.int + CARDS_FIELD_NUMBER: builtins.int + CHANNELS_FIELD_NUMBER: builtins.int + SKIP_IF_EMPTY_FIELD_NUMBER: builtins.int + @property + def name(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def dashboard_id(self) -> google.protobuf.wrappers_pb2.Int64Value: ... + @property + def collection_id(self) -> google.protobuf.wrappers_pb2.Int64Value: ... + @property + def cards(self) -> google.protobuf.struct_pb2.Struct: ... + @property + def channels(self) -> google.protobuf.struct_pb2.Struct: ... + @property + def skip_if_empty(self) -> google.protobuf.wrappers_pb2.BoolValue: ... + def __init__( + self, + *, + name: google.protobuf.wrappers_pb2.StringValue | None = ..., + dashboard_id: google.protobuf.wrappers_pb2.Int64Value | None = ..., + collection_id: google.protobuf.wrappers_pb2.Int64Value | None = ..., + cards: google.protobuf.struct_pb2.Struct | None = ..., + channels: google.protobuf.struct_pb2.Struct | None = ..., + skip_if_empty: google.protobuf.wrappers_pb2.BoolValue | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["_collection_id", b"_collection_id", "_dashboard_id", b"_dashboard_id", "_skip_if_empty", b"_skip_if_empty", "cards", b"cards", "channels", b"channels", "collection_id", b"collection_id", "dashboard_id", b"dashboard_id", "name", b"name", "skip_if_empty", b"skip_if_empty"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["_collection_id", b"_collection_id", "_dashboard_id", b"_dashboard_id", "_skip_if_empty", b"_skip_if_empty", "cards", b"cards", "channels", b"channels", "collection_id", b"collection_id", "dashboard_id", b"dashboard_id", "name", b"name", "skip_if_empty", b"skip_if_empty"]) -> None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing_extensions.Literal["_collection_id", b"_collection_id"]) -> typing_extensions.Literal["collection_id"] | None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing_extensions.Literal["_dashboard_id", b"_dashboard_id"]) -> typing_extensions.Literal["dashboard_id"] | None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing_extensions.Literal["_skip_if_empty", b"_skip_if_empty"]) -> typing_extensions.Literal["skip_if_empty"] | None: ... + + @typing_extensions.final + class UpdatePulse(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + PULSE_ID_FIELD_NUMBER: builtins.int + UPDATES_FIELD_NUMBER: builtins.int + @property + def pulse_id(self) -> google.protobuf.wrappers_pb2.Int64Value: ... + @property + def updates(self) -> google.protobuf.struct_pb2.Struct: ... + def __init__( + self, + *, + pulse_id: google.protobuf.wrappers_pb2.Int64Value | None = ..., + updates: google.protobuf.struct_pb2.Struct | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["pulse_id", b"pulse_id", "updates", b"updates"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["pulse_id", b"pulse_id", "updates", b"updates"]) -> None: ... + + @typing_extensions.final + class DeletePulse(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + PULSE_ID_FIELD_NUMBER: builtins.int + @property + def pulse_id(self) -> google.protobuf.wrappers_pb2.Int64Value: ... + def __init__( + self, + *, + pulse_id: google.protobuf.wrappers_pb2.Int64Value | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["pulse_id", b"pulse_id"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["pulse_id", b"pulse_id"]) -> None: ... + + TYPE_FIELD_NUMBER: builtins.int + LIST_ALERTS_FIELD_NUMBER: builtins.int + GET_ALERT_FIELD_NUMBER: builtins.int + CREATE_ALERT_FIELD_NUMBER: builtins.int + UPDATE_ALERT_FIELD_NUMBER: builtins.int + DELETE_ALERT_FIELD_NUMBER: builtins.int + LIST_PULSES_FIELD_NUMBER: builtins.int + GET_PULSE_FIELD_NUMBER: builtins.int + CREATE_PULSE_FIELD_NUMBER: builtins.int + UPDATE_PULSE_FIELD_NUMBER: builtins.int + DELETE_PULSE_FIELD_NUMBER: builtins.int + type: global___Metabase.TaskType.ValueType + @property + def list_alerts(self) -> global___Metabase.ListAlerts: ... + @property + def get_alert(self) -> global___Metabase.GetAlert: ... + @property + def create_alert(self) -> global___Metabase.CreateAlert: ... + @property + def update_alert(self) -> global___Metabase.UpdateAlert: ... + @property + def delete_alert(self) -> global___Metabase.DeleteAlert: ... + @property + def list_pulses(self) -> global___Metabase.ListPulses: ... + @property + def get_pulse(self) -> global___Metabase.GetPulse: ... + @property + def create_pulse(self) -> global___Metabase.CreatePulse: ... + @property + def update_pulse(self) -> global___Metabase.UpdatePulse: ... + @property + def delete_pulse(self) -> global___Metabase.DeletePulse: ... + def __init__( + self, + *, + type: global___Metabase.TaskType.ValueType = ..., + list_alerts: global___Metabase.ListAlerts | None = ..., + get_alert: global___Metabase.GetAlert | None = ..., + create_alert: global___Metabase.CreateAlert | None = ..., + update_alert: global___Metabase.UpdateAlert | None = ..., + delete_alert: global___Metabase.DeleteAlert | None = ..., + list_pulses: global___Metabase.ListPulses | None = ..., + get_pulse: global___Metabase.GetPulse | None = ..., + create_pulse: global___Metabase.CreatePulse | None = ..., + update_pulse: global___Metabase.UpdatePulse | None = ..., + delete_pulse: global___Metabase.DeletePulse | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["create_alert", b"create_alert", "create_pulse", b"create_pulse", "delete_alert", b"delete_alert", "delete_pulse", b"delete_pulse", "get_alert", b"get_alert", "get_pulse", b"get_pulse", "list_alerts", b"list_alerts", "list_pulses", b"list_pulses", "task", b"task", "update_alert", b"update_alert", "update_pulse", b"update_pulse"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["create_alert", b"create_alert", "create_pulse", b"create_pulse", "delete_alert", b"delete_alert", "delete_pulse", b"delete_pulse", "get_alert", b"get_alert", "get_pulse", b"get_pulse", "list_alerts", b"list_alerts", "list_pulses", b"list_pulses", "task", b"task", "type", b"type", "update_alert", b"update_alert", "update_pulse", b"update_pulse"]) -> None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["task", b"task"]) -> typing_extensions.Literal["list_alerts", "get_alert", "create_alert", "update_alert", "delete_alert", "list_pulses", "get_pulse", "create_pulse", "update_pulse", "delete_pulse"] | None: ... + +global___Metabase = Metabase