Skip to content

Commit 65803bb

Browse files
committed
Updated to v1.4.1
1 parent d9208dd commit 65803bb

File tree

2 files changed

+20
-54
lines changed

2 files changed

+20
-54
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [1.4.1] - 2022-05-12
8+
### Fixed
9+
- Replaced the DescribeLogStreams API call used for getting the next sequence token with PutLogEvents API call to reduce the lambda execution time [#307](https://github.com/awslabs/aws-instance-scheduler/issues/307)
10+
711
## [1.4.0] - 2021-04-26
812
### Added
913
- Enable solution to be deployed as mutliple stacks in the same account/region

source/lambda/util/logger.py

Lines changed: 16 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ def clear(self):
180180
@property
181181
def client(self):
182182
if self._client is None:
183-
methods = ["describe_log_streams", "create_log_stream"]
183+
methods = ["create_log_stream"]
184184
self._client = boto_retry.get_client_with_retries("logs", methods, context=self._context)
185185
return self._client
186186

@@ -189,33 +189,6 @@ def flush(self):
189189
Writes all buffered messages to CloudWatch Stream
190190
:return:
191191
"""
192-
def get_next_log_token():
193-
194-
if self._log_sequence_token:
195-
return self._log_sequence_token
196-
197-
resp = self.client.describe_log_streams_with_retries(logGroupName=self._loggroup, logStreamNamePrefix=self._logstream)
198-
if "logStreams" in resp and len(resp["logStreams"]) > 0:
199-
token = resp["logStreams"][0].get("uploadSequenceToken")
200-
return token
201-
try:
202-
self.client.create_log_stream_with_retries(logGroupName=self._loggroup, logStreamName=self._logstream)
203-
resp = self.client.describe_log_streams_with_retries(logGroupName=self._loggroup,
204-
logStreamNamePrefix=self._logstream)
205-
except Exception as e:
206-
if type(e).__name__ != "ResourceAlreadyExistsException":
207-
raise e
208-
209-
retry_get_token_count = 0
210-
while True:
211-
if "logStreams" in resp and len(resp["logStreams"]) > 0:
212-
token = resp["logStreams"][0].get("uploadSequenceToken")
213-
return token
214-
else:
215-
retry_get_token_count += 1
216-
if retry_get_token_count > 3:
217-
return None
218-
time.sleep(1)
219192

220193
if len(self._buffer) == 0:
221194
return
@@ -226,29 +199,18 @@ def get_next_log_token():
226199
"logEvents": [{"timestamp": r[0], "message": r[1]} for r in self._buffer]
227200
}
228201

229-
next_token = None
230-
try:
231-
retries = 0
232-
while True:
233-
next_token = get_next_log_token()
234-
if next_token is not None:
235-
put_event_args["sequenceToken"] = next_token
236-
try:
237-
log_event_response = self.client.put_log_events(**put_event_args)
238-
self._log_sequence_token = log_event_response['nextSequenceToken']
239-
self._buffer = []
240-
self._cached_size = 0
241-
return
242-
except Exception as ex:
243-
retries += 1
244-
if retries > 5:
245-
raise ex
246-
time.sleep(2)
247-
next_token = get_next_log_token()
248-
if next_token is not None:
249-
put_event_args["sequenceToken"] = next_token
250-
251-
except Exception as ex:
252-
print("Error writing to logstream {} with token {} ({})".format(self._logstream, next_token, str(ex)))
253-
for entry in self._buffer:
254-
print (entry)
202+
retries = 5
203+
while retries > 0:
204+
try:
205+
self.client.put_log_events(**put_event_args)
206+
self._buffer = []
207+
self._cached_size = 0
208+
return
209+
except self.client.exceptions.ResourceNotFoundException:
210+
retries -= 1
211+
self.client.create_log_stream_with_retries(logGroupName=self._loggroup, logStreamName=self._logstream)
212+
except self.client.exceptions.InvalidSequenceTokenException as ex:
213+
retries -= 1
214+
put_event_args["sequenceToken"] = ex.response.get("expectedSequenceToken")
215+
except Exception:
216+
return

0 commit comments

Comments
 (0)