diff --git a/pr_agent/secret_providers/google_cloud_storage_secret_provider.py b/pr_agent/secret_providers/google_cloud_storage_secret_provider.py index 18db5c4b..2dfb71f6 100644 --- a/pr_agent/secret_providers/google_cloud_storage_secret_provider.py +++ b/pr_agent/secret_providers/google_cloud_storage_secret_provider.py @@ -1,9 +1,8 @@ import ujson - from google.cloud import storage from pr_agent.config_loader import get_settings -from pr_agent.git_providers.gitlab_provider import logger +from pr_agent.log import get_logger from pr_agent.secret_providers.secret_provider import SecretProvider @@ -15,7 +14,7 @@ class GoogleCloudStorageSecretProvider(SecretProvider): self.bucket_name = get_settings().google_cloud_storage.bucket_name self.bucket = self.client.bucket(self.bucket_name) except Exception as e: - logger.error(f"Failed to initialize Google Cloud Storage Secret Provider: {e}") + get_logger().error(f"Failed to initialize Google Cloud Storage Secret Provider: {e}") raise e def get_secret(self, secret_name: str) -> str: @@ -23,7 +22,7 @@ class GoogleCloudStorageSecretProvider(SecretProvider): blob = self.bucket.blob(secret_name) return blob.download_as_string() except Exception as e: - logger.error(f"Failed to get secret {secret_name} from Google Cloud Storage: {e}") + get_logger().error(f"Failed to get secret {secret_name} from Google Cloud Storage: {e}") return "" def store_secret(self, secret_name: str, secret_value: str): @@ -31,5 +30,5 @@ class GoogleCloudStorageSecretProvider(SecretProvider): blob = self.bucket.blob(secret_name) blob.upload_from_string(secret_value) except Exception as e: - logger.error(f"Failed to store secret {secret_name} in Google Cloud Storage: {e}") + get_logger().error(f"Failed to store secret {secret_name} in Google Cloud Storage: {e}") raise e diff --git a/pr_agent/servers/bitbucket_app.py b/pr_agent/servers/bitbucket_app.py index 00f83cfe..e147fbdd 100644 --- a/pr_agent/servers/bitbucket_app.py +++ b/pr_agent/servers/bitbucket_app.py @@ -65,15 +65,17 @@ async def handle_manifest(request: Request, response: Response): @router.post("/webhook") async def handle_github_webhooks(background_tasks: BackgroundTasks, request: Request): - print(request.headers) + log_context = {"server_type": "bitbucket_app"} + get_logger().debug(request.headers) jwt_header = request.headers.get("authorization", None) if jwt_header: input_jwt = jwt_header.split(" ")[1] data = await request.json() - print(data) + get_logger().debug(data) async def inner(): try: owner = data["data"]["repository"]["owner"]["username"] + log_context["sender"] = owner secrets = json.loads(secret_provider.get_secret(owner)) shared_secret = secrets["shared_secret"] client_key = secrets["client_key"] @@ -85,11 +87,17 @@ async def handle_github_webhooks(background_tasks: BackgroundTasks, request: Req agent = PRAgent() if event == "pullrequest:created": pr_url = data["data"]["pullrequest"]["links"]["html"]["href"] - await agent.handle_request(pr_url, "review") + log_context["api_url"] = pr_url + log_context["event"] = "pull_request" + with get_logger().contextualize(**log_context): + await agent.handle_request(pr_url, "review") elif event == "pullrequest:comment_created": pr_url = data["data"]["pullrequest"]["links"]["html"]["href"] + log_context["api_url"] = pr_url + log_context["event"] = "comment" comment_body = data["data"]["comment"]["content"]["raw"] - await agent.handle_request(pr_url, comment_body) + with get_logger().contextualize(**log_context): + await agent.handle_request(pr_url, comment_body) except Exception as e: get_logger().error(f"Failed to handle webhook: {e}") background_tasks.add_task(inner) @@ -102,9 +110,10 @@ async def handle_github_webhooks(request: Request, response: Response): @router.post("/installed") async def handle_installed_webhooks(request: Request, response: Response): try: - print(request.headers) + get_logger().info("handle_installed_webhooks") + get_logger().info(request.headers) data = await request.json() - print(data) + get_logger().info(data) shared_secret = data["sharedSecret"] client_key = data["clientKey"] username = data["principal"]["username"] @@ -119,8 +128,10 @@ async def handle_installed_webhooks(request: Request, response: Response): @router.post("/uninstalled") async def handle_uninstalled_webhooks(request: Request, response: Response): + get_logger().info("handle_uninstalled_webhooks") + data = await request.json() - print(data) + get_logger().info(data) def start(): diff --git a/pr_agent/servers/gitlab_webhook.py b/pr_agent/servers/gitlab_webhook.py index 9cddc27e..63bf99ce 100644 --- a/pr_agent/servers/gitlab_webhook.py +++ b/pr_agent/servers/gitlab_webhook.py @@ -12,23 +12,33 @@ from starlette_context.middleware import RawContextMiddleware from pr_agent.agent.pr_agent import PRAgent from pr_agent.config_loader import get_settings, global_settings -from pr_agent.log import get_logger, setup_logger +from pr_agent.log import LoggingFormat, get_logger, setup_logger from pr_agent.secret_providers import get_secret_provider -setup_logger() +setup_logger(fmt=LoggingFormat.JSON) router = APIRouter() secret_provider = get_secret_provider() if get_settings().get("CONFIG.SECRET_PROVIDER") else None +def handle_request(background_tasks: BackgroundTasks, url: str, body: str, log_context: dict): + log_context["action"] = body + log_context["event"] = "pull_request" if body == "/review" else "comment" + log_context["api_url"] = url + with get_logger().contextualize(**log_context): + background_tasks.add_task(PRAgent().handle_request, url, body) + + @router.post("/webhook") async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request): + log_context = {"server_type": "gitlab_app"} if request.headers.get("X-Gitlab-Token") and secret_provider: request_token = request.headers.get("X-Gitlab-Token") secret = secret_provider.get_secret(request_token) try: secret_dict = json.loads(secret) gitlab_token = secret_dict["gitlab_token"] + log_context["sender"] = secret_dict["id"] context["settings"] = copy.deepcopy(global_settings) context["settings"].gitlab.personal_access_token = gitlab_token except Exception as e: @@ -48,13 +58,13 @@ async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request): if data.get('object_kind') == 'merge_request' and data['object_attributes'].get('action') in ['open', 'reopen']: get_logger().info(f"A merge request has been opened: {data['object_attributes'].get('title')}") url = data['object_attributes'].get('url') - background_tasks.add_task(PRAgent().handle_request, url, "/review") + handle_request(background_tasks, url, "/review") elif data.get('object_kind') == 'note' and data['event_type'] == 'note': if 'merge_request' in data: mr = data['merge_request'] url = mr.get('url') body = data.get('object_attributes', {}).get('note') - background_tasks.add_task(PRAgent().handle_request, url, body) + handle_request(background_tasks, url, body) return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"}))