feat: push to s3

parent c46d418e
...@@ -132,7 +132,7 @@ class ServerReplayRecorder(ReplayRecorder): ...@@ -132,7 +132,7 @@ class ServerReplayRecorder(ReplayRecorder):
self.push_to_server(session_id) self.push_to_server(session_id)
def push_to_server(self, session_id): def push_to_server(self, session_id):
if self.push_to_s3(3, session_id): if self.upload_replay(3, session_id):
if self.finish_replay(3, session_id): if self.finish_replay(3, session_id):
return True return True
else: else:
...@@ -140,15 +140,18 @@ class ServerReplayRecorder(ReplayRecorder): ...@@ -140,15 +140,18 @@ class ServerReplayRecorder(ReplayRecorder):
else: else:
return False return False
def push_to_s3(self, times, session_id): def push_local(self, session_id):
return self.app.service.push_session_replay(os.path.join(self.app.config['LOG_DIR'], session_id + '.replay.gz'),
session_id)
def upload_replay(self, times, session_id):
if times > 0: if times > 0:
if self.app.service.push_session_replay(os.path.join(self.app.config['LOG_DIR'], session_id + '.replay.gz'), if self.push_local(session_id):
session_id):
logger.info("success push session: {}'s replay log ", session_id) logger.info("success push session: {}'s replay log ", session_id)
return True return True
else: else:
logger.error("failed report session {}'s replay log, try {} times", session_id, times) logger.error("failed report session {}'s replay log, try {} times", session_id, times)
return self.push_to_s3(times - 1, session_id) return self.upload_replay(times - 1, session_id)
else: else:
logger.error("failed report session {}'s replay log", session_id) logger.error("failed report session {}'s replay log", session_id)
return False return False
...@@ -285,7 +288,7 @@ class S3ReplayRecorder(ServerReplayRecorder): ...@@ -285,7 +288,7 @@ class S3ReplayRecorder(ServerReplayRecorder):
else: else:
self.s3 = boto3.client('s3') self.s3 = boto3.client('s3')
def push_to_server(self, session_id): def push_to_s3(self, session_id):
logger.debug("push to server") logger.debug("push to server")
try: try:
self.s3.upload_file( self.s3.upload_file(
...@@ -293,10 +296,33 @@ class S3ReplayRecorder(ServerReplayRecorder): ...@@ -293,10 +296,33 @@ class S3ReplayRecorder(ServerReplayRecorder):
self.bucket, self.bucket,
self.app.config.get("NAME", "coco") + time.strftime('%Y-%m-%d', time.localtime( self.app.config.get("NAME", "coco") + time.strftime('%Y-%m-%d', time.localtime(
self.starttime)) + '/' + session_id + '.replay.gz') self.starttime)) + '/' + session_id + '.replay.gz')
return True
except: except:
return self.app.service.push_session_replay( return False
os.path.join(self.app.config['LOG_DIR'], session_id + '.replay.gz'),
session_id) def upload_replay(self, times, session_id):
if times > 0:
if self.push_to_s3(session_id):
logger.info("success push session: {}'s replay log to S3 ", session_id)
return True
else:
logger.error("failed report session {}'s replay log to S3, try {} times", session_id, times)
return self.upload_replay(times - 1, session_id)
else:
logger.error("failed report session {}'s replay log S3, try to push to local", session_id)
return self.upload_replay_to_local(3, session_id)
def upload_replay_to_local(self, times, session_id):
if times > 0:
if self.push_local(session_id):
logger.info("success push session: {}'s replay log ", session_id)
return True
else:
logger.error("failed report session {}'s replay log, try {} times", session_id, times)
return self.upload_replay_to_local(times - 1, session_id)
else:
logger.error("failed report session {}'s replay log", session_id)
return False
def get_command_recorder_class(config): def get_command_recorder_class(config):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment