import json import boto3 def lambda_handler(event, context): task_id = event["task_id"] cluster = event["kwargs"]["tidb_cluster"] org_id = event["kwargs"]["org_id"] packages = event["kwargs"]["packages"] start = event["kwargs"]["start_ts"] * 1000 stop = event["kwargs"]["end_ts"] * 1000 step = 60000 begin = min([(start // step) * step, start]) if stop - start > 14400000: # not allowed log more than 4 hours raise Exception("log time range too large, the maximum value is 4h") print("creating lambda client") client = boto3.client("lambda") print("create lambda client sucess") for b, e in [(max([x, start]), min([x + step, stop])) for x in range(begin, stop, step)]: print(f"processing time slice [{b}, {e})") for package in packages: print(f"processing package {package}") client.invoke( FunctionName="clinic-logs-prod", InvocationType="Event", Payload=json.dumps( { "task_id": task_id, "kwargs": { "cluster": cluster, "index": f"org{org_id}_log", "package": package, "start_ts": b, "stop_ts": e, }, } ), ) print(f"task for package {package} delivered") if __name__ == "__main__": lambda_handler( { "task_id": "xxx_task", "kwargs": { "tidb_cluster": "6865911482951002112", "org": "org105_log", "packages": ["6e0f7d6daca154e9-113fe6ef2078d853-e635bdf4597b680"], "start_ts": 1640763800000, "end_ts": 1640764030000, }, }, None, )