Skip to content

Commit 0e8c77b

Browse files
authored
Support google-cloud-logging` >=2.0.0 (#13801)
1 parent 629abfd commit 0e8c77b

File tree

4 files changed

+163
-106
lines changed

4 files changed

+163
-106
lines changed

airflow/providers/google/ADDITIONAL_INFO.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ Details are covered in the UPDATING.md files for each library, but there are som
3434
| [``google-cloud-datacatalog``](https://pypi.org/project/google-cloud-datacatalog/) | ``>=0.5.0,<0.8`` | ``>=3.0.0,<4.0.0`` | [`UPGRADING.md`](https://github.com/googleapis/python-datacatalog/blob/master/UPGRADING.md) |
3535
| [``google-cloud-dataproc``](https://pypi.org/project/google-cloud-dataproc/) | ``>=1.0.1,<2.0.0`` | ``>=2.2.0,<3.0.0`` | [`UPGRADING.md`](https://github.com/googleapis/python-dataproc/blob/master/UPGRADING.md) |
3636
| [``google-cloud-kms``](https://pypi.org/project/google-cloud-os-login/) | ``>=1.2.1,<2.0.0`` | ``>=2.0.0,<3.0.0`` | [`UPGRADING.md`](https://github.com/googleapis/python-kms/blob/master/UPGRADING.md) |
37+
| [``google-cloud-logging``](https://pypi.org/project/google-cloud-logging/) | ``>=1.14.0,<2.0.0`` | ``>=2.0.0,<3.0.0`` | [`UPGRADING.md`](https://github.com/googleapis/python-logging/blob/master/UPGRADING.md) |
3738
| [``google-cloud-monitoring``](https://pypi.org/project/google-cloud-monitoring/) | ``>=0.34.0,<2.0.0`` | ``>=2.0.0,<3.0.0`` | [`UPGRADING.md`](https://github.com/googleapis/python-monitoring/blob/master/UPGRADING.md) |
3839
| [``google-cloud-os-login``](https://pypi.org/project/google-cloud-os-login/) | ``>=1.0.0,<2.0.0`` | ``>=2.0.0,<3.0.0`` | [`UPGRADING.md`](https://github.com/googleapis/python-oslogin/blob/master/UPGRADING.md) |
3940
| [``google-cloud-pubsub``](https://pypi.org/project/google-cloud-pubsub/) | ``>=1.0.0,<2.0.0`` | ``>=2.0.0,<3.0.0`` | [`UPGRADING.md`](https://github.com/googleapis/python-pubsub/blob/master/UPGRADING.md) |

airflow/providers/google/cloud/log/stackdriver_task_handler.py

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,12 @@
2121

2222
from cached_property import cached_property
2323
from google.api_core.gapic_v1.client_info import ClientInfo
24+
from google.auth.credentials import Credentials
2425
from google.cloud import logging as gcp_logging
26+
from google.cloud.logging import Resource
2527
from google.cloud.logging.handlers.transports import BackgroundThreadTransport, Transport
26-
from google.cloud.logging.resource import Resource
28+
from google.cloud.logging_v2.services.logging_service_v2 import LoggingServiceV2Client
29+
from google.cloud.logging_v2.types import ListLogEntriesRequest, ListLogEntriesResponse
2730

2831
from airflow import version
2932
from airflow.models import TaskInstance
@@ -102,18 +105,33 @@ def __init__(
102105
self.task_instance_hostname = 'default-hostname'
103106

104107
@cached_property
105-
def _client(self) -> gcp_logging.Client:
106-
"""Google Cloud Library API client"""
108+
def _credentials_and_project(self) -> Tuple[Credentials, str]:
107109
credentials, project = get_credentials_and_project_id(
108110
key_path=self.gcp_key_path, scopes=self.scopes, disable_logging=True
109111
)
112+
return credentials, project
113+
114+
@property
115+
def _client(self) -> gcp_logging.Client:
116+
"""The Cloud Library API client"""
117+
credentials, project = self._credentials_and_project
110118
client = gcp_logging.Client(
111119
credentials=credentials,
112120
project=project,
113121
client_info=ClientInfo(client_library_version='airflow_v' + version.version),
114122
)
115123
return client
116124

125+
@property
126+
def _logging_service_client(self) -> LoggingServiceV2Client:
127+
"""The Cloud logging service v2 client."""
128+
credentials, _ = self._credentials_and_project
129+
client = LoggingServiceV2Client(
130+
credentials=credentials,
131+
client_info=ClientInfo(client_library_version='airflow_v' + version.version),
132+
)
133+
return client
134+
117135
@cached_property
118136
def _transport(self) -> Transport:
119137
"""Object responsible for sending data to Stackdriver"""
@@ -214,9 +232,10 @@ def escale_label_value(value: str) -> str:
214232
escaped_value = value.replace("\\", "\\\\").replace('"', '\\"')
215233
return f'"{escaped_value}"'
216234

235+
_, project = self._credentials_and_project
217236
log_filters = [
218237
f'resource.type={escale_label_value(self.resource.type)}',
219-
f'logName="projects/{self._client.project}/logs/{self.name}"',
238+
f'logName="projects/{project}/logs/{self.name}"',
220239
]
221240

222241
for key, value in self.resource.labels.items():
@@ -277,17 +296,21 @@ def _read_single_logs_page(self, log_filter: str, page_token: Optional[str] = No
277296
:return: Downloaded logs and next page token
278297
:rtype: Tuple[str, str]
279298
"""
280-
entries = self._client.list_entries(
281-
filter_=log_filter, page_token=page_token, order_by='timestamp asc', page_size=1000
299+
_, project = self._credentials_and_project
300+
request = ListLogEntriesRequest(
301+
resource_names=[f'projects/{project}'],
302+
filter=log_filter,
303+
page_token=page_token,
304+
order_by='timestamp asc',
305+
page_size=1000,
282306
)
283-
page = next(entries.pages)
284-
next_page_token = entries.next_page_token
307+
response = self._logging_service_client.list_log_entries(request=request)
308+
page: ListLogEntriesResponse = next(response.pages)
285309
messages = []
286-
for entry in page:
287-
if "message" in entry.payload:
288-
messages.append(entry.payload["message"])
289-
290-
return "\n".join(messages), next_page_token
310+
for entry in page.entries:
311+
if "message" in entry.json_payload:
312+
messages.append(entry.json_payload["message"])
313+
return "\n".join(messages), page.next_page_token
291314

292315
@classmethod
293316
def _task_instance_to_labels(cls, ti: TaskInstance) -> Dict[str, str]:
@@ -323,7 +346,7 @@ def get_external_log_url(self, task_instance: TaskInstance, try_number: int) ->
323346
:return: URL to the external log collection service
324347
:rtype: str
325348
"""
326-
project_id = self._client.project
349+
_, project_id = self._credentials_and_project
327350

328351
ti_labels = self._task_instance_to_labels(task_instance)
329352
ti_labels[self.LABEL_TRY_NUMBER] = str(try_number)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ def get_sphinx_theme_version() -> str:
291291
'google-cloud-dlp>=0.11.0,<2.0.0',
292292
'google-cloud-kms>=2.0.0,<3.0.0',
293293
'google-cloud-language>=1.1.1,<2.0.0',
294-
'google-cloud-logging>=1.14.0,<2.0.0',
294+
'google-cloud-logging>=2.1.1,<3.0.0',
295295
'google-cloud-memcache>=0.2.0',
296296
'google-cloud-monitoring>=2.0.0,<3.0.0',
297297
'google-cloud-os-login>=2.0.0,<3.0.0',

0 commit comments

Comments
 (0)