diff --git a/drdroid_debug_toolkit/core/integrations/source_api_processors/bitbucket_api_processor.py b/drdroid_debug_toolkit/core/integrations/source_api_processors/bitbucket_api_processor.py new file mode 100644 index 0000000..30c651e --- /dev/null +++ b/drdroid_debug_toolkit/core/integrations/source_api_processors/bitbucket_api_processor.py @@ -0,0 +1,620 @@ +import logging +import requests + +from datetime import datetime, timezone + +from core.integrations.processor import Processor +from core.settings import EXTERNAL_CALL_TIMEOUT + +logger = logging.getLogger(__name__) + + +class BitbucketAPIProcessor(Processor): + """ + Bitbucket Cloud API Processor using Repository Access Token (Bearer auth). + + Base URL: https://api.bitbucket.org/2.0 + Auth: Bearer token (Repository Access Token) + """ + + BASE_URL = "https://api.bitbucket.org/2.0" + + def __init__(self, api_key, workspace, repo=None): + self.__api_key = api_key + self.workspace = workspace + self.repo = repo + + def _get_headers(self): + return { + "Authorization": f"Bearer {self.__api_key}", + "Accept": "application/json", + } + + def _paginate(self, url, params=None): + """Handle Bitbucket pagination using 'next' URL.""" + results = [] + headers = self._get_headers() + if params is None: + params = {} + params.setdefault("pagelen", 100) + + while url: + try: + response = requests.get(url, headers=headers, params=params, timeout=EXTERNAL_CALL_TIMEOUT) + response.raise_for_status() + data = response.json() + results.extend(data.get("values", [])) + url = data.get("next") + params = None # Only use params for first request + except Exception as e: + logger.error(f"BitbucketAPIProcessor._paginate:: Error during pagination: {e}") + break + + return results + + def test_connection(self): + """Test connection by fetching user info.""" + try: + url = f"{self.BASE_URL}/user" + response = requests.get(url, headers=self._get_headers(), timeout=EXTERNAL_CALL_TIMEOUT) + + if response.status_code == 200: + return True + elif response.status_code == 401: + raise Exception("Authentication failed: Invalid or expired token") + else: + raise Exception(f"Bitbucket connection failed: {response.status_code}, {response.text}") + except Exception as e: + logger.error(f"BitbucketAPIProcessor.test_connection:: Exception occurred: {e}") + raise e + + def get_repository_info(self, repo=None): + """Get repository details.""" + repo = repo or self.repo + if not repo: + raise ValueError("Repository name is required") + + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}" + response = requests.get(url, headers=self._get_headers(), timeout=EXTERNAL_CALL_TIMEOUT) + + if response.status_code == 200: + return response.json() + else: + logger.error(f"BitbucketAPIProcessor.get_repository_info:: Error: {response.status_code}, {response.text}") + return None + except Exception as e: + logger.error(f"BitbucketAPIProcessor.get_repository_info:: Exception: {e}") + return None + + def fetch_file(self, repo, file_path, branch="main", timestamp=None): + """ + Fetch file content from repository. + + Note: Bitbucket returns raw file content, not base64 encoded like GitHub. + """ + try: + # If timestamp provided, get the commit at that time first + if timestamp: + commit_sha = self._get_commit_before_timestamp(repo, file_path, timestamp) + if commit_sha: + branch = commit_sha + + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/src/{branch}/{file_path}" + response = requests.get(url, headers=self._get_headers(), timeout=EXTERNAL_CALL_TIMEOUT) + + if response.status_code == 200: + # Bitbucket returns raw content, wrap it in a dict for consistency + return { + "content": response.text, + "path": file_path, + "type": "file", + } + else: + logger.error(f"BitbucketAPIProcessor.fetch_file:: Error fetching {file_path}: {response.status_code}, {response.text}") + return None + except Exception as e: + logger.error(f"BitbucketAPIProcessor.fetch_file:: Exception fetching {file_path}: {e}") + return None + + def fetch_readme_content(self, repo): + """Fetch README file content from repository root.""" + readme_file_names = ['README.md', 'README', 'README.txt', 'README.rst', 'readme.md', 'readme'] + + for readme_file in readme_file_names: + try: + file_data = self.fetch_file(repo, readme_file) + if file_data and file_data.get('content'): + return file_data['content'] + except Exception as e: + logger.debug(f'Could not fetch {readme_file} for repo {repo}: {e}') + continue + + return None + + def _get_commit_before_timestamp(self, repo, file_path, timestamp): + """Find the latest commit affecting the file before the given timestamp.""" + try: + commits = self.get_file_history(repo, file_path) + if not commits: + return None + + commit_search_datetime = datetime.fromtimestamp(timestamp, tz=timezone.utc) + + for commit in commits: + commit_date_str = commit.get('date', '') + if commit_date_str: + # Bitbucket date format: 2024-01-15T10:30:00+00:00 + commit_time = datetime.fromisoformat(commit_date_str.replace('Z', '+00:00')) + if commit_time <= commit_search_datetime: + return commit.get('hash') + + return None + except Exception as e: + logger.error(f"BitbucketAPIProcessor._get_commit_before_timestamp:: Error: {e}") + return None + + def get_file_history(self, repo, file_path, branch="main"): + """Get commit history for a specific file.""" + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/filehistory/{branch}/{file_path}" + return self._paginate(url) + except Exception as e: + logger.error(f"BitbucketAPIProcessor.get_file_history:: Exception: {e}") + return [] + + def update_file(self, repo, file_path, content, commit_message, branch="main", author=None): + """ + Update or create a file in the repository. + + Note: Bitbucket uses multipart/form-data for file updates, not JSON. + """ + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/src" + + # Bitbucket uses multipart form data + files = { + file_path: (file_path, content), + } + data = { + "message": commit_message, + "branch": branch, + } + if author: + data["author"] = author + + headers = {"Authorization": f"Bearer {self.__api_key}"} # No Content-Type for multipart + + response = requests.post(url, headers=headers, files=files, data=data, timeout=EXTERNAL_CALL_TIMEOUT) + + if response.status_code in [200, 201]: + return {"success": True, "message": "File updated successfully"} + else: + logger.error(f"BitbucketAPIProcessor.update_file:: Error: {response.status_code}, {response.text}") + return None + except Exception as e: + logger.error(f"BitbucketAPIProcessor.update_file:: Exception: {e}") + return None + + def get_commits(self, repo, branch="main", author=None): + """Get commits for a branch.""" + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/commits/{branch}" + params = {} + + commits = self._paginate(url, params) + + # Filter by author if specified + if author and commits: + commits = [c for c in commits if author.lower() in c.get('author', {}).get('raw', '').lower()] + + return commits + except Exception as e: + logger.error(f"BitbucketAPIProcessor.get_commits:: Exception: {e}") + return [] + + def get_commit(self, repo, commit_sha): + """Get details of a specific commit.""" + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/commit/{commit_sha}" + response = requests.get(url, headers=self._get_headers(), timeout=EXTERNAL_CALL_TIMEOUT) + + if response.status_code == 200: + return response.json() + else: + logger.error(f"BitbucketAPIProcessor.get_commit:: Error: {response.status_code}") + return None + except Exception as e: + logger.error(f"BitbucketAPIProcessor.get_commit:: Exception: {e}") + return None + + def get_commit_diff(self, repo, commit_sha): + """Get the diff for a commit.""" + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/diff/{commit_sha}" + response = requests.get(url, headers=self._get_headers(), timeout=EXTERNAL_CALL_TIMEOUT) + + if response.status_code == 200: + return response.text # Diff is returned as plain text + else: + logger.error(f"BitbucketAPIProcessor.get_commit_diff:: Error: {response.status_code}") + return None + except Exception as e: + logger.error(f"BitbucketAPIProcessor.get_commit_diff:: Exception: {e}") + return None + + def list_recent_commits(self, repo, branch="main", since=None, until=None, per_page=100): + """ + List recent commits for a repository with optional date filtering. + + Bitbucket's commits API does not support a 'since' query parameter, + so this method paginates and stops early once commits fall before + the since date (commits are returned in reverse chronological order). + + Args: + repo: Repository slug + branch: Branch name (default "main") + since: ISO 8601 timestamp - only return commits after this date (optional) + until: ISO 8601 timestamp - only return commits before this date (optional) + per_page: Number of commits per page (default 100, max 100) + + Returns: + list: List of commit objects + """ + try: + from datetime import datetime, timezone + + since_dt = None + if since: + since_dt = datetime.fromisoformat(since.replace('Z', '+00:00')) + + until_dt = None + if until: + until_dt = datetime.fromisoformat(until.replace('Z', '+00:00')) + + all_commits = [] + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/commits/{branch}" + params = {"pagelen": min(per_page, 100)} + headers = self._get_headers() + + while url: + response = requests.get(url, headers=headers, params=params, timeout=EXTERNAL_CALL_TIMEOUT) + if response.status_code != 200: + logger.error(f"BitbucketAPIProcessor.list_recent_commits:: Error fetching commits for " + f"{self.workspace}/{repo}: status={response.status_code}") + break + + data = response.json() + commits = data.get("values", []) + if not commits: + break + + stop_paging = False + for commit in commits: + commit_date_str = commit.get("date", "") + if commit_date_str: + try: + commit_dt = datetime.fromisoformat(commit_date_str.replace('Z', '+00:00')) + except (ValueError, TypeError): + commit_dt = None + else: + commit_dt = None + + # Skip commits after 'until' + if until_dt and commit_dt and commit_dt > until_dt: + continue + + # Stop once we reach commits before 'since' + if since_dt and commit_dt and commit_dt < since_dt: + stop_paging = True + break + + all_commits.append(commit) + if len(all_commits) >= per_page: + stop_paging = True + break + + if stop_paging: + break + + url = data.get("next") + params = None # Only use params for first request + + return all_commits + except Exception as e: + logger.error(f"BitbucketAPIProcessor.list_recent_commits:: Exception: {e}") + return [] + + def get_commit_comments(self, repo, commit_sha): + """Get comments on a commit.""" + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/commit/{commit_sha}/comments" + return self._paginate(url) + except Exception as e: + logger.error(f"BitbucketAPIProcessor.get_commit_comments:: Exception: {e}") + return [] + + def get_commit_diffstat(self, repo, commit_sha): + """Get the diffstat (changed files) for a commit.""" + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/diffstat/{commit_sha}" + diffstat = self._paginate(url) + + # Normalize to GitHub-like format + files = [] + for item in diffstat: + new_file = item.get("new") or {} + old_file = item.get("old") or {} + files.append({ + "filename": new_file.get("path") or old_file.get("path"), + "status": item.get("status"), + "lines_added": item.get("lines_added", 0), + "lines_removed": item.get("lines_removed", 0), + }) + return files + except Exception as e: + logger.error(f"BitbucketAPIProcessor.get_commit_diffstat:: Exception: {e}") + return [] + + def list_branches(self, repo): + """List all branches in the repository.""" + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/refs/branches" + return self._paginate(url) + except Exception as e: + logger.error(f"BitbucketAPIProcessor.list_branches:: Exception: {e}") + return [] + + def get_branch(self, repo, branch_name): + """Get details of a specific branch.""" + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/refs/branches/{branch_name}" + response = requests.get(url, headers=self._get_headers(), timeout=EXTERNAL_CALL_TIMEOUT) + + if response.status_code == 200: + return response.json() + else: + logger.error(f"BitbucketAPIProcessor.get_branch:: Error: {response.status_code}") + return None + except Exception as e: + logger.error(f"BitbucketAPIProcessor.get_branch:: Exception: {e}") + return None + + def create_branch(self, repo, branch_name, target_branch="main"): + """Create a new branch from target branch.""" + try: + # Get the target branch to find its commit hash + target = self.get_branch(repo, target_branch) + if not target: + raise Exception(f"Target branch {target_branch} not found") + + target_hash = target.get("target", {}).get("hash") + if not target_hash: + raise Exception(f"Could not get hash for branch {target_branch}") + + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/refs/branches" + payload = { + "name": branch_name, + "target": {"hash": target_hash} + } + + headers = self._get_headers() + headers["Content-Type"] = "application/json" + + response = requests.post(url, headers=headers, json=payload, timeout=EXTERNAL_CALL_TIMEOUT) + + if response.status_code in [200, 201]: + return response.json() + else: + logger.error(f"BitbucketAPIProcessor.create_branch:: Error: {response.status_code}, {response.text}") + return None + except Exception as e: + logger.error(f"BitbucketAPIProcessor.create_branch:: Exception: {e}") + return None + + def list_pull_requests(self, repo, state="OPEN", since=None): + """ + List pull requests. + + state: OPEN, MERGED, DECLINED, SUPERSEDED + since: ISO 8601 timestamp - only return PRs updated after this date (optional) + """ + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/pullrequests" + params = {"state": state, "sort": "-updated_on", "pagelen": 50} + if since: + params["q"] = f'updated_on>{since}' + return self._paginate(url, params) + except Exception as e: + logger.error(f"BitbucketAPIProcessor.list_pull_requests:: Exception: {e}") + return [] + + def get_pull_request(self, repo, pr_id): + """Get details of a specific pull request.""" + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/pullrequests/{pr_id}" + response = requests.get(url, headers=self._get_headers(), timeout=EXTERNAL_CALL_TIMEOUT) + + if response.status_code == 200: + return response.json() + else: + logger.error(f"BitbucketAPIProcessor.get_pull_request:: Error: {response.status_code}") + return None + except Exception as e: + logger.error(f"BitbucketAPIProcessor.get_pull_request:: Exception: {e}") + return None + + def get_pr_diffstat(self, repo, pr_id): + """Get the diffstat (changed files) for a pull request.""" + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/pullrequests/{pr_id}/diffstat" + diffstat = self._paginate(url) + + # Normalize to GitHub-like format + files = [] + for item in diffstat: + new_file = item.get("new") or {} + old_file = item.get("old") or {} + files.append({ + "filename": new_file.get("path") or old_file.get("path"), + "status": item.get("status"), + "lines_added": item.get("lines_added", 0), + "lines_removed": item.get("lines_removed", 0), + }) + return files + except Exception as e: + logger.error(f"BitbucketAPIProcessor.get_pr_diffstat:: Exception: {e}") + return [] + + def get_pr_comments(self, repo, pr_id): + """Get comments on a pull request.""" + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/pullrequests/{pr_id}/comments" + return self._paginate(url) + except Exception as e: + logger.error(f"BitbucketAPIProcessor.get_pr_comments:: Exception: {e}") + return [] + + def create_pull_request(self, repo, title, source_branch, destination_branch, description="", + close_source_branch=False, files_to_update=None, commit_message=None): + """ + Create a pull request. + + If files_to_update is provided, commits those files first. + """ + try: + # If files to update, commit them first + if files_to_update and commit_message: + for file_update in files_to_update: + result = self.update_file( + repo=repo, + file_path=file_update.get('path'), + content=file_update.get('content'), + commit_message=commit_message, + branch=source_branch + ) + if not result: + raise Exception(f"Failed to update file: {file_update.get('path')}") + + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/pullrequests" + payload = { + "title": title, + "description": description, + "source": { + "branch": {"name": source_branch} + }, + "destination": { + "branch": {"name": destination_branch} + }, + "close_source_branch": close_source_branch + } + + headers = self._get_headers() + headers["Content-Type"] = "application/json" + + response = requests.post(url, headers=headers, json=payload, timeout=EXTERNAL_CALL_TIMEOUT) + + if response.status_code in [200, 201]: + return response.json() + else: + logger.error(f"BitbucketAPIProcessor.create_pull_request:: Error: {response.status_code}, {response.text}") + return None + except Exception as e: + logger.error(f"BitbucketAPIProcessor.create_pull_request:: Exception: {e}") + return None + + def merge_pull_request(self, repo, pr_id, merge_strategy="merge_commit"): + """ + Merge a pull request. + + merge_strategy: merge_commit, squash, fast_forward + """ + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/pullrequests/{pr_id}/merge" + payload = { + "merge_strategy": merge_strategy + } + + headers = self._get_headers() + headers["Content-Type"] = "application/json" + + response = requests.post(url, headers=headers, json=payload, timeout=EXTERNAL_CALL_TIMEOUT) + + if response.status_code == 200: + return response.json() + else: + logger.error(f"BitbucketAPIProcessor.merge_pull_request:: Error: {response.status_code}, {response.text}") + return None + except Exception as e: + logger.error(f"BitbucketAPIProcessor.merge_pull_request:: Exception: {e}") + return None + + def get_recent_merges(self, repo, branch="main"): + """Get recently merged pull requests to a branch.""" + try: + prs = self.list_pull_requests(repo, state="MERGED") + + # Filter by destination branch and sort by merge time + merged_prs = [] + for pr in prs: + dest_branch = pr.get("destination", {}).get("branch", {}).get("name") + if dest_branch == branch: + merged_prs.append({ + "id": pr.get("id"), + "title": pr.get("title"), + "author": pr.get("author", {}).get("display_name"), + "source_branch": pr.get("source", {}).get("branch", {}).get("name"), + "destination_branch": dest_branch, + "merged_at": pr.get("updated_on"), + "url": pr.get("links", {}).get("html", {}).get("href"), + }) + + # Sort by merge time (most recent first) + merged_prs.sort(key=lambda x: x.get("merged_at", ""), reverse=True) + + return merged_prs + except Exception as e: + logger.error(f"BitbucketAPIProcessor.get_recent_merges:: Exception: {e}") + return [] + + def list_tags(self, repo): + """List all tags in the repository.""" + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}/{repo}/refs/tags" + return self._paginate(url) + except Exception as e: + logger.error(f"BitbucketAPIProcessor.list_tags:: Exception: {e}") + return [] + + def list_repositories(self): + """List all repositories in the workspace.""" + try: + url = f"{self.BASE_URL}/repositories/{self.workspace}" + return self._paginate(url) + except Exception as e: + logger.error(f"BitbucketAPIProcessor.list_repositories:: Exception: {e}") + return [] + + def list_workspace_members(self): + """List all members in the workspace.""" + try: + url = f"{self.BASE_URL}/workspaces/{self.workspace}/members" + return self._paginate(url) + except Exception as e: + logger.error(f"BitbucketAPIProcessor.list_workspace_members:: Exception: {e}") + return [] + + def get_workspace_info(self): + """Get workspace information.""" + try: + url = f"{self.BASE_URL}/workspaces/{self.workspace}" + response = requests.get(url, headers=self._get_headers(), timeout=EXTERNAL_CALL_TIMEOUT) + + if response.status_code == 200: + return response.json() + else: + logger.error(f"BitbucketAPIProcessor.get_workspace_info:: Error: {response.status_code}") + return None + except Exception as e: + logger.error(f"BitbucketAPIProcessor.get_workspace_info:: Exception: {e}") + return None diff --git a/drdroid_debug_toolkit/core/integrations/source_facade.py b/drdroid_debug_toolkit/core/integrations/source_facade.py index b1b8e2b..3f203de 100644 --- a/drdroid_debug_toolkit/core/integrations/source_facade.py +++ b/drdroid_debug_toolkit/core/integrations/source_facade.py @@ -41,6 +41,7 @@ from core.integrations.source_managers.render_source_manager import RenderSourceManager from core.integrations.source_managers.victoria_logs_source_manager import VictoriaLogsSourceManager from core.integrations.source_managers.metabase_source_manager import MetabaseSourceManager +from core.integrations.source_managers.bitbucket_source_manager import BitbucketSourceManager from core.protos.base_pb2 import Source from core.protos.connectors.connector_pb2 import Connector as ConnectorProto from core.protos.playbooks.playbook_commons_pb2 import PlaybookTaskResult @@ -161,4 +162,5 @@ def get_connector_masked_keys(self, connector_type: Source): source_facade.register(Source.CORALOGIX, CoralogixSourceManager()) source_facade.register(Source.RENDER, RenderSourceManager()) source_facade.register(Source.VICTORIA_LOGS, VictoriaLogsSourceManager()) -source_facade.register(Source.METABASE, MetabaseSourceManager()) \ No newline at end of file +source_facade.register(Source.METABASE, MetabaseSourceManager()) +source_facade.register(Source.BITBUCKET, BitbucketSourceManager()) \ No newline at end of file diff --git a/drdroid_debug_toolkit/core/integrations/source_managers/bitbucket_source_manager.py b/drdroid_debug_toolkit/core/integrations/source_managers/bitbucket_source_manager.py new file mode 100644 index 0000000..3207dc9 --- /dev/null +++ b/drdroid_debug_toolkit/core/integrations/source_managers/bitbucket_source_manager.py @@ -0,0 +1,563 @@ +import logging + +from google.protobuf.struct_pb2 import Struct +from google.protobuf.wrappers_pb2 import StringValue + +from core.utils.credentilal_utils import generate_credentials_dict, get_connector_key_type_string, DISPLAY_NAME, CATEGORY, CODE_REPOSITORY +from core.utils.proto_utils import dict_to_proto + +from core.integrations.source_api_processors.bitbucket_api_processor import BitbucketAPIProcessor +from core.integrations.source_manager import SourceManager +from core.protos.base_pb2 import TimeRange, Source, SourceKeyType +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.bitbucket_task_pb2 import Bitbucket +from core.protos.ui_definition_pb2 import FormField, FormFieldType + +logger = logging.getLogger(__name__) + + +class BitbucketSourceManager(SourceManager): + def __init__(self): + self.source = Source.BITBUCKET + self.task_proto = Bitbucket + self.task_type_callable_map = { + Bitbucket.TaskType.FETCH_FILE: { + 'executor': self.fetch_file, + 'model_types': [], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Fetch File', + 'category': 'Code Repository', + 'form_fields': [ + FormField(key_name=StringValue(value="repo"), + display_name=StringValue(value="Repository Slug"), + description=StringValue(value="Repository name/slug"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="file_path"), + display_name=StringValue(value="File Path"), + description=StringValue(value="Path to the file in the repository"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="branch"), + display_name=StringValue(value="Branch"), + description=StringValue(value="Branch name (defaults to main)"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + default_value=Literal(type=LiteralType.STRING, string=StringValue(value='main')), + is_optional=True), + ], + }, + Bitbucket.TaskType.UPDATE_FILE: { + 'executor': self.update_file, + 'model_types': [], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Update File', + 'category': 'Code Repository', + 'form_fields': [ + FormField(key_name=StringValue(value="repo"), + display_name=StringValue(value="Repository Slug"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="file_path"), + display_name=StringValue(value="File Path"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="content"), + display_name=StringValue(value="File Content"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.CODE_EDITOR_FT), + FormField(key_name=StringValue(value="commit_message"), + display_name=StringValue(value="Commit Message"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="branch"), + display_name=StringValue(value="Branch"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + default_value=Literal(type=LiteralType.STRING, string=StringValue(value='main')), + is_optional=True), + FormField(key_name=StringValue(value="author"), + display_name=StringValue(value="Author (optional)"), + description=StringValue(value="Format: Name "), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + is_optional=True), + ], + }, + Bitbucket.TaskType.FETCH_COMMITS: { + 'executor': self.fetch_commits, + 'model_types': [], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Fetch Commits', + 'category': 'Code Repository', + 'form_fields': [ + FormField(key_name=StringValue(value="repo"), + display_name=StringValue(value="Repository Slug"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="branch"), + display_name=StringValue(value="Branch"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + default_value=Literal(type=LiteralType.STRING, string=StringValue(value='main'))), + FormField(key_name=StringValue(value="author"), + display_name=StringValue(value="Author Filter (optional)"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + is_optional=True), + ], + }, + Bitbucket.TaskType.FETCH_RELATED_COMMITS: { + 'executor': self.fetch_related_commits, + 'model_types': [], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Fetch Related Commits for a File', + 'category': 'Code Repository', + 'form_fields': [ + FormField(key_name=StringValue(value="repo"), + display_name=StringValue(value="Repository Slug"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="file_path"), + display_name=StringValue(value="File Path"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="function_name"), + display_name=StringValue(value="Function Name"), + description=StringValue(value="Search for commits containing this function name in diff"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="branch"), + display_name=StringValue(value="Branch"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + default_value=Literal(type=LiteralType.STRING, string=StringValue(value='main')), + is_optional=True), + ], + }, + Bitbucket.TaskType.FETCH_RECENT_MERGES: { + 'executor': self.fetch_recent_merges, + 'model_types': [], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Fetch Recent Merges', + 'category': 'Code Repository', + 'form_fields': [ + FormField(key_name=StringValue(value="repo"), + display_name=StringValue(value="Repository Slug"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="branch"), + display_name=StringValue(value="Destination Branch"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + default_value=Literal(type=LiteralType.STRING, string=StringValue(value='main'))), + ], + }, + Bitbucket.TaskType.CREATE_PULL_REQUEST: { + 'executor': self.create_pull_request, + 'model_types': [], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Create Pull Request', + 'category': 'Code Repository', + 'form_fields': [ + FormField(key_name=StringValue(value="repo"), + display_name=StringValue(value="Repository Slug"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="title"), + display_name=StringValue(value="PR Title"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="description"), + display_name=StringValue(value="PR Description"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.MULTILINE_FT, + is_optional=True), + FormField(key_name=StringValue(value="source_branch"), + display_name=StringValue(value="Source Branch"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="destination_branch"), + display_name=StringValue(value="Destination Branch"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + default_value=Literal(type=LiteralType.STRING, string=StringValue(value='main')), + is_optional=True), + FormField(key_name=StringValue(value="close_source_branch"), + display_name=StringValue(value="Close Source Branch After Merge"), + data_type=LiteralType.BOOL, + form_field_type=FormFieldType.CHECKBOX_FT, + is_optional=True), + FormField(key_name=StringValue(value="commit_message"), + display_name=StringValue(value="Commit Message (for file updates)"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + is_optional=True), + FormField(key_name=StringValue(value="files"), + display_name=StringValue(value="Files to Update (JSON array)"), + description=StringValue(value='[{"path": "file.txt", "content": "content"}]'), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.CODE_EDITOR_FT, + is_optional=True), + ] + }, + Bitbucket.TaskType.FETCH_PULL_REQUEST_DIFF: { + 'executor': self.fetch_pull_request_diff, + 'model_types': [], + 'result_type': PlaybookTaskResultType.API_RESPONSE, + 'display_name': 'Fetch Pull Request Diff', + 'category': 'Code Repository', + 'form_fields': [ + FormField(key_name=StringValue(value="repo"), + display_name=StringValue(value="Repository Slug"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT), + FormField(key_name=StringValue(value="pr_id"), + display_name=StringValue(value="Pull Request ID"), + data_type=LiteralType.LONG, + form_field_type=FormFieldType.TEXT_FT), + ] + }, + } + + self.connector_form_configs = [ + { + "name": StringValue(value="Bitbucket Repository Access Token"), + "description": StringValue(value="Connect to Bitbucket using a Repository Access Token. Create one in Repository Settings > Access tokens."), + "form_fields": { + SourceKeyType.BITBUCKET_API_KEY: FormField( + key_name=StringValue(value=get_connector_key_type_string(SourceKeyType.BITBUCKET_API_KEY)), + display_name=StringValue(value="Repository Access Token"), + description=StringValue(value='Repository Access Token from Bitbucket'), + helper_text=StringValue(value="Create in Repository Settings > Access tokens"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + is_optional=False, + is_sensitive=True + ), + SourceKeyType.BITBUCKET_WORKSPACE: FormField( + key_name=StringValue(value=get_connector_key_type_string(SourceKeyType.BITBUCKET_WORKSPACE)), + display_name=StringValue(value="Workspace"), + description=StringValue(value='e.g. "my-workspace"'), + helper_text=StringValue(value="Bitbucket workspace slug (found in URL: bitbucket.org/workspace-slug)"), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + is_optional=False + ), + SourceKeyType.BITBUCKET_REPO: FormField( + key_name=StringValue(value=get_connector_key_type_string(SourceKeyType.BITBUCKET_REPO)), + display_name=StringValue(value="Repository (Optional)"), + description=StringValue(value='e.g. "my-repo"'), + helper_text=StringValue(value="Default repository slug. Can be overridden in tasks."), + data_type=LiteralType.STRING, + form_field_type=FormFieldType.TEXT_FT, + is_optional=True + ) + } + } + ] + + self.connector_type_details = { + DISPLAY_NAME: "BITBUCKET", + CATEGORY: CODE_REPOSITORY, + } + + def get_connector_processor(self, bitbucket_connector, **kwargs): + generated_credentials = generate_credentials_dict(bitbucket_connector.type, bitbucket_connector.keys) + return BitbucketAPIProcessor(**generated_credentials) + + def fetch_file(self, time_range: TimeRange, bitbucket_task: Bitbucket, + bitbucket_connector: ConnectorProto): + try: + task = bitbucket_task.fetch_file + repo = task.repo.value if task.HasField('repo') else None + file_path = task.file_path.value + branch = task.branch.value if task.HasField('branch') and task.branch.value else "main" + timestamp = task.timestamp if task.timestamp != 0 else None + + processor = self.get_connector_processor(bitbucket_connector) + + # Use repo from task or fall back to connector default + if not repo: + repo = processor.repo + if not repo: + raise Exception("Repository is required. Specify in task or connector configuration.") + + if not file_path or not file_path.strip(): + raise Exception("File path is required.") + + file_details = processor.fetch_file(repo, file_path, branch, timestamp) + if not file_details: + raise Exception(f"Failed to fetch file {file_path} from repository {repo}") + + response_struct = dict_to_proto(file_details, Struct) + file_output = ApiResponseResult(response_body=response_struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=file_output + ) + except Exception as e: + raise Exception(f"Error while executing Bitbucket fetch_file task: {e}") + + def update_file(self, time_range: TimeRange, bitbucket_task: Bitbucket, + bitbucket_connector: ConnectorProto): + try: + task = bitbucket_task.update_file + repo = task.repo.value if task.HasField('repo') else None + file_path = task.file_path.value + content = task.content.value + commit_message = task.commit_message.value + branch = task.branch.value if task.HasField('branch') and task.branch.value else "main" + author = task.author.value if task.HasField('author') and task.author.value else None + + processor = self.get_connector_processor(bitbucket_connector) + + if not repo: + repo = processor.repo + if not repo: + raise Exception("Repository is required.") + + result = processor.update_file(repo, file_path, content, commit_message, branch, author) + if not result: + raise Exception(f"Failed to update file {file_path}") + + response_struct = dict_to_proto(result, Struct) + file_output = ApiResponseResult(response_body=response_struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=file_output + ) + except Exception as e: + raise Exception(f"Error while executing Bitbucket update_file task: {e}") + + def fetch_commits(self, time_range: TimeRange, bitbucket_task: Bitbucket, + bitbucket_connector: ConnectorProto): + try: + task = bitbucket_task.fetch_commits + repo = task.repo.value if task.HasField('repo') else None + branch = task.branch.value if task.HasField('branch') and task.branch.value else "main" + author = task.author.value if task.HasField('author') and task.author.value else None + + processor = self.get_connector_processor(bitbucket_connector) + + if not repo: + repo = processor.repo + if not repo: + raise Exception("Repository is required.") + + commits = processor.get_commits(repo, branch, author) + + if not commits: + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value=f"No commits found for repo: {repo}, branch: {branch}")), + source=self.source + ) + + # Format commits for response + formatted_commits = [] + for commit in commits[:50]: # Limit to 50 commits + formatted_commits.append({ + "hash": commit.get("hash"), + "message": commit.get("message", "").strip(), + "author": commit.get("author", {}).get("raw", ""), + "date": commit.get("date"), + "url": commit.get("links", {}).get("html", {}).get("href", ""), + }) + + response_struct = dict_to_proto({"commits": formatted_commits}, Struct) + commit_output = ApiResponseResult(response_body=response_struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=commit_output + ) + except Exception as e: + raise Exception(f"Error while executing Bitbucket fetch_commits task: {e}") + + def fetch_related_commits(self, time_range: TimeRange, bitbucket_task: Bitbucket, + bitbucket_connector: ConnectorProto): + try: + task = bitbucket_task.fetch_related_commits + repo = task.repo.value if task.HasField('repo') else None + file_path = task.file_path.value + function_name = task.function_name.value + branch = task.branch.value if task.HasField('branch') and task.branch.value else "main" + + processor = self.get_connector_processor(bitbucket_connector) + + if not repo: + repo = processor.repo + if not repo: + raise Exception("Repository is required.") + + # Get file history (commits affecting this file) + file_commits = processor.get_file_history(repo, file_path, branch) + + if not file_commits: + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue( + value=f"No commits found for file: {file_path} in repo: {repo}, branch: {branch}")), + source=self.source + ) + + # Filter commits that contain the function name in the diff + related_commits = [] + for commit_info in file_commits[:20]: # Check last 20 commits + commit_hash = commit_info.get("commit", {}).get("hash") + if not commit_hash: + continue + + # Get the diff for this commit + diff = processor.get_commit_diff(repo, commit_hash) + if diff and function_name in diff: + related_commits.append({ + "commit_hash": commit_hash, + "author": commit_info.get("commit", {}).get("author", {}).get("raw", ""), + "date": commit_info.get("commit", {}).get("date"), + "message": commit_info.get("commit", {}).get("message", "").strip(), + "url": commit_info.get("commit", {}).get("links", {}).get("html", {}).get("href", ""), + }) + + response_struct = dict_to_proto({"related_commits": related_commits}, Struct) + commit_output = ApiResponseResult(response_body=response_struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=commit_output + ) + except Exception as e: + raise Exception(f"Error while executing Bitbucket fetch_related_commits task: {e}") + + def fetch_recent_merges(self, time_range: TimeRange, bitbucket_task: Bitbucket, + bitbucket_connector: ConnectorProto): + try: + task = bitbucket_task.fetch_recent_merges + repo = task.repo.value if task.HasField('repo') else None + branch = task.branch.value if task.HasField('branch') and task.branch.value else "main" + + processor = self.get_connector_processor(bitbucket_connector) + + if not repo: + repo = processor.repo + if not repo: + raise Exception("Repository is required.") + + recent_merges = processor.get_recent_merges(repo, branch) + + response_struct = dict_to_proto({"recent_merges": recent_merges}, Struct) + merge_output = ApiResponseResult(response_body=response_struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=merge_output + ) + except Exception as e: + raise Exception(f"Error while executing Bitbucket fetch_recent_merges task: {e}") + + def create_pull_request(self, time_range: TimeRange, bitbucket_task: Bitbucket, + bitbucket_connector: ConnectorProto): + try: + task = bitbucket_task.create_pull_request + repo = task.repo.value if task.HasField('repo') else None + title = task.title.value + description = task.description.value if task.HasField('description') else "" + source_branch = task.source_branch.value + destination_branch = task.destination_branch.value if task.HasField('destination_branch') and task.destination_branch.value else "main" + close_source_branch = task.close_source_branch.value if task.HasField('close_source_branch') else False + commit_message = task.commit_message.value if task.HasField('commit_message') else None + + # Parse files to update + files_to_update = [] + if task.files: + for file_update in task.files: + files_to_update.append({ + 'path': file_update.path.value, + 'content': file_update.content.value + }) + + processor = self.get_connector_processor(bitbucket_connector) + + if not repo: + repo = processor.repo + if not repo: + raise Exception("Repository is required.") + + pr_result = processor.create_pull_request( + repo=repo, + title=title, + source_branch=source_branch, + destination_branch=destination_branch, + description=description, + close_source_branch=close_source_branch, + files_to_update=files_to_update if files_to_update else None, + commit_message=commit_message + ) + + if not pr_result: + return PlaybookTaskResult( + type=PlaybookTaskResultType.TEXT, + text=TextResult(output=StringValue(value=f"Failed to create PR in repository {repo}")), + source=self.source + ) + + response_struct = dict_to_proto({ + "pr_id": pr_result.get("id"), + "pr_url": pr_result.get("links", {}).get("html", {}).get("href", ""), + "title": pr_result.get("title"), + "state": pr_result.get("state"), + }, Struct) + pr_output = ApiResponseResult(response_body=response_struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=pr_output + ) + except Exception as e: + raise Exception(f"Error while executing Bitbucket create_pull_request task: {e}") + + def fetch_pull_request_diff(self, time_range: TimeRange, bitbucket_task: Bitbucket, + bitbucket_connector: ConnectorProto): + try: + task = bitbucket_task.fetch_pull_request_diff + repo = task.repo.value if task.HasField('repo') else None + pr_id = task.pr_id.value + + processor = self.get_connector_processor(bitbucket_connector) + + if not repo: + repo = processor.repo + if not repo: + raise Exception("Repository is required.") + + # Get PR diff (files changed) + diffstat = processor.get_pr_diffstat(repo, pr_id) + + response_struct = dict_to_proto({"files": diffstat, "pr_id": pr_id}, Struct) + diff_output = ApiResponseResult(response_body=response_struct) + return PlaybookTaskResult( + type=PlaybookTaskResultType.API_RESPONSE, + source=self.source, + api_response=diff_output + ) + except Exception as e: + raise Exception(f"Error while executing Bitbucket fetch_pull_request_diff task: {e}") + + @staticmethod + def validate_connector(connector: ConnectorProto) -> bool: + if connector.is_proxy_enabled.value: + return True + + keys = connector.keys + all_ck_types = [ck.key_type for ck in keys if ck.key.value] + all_ck_types = list(set(all_ck_types)) + + # Required keys for Bitbucket + required_keys = [SourceKeyType.BITBUCKET_API_KEY, SourceKeyType.BITBUCKET_WORKSPACE] + return all(key_type in all_ck_types for key_type in required_keys) diff --git a/drdroid_debug_toolkit/core/integrations/source_metadata_extractor_facade.py b/drdroid_debug_toolkit/core/integrations/source_metadata_extractor_facade.py index fa5f4a3..35da90e 100644 --- a/drdroid_debug_toolkit/core/integrations/source_metadata_extractor_facade.py +++ b/drdroid_debug_toolkit/core/integrations/source_metadata_extractor_facade.py @@ -26,6 +26,7 @@ from core.integrations.source_metadata_extractors.victoria_logs_metadata_extractor import VictoriaLogsSourceMetadataExtractor from core.integrations.source_metadata_extractors.sentry_metadata_extractor import SentrySourceMetadataExtractor from core.integrations.source_metadata_extractors.coralogix_metadata_extractor import CoralogixSourceMetadataExtractor +from core.integrations.source_metadata_extractors.bitbucket_metadata_extractor import BitbucketSourceMetadataExtractor class SourceMetadataExtractorFacade: @@ -71,4 +72,5 @@ def get_metadata_extractor_class(self, connector_type: Source): source_metadata_extractor_facade.register(Source.GCM, GcmSourceMetadataExtractor) source_metadata_extractor_facade.register(Source.VICTORIA_LOGS, VictoriaLogsSourceMetadataExtractor) source_metadata_extractor_facade.register(Source.SENTRY, SentrySourceMetadataExtractor) -source_metadata_extractor_facade.register(Source.CORALOGIX, CoralogixSourceMetadataExtractor) \ No newline at end of file +source_metadata_extractor_facade.register(Source.CORALOGIX, CoralogixSourceMetadataExtractor) +source_metadata_extractor_facade.register(Source.BITBUCKET, BitbucketSourceMetadataExtractor) \ No newline at end of file diff --git a/drdroid_debug_toolkit/core/integrations/source_metadata_extractors/bitbucket_metadata_extractor.py b/drdroid_debug_toolkit/core/integrations/source_metadata_extractors/bitbucket_metadata_extractor.py new file mode 100644 index 0000000..a2ddc63 --- /dev/null +++ b/drdroid_debug_toolkit/core/integrations/source_metadata_extractors/bitbucket_metadata_extractor.py @@ -0,0 +1,51 @@ +import logging + +from core.integrations.source_metadata_extractor import SourceMetadataExtractor +from core.integrations.source_api_processors.bitbucket_api_processor import BitbucketAPIProcessor +from core.protos.base_pb2 import Source, SourceModelType +from core.utils.logging_utils import log_function_call + +logger = logging.getLogger(__name__) + + +class BitbucketSourceMetadataExtractor(SourceMetadataExtractor): + + def __init__(self, request_id, connector_name, api_key, workspace, **kwargs): + self.workspace = workspace + self.bb_processor = BitbucketAPIProcessor(api_key, workspace) + super().__init__(request_id, connector_name, Source.BITBUCKET) + + @log_function_call + def extract_repos(self): + model_data = {} + model_type = SourceModelType.BITBUCKET_REPOSITORY + + try: + repos = self.bb_processor.list_repositories() + if not repos: + return model_data + for repo in repos: + slug = repo.get('slug', '') + model_data[slug] = repo + except Exception as e: + logger.error(f'Error extracting Bitbucket repositories: {e}') + if len(model_data) > 0: + self.create_or_update_model_metadata(model_type, model_data) + + @log_function_call + def extract_members(self): + model_data = {} + model_type = SourceModelType.BITBUCKET_WORKSPACE_MEMBER + + try: + members = self.bb_processor.list_workspace_members() + if not members: + return model_data + for member in members: + user = member.get('user', {}) + display_name = user.get('display_name', '') + model_data[display_name] = member + except Exception as e: + logger.error(f'Error extracting Bitbucket workspace members: {e}') + if len(model_data) > 0: + self.create_or_update_model_metadata(model_type, model_data) diff --git a/drdroid_debug_toolkit/core/protos/assets/asset.proto b/drdroid_debug_toolkit/core/protos/assets/asset.proto index 19a13d0..a773169 100644 --- a/drdroid_debug_toolkit/core/protos/assets/asset.proto +++ b/drdroid_debug_toolkit/core/protos/assets/asset.proto @@ -29,6 +29,7 @@ import "core/protos/assets/posthog_asset.proto"; import "core/protos/assets/sql_database_asset.proto"; import "core/protos/assets/mongodb_asset.proto"; import "core/protos/assets/coralogix_asset.proto"; +import "core/protos/assets/bitbucket_asset.proto"; message ConnectorModelTypeOptions { SourceModelType model_type = 1; @@ -78,6 +79,9 @@ message ConnectorModelTypeOptions { ElasticSearchIndexPatternAssetOptions elastic_search_index_pattern_model_options = 61; ElasticSearchServiceAssetOptions elastic_search_service_model_options = 62; GrafanaDatasourceAssetOptions grafana_loki_datasource_model_options = 63; + // Bitbucket options + BitbucketRepositoryAssetOptions bitbucket_repository_model_options = 64; + BitbucketWorkspaceMemberAssetOptions bitbucket_workspace_member_model_options = 65; } } @@ -109,6 +113,8 @@ message AccountConnectorAssets { SqlAssets sql = 24; SignozAssets signoz = 25; CoralogixAssets coralogix = 26; + // Bitbucket assets + BitbucketAssets bitbucket = 27; } } @@ -160,5 +166,8 @@ message AccountConnectorAssetsModelFilters { ElasticSearchDashboardAssetOptions elastic_search_dashboard_model_filters = 62; ElasticSearchIndexPatternAssetOptions elastic_search_index_pattern_model_filters = 63; GrafanaDatasourceAssetOptions grafana_loki_datasource_model_filters = 72; + // Bitbucket filters + BitbucketRepositoryAssetOptions bitbucket_repository_model_filters = 73; + BitbucketWorkspaceMemberAssetOptions bitbucket_workspace_member_model_filters = 74; } } \ No newline at end of file diff --git a/drdroid_debug_toolkit/core/protos/assets/asset_pb2.py b/drdroid_debug_toolkit/core/protos/assets/asset_pb2.py index 1e0fef1..7636638 100644 --- a/drdroid_debug_toolkit/core/protos/assets/asset_pb2.py +++ b/drdroid_debug_toolkit/core/protos/assets/asset_pb2.py @@ -50,19 +50,20 @@ from core.protos.assets import sql_database_asset_pb2 as core_dot_protos_dot_assets_dot_sql__database__asset__pb2 from core.protos.assets import mongodb_asset_pb2 as core_dot_protos_dot_assets_dot_mongodb__asset__pb2 from core.protos.assets import coralogix_asset_pb2 as core_dot_protos_dot_assets_dot_coralogix__asset__pb2 +from core.protos.assets import bitbucket_asset_pb2 as core_dot_protos_dot_assets_dot_bitbucket__asset__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x63ore/protos/assets/asset.proto\x12\x16\x63ore.protos.connectors\x1a\x16\x63ore/protos/base.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a&core/protos/connectors/connector.proto\x1a)core/protos/assets/cloudwatch_asset.proto\x1a&core/protos/assets/grafana_asset.proto\x1a)core/protos/assets/clickhouse_asset.proto\x1a$core/protos/assets/slack_asset.proto\x1a\'core/protos/assets/newrelic_asset.proto\x1a&core/protos/assets/datadog_asset.proto\x1a\'core/protos/assets/postgres_asset.proto\x1a\"core/protos/assets/eks_asset.proto\x1a$core/protos/assets/azure_asset.proto\x1a#core/protos/assets/bash_asset.proto\x1a\"core/protos/assets/gke_asset.proto\x1a-core/protos/assets/elastic_search_asset.proto\x1a\"core/protos/assets/gcm_asset.proto\x1a*core/protos/assets/open_search_asset.proto\x1a$core/protos/assets/asana_asset.proto\x1a%core/protos/assets/github_asset.proto\x1a#core/protos/assets/jira_asset.proto\x1a%core/protos/assets/argocd_asset.proto\x1a&core/protos/assets/jenkins_asset.proto\x1a%core/protos/assets/signoz_asset.proto\x1a&core/protos/assets/posthog_asset.proto\x1a+core/protos/assets/sql_database_asset.proto\x1a&core/protos/assets/mongodb_asset.proto\x1a(core/protos/assets/coralogix_asset.proto\"\xc5\"\n\x19\x43onnectorModelTypeOptions\x12\x30\n\nmodel_type\x18\x01 \x01(\x0e\x32\x1c.core.protos.SourceModelType\x12\x64\n\"cloudwatch_log_group_model_options\x18\x02 \x01(\x0b\x32\x36.core.protos.connectors.CloudwatchLogGroupAssetOptionsH\x00\x12_\n\x1f\x63loudwatch_metric_model_options\x18\x03 \x01(\x0b\x32\x34.core.protos.connectors.CloudwatchMetricAssetOptionsH\x00\x12s\n*grafana_target_metric_promql_model_options\x18\x04 \x01(\x0b\x32=.core.protos.connectors.GrafanaTargetMetricPromQlAssetOptionsH\x00\x12\x63\n!clickhouse_database_model_options\x18\x05 \x01(\x0b\x32\x36.core.protos.connectors.ClickhouseDatabaseAssetOptionsH\x00\x12W\n\x1bslack_channel_model_options\x18\x06 \x01(\x0b\x32\x30.core.protos.connectors.SlackChannelAssetOptionsH\x00\x12s\n*new_relic_entity_application_model_options\x18\x07 \x01(\x0b\x32=.core.protos.connectors.NewRelicApplicationEntityAssetOptionsH\x00\x12o\n(new_relic_entity_dashboard_model_options\x18\x08 \x01(\x0b\x32;.core.protos.connectors.NewRelicDashboardEntityAssetOptionsH\x00\x12[\n\x1d\x64\x61tadog_service_model_options\x18\t \x01(\x0b\x32\x32.core.protos.connectors.DatadogServiceAssetOptionsH\x00\x12_\n\x1fpostgres_database_model_options\x18\n \x01(\x0b\x32\x34.core.protos.connectors.PostgresDatabaseAssetOptionsH\x00\x12S\n\x19\x65ks_cluster_model_options\x18\x0b \x01(\x0b\x32..core.protos.connectors.EksClusterAssetOptionsH\x00\x12U\n\x18ssh_server_model_options\x18\x0c \x01(\x0b\x32\x31.core.protos.connectors.BashSshServerAssetOptionsH\x00\x12[\n\x1d\x61zure_workspace_model_options\x18\r \x01(\x0b\x32\x32.core.protos.connectors.AzureWorkspaceAssetOptionsH\x00\x12l\n+grafana_prometheus_datasource_model_options\x18\x0e \x01(\x0b\x32\x35.core.protos.connectors.GrafanaDatasourceAssetOptionsH\x00\x12S\n\x19gke_cluster_model_options\x18\x0f \x01(\x0b\x32..core.protos.connectors.GkeClusterAssetOptionsH\x00\x12\x64\n\"elastic_search_index_model_options\x18\x10 \x01(\x0b\x32\x36.core.protos.connectors.ElasticSearchIndexAssetOptionsH\x00\x12^\n\x1fopen_search_index_model_options\x18\x11 \x01(\x0b\x32\x33.core.protos.connectors.OpenSearchIndexAssetOptionsH\x00\x12Q\n\x18gcm_metric_model_options\x18\x12 \x01(\x0b\x32-.core.protos.connectors.GcmMetricAssetOptionsH\x00\x12\x61\n#datadog_oauth_service_model_options\x18\x13 \x01(\x0b\x32\x32.core.protos.connectors.DatadogServiceAssetOptionsH\x00\x12o\n(cloudwatch_log_group_query_model_options\x18\x14 \x01(\x0b\x32;.core.protos.connectors.CloudwatchLogGroupQueryAssetOptionsH\x00\x12W\n\x1b\x61sana_project_model_options\x18\x15 \x01(\x0b\x32\x30.core.protos.connectors.AsanaProjectAssetOptionsH\x00\x12`\n grafana_alert_rule_model_options\x18\x16 \x01(\x0b\x32\x34.core.protos.connectors.GrafanaAlertRuleAssetOptionsH\x00\x12]\n\x1e\x63loudwatch_alarm_model_options\x18\x17 \x01(\x0b\x32\x33.core.protos.connectors.CloudwatchAlarmAssetOptionsH\x00\x12_\n\x1f\x64\x61tadog_dashboard_model_options\x18\x18 \x01(\x0b\x32\x34.core.protos.connectors.DatadogDashboardAssetOptionsH\x00\x12\x65\n%datadog_oauth_dashboard_model_options\x18\x19 \x01(\x0b\x32\x34.core.protos.connectors.DatadogDashboardAssetOptionsH\x00\x12_\n\x1fgithub_repository_model_options\x18\x1a \x01(\x0b\x32\x34.core.protos.connectors.GithubRepositoryAssetOptionsH\x00\x12W\n\x1bgithub_member_model_options\x18\x1b \x01(\x0b\x32\x30.core.protos.connectors.GithubMemberAssetOptionsH\x00\x12O\n\x17jira_user_model_options\x18\x1c \x01(\x0b\x32,.core.protos.connectors.JiraUserAssetOptionsH\x00\x12U\n\x1ajira_project_model_options\x18\x1d \x01(\x0b\x32/.core.protos.connectors.JiraProjectAssetOptionsH\x00\x12S\n\x19\x61rgocd_apps_model_options\x18\x1e \x01(\x0b\x32..core.protos.connectors.ArgoCDAppsAssetOptionsH\x00\x12Y\n\x1c\x61zure_resource_model_options\x18\x1f \x01(\x0b\x32\x31.core.protos.connectors.AzureResourceAssetOptionsH\x00\x12U\n\x1ajenkins_apps_model_options\x18 \x01(\x0b\x32/.core.protos.connectors.JenkinsAppsAssetOptionsH\x00\x12]\n\x1emongodb_database_model_options\x18! \x01(\x0b\x32\x33.core.protos.connectors.MongoDBDatabaseAssetOptionsH\x00\x12\x61\n mongodb_collection_model_options\x18\" \x01(\x0b\x32\x35.core.protos.connectors.MongoDBCollectionAssetOptionsH\x00\x12]\n\x1eposthog_property_model_options\x18# \x01(\x0b\x32\x33.core.protos.connectors.PosthogPropertyAssetOptionsH\x00\x12S\n\x19\x65\x63s_cluster_model_options\x18$ \x01(\x0b\x32..core.protos.connectors.EcsClusterAssetOptionsH\x00\x12M\n\x16\x65\x63s_task_model_options\x18% \x01(\x0b\x32+.core.protos.connectors.EcsTaskAssetOptionsH\x00\x12S\n\x19\x65\x63s_service_model_options\x18& \x01(\x0b\x32..core.protos.connectors.EcsServiceAssetOptionsH\x00\x12]\n\x1bgcm_dashboard_model_options\x18\' \x01(\x0b\x32\x36.core.protos.connectors.GcmDashboardEntityAssetOptionsH\x00\x12\x65\n#gcm_cloud_run_service_model_options\x18( \x01(\x0b\x32\x36.core.protos.connectors.GcmCloudRunServiceAssetOptionsH\x00\x12]\n\x1esignoz_dashboard_model_options\x18) \x01(\x0b\x32\x33.core.protos.connectors.SignozDashboardAssetOptionsH\x00\x12U\n\x1asignoz_alert_model_options\x18* \x01(\x0b\x32/.core.protos.connectors.SignozAlertAssetOptionsH\x00\x12l\n&elastic_search_dashboard_model_options\x18< \x01(\x0b\x32:.core.protos.connectors.ElasticSearchDashboardAssetOptionsH\x00\x12s\n*elastic_search_index_pattern_model_options\x18= \x01(\x0b\x32=.core.protos.connectors.ElasticSearchIndexPatternAssetOptionsH\x00\x12h\n$elastic_search_service_model_options\x18> \x01(\x0b\x32\x38.core.protos.connectors.ElasticSearchServiceAssetOptionsH\x00\x12\x66\n%grafana_loki_datasource_model_options\x18? \x01(\x0b\x32\x35.core.protos.connectors.GrafanaDatasourceAssetOptionsH\x00\x42\t\n\x07options\"\xf9\x0b\n\x16\x41\x63\x63ountConnectorAssets\x12\x34\n\tconnector\x18\x01 \x01(\x0b\x32!.core.protos.connectors.Connector\x12>\n\ncloudwatch\x18\x65 \x01(\x0b\x32(.core.protos.connectors.CloudwatchAssetsH\x00\x12\x38\n\x07grafana\x18\x66 \x01(\x0b\x32%.core.protos.connectors.GrafanaAssetsH\x00\x12>\n\nclickhouse\x18g \x01(\x0b\x32(.core.protos.connectors.ClickhouseAssetsH\x00\x12\x34\n\x05slack\x18h \x01(\x0b\x32#.core.protos.connectors.SlackAssetsH\x00\x12;\n\tnew_relic\x18i \x01(\x0b\x32&.core.protos.connectors.NewRelicAssetsH\x00\x12\x38\n\x07\x64\x61tadog\x18j \x01(\x0b\x32%.core.protos.connectors.DatadogAssetsH\x00\x12:\n\x08postgres\x18k \x01(\x0b\x32&.core.protos.connectors.PostgresAssetsH\x00\x12\x30\n\x03\x65ks\x18l \x01(\x0b\x32!.core.protos.connectors.EksAssetsH\x00\x12\x32\n\x04\x62\x61sh\x18m \x01(\x0b\x32\".core.protos.connectors.BashAssetsH\x00\x12\x34\n\x05\x61zure\x18n \x01(\x0b\x32#.core.protos.connectors.AzureAssetsH\x00\x12\x30\n\x03gke\x18o \x01(\x0b\x32!.core.protos.connectors.GkeAssetsH\x00\x12\x45\n\x0e\x65lastic_search\x18p \x01(\x0b\x32+.core.protos.connectors.ElasticSearchAssetsH\x00\x12\x30\n\x03gcm\x18q \x01(\x0b\x32!.core.protos.connectors.GcmAssetsH\x00\x12>\n\rdatadog_oauth\x18\x0f \x01(\x0b\x32%.core.protos.connectors.DatadogAssetsH\x00\x12?\n\x0bopen_search\x18\x10 \x01(\x0b\x32(.core.protos.connectors.OpenSearchAssetsH\x00\x12\x34\n\x05\x61sana\x18\x11 \x01(\x0b\x32#.core.protos.connectors.AsanaAssetsH\x00\x12\x36\n\x06github\x18\x12 \x01(\x0b\x32$.core.protos.connectors.GithubAssetsH\x00\x12\x38\n\njira_cloud\x18\x13 \x01(\x0b\x32\".core.protos.connectors.JiraAssetsH\x00\x12\x36\n\x06\x61rgocd\x18\x14 \x01(\x0b\x32$.core.protos.connectors.ArgoCDAssetsH\x00\x12\x38\n\x07jenkins\x18\x15 \x01(\x0b\x32%.core.protos.connectors.JenkinsAssetsH\x00\x12\x38\n\x07mongodb\x18\x16 \x01(\x0b\x32%.core.protos.connectors.MongoDBAssetsH\x00\x12\x38\n\x07posthog\x18\x17 \x01(\x0b\x32%.core.protos.connectors.PosthogAssetsH\x00\x12\x30\n\x03sql\x18\x18 \x01(\x0b\x32!.core.protos.connectors.SqlAssetsH\x00\x12\x36\n\x06signoz\x18\x19 \x01(\x0b\x32$.core.protos.connectors.SignozAssetsH\x00\x12<\n\tcoralogix\x18\x1a \x01(\x0b\x32\'.core.protos.connectors.CoralogixAssetsH\x00\x42\x08\n\x06\x61ssets\"\xff\"\n\"AccountConnectorAssetsModelFilters\x12\x64\n\"cloudwatch_log_group_model_filters\x18\x01 \x01(\x0b\x32\x36.core.protos.connectors.CloudwatchLogGroupAssetOptionsH\x00\x12_\n\x1f\x63loudwatch_metric_model_filters\x18\x02 \x01(\x0b\x32\x34.core.protos.connectors.CloudwatchMetricAssetOptionsH\x00\x12s\n*grafana_target_metric_promql_model_filters\x18\x03 \x01(\x0b\x32=.core.protos.connectors.GrafanaTargetMetricPromQlAssetOptionsH\x00\x12\x63\n!clickhouse_database_model_filters\x18\x04 \x01(\x0b\x32\x36.core.protos.connectors.ClickhouseDatabaseAssetOptionsH\x00\x12W\n\x1bslack_channel_model_filters\x18\x05 \x01(\x0b\x32\x30.core.protos.connectors.SlackChannelAssetOptionsH\x00\x12s\n*new_relic_entity_application_model_filters\x18\x06 \x01(\x0b\x32=.core.protos.connectors.NewRelicApplicationEntityAssetOptionsH\x00\x12o\n(new_relic_entity_dashboard_model_filters\x18\x07 \x01(\x0b\x32;.core.protos.connectors.NewRelicDashboardEntityAssetOptionsH\x00\x12[\n\x1d\x64\x61tadog_service_model_filters\x18\x08 \x01(\x0b\x32\x32.core.protos.connectors.DatadogServiceAssetOptionsH\x00\x12_\n\x1fpostgres_database_model_filters\x18\t \x01(\x0b\x32\x34.core.protos.connectors.PostgresDatabaseAssetOptionsH\x00\x12S\n\x19\x65ks_cluster_model_filters\x18\n \x01(\x0b\x32..core.protos.connectors.EksClusterAssetOptionsH\x00\x12U\n\x18ssh_server_model_filters\x18\x0b \x01(\x0b\x32\x31.core.protos.connectors.BashSshServerAssetOptionsH\x00\x12[\n\x1d\x61zure_workspace_model_filters\x18\x0c \x01(\x0b\x32\x32.core.protos.connectors.AzureWorkspaceAssetOptionsH\x00\x12l\n+grafana_prometheus_datasource_model_filters\x18\r \x01(\x0b\x32\x35.core.protos.connectors.GrafanaDatasourceAssetOptionsH\x00\x12S\n\x19gke_cluster_model_filters\x18\x0e \x01(\x0b\x32..core.protos.connectors.GkeClusterAssetOptionsH\x00\x12\x64\n\"elastic_search_index_model_filters\x18\x0f \x01(\x0b\x32\x36.core.protos.connectors.ElasticSearchIndexAssetOptionsH\x00\x12^\n\x1fopen_search_index_model_filters\x18\x10 \x01(\x0b\x32\x33.core.protos.connectors.OpenSearchIndexAssetOptionsH\x00\x12Q\n\x18gcm_metric_model_filters\x18\x11 \x01(\x0b\x32-.core.protos.connectors.GcmMetricAssetOptionsH\x00\x12\x61\n#datadog_oauth_service_model_filters\x18\x12 \x01(\x0b\x32\x32.core.protos.connectors.DatadogServiceAssetOptionsH\x00\x12o\n(cloudwatch_log_group_query_model_filters\x18\x13 \x01(\x0b\x32;.core.protos.connectors.CloudwatchLogGroupQueryAssetOptionsH\x00\x12W\n\x1b\x61sana_project_model_filters\x18\x14 \x01(\x0b\x32\x30.core.protos.connectors.AsanaProjectAssetOptionsH\x00\x12`\n grafana_alert_rule_model_filters\x18\x15 \x01(\x0b\x32\x34.core.protos.connectors.GrafanaAlertRuleAssetOptionsH\x00\x12]\n\x1e\x63loudwatch_alarm_model_filters\x18\x16 \x01(\x0b\x32\x33.core.protos.connectors.CloudwatchAlarmAssetOptionsH\x00\x12_\n\x1f\x64\x61tadog_dashboard_model_filters\x18\x17 \x01(\x0b\x32\x34.core.protos.connectors.DatadogDashboardAssetOptionsH\x00\x12\x65\n%datadog_oauth_dashboard_model_filters\x18\x18 \x01(\x0b\x32\x34.core.protos.connectors.DatadogDashboardAssetOptionsH\x00\x12_\n\x1fgithub_repository_model_filters\x18\x19 \x01(\x0b\x32\x34.core.protos.connectors.GithubRepositoryAssetOptionsH\x00\x12W\n\x1bgithub_member_model_filters\x18\x1a \x01(\x0b\x32\x30.core.protos.connectors.GithubMemberAssetOptionsH\x00\x12O\n\x17jira_user_model_filters\x18\x1b \x01(\x0b\x32,.core.protos.connectors.JiraUserAssetOptionsH\x00\x12U\n\x1ajira_project_model_filters\x18\x1c \x01(\x0b\x32/.core.protos.connectors.JiraProjectAssetOptionsH\x00\x12S\n\x19\x61rgocd_apps_model_filters\x18\x1d \x01(\x0b\x32..core.protos.connectors.ArgoCDAppsAssetOptionsH\x00\x12Y\n\x1c\x61zure_resource_model_filters\x18\x1e \x01(\x0b\x32\x31.core.protos.connectors.AzureResourceAssetOptionsH\x00\x12_\n\x1fgrafana_dashboard_model_filters\x18\x1f \x01(\x0b\x32\x34.core.protos.connectors.GrafanaDashboardAssetOptionsH\x00\x12U\n\x1ajenkins_apps_model_filters\x18 \x01(\x0b\x32/.core.protos.connectors.JenkinsAppsAssetOptionsH\x00\x12]\n\x1emongodb_database_model_filters\x18! \x01(\x0b\x32\x33.core.protos.connectors.MongoDBDatabaseAssetOptionsH\x00\x12\x61\n mongodb_collection_model_filters\x18\" \x01(\x0b\x32\x35.core.protos.connectors.MongoDBCollectionAssetOptionsH\x00\x12]\n\x1eposthog_property_model_filters\x18# \x01(\x0b\x32\x33.core.protos.connectors.PosthogPropertyAssetOptionsH\x00\x12O\n\x17sql_table_model_filters\x18$ \x01(\x0b\x32,.core.protos.connectors.SqlTableAssetOptionsH\x00\x12S\n\x19\x65\x63s_cluster_model_filters\x18\' \x01(\x0b\x32..core.protos.connectors.EcsClusterAssetOptionsH\x00\x12M\n\x16\x65\x63s_task_model_filters\x18% \x01(\x0b\x32+.core.protos.connectors.EcsTaskAssetOptionsH\x00\x12S\n\x19\x65\x63s_service_model_filters\x18& \x01(\x0b\x32..core.protos.connectors.EcsServiceAssetOptionsH\x00\x12]\n\x1bgcm_dashboard_model_filters\x18( \x01(\x0b\x32\x36.core.protos.connectors.GcmDashboardEntityAssetOptionsH\x00\x12\x65\n#gcm_cloud_run_service_model_filters\x18) \x01(\x0b\x32\x36.core.protos.connectors.GcmCloudRunServiceAssetOptionsH\x00\x12\x65\n\"cloudwatch_dashboard_model_filters\x18* \x01(\x0b\x32\x37.core.protos.connectors.CloudwatchDashboardAssetOptionsH\x00\x12h\n$elastic_search_service_model_filters\x18= \x01(\x0b\x32\x38.core.protos.connectors.ElasticSearchServiceAssetOptionsH\x00\x12l\n&elastic_search_dashboard_model_filters\x18> \x01(\x0b\x32:.core.protos.connectors.ElasticSearchDashboardAssetOptionsH\x00\x12s\n*elastic_search_index_pattern_model_filters\x18? \x01(\x0b\x32=.core.protos.connectors.ElasticSearchIndexPatternAssetOptionsH\x00\x12\x66\n%grafana_loki_datasource_model_filters\x18H \x01(\x0b\x32\x35.core.protos.connectors.GrafanaDatasourceAssetOptionsH\x00\x42\t\n\x07\x66iltersb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x63ore/protos/assets/asset.proto\x12\x16\x63ore.protos.connectors\x1a\x16\x63ore/protos/base.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a&core/protos/connectors/connector.proto\x1a)core/protos/assets/cloudwatch_asset.proto\x1a&core/protos/assets/grafana_asset.proto\x1a)core/protos/assets/clickhouse_asset.proto\x1a$core/protos/assets/slack_asset.proto\x1a\'core/protos/assets/newrelic_asset.proto\x1a&core/protos/assets/datadog_asset.proto\x1a\'core/protos/assets/postgres_asset.proto\x1a\"core/protos/assets/eks_asset.proto\x1a$core/protos/assets/azure_asset.proto\x1a#core/protos/assets/bash_asset.proto\x1a\"core/protos/assets/gke_asset.proto\x1a-core/protos/assets/elastic_search_asset.proto\x1a\"core/protos/assets/gcm_asset.proto\x1a*core/protos/assets/open_search_asset.proto\x1a$core/protos/assets/asana_asset.proto\x1a%core/protos/assets/github_asset.proto\x1a#core/protos/assets/jira_asset.proto\x1a%core/protos/assets/argocd_asset.proto\x1a&core/protos/assets/jenkins_asset.proto\x1a%core/protos/assets/signoz_asset.proto\x1a&core/protos/assets/posthog_asset.proto\x1a+core/protos/assets/sql_database_asset.proto\x1a&core/protos/assets/mongodb_asset.proto\x1a(core/protos/assets/coralogix_asset.proto\x1a(core/protos/assets/bitbucket_asset.proto\"\x9e$\n\x19\x43onnectorModelTypeOptions\x12\x30\n\nmodel_type\x18\x01 \x01(\x0e\x32\x1c.core.protos.SourceModelType\x12\x64\n\"cloudwatch_log_group_model_options\x18\x02 \x01(\x0b\x32\x36.core.protos.connectors.CloudwatchLogGroupAssetOptionsH\x00\x12_\n\x1f\x63loudwatch_metric_model_options\x18\x03 \x01(\x0b\x32\x34.core.protos.connectors.CloudwatchMetricAssetOptionsH\x00\x12s\n*grafana_target_metric_promql_model_options\x18\x04 \x01(\x0b\x32=.core.protos.connectors.GrafanaTargetMetricPromQlAssetOptionsH\x00\x12\x63\n!clickhouse_database_model_options\x18\x05 \x01(\x0b\x32\x36.core.protos.connectors.ClickhouseDatabaseAssetOptionsH\x00\x12W\n\x1bslack_channel_model_options\x18\x06 \x01(\x0b\x32\x30.core.protos.connectors.SlackChannelAssetOptionsH\x00\x12s\n*new_relic_entity_application_model_options\x18\x07 \x01(\x0b\x32=.core.protos.connectors.NewRelicApplicationEntityAssetOptionsH\x00\x12o\n(new_relic_entity_dashboard_model_options\x18\x08 \x01(\x0b\x32;.core.protos.connectors.NewRelicDashboardEntityAssetOptionsH\x00\x12[\n\x1d\x64\x61tadog_service_model_options\x18\t \x01(\x0b\x32\x32.core.protos.connectors.DatadogServiceAssetOptionsH\x00\x12_\n\x1fpostgres_database_model_options\x18\n \x01(\x0b\x32\x34.core.protos.connectors.PostgresDatabaseAssetOptionsH\x00\x12S\n\x19\x65ks_cluster_model_options\x18\x0b \x01(\x0b\x32..core.protos.connectors.EksClusterAssetOptionsH\x00\x12U\n\x18ssh_server_model_options\x18\x0c \x01(\x0b\x32\x31.core.protos.connectors.BashSshServerAssetOptionsH\x00\x12[\n\x1d\x61zure_workspace_model_options\x18\r \x01(\x0b\x32\x32.core.protos.connectors.AzureWorkspaceAssetOptionsH\x00\x12l\n+grafana_prometheus_datasource_model_options\x18\x0e \x01(\x0b\x32\x35.core.protos.connectors.GrafanaDatasourceAssetOptionsH\x00\x12S\n\x19gke_cluster_model_options\x18\x0f \x01(\x0b\x32..core.protos.connectors.GkeClusterAssetOptionsH\x00\x12\x64\n\"elastic_search_index_model_options\x18\x10 \x01(\x0b\x32\x36.core.protos.connectors.ElasticSearchIndexAssetOptionsH\x00\x12^\n\x1fopen_search_index_model_options\x18\x11 \x01(\x0b\x32\x33.core.protos.connectors.OpenSearchIndexAssetOptionsH\x00\x12Q\n\x18gcm_metric_model_options\x18\x12 \x01(\x0b\x32-.core.protos.connectors.GcmMetricAssetOptionsH\x00\x12\x61\n#datadog_oauth_service_model_options\x18\x13 \x01(\x0b\x32\x32.core.protos.connectors.DatadogServiceAssetOptionsH\x00\x12o\n(cloudwatch_log_group_query_model_options\x18\x14 \x01(\x0b\x32;.core.protos.connectors.CloudwatchLogGroupQueryAssetOptionsH\x00\x12W\n\x1b\x61sana_project_model_options\x18\x15 \x01(\x0b\x32\x30.core.protos.connectors.AsanaProjectAssetOptionsH\x00\x12`\n grafana_alert_rule_model_options\x18\x16 \x01(\x0b\x32\x34.core.protos.connectors.GrafanaAlertRuleAssetOptionsH\x00\x12]\n\x1e\x63loudwatch_alarm_model_options\x18\x17 \x01(\x0b\x32\x33.core.protos.connectors.CloudwatchAlarmAssetOptionsH\x00\x12_\n\x1f\x64\x61tadog_dashboard_model_options\x18\x18 \x01(\x0b\x32\x34.core.protos.connectors.DatadogDashboardAssetOptionsH\x00\x12\x65\n%datadog_oauth_dashboard_model_options\x18\x19 \x01(\x0b\x32\x34.core.protos.connectors.DatadogDashboardAssetOptionsH\x00\x12_\n\x1fgithub_repository_model_options\x18\x1a \x01(\x0b\x32\x34.core.protos.connectors.GithubRepositoryAssetOptionsH\x00\x12W\n\x1bgithub_member_model_options\x18\x1b \x01(\x0b\x32\x30.core.protos.connectors.GithubMemberAssetOptionsH\x00\x12O\n\x17jira_user_model_options\x18\x1c \x01(\x0b\x32,.core.protos.connectors.JiraUserAssetOptionsH\x00\x12U\n\x1ajira_project_model_options\x18\x1d \x01(\x0b\x32/.core.protos.connectors.JiraProjectAssetOptionsH\x00\x12S\n\x19\x61rgocd_apps_model_options\x18\x1e \x01(\x0b\x32..core.protos.connectors.ArgoCDAppsAssetOptionsH\x00\x12Y\n\x1c\x61zure_resource_model_options\x18\x1f \x01(\x0b\x32\x31.core.protos.connectors.AzureResourceAssetOptionsH\x00\x12U\n\x1ajenkins_apps_model_options\x18 \x01(\x0b\x32/.core.protos.connectors.JenkinsAppsAssetOptionsH\x00\x12]\n\x1emongodb_database_model_options\x18! \x01(\x0b\x32\x33.core.protos.connectors.MongoDBDatabaseAssetOptionsH\x00\x12\x61\n mongodb_collection_model_options\x18\" \x01(\x0b\x32\x35.core.protos.connectors.MongoDBCollectionAssetOptionsH\x00\x12]\n\x1eposthog_property_model_options\x18# \x01(\x0b\x32\x33.core.protos.connectors.PosthogPropertyAssetOptionsH\x00\x12S\n\x19\x65\x63s_cluster_model_options\x18$ \x01(\x0b\x32..core.protos.connectors.EcsClusterAssetOptionsH\x00\x12M\n\x16\x65\x63s_task_model_options\x18% \x01(\x0b\x32+.core.protos.connectors.EcsTaskAssetOptionsH\x00\x12S\n\x19\x65\x63s_service_model_options\x18& \x01(\x0b\x32..core.protos.connectors.EcsServiceAssetOptionsH\x00\x12]\n\x1bgcm_dashboard_model_options\x18\' \x01(\x0b\x32\x36.core.protos.connectors.GcmDashboardEntityAssetOptionsH\x00\x12\x65\n#gcm_cloud_run_service_model_options\x18( \x01(\x0b\x32\x36.core.protos.connectors.GcmCloudRunServiceAssetOptionsH\x00\x12]\n\x1esignoz_dashboard_model_options\x18) \x01(\x0b\x32\x33.core.protos.connectors.SignozDashboardAssetOptionsH\x00\x12U\n\x1asignoz_alert_model_options\x18* \x01(\x0b\x32/.core.protos.connectors.SignozAlertAssetOptionsH\x00\x12l\n&elastic_search_dashboard_model_options\x18< \x01(\x0b\x32:.core.protos.connectors.ElasticSearchDashboardAssetOptionsH\x00\x12s\n*elastic_search_index_pattern_model_options\x18= \x01(\x0b\x32=.core.protos.connectors.ElasticSearchIndexPatternAssetOptionsH\x00\x12h\n$elastic_search_service_model_options\x18> \x01(\x0b\x32\x38.core.protos.connectors.ElasticSearchServiceAssetOptionsH\x00\x12\x66\n%grafana_loki_datasource_model_options\x18? \x01(\x0b\x32\x35.core.protos.connectors.GrafanaDatasourceAssetOptionsH\x00\x12\x65\n\"bitbucket_repository_model_options\x18@ \x01(\x0b\x32\x37.core.protos.connectors.BitbucketRepositoryAssetOptionsH\x00\x12p\n(bitbucket_workspace_member_model_options\x18\x41 \x01(\x0b\x32<.core.protos.connectors.BitbucketWorkspaceMemberAssetOptionsH\x00\x42\t\n\x07options\"\xb7\x0c\n\x16\x41\x63\x63ountConnectorAssets\x12\x34\n\tconnector\x18\x01 \x01(\x0b\x32!.core.protos.connectors.Connector\x12>\n\ncloudwatch\x18\x65 \x01(\x0b\x32(.core.protos.connectors.CloudwatchAssetsH\x00\x12\x38\n\x07grafana\x18\x66 \x01(\x0b\x32%.core.protos.connectors.GrafanaAssetsH\x00\x12>\n\nclickhouse\x18g \x01(\x0b\x32(.core.protos.connectors.ClickhouseAssetsH\x00\x12\x34\n\x05slack\x18h \x01(\x0b\x32#.core.protos.connectors.SlackAssetsH\x00\x12;\n\tnew_relic\x18i \x01(\x0b\x32&.core.protos.connectors.NewRelicAssetsH\x00\x12\x38\n\x07\x64\x61tadog\x18j \x01(\x0b\x32%.core.protos.connectors.DatadogAssetsH\x00\x12:\n\x08postgres\x18k \x01(\x0b\x32&.core.protos.connectors.PostgresAssetsH\x00\x12\x30\n\x03\x65ks\x18l \x01(\x0b\x32!.core.protos.connectors.EksAssetsH\x00\x12\x32\n\x04\x62\x61sh\x18m \x01(\x0b\x32\".core.protos.connectors.BashAssetsH\x00\x12\x34\n\x05\x61zure\x18n \x01(\x0b\x32#.core.protos.connectors.AzureAssetsH\x00\x12\x30\n\x03gke\x18o \x01(\x0b\x32!.core.protos.connectors.GkeAssetsH\x00\x12\x45\n\x0e\x65lastic_search\x18p \x01(\x0b\x32+.core.protos.connectors.ElasticSearchAssetsH\x00\x12\x30\n\x03gcm\x18q \x01(\x0b\x32!.core.protos.connectors.GcmAssetsH\x00\x12>\n\rdatadog_oauth\x18\x0f \x01(\x0b\x32%.core.protos.connectors.DatadogAssetsH\x00\x12?\n\x0bopen_search\x18\x10 \x01(\x0b\x32(.core.protos.connectors.OpenSearchAssetsH\x00\x12\x34\n\x05\x61sana\x18\x11 \x01(\x0b\x32#.core.protos.connectors.AsanaAssetsH\x00\x12\x36\n\x06github\x18\x12 \x01(\x0b\x32$.core.protos.connectors.GithubAssetsH\x00\x12\x38\n\njira_cloud\x18\x13 \x01(\x0b\x32\".core.protos.connectors.JiraAssetsH\x00\x12\x36\n\x06\x61rgocd\x18\x14 \x01(\x0b\x32$.core.protos.connectors.ArgoCDAssetsH\x00\x12\x38\n\x07jenkins\x18\x15 \x01(\x0b\x32%.core.protos.connectors.JenkinsAssetsH\x00\x12\x38\n\x07mongodb\x18\x16 \x01(\x0b\x32%.core.protos.connectors.MongoDBAssetsH\x00\x12\x38\n\x07posthog\x18\x17 \x01(\x0b\x32%.core.protos.connectors.PosthogAssetsH\x00\x12\x30\n\x03sql\x18\x18 \x01(\x0b\x32!.core.protos.connectors.SqlAssetsH\x00\x12\x36\n\x06signoz\x18\x19 \x01(\x0b\x32$.core.protos.connectors.SignozAssetsH\x00\x12<\n\tcoralogix\x18\x1a \x01(\x0b\x32\'.core.protos.connectors.CoralogixAssetsH\x00\x12<\n\tbitbucket\x18\x1b \x01(\x0b\x32\'.core.protos.connectors.BitbucketAssetsH\x00\x42\x08\n\x06\x61ssets\"\xd8$\n\"AccountConnectorAssetsModelFilters\x12\x64\n\"cloudwatch_log_group_model_filters\x18\x01 \x01(\x0b\x32\x36.core.protos.connectors.CloudwatchLogGroupAssetOptionsH\x00\x12_\n\x1f\x63loudwatch_metric_model_filters\x18\x02 \x01(\x0b\x32\x34.core.protos.connectors.CloudwatchMetricAssetOptionsH\x00\x12s\n*grafana_target_metric_promql_model_filters\x18\x03 \x01(\x0b\x32=.core.protos.connectors.GrafanaTargetMetricPromQlAssetOptionsH\x00\x12\x63\n!clickhouse_database_model_filters\x18\x04 \x01(\x0b\x32\x36.core.protos.connectors.ClickhouseDatabaseAssetOptionsH\x00\x12W\n\x1bslack_channel_model_filters\x18\x05 \x01(\x0b\x32\x30.core.protos.connectors.SlackChannelAssetOptionsH\x00\x12s\n*new_relic_entity_application_model_filters\x18\x06 \x01(\x0b\x32=.core.protos.connectors.NewRelicApplicationEntityAssetOptionsH\x00\x12o\n(new_relic_entity_dashboard_model_filters\x18\x07 \x01(\x0b\x32;.core.protos.connectors.NewRelicDashboardEntityAssetOptionsH\x00\x12[\n\x1d\x64\x61tadog_service_model_filters\x18\x08 \x01(\x0b\x32\x32.core.protos.connectors.DatadogServiceAssetOptionsH\x00\x12_\n\x1fpostgres_database_model_filters\x18\t \x01(\x0b\x32\x34.core.protos.connectors.PostgresDatabaseAssetOptionsH\x00\x12S\n\x19\x65ks_cluster_model_filters\x18\n \x01(\x0b\x32..core.protos.connectors.EksClusterAssetOptionsH\x00\x12U\n\x18ssh_server_model_filters\x18\x0b \x01(\x0b\x32\x31.core.protos.connectors.BashSshServerAssetOptionsH\x00\x12[\n\x1d\x61zure_workspace_model_filters\x18\x0c \x01(\x0b\x32\x32.core.protos.connectors.AzureWorkspaceAssetOptionsH\x00\x12l\n+grafana_prometheus_datasource_model_filters\x18\r \x01(\x0b\x32\x35.core.protos.connectors.GrafanaDatasourceAssetOptionsH\x00\x12S\n\x19gke_cluster_model_filters\x18\x0e \x01(\x0b\x32..core.protos.connectors.GkeClusterAssetOptionsH\x00\x12\x64\n\"elastic_search_index_model_filters\x18\x0f \x01(\x0b\x32\x36.core.protos.connectors.ElasticSearchIndexAssetOptionsH\x00\x12^\n\x1fopen_search_index_model_filters\x18\x10 \x01(\x0b\x32\x33.core.protos.connectors.OpenSearchIndexAssetOptionsH\x00\x12Q\n\x18gcm_metric_model_filters\x18\x11 \x01(\x0b\x32-.core.protos.connectors.GcmMetricAssetOptionsH\x00\x12\x61\n#datadog_oauth_service_model_filters\x18\x12 \x01(\x0b\x32\x32.core.protos.connectors.DatadogServiceAssetOptionsH\x00\x12o\n(cloudwatch_log_group_query_model_filters\x18\x13 \x01(\x0b\x32;.core.protos.connectors.CloudwatchLogGroupQueryAssetOptionsH\x00\x12W\n\x1b\x61sana_project_model_filters\x18\x14 \x01(\x0b\x32\x30.core.protos.connectors.AsanaProjectAssetOptionsH\x00\x12`\n grafana_alert_rule_model_filters\x18\x15 \x01(\x0b\x32\x34.core.protos.connectors.GrafanaAlertRuleAssetOptionsH\x00\x12]\n\x1e\x63loudwatch_alarm_model_filters\x18\x16 \x01(\x0b\x32\x33.core.protos.connectors.CloudwatchAlarmAssetOptionsH\x00\x12_\n\x1f\x64\x61tadog_dashboard_model_filters\x18\x17 \x01(\x0b\x32\x34.core.protos.connectors.DatadogDashboardAssetOptionsH\x00\x12\x65\n%datadog_oauth_dashboard_model_filters\x18\x18 \x01(\x0b\x32\x34.core.protos.connectors.DatadogDashboardAssetOptionsH\x00\x12_\n\x1fgithub_repository_model_filters\x18\x19 \x01(\x0b\x32\x34.core.protos.connectors.GithubRepositoryAssetOptionsH\x00\x12W\n\x1bgithub_member_model_filters\x18\x1a \x01(\x0b\x32\x30.core.protos.connectors.GithubMemberAssetOptionsH\x00\x12O\n\x17jira_user_model_filters\x18\x1b \x01(\x0b\x32,.core.protos.connectors.JiraUserAssetOptionsH\x00\x12U\n\x1ajira_project_model_filters\x18\x1c \x01(\x0b\x32/.core.protos.connectors.JiraProjectAssetOptionsH\x00\x12S\n\x19\x61rgocd_apps_model_filters\x18\x1d \x01(\x0b\x32..core.protos.connectors.ArgoCDAppsAssetOptionsH\x00\x12Y\n\x1c\x61zure_resource_model_filters\x18\x1e \x01(\x0b\x32\x31.core.protos.connectors.AzureResourceAssetOptionsH\x00\x12_\n\x1fgrafana_dashboard_model_filters\x18\x1f \x01(\x0b\x32\x34.core.protos.connectors.GrafanaDashboardAssetOptionsH\x00\x12U\n\x1ajenkins_apps_model_filters\x18 \x01(\x0b\x32/.core.protos.connectors.JenkinsAppsAssetOptionsH\x00\x12]\n\x1emongodb_database_model_filters\x18! \x01(\x0b\x32\x33.core.protos.connectors.MongoDBDatabaseAssetOptionsH\x00\x12\x61\n mongodb_collection_model_filters\x18\" \x01(\x0b\x32\x35.core.protos.connectors.MongoDBCollectionAssetOptionsH\x00\x12]\n\x1eposthog_property_model_filters\x18# \x01(\x0b\x32\x33.core.protos.connectors.PosthogPropertyAssetOptionsH\x00\x12O\n\x17sql_table_model_filters\x18$ \x01(\x0b\x32,.core.protos.connectors.SqlTableAssetOptionsH\x00\x12S\n\x19\x65\x63s_cluster_model_filters\x18\' \x01(\x0b\x32..core.protos.connectors.EcsClusterAssetOptionsH\x00\x12M\n\x16\x65\x63s_task_model_filters\x18% \x01(\x0b\x32+.core.protos.connectors.EcsTaskAssetOptionsH\x00\x12S\n\x19\x65\x63s_service_model_filters\x18& \x01(\x0b\x32..core.protos.connectors.EcsServiceAssetOptionsH\x00\x12]\n\x1bgcm_dashboard_model_filters\x18( \x01(\x0b\x32\x36.core.protos.connectors.GcmDashboardEntityAssetOptionsH\x00\x12\x65\n#gcm_cloud_run_service_model_filters\x18) \x01(\x0b\x32\x36.core.protos.connectors.GcmCloudRunServiceAssetOptionsH\x00\x12\x65\n\"cloudwatch_dashboard_model_filters\x18* \x01(\x0b\x32\x37.core.protos.connectors.CloudwatchDashboardAssetOptionsH\x00\x12h\n$elastic_search_service_model_filters\x18= \x01(\x0b\x32\x38.core.protos.connectors.ElasticSearchServiceAssetOptionsH\x00\x12l\n&elastic_search_dashboard_model_filters\x18> \x01(\x0b\x32:.core.protos.connectors.ElasticSearchDashboardAssetOptionsH\x00\x12s\n*elastic_search_index_pattern_model_filters\x18? \x01(\x0b\x32=.core.protos.connectors.ElasticSearchIndexPatternAssetOptionsH\x00\x12\x66\n%grafana_loki_datasource_model_filters\x18H \x01(\x0b\x32\x35.core.protos.connectors.GrafanaDatasourceAssetOptionsH\x00\x12\x65\n\"bitbucket_repository_model_filters\x18I \x01(\x0b\x32\x37.core.protos.connectors.BitbucketRepositoryAssetOptionsH\x00\x12p\n(bitbucket_workspace_member_model_filters\x18J \x01(\x0b\x32<.core.protos.connectors.BitbucketWorkspaceMemberAssetOptionsH\x00\x42\t\n\x07\x66iltersb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'core.protos.assets.asset_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: DESCRIPTOR._loaded_options = None - _globals['_CONNECTORMODELTYPEOPTIONS']._serialized_start=1144 - _globals['_CONNECTORMODELTYPEOPTIONS']._serialized_end=5565 - _globals['_ACCOUNTCONNECTORASSETS']._serialized_start=5568 - _globals['_ACCOUNTCONNECTORASSETS']._serialized_end=7097 - _globals['_ACCOUNTCONNECTORASSETSMODELFILTERS']._serialized_start=7100 - _globals['_ACCOUNTCONNECTORASSETSMODELFILTERS']._serialized_end=11579 + _globals['_CONNECTORMODELTYPEOPTIONS']._serialized_start=1186 + _globals['_CONNECTORMODELTYPEOPTIONS']._serialized_end=5824 + _globals['_ACCOUNTCONNECTORASSETS']._serialized_start=5827 + _globals['_ACCOUNTCONNECTORASSETS']._serialized_end=7418 + _globals['_ACCOUNTCONNECTORASSETSMODELFILTERS']._serialized_start=7421 + _globals['_ACCOUNTCONNECTORASSETSMODELFILTERS']._serialized_end=12117 # @@protoc_insertion_point(module_scope) diff --git a/drdroid_debug_toolkit/core/protos/assets/bitbucket_asset.proto b/drdroid_debug_toolkit/core/protos/assets/bitbucket_asset.proto new file mode 100644 index 0000000..588a961 --- /dev/null +++ b/drdroid_debug_toolkit/core/protos/assets/bitbucket_asset.proto @@ -0,0 +1,52 @@ +syntax = "proto3"; +package core.protos.connectors; + +import "google/protobuf/wrappers.proto"; +import "core/protos/base.proto"; + +message BitbucketRepositoryAssetModel { + google.protobuf.StringValue slug = 1; + google.protobuf.StringValue name = 2; + google.protobuf.StringValue full_name = 3; + google.protobuf.StringValue html_url = 4; + google.protobuf.StringValue description = 5; + google.protobuf.BoolValue is_private = 6; + google.protobuf.StringValue owner = 7; +} + +message BitbucketWorkspaceMemberAssetModel { + google.protobuf.StringValue display_name = 1; + google.protobuf.StringValue uuid = 2; + google.protobuf.StringValue nickname = 3; +} + +message BitbucketRepositoryAssetOptions { + message BitbucketRepository { + google.protobuf.StringValue slug = 1; + } + + repeated BitbucketRepository repositories = 1; +} + +message BitbucketWorkspaceMemberAssetOptions { + message BitbucketWorkspaceMember { + google.protobuf.StringValue display_name = 1; + } + + repeated BitbucketWorkspaceMember members = 1; +} + +message BitbucketAssetModel { + google.protobuf.UInt64Value id = 1; + Source connector_type = 2; + SourceModelType type = 3; + sfixed64 last_updated = 4; + oneof asset { + BitbucketRepositoryAssetModel bitbucket_repository = 5; + BitbucketWorkspaceMemberAssetModel bitbucket_workspace_member = 6; + } +} + +message BitbucketAssets { + repeated BitbucketAssetModel assets = 1; +} diff --git a/drdroid_debug_toolkit/core/protos/assets/bitbucket_asset_pb2.py b/drdroid_debug_toolkit/core/protos/assets/bitbucket_asset_pb2.py new file mode 100644 index 0000000..5d625b2 --- /dev/null +++ b/drdroid_debug_toolkit/core/protos/assets/bitbucket_asset_pb2.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: core/protos/assets/bitbucket_asset.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/assets/bitbucket_asset.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 +from core.protos import base_pb2 as core_dot_protos_dot_base__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(core/protos/assets/bitbucket_asset.proto\x12\x16\x63ore.protos.connectors\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x16\x63ore/protos/base.proto\"\xe8\x02\n\x1d\x42itbucketRepositoryAssetModel\x12*\n\x04slug\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04name\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfull_name\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08html_url\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0b\x64\x65scription\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\nis_private\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x05owner\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\xb4\x01\n\"BitbucketWorkspaceMemberAssetModel\x12\x32\n\x0c\x64isplay_name\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04uuid\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08nickname\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\xc7\x01\n\x1f\x42itbucketRepositoryAssetOptions\x12\x61\n\x0crepositories\x18\x01 \x03(\x0b\x32K.core.protos.connectors.BitbucketRepositoryAssetOptions.BitbucketRepository\x1a\x41\n\x13\x42itbucketRepository\x12*\n\x04slug\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\xde\x01\n$BitbucketWorkspaceMemberAssetOptions\x12\x66\n\x07members\x18\x01 \x03(\x0b\x32U.core.protos.connectors.BitbucketWorkspaceMemberAssetOptions.BitbucketWorkspaceMember\x1aN\n\x18\x42itbucketWorkspaceMember\x12\x32\n\x0c\x64isplay_name\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\xf0\x02\n\x13\x42itbucketAssetModel\x12(\n\x02id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12+\n\x0e\x63onnector_type\x18\x02 \x01(\x0e\x32\x13.core.protos.Source\x12*\n\x04type\x18\x03 \x01(\x0e\x32\x1c.core.protos.SourceModelType\x12\x14\n\x0clast_updated\x18\x04 \x01(\x10\x12U\n\x14\x62itbucket_repository\x18\x05 \x01(\x0b\x32\x35.core.protos.connectors.BitbucketRepositoryAssetModelH\x00\x12`\n\x1a\x62itbucket_workspace_member\x18\x06 \x01(\x0b\x32:.core.protos.connectors.BitbucketWorkspaceMemberAssetModelH\x00\x42\x07\n\x05\x61sset\"N\n\x0f\x42itbucketAssets\x12;\n\x06\x61ssets\x18\x01 \x03(\x0b\x32+.core.protos.connectors.BitbucketAssetModelb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'core.protos.assets.bitbucket_asset_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_BITBUCKETREPOSITORYASSETMODEL']._serialized_start=125 + _globals['_BITBUCKETREPOSITORYASSETMODEL']._serialized_end=485 + _globals['_BITBUCKETWORKSPACEMEMBERASSETMODEL']._serialized_start=488 + _globals['_BITBUCKETWORKSPACEMEMBERASSETMODEL']._serialized_end=668 + _globals['_BITBUCKETREPOSITORYASSETOPTIONS']._serialized_start=671 + _globals['_BITBUCKETREPOSITORYASSETOPTIONS']._serialized_end=870 + _globals['_BITBUCKETREPOSITORYASSETOPTIONS_BITBUCKETREPOSITORY']._serialized_start=805 + _globals['_BITBUCKETREPOSITORYASSETOPTIONS_BITBUCKETREPOSITORY']._serialized_end=870 + _globals['_BITBUCKETWORKSPACEMEMBERASSETOPTIONS']._serialized_start=873 + _globals['_BITBUCKETWORKSPACEMEMBERASSETOPTIONS']._serialized_end=1095 + _globals['_BITBUCKETWORKSPACEMEMBERASSETOPTIONS_BITBUCKETWORKSPACEMEMBER']._serialized_start=1017 + _globals['_BITBUCKETWORKSPACEMEMBERASSETOPTIONS_BITBUCKETWORKSPACEMEMBER']._serialized_end=1095 + _globals['_BITBUCKETASSETMODEL']._serialized_start=1098 + _globals['_BITBUCKETASSETMODEL']._serialized_end=1466 + _globals['_BITBUCKETASSETS']._serialized_start=1468 + _globals['_BITBUCKETASSETS']._serialized_end=1546 +# @@protoc_insertion_point(module_scope) diff --git a/drdroid_debug_toolkit/core/protos/assets/bitbucket_asset_pb2.pyi b/drdroid_debug_toolkit/core/protos/assets/bitbucket_asset_pb2.pyi new file mode 100644 index 0000000..f859b9d --- /dev/null +++ b/drdroid_debug_toolkit/core/protos/assets/bitbucket_asset_pb2.pyi @@ -0,0 +1,198 @@ +""" +@generated by mypy-protobuf. Do not edit manually! +isort:skip_file +""" +import builtins +import collections.abc +import core.protos.base_pb2 +import google.protobuf.descriptor +import google.protobuf.internal.containers +import google.protobuf.message +import google.protobuf.wrappers_pb2 +import sys + +if sys.version_info >= (3, 8): + import typing as typing_extensions +else: + import typing_extensions + +DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + +@typing_extensions.final +class BitbucketRepositoryAssetModel(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + SLUG_FIELD_NUMBER: builtins.int + NAME_FIELD_NUMBER: builtins.int + FULL_NAME_FIELD_NUMBER: builtins.int + HTML_URL_FIELD_NUMBER: builtins.int + DESCRIPTION_FIELD_NUMBER: builtins.int + IS_PRIVATE_FIELD_NUMBER: builtins.int + OWNER_FIELD_NUMBER: builtins.int + @property + def slug(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def name(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def full_name(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def html_url(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def description(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def is_private(self) -> google.protobuf.wrappers_pb2.BoolValue: ... + @property + def owner(self) -> google.protobuf.wrappers_pb2.StringValue: ... + def __init__( + self, + *, + slug: google.protobuf.wrappers_pb2.StringValue | None = ..., + name: google.protobuf.wrappers_pb2.StringValue | None = ..., + full_name: google.protobuf.wrappers_pb2.StringValue | None = ..., + html_url: google.protobuf.wrappers_pb2.StringValue | None = ..., + description: google.protobuf.wrappers_pb2.StringValue | None = ..., + is_private: google.protobuf.wrappers_pb2.BoolValue | None = ..., + owner: google.protobuf.wrappers_pb2.StringValue | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["description", b"description", "full_name", b"full_name", "html_url", b"html_url", "is_private", b"is_private", "name", b"name", "owner", b"owner", "slug", b"slug"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["description", b"description", "full_name", b"full_name", "html_url", b"html_url", "is_private", b"is_private", "name", b"name", "owner", b"owner", "slug", b"slug"]) -> None: ... + +global___BitbucketRepositoryAssetModel = BitbucketRepositoryAssetModel + +@typing_extensions.final +class BitbucketWorkspaceMemberAssetModel(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + DISPLAY_NAME_FIELD_NUMBER: builtins.int + UUID_FIELD_NUMBER: builtins.int + NICKNAME_FIELD_NUMBER: builtins.int + @property + def display_name(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def uuid(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def nickname(self) -> google.protobuf.wrappers_pb2.StringValue: ... + def __init__( + self, + *, + display_name: google.protobuf.wrappers_pb2.StringValue | None = ..., + uuid: google.protobuf.wrappers_pb2.StringValue | None = ..., + nickname: google.protobuf.wrappers_pb2.StringValue | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["display_name", b"display_name", "nickname", b"nickname", "uuid", b"uuid"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["display_name", b"display_name", "nickname", b"nickname", "uuid", b"uuid"]) -> None: ... + +global___BitbucketWorkspaceMemberAssetModel = BitbucketWorkspaceMemberAssetModel + +@typing_extensions.final +class BitbucketRepositoryAssetOptions(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + @typing_extensions.final + class BitbucketRepository(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + SLUG_FIELD_NUMBER: builtins.int + @property + def slug(self) -> google.protobuf.wrappers_pb2.StringValue: ... + def __init__( + self, + *, + slug: google.protobuf.wrappers_pb2.StringValue | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["slug", b"slug"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["slug", b"slug"]) -> None: ... + + REPOSITORIES_FIELD_NUMBER: builtins.int + @property + def repositories(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___BitbucketRepositoryAssetOptions.BitbucketRepository]: ... + def __init__( + self, + *, + repositories: collections.abc.Iterable[global___BitbucketRepositoryAssetOptions.BitbucketRepository] | None = ..., + ) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["repositories", b"repositories"]) -> None: ... + +global___BitbucketRepositoryAssetOptions = BitbucketRepositoryAssetOptions + +@typing_extensions.final +class BitbucketWorkspaceMemberAssetOptions(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + @typing_extensions.final + class BitbucketWorkspaceMember(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + DISPLAY_NAME_FIELD_NUMBER: builtins.int + @property + def display_name(self) -> google.protobuf.wrappers_pb2.StringValue: ... + def __init__( + self, + *, + display_name: google.protobuf.wrappers_pb2.StringValue | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["display_name", b"display_name"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["display_name", b"display_name"]) -> None: ... + + MEMBERS_FIELD_NUMBER: builtins.int + @property + def members(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___BitbucketWorkspaceMemberAssetOptions.BitbucketWorkspaceMember]: ... + def __init__( + self, + *, + members: collections.abc.Iterable[global___BitbucketWorkspaceMemberAssetOptions.BitbucketWorkspaceMember] | None = ..., + ) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["members", b"members"]) -> None: ... + +global___BitbucketWorkspaceMemberAssetOptions = BitbucketWorkspaceMemberAssetOptions + +@typing_extensions.final +class BitbucketAssetModel(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + ID_FIELD_NUMBER: builtins.int + CONNECTOR_TYPE_FIELD_NUMBER: builtins.int + TYPE_FIELD_NUMBER: builtins.int + LAST_UPDATED_FIELD_NUMBER: builtins.int + BITBUCKET_REPOSITORY_FIELD_NUMBER: builtins.int + BITBUCKET_WORKSPACE_MEMBER_FIELD_NUMBER: builtins.int + @property + def id(self) -> google.protobuf.wrappers_pb2.UInt64Value: ... + connector_type: core.protos.base_pb2.Source.ValueType + type: core.protos.base_pb2.SourceModelType.ValueType + last_updated: builtins.int + @property + def bitbucket_repository(self) -> global___BitbucketRepositoryAssetModel: ... + @property + def bitbucket_workspace_member(self) -> global___BitbucketWorkspaceMemberAssetModel: ... + def __init__( + self, + *, + id: google.protobuf.wrappers_pb2.UInt64Value | None = ..., + connector_type: core.protos.base_pb2.Source.ValueType = ..., + type: core.protos.base_pb2.SourceModelType.ValueType = ..., + last_updated: builtins.int = ..., + bitbucket_repository: global___BitbucketRepositoryAssetModel | None = ..., + bitbucket_workspace_member: global___BitbucketWorkspaceMemberAssetModel | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["asset", b"asset", "bitbucket_repository", b"bitbucket_repository", "bitbucket_workspace_member", b"bitbucket_workspace_member", "id", b"id"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["asset", b"asset", "bitbucket_repository", b"bitbucket_repository", "bitbucket_workspace_member", b"bitbucket_workspace_member", "connector_type", b"connector_type", "id", b"id", "last_updated", b"last_updated", "type", b"type"]) -> None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["asset", b"asset"]) -> typing_extensions.Literal["bitbucket_repository", "bitbucket_workspace_member"] | None: ... + +global___BitbucketAssetModel = BitbucketAssetModel + +@typing_extensions.final +class BitbucketAssets(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + ASSETS_FIELD_NUMBER: builtins.int + @property + def assets(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___BitbucketAssetModel]: ... + def __init__( + self, + *, + assets: collections.abc.Iterable[global___BitbucketAssetModel] | None = ..., + ) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["assets", b"assets"]) -> None: ... + +global___BitbucketAssets = BitbucketAssets diff --git a/drdroid_debug_toolkit/core/protos/base.proto b/drdroid_debug_toolkit/core/protos/base.proto index 4ec35c6..1711321 100644 --- a/drdroid_debug_toolkit/core/protos/base.proto +++ b/drdroid_debug_toolkit/core/protos/base.proto @@ -628,6 +628,10 @@ enum SourceModelType { LINEAR_TEAMS = 9201; LINEAR_USERS = 9202; LINEAR_PROJECTS = 9203; + + // Bitbucket Models + BITBUCKET_REPOSITORY = 9301; + BITBUCKET_WORKSPACE_MEMBER = 9302; } message EventKey { diff --git a/drdroid_debug_toolkit/core/protos/base_pb2.py b/drdroid_debug_toolkit/core/protos/base_pb2.py index e0e7806..95bfbdf 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*\x8e\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\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*\xe0\x1c\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\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*\x8e\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\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*\xe0\x1c\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\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*\x81 \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\x19\n\x14\x42ITBUCKET_REPOSITORY\x10\xd5H\x12\x1f\n\x1a\x42ITBUCKET_WORKSPACE_MEMBER\x10\xd6H*\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=4093 _globals['_SOURCEKEYTYPE']._serialized_end=7773 _globals['_SOURCEMODELTYPE']._serialized_start=7776 - _globals['_SOURCEMODELTYPE']._serialized_end=11813 - _globals['_CONTEXT']._serialized_start=11816 - _globals['_CONTEXT']._serialized_end=12116 - _globals['_RECENTARTIFACTTYPE']._serialized_start=12119 - _globals['_RECENTARTIFACTTYPE']._serialized_end=12393 + _globals['_SOURCEMODELTYPE']._serialized_end=11873 + _globals['_CONTEXT']._serialized_start=11876 + _globals['_CONTEXT']._serialized_end=12176 + _globals['_RECENTARTIFACTTYPE']._serialized_start=12179 + _globals['_RECENTARTIFACTTYPE']._serialized_end=12453 _globals['_TIMERANGE']._serialized_start=71 _globals['_TIMERANGE']._serialized_end=117 _globals['_PAGE']._serialized_start=119 diff --git a/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/bitbucket_task.proto b/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/bitbucket_task.proto new file mode 100644 index 0000000..9ed62f4 --- /dev/null +++ b/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/bitbucket_task.proto @@ -0,0 +1,90 @@ +syntax = "proto3"; +package core.protos.playbooks; + +import "google/protobuf/wrappers.proto"; + +message Bitbucket { + message FetchFile { + google.protobuf.StringValue workspace = 1; + google.protobuf.StringValue repo = 2; + google.protobuf.StringValue file_path = 3; + google.protobuf.StringValue branch = 4; + sfixed64 timestamp = 5; + } + + message UpdateFile { + google.protobuf.StringValue workspace = 1; + google.protobuf.StringValue repo = 2; + google.protobuf.StringValue file_path = 3; + google.protobuf.StringValue content = 4; + google.protobuf.StringValue commit_message = 5; + google.protobuf.StringValue branch = 6; + google.protobuf.StringValue author = 7; + } + + message FetchCommits { + google.protobuf.StringValue workspace = 1; + google.protobuf.StringValue repo = 2; + google.protobuf.StringValue branch = 3; + google.protobuf.StringValue author = 4; + } + + message FetchRelatedCommits { + google.protobuf.StringValue workspace = 1; + google.protobuf.StringValue repo = 2; + google.protobuf.StringValue file_path = 3; + google.protobuf.StringValue function_name = 4; + google.protobuf.StringValue branch = 5; + } + + message FetchRecentMerges { + google.protobuf.StringValue workspace = 1; + google.protobuf.StringValue repo = 2; + google.protobuf.StringValue branch = 3; + } + + message FileUpdate { + google.protobuf.StringValue path = 1; + google.protobuf.StringValue content = 2; + } + + message CreatePullRequest { + google.protobuf.StringValue workspace = 1; + google.protobuf.StringValue repo = 2; + google.protobuf.StringValue title = 3; + google.protobuf.StringValue description = 4; + google.protobuf.StringValue source_branch = 5; + google.protobuf.StringValue destination_branch = 6; + repeated FileUpdate files = 7; + google.protobuf.StringValue commit_message = 8; + google.protobuf.BoolValue close_source_branch = 9; + } + + message FetchPullRequestDiff { + google.protobuf.StringValue workspace = 1; + google.protobuf.StringValue repo = 2; + google.protobuf.Int64Value pr_id = 3; + } + + enum TaskType { + UNKNOWN = 0; + FETCH_FILE = 1; + UPDATE_FILE = 2; + FETCH_COMMITS = 3; + FETCH_RELATED_COMMITS = 4; + FETCH_RECENT_MERGES = 5; + CREATE_PULL_REQUEST = 6; + FETCH_PULL_REQUEST_DIFF = 7; + } + + TaskType type = 1; + oneof task { + FetchFile fetch_file = 2; + UpdateFile update_file = 3; + FetchCommits fetch_commits = 4; + FetchRelatedCommits fetch_related_commits = 5; + FetchRecentMerges fetch_recent_merges = 6; + CreatePullRequest create_pull_request = 7; + FetchPullRequestDiff fetch_pull_request_diff = 8; + } +} diff --git a/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/bitbucket_task_pb2.py b/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/bitbucket_task_pb2.py new file mode 100644 index 0000000..3fe52c0 --- /dev/null +++ b/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/bitbucket_task_pb2.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: core/protos/playbooks/source_task_definitions/bitbucket_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/bitbucket_task.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\nBcore/protos/playbooks/source_task_definitions/bitbucket_task.proto\x12\x15\x63ore.protos.playbooks\x1a\x1egoogle/protobuf/wrappers.proto\"\xd0\x15\n\tBitbucket\x12\x37\n\x04type\x18\x01 \x01(\x0e\x32).core.protos.playbooks.Bitbucket.TaskType\x12@\n\nfetch_file\x18\x02 \x01(\x0b\x32*.core.protos.playbooks.Bitbucket.FetchFileH\x00\x12\x42\n\x0bupdate_file\x18\x03 \x01(\x0b\x32+.core.protos.playbooks.Bitbucket.UpdateFileH\x00\x12\x46\n\rfetch_commits\x18\x04 \x01(\x0b\x32-.core.protos.playbooks.Bitbucket.FetchCommitsH\x00\x12U\n\x15\x66\x65tch_related_commits\x18\x05 \x01(\x0b\x32\x34.core.protos.playbooks.Bitbucket.FetchRelatedCommitsH\x00\x12Q\n\x13\x66\x65tch_recent_merges\x18\x06 \x01(\x0b\x32\x32.core.protos.playbooks.Bitbucket.FetchRecentMergesH\x00\x12Q\n\x13\x63reate_pull_request\x18\x07 \x01(\x0b\x32\x32.core.protos.playbooks.Bitbucket.CreatePullRequestH\x00\x12X\n\x17\x66\x65tch_pull_request_diff\x18\x08 \x01(\x0b\x32\x35.core.protos.playbooks.Bitbucket.FetchPullRequestDiffH\x00\x1a\xda\x01\n\tFetchFile\x12/\n\tworkspace\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04repo\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfile_path\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x62ranch\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x11\n\ttimestamp\x18\x05 \x01(\x10\x1a\xdb\x02\n\nUpdateFile\x12/\n\tworkspace\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04repo\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfile_path\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07\x63ontent\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0e\x63ommit_message\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x62ranch\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x61uthor\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x1a\xc7\x01\n\x0c\x46\x65tchCommits\x12/\n\tworkspace\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04repo\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x62ranch\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x61uthor\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x1a\x86\x02\n\x13\x46\x65tchRelatedCommits\x12/\n\tworkspace\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04repo\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfile_path\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rfunction_name\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x62ranch\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x1a\x9e\x01\n\x11\x46\x65tchRecentMerges\x12/\n\tworkspace\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04repo\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x62ranch\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x1ag\n\nFileUpdate\x12*\n\x04path\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x1a\xea\x03\n\x11\x43reatePullRequest\x12/\n\tworkspace\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04repo\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05title\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\x33\n\rsource_branch\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12\x64\x65stination_branch\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x05\x66iles\x18\x07 \x03(\x0b\x32+.core.protos.playbooks.Bitbucket.FileUpdate\x12\x34\n\x0e\x63ommit_message\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x13\x63lose_source_branch\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x1a\x9f\x01\n\x14\x46\x65tchPullRequestDiff\x12/\n\tworkspace\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04repo\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x05pr_id\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\"\xb5\x01\n\x08TaskType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0e\n\nFETCH_FILE\x10\x01\x12\x0f\n\x0bUPDATE_FILE\x10\x02\x12\x11\n\rFETCH_COMMITS\x10\x03\x12\x19\n\x15\x46\x45TCH_RELATED_COMMITS\x10\x04\x12\x17\n\x13\x46\x45TCH_RECENT_MERGES\x10\x05\x12\x17\n\x13\x43REATE_PULL_REQUEST\x10\x06\x12\x1b\n\x17\x46\x45TCH_PULL_REQUEST_DIFF\x10\x07\x42\x06\n\x04taskb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'core.protos.playbooks.source_task_definitions.bitbucket_task_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_BITBUCKET']._serialized_start=126 + _globals['_BITBUCKET']._serialized_end=2894 + _globals['_BITBUCKET_FETCHFILE']._serialized_start=746 + _globals['_BITBUCKET_FETCHFILE']._serialized_end=964 + _globals['_BITBUCKET_UPDATEFILE']._serialized_start=967 + _globals['_BITBUCKET_UPDATEFILE']._serialized_end=1314 + _globals['_BITBUCKET_FETCHCOMMITS']._serialized_start=1317 + _globals['_BITBUCKET_FETCHCOMMITS']._serialized_end=1516 + _globals['_BITBUCKET_FETCHRELATEDCOMMITS']._serialized_start=1519 + _globals['_BITBUCKET_FETCHRELATEDCOMMITS']._serialized_end=1781 + _globals['_BITBUCKET_FETCHRECENTMERGES']._serialized_start=1784 + _globals['_BITBUCKET_FETCHRECENTMERGES']._serialized_end=1942 + _globals['_BITBUCKET_FILEUPDATE']._serialized_start=1944 + _globals['_BITBUCKET_FILEUPDATE']._serialized_end=2047 + _globals['_BITBUCKET_CREATEPULLREQUEST']._serialized_start=2050 + _globals['_BITBUCKET_CREATEPULLREQUEST']._serialized_end=2540 + _globals['_BITBUCKET_FETCHPULLREQUESTDIFF']._serialized_start=2543 + _globals['_BITBUCKET_FETCHPULLREQUESTDIFF']._serialized_end=2702 + _globals['_BITBUCKET_TASKTYPE']._serialized_start=2705 + _globals['_BITBUCKET_TASKTYPE']._serialized_end=2886 +# @@protoc_insertion_point(module_scope) diff --git a/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/bitbucket_task_pb2.pyi b/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/bitbucket_task_pb2.pyi new file mode 100644 index 0000000..27f9720 --- /dev/null +++ b/drdroid_debug_toolkit/core/protos/playbooks/source_task_definitions/bitbucket_task_pb2.pyi @@ -0,0 +1,329 @@ +""" +@generated by mypy-protobuf. Do not edit manually! +isort:skip_file +""" +import builtins +import collections.abc +import google.protobuf.descriptor +import google.protobuf.internal.containers +import google.protobuf.internal.enum_type_wrapper +import google.protobuf.message +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 Bitbucket(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[Bitbucket._TaskType.ValueType], builtins.type): # noqa: F821 + DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + UNKNOWN: Bitbucket._TaskType.ValueType # 0 + FETCH_FILE: Bitbucket._TaskType.ValueType # 1 + UPDATE_FILE: Bitbucket._TaskType.ValueType # 2 + FETCH_COMMITS: Bitbucket._TaskType.ValueType # 3 + FETCH_RELATED_COMMITS: Bitbucket._TaskType.ValueType # 4 + FETCH_RECENT_MERGES: Bitbucket._TaskType.ValueType # 5 + CREATE_PULL_REQUEST: Bitbucket._TaskType.ValueType # 6 + FETCH_PULL_REQUEST_DIFF: Bitbucket._TaskType.ValueType # 7 + + class TaskType(_TaskType, metaclass=_TaskTypeEnumTypeWrapper): ... + UNKNOWN: Bitbucket.TaskType.ValueType # 0 + FETCH_FILE: Bitbucket.TaskType.ValueType # 1 + UPDATE_FILE: Bitbucket.TaskType.ValueType # 2 + FETCH_COMMITS: Bitbucket.TaskType.ValueType # 3 + FETCH_RELATED_COMMITS: Bitbucket.TaskType.ValueType # 4 + FETCH_RECENT_MERGES: Bitbucket.TaskType.ValueType # 5 + CREATE_PULL_REQUEST: Bitbucket.TaskType.ValueType # 6 + FETCH_PULL_REQUEST_DIFF: Bitbucket.TaskType.ValueType # 7 + + @typing_extensions.final + class FetchFile(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + WORKSPACE_FIELD_NUMBER: builtins.int + REPO_FIELD_NUMBER: builtins.int + FILE_PATH_FIELD_NUMBER: builtins.int + BRANCH_FIELD_NUMBER: builtins.int + TIMESTAMP_FIELD_NUMBER: builtins.int + @property + def workspace(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def repo(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def file_path(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def branch(self) -> google.protobuf.wrappers_pb2.StringValue: ... + timestamp: builtins.int + def __init__( + self, + *, + workspace: google.protobuf.wrappers_pb2.StringValue | None = ..., + repo: google.protobuf.wrappers_pb2.StringValue | None = ..., + file_path: google.protobuf.wrappers_pb2.StringValue | None = ..., + branch: google.protobuf.wrappers_pb2.StringValue | None = ..., + timestamp: builtins.int = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["branch", b"branch", "file_path", b"file_path", "repo", b"repo", "workspace", b"workspace"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["branch", b"branch", "file_path", b"file_path", "repo", b"repo", "timestamp", b"timestamp", "workspace", b"workspace"]) -> None: ... + + @typing_extensions.final + class UpdateFile(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + WORKSPACE_FIELD_NUMBER: builtins.int + REPO_FIELD_NUMBER: builtins.int + FILE_PATH_FIELD_NUMBER: builtins.int + CONTENT_FIELD_NUMBER: builtins.int + COMMIT_MESSAGE_FIELD_NUMBER: builtins.int + BRANCH_FIELD_NUMBER: builtins.int + AUTHOR_FIELD_NUMBER: builtins.int + @property + def workspace(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def repo(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def file_path(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def content(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def commit_message(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def branch(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def author(self) -> google.protobuf.wrappers_pb2.StringValue: ... + def __init__( + self, + *, + workspace: google.protobuf.wrappers_pb2.StringValue | None = ..., + repo: google.protobuf.wrappers_pb2.StringValue | None = ..., + file_path: google.protobuf.wrappers_pb2.StringValue | None = ..., + content: google.protobuf.wrappers_pb2.StringValue | None = ..., + commit_message: google.protobuf.wrappers_pb2.StringValue | None = ..., + branch: google.protobuf.wrappers_pb2.StringValue | None = ..., + author: google.protobuf.wrappers_pb2.StringValue | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["author", b"author", "branch", b"branch", "commit_message", b"commit_message", "content", b"content", "file_path", b"file_path", "repo", b"repo", "workspace", b"workspace"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["author", b"author", "branch", b"branch", "commit_message", b"commit_message", "content", b"content", "file_path", b"file_path", "repo", b"repo", "workspace", b"workspace"]) -> None: ... + + @typing_extensions.final + class FetchCommits(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + WORKSPACE_FIELD_NUMBER: builtins.int + REPO_FIELD_NUMBER: builtins.int + BRANCH_FIELD_NUMBER: builtins.int + AUTHOR_FIELD_NUMBER: builtins.int + @property + def workspace(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def repo(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def branch(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def author(self) -> google.protobuf.wrappers_pb2.StringValue: ... + def __init__( + self, + *, + workspace: google.protobuf.wrappers_pb2.StringValue | None = ..., + repo: google.protobuf.wrappers_pb2.StringValue | None = ..., + branch: google.protobuf.wrappers_pb2.StringValue | None = ..., + author: google.protobuf.wrappers_pb2.StringValue | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["author", b"author", "branch", b"branch", "repo", b"repo", "workspace", b"workspace"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["author", b"author", "branch", b"branch", "repo", b"repo", "workspace", b"workspace"]) -> None: ... + + @typing_extensions.final + class FetchRelatedCommits(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + WORKSPACE_FIELD_NUMBER: builtins.int + REPO_FIELD_NUMBER: builtins.int + FILE_PATH_FIELD_NUMBER: builtins.int + FUNCTION_NAME_FIELD_NUMBER: builtins.int + BRANCH_FIELD_NUMBER: builtins.int + @property + def workspace(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def repo(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def file_path(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def function_name(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def branch(self) -> google.protobuf.wrappers_pb2.StringValue: ... + def __init__( + self, + *, + workspace: google.protobuf.wrappers_pb2.StringValue | None = ..., + repo: google.protobuf.wrappers_pb2.StringValue | None = ..., + file_path: google.protobuf.wrappers_pb2.StringValue | None = ..., + function_name: google.protobuf.wrappers_pb2.StringValue | None = ..., + branch: google.protobuf.wrappers_pb2.StringValue | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["branch", b"branch", "file_path", b"file_path", "function_name", b"function_name", "repo", b"repo", "workspace", b"workspace"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["branch", b"branch", "file_path", b"file_path", "function_name", b"function_name", "repo", b"repo", "workspace", b"workspace"]) -> None: ... + + @typing_extensions.final + class FetchRecentMerges(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + WORKSPACE_FIELD_NUMBER: builtins.int + REPO_FIELD_NUMBER: builtins.int + BRANCH_FIELD_NUMBER: builtins.int + @property + def workspace(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def repo(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def branch(self) -> google.protobuf.wrappers_pb2.StringValue: ... + def __init__( + self, + *, + workspace: google.protobuf.wrappers_pb2.StringValue | None = ..., + repo: google.protobuf.wrappers_pb2.StringValue | None = ..., + branch: google.protobuf.wrappers_pb2.StringValue | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["branch", b"branch", "repo", b"repo", "workspace", b"workspace"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["branch", b"branch", "repo", b"repo", "workspace", b"workspace"]) -> None: ... + + @typing_extensions.final + class FileUpdate(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + PATH_FIELD_NUMBER: builtins.int + CONTENT_FIELD_NUMBER: builtins.int + @property + def path(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def content(self) -> google.protobuf.wrappers_pb2.StringValue: ... + def __init__( + self, + *, + path: google.protobuf.wrappers_pb2.StringValue | None = ..., + content: google.protobuf.wrappers_pb2.StringValue | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["content", b"content", "path", b"path"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["content", b"content", "path", b"path"]) -> None: ... + + @typing_extensions.final + class CreatePullRequest(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + WORKSPACE_FIELD_NUMBER: builtins.int + REPO_FIELD_NUMBER: builtins.int + TITLE_FIELD_NUMBER: builtins.int + DESCRIPTION_FIELD_NUMBER: builtins.int + SOURCE_BRANCH_FIELD_NUMBER: builtins.int + DESTINATION_BRANCH_FIELD_NUMBER: builtins.int + FILES_FIELD_NUMBER: builtins.int + COMMIT_MESSAGE_FIELD_NUMBER: builtins.int + CLOSE_SOURCE_BRANCH_FIELD_NUMBER: builtins.int + @property + def workspace(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def repo(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def title(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def description(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def source_branch(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def destination_branch(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def files(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Bitbucket.FileUpdate]: ... + @property + def commit_message(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def close_source_branch(self) -> google.protobuf.wrappers_pb2.BoolValue: ... + def __init__( + self, + *, + workspace: google.protobuf.wrappers_pb2.StringValue | None = ..., + repo: google.protobuf.wrappers_pb2.StringValue | None = ..., + title: google.protobuf.wrappers_pb2.StringValue | None = ..., + description: google.protobuf.wrappers_pb2.StringValue | None = ..., + source_branch: google.protobuf.wrappers_pb2.StringValue | None = ..., + destination_branch: google.protobuf.wrappers_pb2.StringValue | None = ..., + files: collections.abc.Iterable[global___Bitbucket.FileUpdate] | None = ..., + commit_message: google.protobuf.wrappers_pb2.StringValue | None = ..., + close_source_branch: google.protobuf.wrappers_pb2.BoolValue | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["close_source_branch", b"close_source_branch", "commit_message", b"commit_message", "description", b"description", "destination_branch", b"destination_branch", "repo", b"repo", "source_branch", b"source_branch", "title", b"title", "workspace", b"workspace"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["close_source_branch", b"close_source_branch", "commit_message", b"commit_message", "description", b"description", "destination_branch", b"destination_branch", "files", b"files", "repo", b"repo", "source_branch", b"source_branch", "title", b"title", "workspace", b"workspace"]) -> None: ... + + @typing_extensions.final + class FetchPullRequestDiff(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + WORKSPACE_FIELD_NUMBER: builtins.int + REPO_FIELD_NUMBER: builtins.int + PR_ID_FIELD_NUMBER: builtins.int + @property + def workspace(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def repo(self) -> google.protobuf.wrappers_pb2.StringValue: ... + @property + def pr_id(self) -> google.protobuf.wrappers_pb2.Int64Value: ... + def __init__( + self, + *, + workspace: google.protobuf.wrappers_pb2.StringValue | None = ..., + repo: google.protobuf.wrappers_pb2.StringValue | None = ..., + pr_id: google.protobuf.wrappers_pb2.Int64Value | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["pr_id", b"pr_id", "repo", b"repo", "workspace", b"workspace"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["pr_id", b"pr_id", "repo", b"repo", "workspace", b"workspace"]) -> None: ... + + TYPE_FIELD_NUMBER: builtins.int + FETCH_FILE_FIELD_NUMBER: builtins.int + UPDATE_FILE_FIELD_NUMBER: builtins.int + FETCH_COMMITS_FIELD_NUMBER: builtins.int + FETCH_RELATED_COMMITS_FIELD_NUMBER: builtins.int + FETCH_RECENT_MERGES_FIELD_NUMBER: builtins.int + CREATE_PULL_REQUEST_FIELD_NUMBER: builtins.int + FETCH_PULL_REQUEST_DIFF_FIELD_NUMBER: builtins.int + type: global___Bitbucket.TaskType.ValueType + @property + def fetch_file(self) -> global___Bitbucket.FetchFile: ... + @property + def update_file(self) -> global___Bitbucket.UpdateFile: ... + @property + def fetch_commits(self) -> global___Bitbucket.FetchCommits: ... + @property + def fetch_related_commits(self) -> global___Bitbucket.FetchRelatedCommits: ... + @property + def fetch_recent_merges(self) -> global___Bitbucket.FetchRecentMerges: ... + @property + def create_pull_request(self) -> global___Bitbucket.CreatePullRequest: ... + @property + def fetch_pull_request_diff(self) -> global___Bitbucket.FetchPullRequestDiff: ... + def __init__( + self, + *, + type: global___Bitbucket.TaskType.ValueType = ..., + fetch_file: global___Bitbucket.FetchFile | None = ..., + update_file: global___Bitbucket.UpdateFile | None = ..., + fetch_commits: global___Bitbucket.FetchCommits | None = ..., + fetch_related_commits: global___Bitbucket.FetchRelatedCommits | None = ..., + fetch_recent_merges: global___Bitbucket.FetchRecentMerges | None = ..., + create_pull_request: global___Bitbucket.CreatePullRequest | None = ..., + fetch_pull_request_diff: global___Bitbucket.FetchPullRequestDiff | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["create_pull_request", b"create_pull_request", "fetch_commits", b"fetch_commits", "fetch_file", b"fetch_file", "fetch_pull_request_diff", b"fetch_pull_request_diff", "fetch_recent_merges", b"fetch_recent_merges", "fetch_related_commits", b"fetch_related_commits", "task", b"task", "update_file", b"update_file"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["create_pull_request", b"create_pull_request", "fetch_commits", b"fetch_commits", "fetch_file", b"fetch_file", "fetch_pull_request_diff", b"fetch_pull_request_diff", "fetch_recent_merges", b"fetch_recent_merges", "fetch_related_commits", b"fetch_related_commits", "task", b"task", "type", b"type", "update_file", b"update_file"]) -> None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["task", b"task"]) -> typing_extensions.Literal["fetch_file", "update_file", "fetch_commits", "fetch_related_commits", "fetch_recent_merges", "create_pull_request", "fetch_pull_request_diff"] | None: ... + +global___Bitbucket = Bitbucket diff --git a/drdroid_debug_toolkit/core/utils/credentilal_utils.py b/drdroid_debug_toolkit/core/utils/credentilal_utils.py index 1673c23..2fb2f4a 100644 --- a/drdroid_debug_toolkit/core/utils/credentilal_utils.py +++ b/drdroid_debug_toolkit/core/utils/credentilal_utils.py @@ -1077,6 +1077,25 @@ def credential_yaml_to_connector_proto(connector_name, credential_yaml, connecto key_type=SourceKeyType.METABASE_API_KEY, key=StringValue(value=credential_yaml['metabase_api_key']) )) + elif c_type == 'BITBUCKET': + if 'api_key' not in credential_yaml: + raise Exception(f'api_key not found for bitbucket connector: {connector_name}') + if 'workspace' not in credential_yaml: + raise Exception(f'workspace not found for bitbucket connector: {connector_name}') + c_source = Source.BITBUCKET + c_keys.append(ConnectorKey( + key_type=SourceKeyType.BITBUCKET_API_KEY, + key=StringValue(value=credential_yaml['api_key']) + )) + c_keys.append(ConnectorKey( + key_type=SourceKeyType.BITBUCKET_WORKSPACE, + key=StringValue(value=credential_yaml['workspace']) + )) + if credential_yaml.get('repo'): + c_keys.append(ConnectorKey( + key_type=SourceKeyType.BITBUCKET_REPO, + key=StringValue(value=credential_yaml['repo']) + )) else: raise Exception(f'Invalid type in credential yaml for connector: {connector_name}') diff --git a/drdroid_debug_toolkit/core/utils/static_mappings.py b/drdroid_debug_toolkit/core/utils/static_mappings.py index 1737d65..e6b12c4 100644 --- a/drdroid_debug_toolkit/core/utils/static_mappings.py +++ b/drdroid_debug_toolkit/core/utils/static_mappings.py @@ -443,6 +443,17 @@ SourceKeyType.METABASE_API_KEY, ] ], + Source.BITBUCKET: [ + [ + SourceKeyType.BITBUCKET_API_KEY, + SourceKeyType.BITBUCKET_WORKSPACE, + ], + [ + SourceKeyType.BITBUCKET_API_KEY, + SourceKeyType.BITBUCKET_WORKSPACE, + SourceKeyType.BITBUCKET_REPO, + ] + ], } integrations_connector_type_display_name_map = { Source.SLACK: 'SLACK', @@ -485,6 +496,7 @@ Source.POSTHOG: 'POSTHOG', Source.SIGNOZ: 'SIGNOZ', Source.METABASE: 'METABASE', + Source.BITBUCKET: 'BITBUCKET', } model_type_display_name_maps = { @@ -557,6 +569,7 @@ SourceKeyType.REMOTE_SERVER_PEM, SourceKeyType.POSTHOG_API_KEY, SourceKeyType.METABASE_API_KEY, + SourceKeyType.BITBUCKET_API_KEY, ]