Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 3e90aa1

Browse filesBrowse files
committed
Parse 'LogEntry.receiveTimestamp' -> 'received_timestamp' attr.
Closes #5601.
1 parent 75358e5 commit 3e90aa1
Copy full SHA for 3e90aa1

File tree

Expand file treeCollapse file tree

3 files changed

+40
-7
lines changed
Filter options
Expand file treeCollapse file tree

3 files changed

+40
-7
lines changed

‎logging/google/cloud/logging/entries.py

Copy file name to clipboardExpand all lines: logging/google/cloud/logging/entries.py
+31-7Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,19 @@ class _BaseEntry(object):
8484
:param span_id: (optional) span_id within the trace for the log entry.
8585
Specify the trace parameter if span_id is set.
8686
"""
87-
88-
def __init__(self, payload, logger, insert_id=None, timestamp=None,
89-
labels=None, severity=None, http_request=None, resource=None,
90-
trace=None, span_id=None):
87+
def __init__(
88+
self,
89+
payload,
90+
logger,
91+
insert_id=None,
92+
timestamp=None,
93+
labels=None,
94+
severity=None,
95+
http_request=None,
96+
resource=None,
97+
trace=None,
98+
span_id=None,
99+
):
91100
self.payload = payload
92101
self.logger = logger
93102
self.insert_id = insert_id
@@ -145,9 +154,24 @@ def from_api_repr(cls, resource, client, loggers=None):
145154
if monitored_resource_dict is not None:
146155
monitored_resource = Resource._from_dict(monitored_resource_dict)
147156

148-
return cls(payload, logger, insert_id=insert_id, timestamp=timestamp,
149-
labels=labels, severity=severity, http_request=http_request,
150-
resource=monitored_resource, trace=trace, span_id=span_id)
157+
inst = cls(
158+
payload,
159+
logger,
160+
insert_id=insert_id,
161+
timestamp=timestamp,
162+
labels=labels,
163+
severity=severity,
164+
http_request=http_request,
165+
resource=monitored_resource,
166+
trace=trace,
167+
span_id=span_id,
168+
)
169+
received = resource.get('receiveTimestamp')
170+
if received is not None:
171+
inst.received_timestamp = _rfc3339_nanos_to_datetime(received)
172+
else:
173+
inst.received_timestamp = None
174+
return inst
151175

152176

153177
class EmptyEntry(_BaseEntry):

‎logging/tests/system/test_system.py

Copy file name to clipboardExpand all lines: logging/tests/system/test_system.py
+3Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ def test_log_text(self):
155155
self.assertEqual(entries[0].payload, TEXT_PAYLOAD)
156156

157157
def test_log_text_with_timestamp(self):
158+
import datetime
159+
158160
text_payload = 'System test: test_log_text_with_timestamp'
159161
logger = Config.CLIENT.logger(self._logger_name('log_text_ts'))
160162
now = datetime.datetime.utcnow()
@@ -166,6 +168,7 @@ def test_log_text_with_timestamp(self):
166168
self.assertEqual(len(entries), 1)
167169
self.assertEqual(entries[0].payload, text_payload)
168170
self.assertEqual(entries[0].timestamp, now.replace(tzinfo=UTC))
171+
self.assertIsInstance(entries[0].received_timestamp, datetime.datetime)
169172

170173
def test_log_text_with_resource(self):
171174
text_payload = 'System test: test_log_text_with_timestamp'

‎logging/tests/unit/test_entries.py

Copy file name to clipboardExpand all lines: logging/tests/unit/test_entries.py
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ def test_from_api_repr_w_loggers_no_logger_match(self):
185185
self.assertEqual(entry.payload, PAYLOAD)
186186
self.assertEqual(entry.insert_id, IID)
187187
self.assertEqual(entry.timestamp, NOW)
188+
self.assertIsNone(entry.received_timestamp)
188189
self.assertEqual(entry.labels, LABELS)
189190
self.assertEqual(entry.severity, SEVERITY)
190191
self.assertEqual(entry.http_request['requestMethod'], METHOD)
@@ -201,13 +202,16 @@ def test_from_api_repr_w_loggers_no_logger_match(self):
201202

202203
def test_from_api_repr_w_loggers_w_logger_match(self):
203204
from datetime import datetime
205+
from datetime import timedelta
204206
from google.cloud._helpers import UTC
205207

206208
client = _Client(self.PROJECT)
207209
PAYLOAD = 'PAYLOAD'
208210
IID = 'IID'
209211
NOW = datetime.utcnow().replace(tzinfo=UTC)
212+
LATER = NOW + timedelta(seconds=1)
210213
TIMESTAMP = _datetime_to_rfc3339_w_nanos(NOW)
214+
RECEIVED = _datetime_to_rfc3339_w_nanos(LATER)
211215
LOG_NAME = 'projects/%s/logs/%s' % (self.PROJECT, self.LOGGER_NAME)
212216
LABELS = {'foo': 'bar', 'baz': 'qux'}
213217
TRACE = '12345678-1234-5678-1234-567812345678'
@@ -217,6 +221,7 @@ def test_from_api_repr_w_loggers_w_logger_match(self):
217221
'logName': LOG_NAME,
218222
'insertId': IID,
219223
'timestamp': TIMESTAMP,
224+
'receiveTimestamp': RECEIVED,
220225
'labels': LABELS,
221226
'trace': TRACE,
222227
'spanId': SPANID
@@ -228,6 +233,7 @@ def test_from_api_repr_w_loggers_w_logger_match(self):
228233
self.assertEqual(entry.payload, PAYLOAD)
229234
self.assertEqual(entry.insert_id, IID)
230235
self.assertEqual(entry.timestamp, NOW)
236+
self.assertEqual(entry.received_timestamp, LATER)
231237
self.assertEqual(entry.labels, LABELS)
232238
self.assertEqual(entry.trace, TRACE)
233239
self.assertEqual(entry.span_id, SPANID)

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.