Skip to content

Commit 813b97c

Browse files
fix: detect project from environment instead of from logger (#238)
1 parent 24a0a5e commit 813b97c

File tree

4 files changed

+42
-31
lines changed

4 files changed

+42
-31
lines changed

google/cloud/logging_v2/handlers/_monitored_resources.py

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,16 @@
5151
_GKE_CLUSTER_NAME = "instance/attributes/cluster-name"
5252
"""Attribute in metadata server when in GKE environment."""
5353

54+
_PROJECT_NAME = "project/project-id"
55+
"""Attribute in metadata server when in GKE environment."""
56+
5457

55-
def _create_functions_resource(project):
58+
def _create_functions_resource():
5659
"""Create a standardized Cloud Functions resource.
57-
Args:
58-
project (str): The project ID to pass on to the resource
5960
Returns:
6061
google.cloud.logging.Resource
6162
"""
63+
project = retrieve_metadata_server(_PROJECT_NAME)
6264
region = retrieve_metadata_server(_REGION_ID)
6365
if _FUNCTION_NAME in os.environ:
6466
function_name = os.environ.get(_FUNCTION_NAME)
@@ -77,15 +79,14 @@ def _create_functions_resource(project):
7779
return resource
7880

7981

80-
def _create_kubernetes_resource(project):
82+
def _create_kubernetes_resource():
8183
"""Create a standardized Kubernetes resource.
82-
Args:
83-
project (str): The project ID to pass on to the resource
8484
Returns:
8585
google.cloud.logging.Resource
8686
"""
8787
zone = retrieve_metadata_server(_ZONE_ID)
8888
cluster_name = retrieve_metadata_server(_GKE_CLUSTER_NAME)
89+
project = retrieve_metadata_server(_PROJECT_NAME)
8990

9091
resource = Resource(
9192
type="k8s_container",
@@ -98,15 +99,14 @@ def _create_kubernetes_resource(project):
9899
return resource
99100

100101

101-
def _create_compute_resource(project):
102+
def _create_compute_resource():
102103
"""Create a standardized Compute Engine resource.
103-
Args:
104-
project (str): The project ID to pass on to the resource
105104
Returns:
106105
google.cloud.logging.Resource
107106
"""
108107
instance = retrieve_metadata_server(_GCE_INSTANCE_ID)
109108
zone = retrieve_metadata_server(_ZONE_ID)
109+
project = retrieve_metadata_server(_PROJECT_NAME)
110110
resource = Resource(
111111
type="gce_instance",
112112
labels={
@@ -118,14 +118,13 @@ def _create_compute_resource(project):
118118
return resource
119119

120120

121-
def _create_cloud_run_resource(project):
121+
def _create_cloud_run_resource():
122122
"""Create a standardized Cloud Run resource.
123-
Args:
124-
project (str): The project ID to pass on to the resource
125123
Returns:
126124
google.cloud.logging.Resource
127125
"""
128126
region = retrieve_metadata_server(_REGION_ID)
127+
project = retrieve_metadata_server(_PROJECT_NAME)
129128
resource = Resource(
130129
type="cloud_run_revision",
131130
labels={
@@ -139,14 +138,13 @@ def _create_cloud_run_resource(project):
139138
return resource
140139

141140

142-
def _create_app_engine_resource(project):
141+
def _create_app_engine_resource():
143142
"""Create a standardized App Engine resource.
144-
Args:
145-
project (str): The project ID to pass on to the resource
146143
Returns:
147144
google.cloud.logging.Resource
148145
"""
149146
zone = retrieve_metadata_server(_ZONE_ID)
147+
project = retrieve_metadata_server(_PROJECT_NAME)
150148
resource = Resource(
151149
type="gae_app",
152150
labels={
@@ -160,13 +158,19 @@ def _create_app_engine_resource(project):
160158

161159

162160
def _create_global_resource(project):
161+
"""Create a global resource.
162+
Args:
163+
project (str): The project ID to pass on to the resource
164+
Returns:
165+
google.cloud.logging.Resource
166+
"""
163167
return Resource(type="global", labels={"project_id": project})
164168

165169

166170
def detect_resource(project=""):
167171
"""Return the default monitored resource based on the local environment.
168172
Args:
169-
project (str): The project ID to pass on to the resource
173+
project (str): The project ID to pass on to the resource (if needed)
170174
Returns:
171175
google.cloud.logging.Resource: The default resource based on the environment
172176
"""
@@ -175,21 +179,21 @@ def detect_resource(project=""):
175179

176180
if all([env in os.environ for env in _GAE_ENV_VARS]):
177181
# App Engine Flex or Standard
178-
return _create_app_engine_resource(project)
182+
return _create_app_engine_resource()
179183
elif gke_cluster_name is not None:
180184
# Kubernetes Engine
181-
return _create_kubernetes_resource(project)
185+
return _create_kubernetes_resource()
182186
elif all([env in os.environ for env in _LEGACY_FUNCTION_ENV_VARS]) or all(
183187
[env in os.environ for env in _FUNCTION_ENV_VARS]
184188
):
185189
# Cloud Functions
186-
return _create_functions_resource(project)
190+
return _create_functions_resource()
187191
elif all([env in os.environ for env in _CLOUD_RUN_ENV_VARS]):
188192
# Cloud Run
189-
return _create_cloud_run_resource(project)
193+
return _create_cloud_run_resource()
190194
elif gce_instance_name is not None:
191195
# Compute Engine
192-
return _create_compute_resource(project)
196+
return _create_compute_resource()
193197
else:
194198
# use generic global resource
195199
return _create_global_resource(project)

google/cloud/logging_v2/handlers/app_engine.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def get_gae_resource(self):
7777
Returns:
7878
google.cloud.logging_v2.resource.Resource: Monitored resource for GAE.
7979
"""
80-
return _create_app_engine_resource(self.project_id)
80+
return _create_app_engine_resource()
8181

8282
def get_gae_labels(self):
8383
"""Return the labels for GAE app.

tests/unit/handlers/test__monitored_resources.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ def _mock_metadata(self, endpoint):
6161
or endpoint == _monitored_resources._GCE_INSTANCE_ID
6262
):
6363
return self.NAME
64+
elif endpoint == _monitored_resources._PROJECT_NAME:
65+
return self.PROJECT
6466
else:
6567
return None
6668

@@ -75,7 +77,7 @@ def test_create_legacy_functions_resource(self):
7577

7678
os.environ[_monitored_resources._CLOUD_RUN_SERVICE_ID] = self.NAME
7779
with patch:
78-
legacy_func_resource = _create_functions_resource(self.PROJECT)
80+
legacy_func_resource = _create_functions_resource()
7981

8082
self.assertIsInstance(legacy_func_resource, Resource)
8183
self.assertEqual(legacy_func_resource.type, "cloud_function")
@@ -90,7 +92,7 @@ def test_create_modern_functions_resource(self):
9092
)
9193
os.environ[_monitored_resources._FUNCTION_NAME] = self.NAME
9294
with patch:
93-
func_resource = _create_functions_resource(self.PROJECT)
95+
func_resource = _create_functions_resource()
9496

9597
self.assertIsInstance(func_resource, Resource)
9698
self.assertEqual(func_resource.type, "cloud_function")
@@ -105,7 +107,7 @@ def test_create_kubernetes_resource(self):
105107
wraps=self._mock_metadata,
106108
)
107109
with patch:
108-
resource = _create_kubernetes_resource(self.PROJECT)
110+
resource = _create_kubernetes_resource()
109111

110112
self.assertIsInstance(resource, Resource)
111113
self.assertEqual(resource.type, "k8s_container")
@@ -120,7 +122,7 @@ def test_compute_resource(self):
120122
)
121123

122124
with patch:
123-
resource = _create_compute_resource(self.PROJECT)
125+
resource = _create_compute_resource()
124126
self.assertIsInstance(resource, Resource)
125127
self.assertEqual(resource.type, "gce_instance")
126128
self.assertEqual(resource.labels["project_id"], self.PROJECT)
@@ -136,7 +138,7 @@ def test_cloud_run_resource(self):
136138
os.environ[_monitored_resources._CLOUD_RUN_REVISION_ID] = self.VERSION
137139
os.environ[_monitored_resources._CLOUD_RUN_CONFIGURATION_ID] = self.CONFIG
138140
with patch:
139-
resource = _create_cloud_run_resource(self.PROJECT)
141+
resource = _create_cloud_run_resource()
140142
self.assertIsInstance(resource, Resource)
141143
self.assertEqual(resource.type, "cloud_run_revision")
142144
self.assertEqual(resource.labels["project_id"], self.PROJECT)
@@ -153,7 +155,7 @@ def test_app_engine_resource(self):
153155
os.environ[_monitored_resources._GAE_SERVICE_ENV] = self.NAME
154156
os.environ[_monitored_resources._GAE_VERSION_ENV] = self.VERSION
155157
with patch:
156-
resource = _create_app_engine_resource(self.PROJECT)
158+
resource = _create_app_engine_resource()
157159
self.assertIsInstance(resource, Resource)
158160
self.assertEqual(resource.type, "gae_app")
159161
self.assertEqual(resource.labels["project_id"], self.PROJECT)

tests/unit/handlers/test_app_engine.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,19 @@ def test_constructor_w_gae_standard_env(self):
4040
with mock.patch(
4141
"os.environ",
4242
new={
43-
app_engine._GAE_PROJECT_ENV_STANDARD: "test_project",
4443
app_engine._GAE_SERVICE_ENV: "test_service",
4544
app_engine._GAE_VERSION_ENV: "test_version",
4645
},
46+
), mock.patch(
47+
"google.cloud.logging_v2.handlers._monitored_resources.retrieve_metadata_server",
48+
return_value=self.PROJECT,
4749
):
4850
handler = self._make_one(client, transport=_Transport)
4951

5052
self.assertIs(handler.client, client)
5153
self.assertEqual(handler.name, app_engine._DEFAULT_GAE_LOGGER_NAME)
5254
self.assertEqual(handler.resource.type, "gae_app")
53-
self.assertEqual(handler.resource.labels["project_id"], "test_project")
55+
self.assertEqual(handler.resource.labels["project_id"], self.PROJECT)
5456
self.assertEqual(handler.resource.labels["module_id"], "test_service")
5557
self.assertEqual(handler.resource.labels["version_id"], "test_version")
5658
self.assertIs(handler.stream, sys.stderr)
@@ -73,6 +75,9 @@ def test_constructor_w_gae_flex_env(self):
7375
app_engine._GAE_SERVICE_ENV: "test_service_2",
7476
app_engine._GAE_VERSION_ENV: "test_version_2",
7577
},
78+
), mock.patch(
79+
"google.cloud.logging_v2.handlers._monitored_resources.retrieve_metadata_server",
80+
return_value=self.PROJECT,
7681
):
7782
handler = self._make_one(
7883
client, name=name, transport=_Transport, stream=stream
@@ -81,7 +86,7 @@ def test_constructor_w_gae_flex_env(self):
8186
self.assertIs(handler.client, client)
8287
self.assertEqual(handler.name, name)
8388
self.assertEqual(handler.resource.type, "gae_app")
84-
self.assertEqual(handler.resource.labels["project_id"], "test_project_2")
89+
self.assertEqual(handler.resource.labels["project_id"], self.PROJECT)
8590
self.assertEqual(handler.resource.labels["module_id"], "test_service_2")
8691
self.assertEqual(handler.resource.labels["version_id"], "test_version_2")
8792
self.assertIs(handler.stream, stream)

0 commit comments

Comments
 (0)