feat: push to s3

parent c46d418e
......@@ -132,7 +132,7 @@ class ServerReplayRecorder(ReplayRecorder):
self.push_to_server(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):
return True
else:
......@@ -140,15 +140,18 @@ class ServerReplayRecorder(ReplayRecorder):
else:
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 self.app.service.push_session_replay(os.path.join(self.app.config['LOG_DIR'], session_id + '.replay.gz'),
session_id):
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.push_to_s3(times - 1, session_id)
return self.upload_replay(times - 1, session_id)
else:
logger.error("failed report session {}'s replay log", session_id)
return False
......@@ -285,7 +288,7 @@ class S3ReplayRecorder(ServerReplayRecorder):
else:
self.s3 = boto3.client('s3')
def push_to_server(self, session_id):
def push_to_s3(self, session_id):
logger.debug("push to server")
try:
self.s3.upload_file(
......@@ -293,10 +296,33 @@ class S3ReplayRecorder(ServerReplayRecorder):
self.bucket,
self.app.config.get("NAME", "coco") + time.strftime('%Y-%m-%d', time.localtime(
self.starttime)) + '/' + session_id + '.replay.gz')
return True
except:
return self.app.service.push_session_replay(
os.path.join(self.app.config['LOG_DIR'], session_id + '.replay.gz'),
session_id)
return False
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):
......
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