Skip to content

Commit

Permalink
feat: add cloud_run_job monitored resource type. (#788)
Browse files Browse the repository at this point in the history
  • Loading branch information
aaron-lerner committed Sep 29, 2023
1 parent f25c119 commit 3b310d6
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 11 deletions.
41 changes: 36 additions & 5 deletions google/cloud/logging_v2/handlers/_monitored_resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,21 @@
_CLOUD_RUN_SERVICE_ID = "K_SERVICE"
_CLOUD_RUN_REVISION_ID = "K_REVISION"
_CLOUD_RUN_CONFIGURATION_ID = "K_CONFIGURATION"
_CLOUD_RUN_ENV_VARS = [
_CLOUD_RUN_SERVICE_ENV_VARS = [
_CLOUD_RUN_SERVICE_ID,
_CLOUD_RUN_REVISION_ID,
_CLOUD_RUN_CONFIGURATION_ID,
]
_CLOUD_RUN_JOB_ID = "CLOUD_RUN_JOB"
_CLOUD_RUN_EXECUTION_ID = "CLOUD_RUN_EXECUTION"
_CLOUD_RUN_TASK_INDEX = "CLOUD_RUN_TASK_INDEX"
_CLOUD_RUN_TASK_ATTEMPT = "CLOUD_RUN_TASK_ATTEMPT"
_CLOUD_RUN_JOB_ENV_VARS = [
_CLOUD_RUN_JOB_ID,
_CLOUD_RUN_EXECUTION_ID,
_CLOUD_RUN_TASK_INDEX,
_CLOUD_RUN_TASK_ATTEMPT,
]
"""Environment variables set in Cloud Run environment."""

_FUNCTION_TARGET = "FUNCTION_TARGET"
Expand Down Expand Up @@ -118,8 +128,8 @@ def _create_compute_resource():
return resource


def _create_cloud_run_resource():
"""Create a standardized Cloud Run resource.
def _create_cloud_run_service_resource():
"""Create a standardized Cloud Run service resource.
Returns:
google.cloud.logging.Resource
"""
Expand All @@ -138,6 +148,24 @@ def _create_cloud_run_resource():
return resource


def _create_cloud_run_job_resource():
"""Create a standardized Cloud Run job resource.
Returns:
google.cloud.logging.Resource
"""
region = retrieve_metadata_server(_REGION_ID)
project = retrieve_metadata_server(_PROJECT_NAME)
resource = Resource(
type="cloud_run_job",
labels={
"project_id": project if project else "",
"job_name": os.environ.get(_CLOUD_RUN_JOB_ID, ""),
"location": region.split("/")[-1] if region else "",
},
)
return resource


def _create_app_engine_resource():
"""Create a standardized App Engine resource.
Returns:
Expand Down Expand Up @@ -190,9 +218,12 @@ def detect_resource(project=""):
):
# Cloud Functions
return _create_functions_resource()
elif all([env in os.environ for env in _CLOUD_RUN_ENV_VARS]):
elif all([env in os.environ for env in _CLOUD_RUN_SERVICE_ENV_VARS]):
# Cloud Run
return _create_cloud_run_service_resource()
elif all([env in os.environ for env in _CLOUD_RUN_JOB_ENV_VARS]):
# Cloud Run
return _create_cloud_run_resource()
return _create_cloud_run_job_resource()
elif gce_instance_name is not None:
# Compute Engine
return _create_compute_resource()
Expand Down
40 changes: 34 additions & 6 deletions tests/unit/handlers/test__monitored_resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@
_create_kubernetes_resource,
)
from google.cloud.logging_v2.handlers._monitored_resources import (
_create_cloud_run_resource,
_create_cloud_run_service_resource,
)
from google.cloud.logging_v2.handlers._monitored_resources import (
_create_cloud_run_job_resource,
)
from google.cloud.logging_v2.handlers._monitored_resources import (
_create_compute_resource,
Expand Down Expand Up @@ -160,7 +163,7 @@ def test_compute_resource(self):
self.assertEqual(resource.labels["instance_id"], self.NAME)
self.assertEqual(resource.labels["zone"], self.LOCATION)

def test_cloud_run_resource(self):
def test_cloud_run_service_resource(self):
patch = mock.patch(
"google.cloud.logging_v2.handlers._monitored_resources.retrieve_metadata_server",
wraps=self._mock_metadata,
Expand All @@ -169,7 +172,7 @@ def test_cloud_run_resource(self):
os.environ[_monitored_resources._CLOUD_RUN_REVISION_ID] = self.VERSION
os.environ[_monitored_resources._CLOUD_RUN_CONFIGURATION_ID] = self.CONFIG
with patch:
resource = _create_cloud_run_resource()
resource = _create_cloud_run_service_resource()
self.assertIsInstance(resource, Resource)
self.assertEqual(resource.type, "cloud_run_revision")
self.assertEqual(resource.labels["project_id"], self.PROJECT)
Expand All @@ -178,6 +181,23 @@ def test_cloud_run_resource(self):
self.assertEqual(resource.labels["configuration_name"], self.CONFIG)
self.assertEqual(resource.labels["location"], self.LOCATION)

def test_cloud_run_job_resource(self):
patch = mock.patch(
"google.cloud.logging_v2.handlers._monitored_resources.retrieve_metadata_server",
wraps=self._mock_metadata,
)
os.environ[_monitored_resources._CLOUD_RUN_JOB_ID] = self.NAME
os.environ[_monitored_resources._CLOUD_RUN_EXECUTION_ID] = self.VERSION
os.environ[_monitored_resources._CLOUD_RUN_TASK_INDEX] = self.CONFIG
os.environ[_monitored_resources._CLOUD_RUN_TASK_ATTEMPT] = self.CLUSTER
with patch:
resource = _create_cloud_run_job_resource()
self.assertIsInstance(resource, Resource)
self.assertEqual(resource.type, "cloud_run_job")
self.assertEqual(resource.labels["project_id"], self.PROJECT)
self.assertEqual(resource.labels["job_name"], self.NAME)
self.assertEqual(resource.labels["location"], self.LOCATION)

def test_app_engine_resource(self):
patch = mock.patch(
"google.cloud.logging_v2.handlers._monitored_resources.retrieve_metadata_server",
Expand Down Expand Up @@ -214,7 +234,8 @@ def test_with_no_project_from_server(self):
resource_fns = [
_global_resource_patched,
_create_app_engine_resource,
_create_cloud_run_resource,
_create_cloud_run_service_resource,
_create_cloud_run_job_resource,
_create_compute_resource,
_create_kubernetes_resource,
_create_functions_resource,
Expand Down Expand Up @@ -285,13 +306,20 @@ def test_detect_legacy_functions(self):
self.assertIsInstance(resource, Resource)
self.assertEqual(resource.type, "cloud_function")

def test_detect_cloud_run(self):
for env in _monitored_resources._CLOUD_RUN_ENV_VARS:
def test_detect_cloud_run_service(self):
for env in _monitored_resources._CLOUD_RUN_SERVICE_ENV_VARS:
os.environ[env] = "TRUE"
resource = detect_resource(self.PROJECT)
self.assertIsInstance(resource, Resource)
self.assertEqual(resource.type, "cloud_run_revision")

def test_detect_cloud_run_job(self):
for env in _monitored_resources._CLOUD_RUN_JOB_ENV_VARS:
os.environ[env] = "TRUE"
resource = detect_resource(self.PROJECT)
self.assertIsInstance(resource, Resource)
self.assertEqual(resource.type, "cloud_run_job")

def test_detect_compute_engine(self):
patch = mock.patch(
"google.cloud.logging_v2.handlers._monitored_resources.retrieve_metadata_server",
Expand Down

0 comments on commit 3b310d6

Please sign in to comment.