Skip to content
Open

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion drdroid_debug_toolkit/core/integrations/source_facade.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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())
source_facade.register(Source.METABASE, MetabaseSourceManager())
source_facade.register(Source.BITBUCKET, BitbucketSourceManager())

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand Down Expand Up @@ -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)
source_metadata_extractor_facade.register(Source.CORALOGIX, CoralogixSourceMetadataExtractor)
source_metadata_extractor_facade.register(Source.BITBUCKET, BitbucketSourceMetadataExtractor)
Original file line number Diff line number Diff line change
@@ -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)
9 changes: 9 additions & 0 deletions drdroid_debug_toolkit/core/protos/assets/asset.proto
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
}

Expand Down Expand Up @@ -109,6 +113,8 @@ message AccountConnectorAssets {
SqlAssets sql = 24;
SignozAssets signoz = 25;
CoralogixAssets coralogix = 26;
// Bitbucket assets
BitbucketAssets bitbucket = 27;
}
}

Expand Down Expand Up @@ -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;
}
}
Loading