Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/google/cloud/logging_v2/handlers/_monitored_resources.py: 43%
83 statements
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 06:45 +0000
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 06:45 +0000
1# Copyright 2021 Google LLC
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
15import os
17from google.cloud.logging_v2.resource import Resource
18from google.cloud.logging_v2._helpers import retrieve_metadata_server
20_GAE_SERVICE_ENV = "GAE_SERVICE"
21_GAE_VERSION_ENV = "GAE_VERSION"
22_GAE_INSTANCE_ENV = "GAE_INSTANCE"
23_GAE_ENV_VARS = [_GAE_SERVICE_ENV, _GAE_VERSION_ENV, _GAE_INSTANCE_ENV]
24"""Environment variables set in App Engine environment."""
26_CLOUD_RUN_SERVICE_ID = "K_SERVICE"
27_CLOUD_RUN_REVISION_ID = "K_REVISION"
28_CLOUD_RUN_CONFIGURATION_ID = "K_CONFIGURATION"
29_CLOUD_RUN_SERVICE_ENV_VARS = [
30 _CLOUD_RUN_SERVICE_ID,
31 _CLOUD_RUN_REVISION_ID,
32 _CLOUD_RUN_CONFIGURATION_ID,
33]
34_CLOUD_RUN_JOB_ID = "CLOUD_RUN_JOB"
35_CLOUD_RUN_EXECUTION_ID = "CLOUD_RUN_EXECUTION"
36_CLOUD_RUN_TASK_INDEX = "CLOUD_RUN_TASK_INDEX"
37_CLOUD_RUN_TASK_ATTEMPT = "CLOUD_RUN_TASK_ATTEMPT"
38_CLOUD_RUN_JOB_ENV_VARS = [
39 _CLOUD_RUN_JOB_ID,
40 _CLOUD_RUN_EXECUTION_ID,
41 _CLOUD_RUN_TASK_INDEX,
42 _CLOUD_RUN_TASK_ATTEMPT,
43]
44"""Environment variables set in Cloud Run environment."""
46_FUNCTION_TARGET = "FUNCTION_TARGET"
47_FUNCTION_SIGNATURE = "FUNCTION_SIGNATURE_TYPE"
48_FUNCTION_NAME = "FUNCTION_NAME"
49_FUNCTION_REGION = "FUNCTION_REGION"
50_FUNCTION_ENTRY = "ENTRY_POINT"
51_FUNCTION_ENV_VARS = [_FUNCTION_TARGET, _FUNCTION_SIGNATURE, _CLOUD_RUN_SERVICE_ID]
52_LEGACY_FUNCTION_ENV_VARS = [_FUNCTION_NAME, _FUNCTION_REGION, _FUNCTION_ENTRY]
53"""Environment variables set in Cloud Functions environments."""
56_REGION_ID = "instance/region"
57_ZONE_ID = "instance/zone"
58_GCE_INSTANCE_ID = "instance/id"
59"""Attribute in metadata server for compute region and instance."""
61_GKE_CLUSTER_NAME = "instance/attributes/cluster-name"
62"""Attribute in metadata server when in GKE environment."""
64_PROJECT_NAME = "project/project-id"
65"""Attribute in metadata server when in GKE environment."""
68def _create_functions_resource():
69 """Create a standardized Cloud Functions resource.
70 Returns:
71 google.cloud.logging.Resource
72 """
73 project = retrieve_metadata_server(_PROJECT_NAME)
74 region = retrieve_metadata_server(_REGION_ID)
75 if _FUNCTION_NAME in os.environ:
76 function_name = os.environ.get(_FUNCTION_NAME)
77 elif _CLOUD_RUN_SERVICE_ID in os.environ:
78 function_name = os.environ.get(_CLOUD_RUN_SERVICE_ID)
79 else:
80 function_name = ""
81 resource = Resource(
82 type="cloud_function",
83 labels={
84 "project_id": project if project else "",
85 "function_name": function_name if function_name else "",
86 "region": region.split("/")[-1] if region else "",
87 },
88 )
89 return resource
92def _create_kubernetes_resource():
93 """Create a standardized Kubernetes resource.
94 Returns:
95 google.cloud.logging.Resource
96 """
97 zone = retrieve_metadata_server(_ZONE_ID)
98 cluster_name = retrieve_metadata_server(_GKE_CLUSTER_NAME)
99 project = retrieve_metadata_server(_PROJECT_NAME)
101 resource = Resource(
102 type="k8s_container",
103 labels={
104 "project_id": project if project else "",
105 "location": zone if zone else "",
106 "cluster_name": cluster_name if cluster_name else "",
107 },
108 )
109 return resource
112def _create_compute_resource():
113 """Create a standardized Compute Engine resource.
114 Returns:
115 google.cloud.logging.Resource
116 """
117 instance = retrieve_metadata_server(_GCE_INSTANCE_ID)
118 zone = retrieve_metadata_server(_ZONE_ID)
119 project = retrieve_metadata_server(_PROJECT_NAME)
120 resource = Resource(
121 type="gce_instance",
122 labels={
123 "project_id": project if project else "",
124 "instance_id": instance if instance else "",
125 "zone": zone if zone else "",
126 },
127 )
128 return resource
131def _create_cloud_run_service_resource():
132 """Create a standardized Cloud Run service resource.
133 Returns:
134 google.cloud.logging.Resource
135 """
136 region = retrieve_metadata_server(_REGION_ID)
137 project = retrieve_metadata_server(_PROJECT_NAME)
138 resource = Resource(
139 type="cloud_run_revision",
140 labels={
141 "project_id": project if project else "",
142 "service_name": os.environ.get(_CLOUD_RUN_SERVICE_ID, ""),
143 "revision_name": os.environ.get(_CLOUD_RUN_REVISION_ID, ""),
144 "location": region.split("/")[-1] if region else "",
145 "configuration_name": os.environ.get(_CLOUD_RUN_CONFIGURATION_ID, ""),
146 },
147 )
148 return resource
151def _create_cloud_run_job_resource():
152 """Create a standardized Cloud Run job resource.
153 Returns:
154 google.cloud.logging.Resource
155 """
156 region = retrieve_metadata_server(_REGION_ID)
157 project = retrieve_metadata_server(_PROJECT_NAME)
158 resource = Resource(
159 type="cloud_run_job",
160 labels={
161 "project_id": project if project else "",
162 "job_name": os.environ.get(_CLOUD_RUN_JOB_ID, ""),
163 "location": region.split("/")[-1] if region else "",
164 },
165 )
166 return resource
169def _create_app_engine_resource():
170 """Create a standardized App Engine resource.
171 Returns:
172 google.cloud.logging.Resource
173 """
174 zone = retrieve_metadata_server(_ZONE_ID)
175 project = retrieve_metadata_server(_PROJECT_NAME)
176 resource = Resource(
177 type="gae_app",
178 labels={
179 "project_id": project if project else "",
180 "module_id": os.environ.get(_GAE_SERVICE_ENV, ""),
181 "version_id": os.environ.get(_GAE_VERSION_ENV, ""),
182 "zone": zone if zone else "",
183 },
184 )
185 return resource
188def _create_global_resource(project):
189 """Create a global resource.
190 Args:
191 project (str): The project ID to pass on to the resource
192 Returns:
193 google.cloud.logging.Resource
194 """
195 return Resource(type="global", labels={"project_id": project if project else ""})
198def detect_resource(project=""):
199 """Return the default monitored resource based on the local environment.
200 If GCP resource not found, defaults to `global`.
202 Args:
203 project (str): The project ID to pass on to the resource (if needed)
204 Returns:
205 google.cloud.logging.Resource: The default resource based on the environment
206 """
207 gke_cluster_name = retrieve_metadata_server(_GKE_CLUSTER_NAME)
208 gce_instance_name = retrieve_metadata_server(_GCE_INSTANCE_ID)
210 if all([env in os.environ for env in _GAE_ENV_VARS]):
211 # App Engine Flex or Standard
212 return _create_app_engine_resource()
213 elif gke_cluster_name is not None:
214 # Kubernetes Engine
215 return _create_kubernetes_resource()
216 elif all([env in os.environ for env in _LEGACY_FUNCTION_ENV_VARS]) or all(
217 [env in os.environ for env in _FUNCTION_ENV_VARS]
218 ):
219 # Cloud Functions
220 return _create_functions_resource()
221 elif all([env in os.environ for env in _CLOUD_RUN_SERVICE_ENV_VARS]):
222 # Cloud Run
223 return _create_cloud_run_service_resource()
224 elif all([env in os.environ for env in _CLOUD_RUN_JOB_ENV_VARS]):
225 # Cloud Run
226 return _create_cloud_run_job_resource()
227 elif gce_instance_name is not None:
228 # Compute Engine
229 return _create_compute_resource()
230 else:
231 # use generic global resource
232 return _create_global_resource(project)