"""Compare data from GetStream.io webhooks to SQS.""" import csv import json import sys """ 1. Extract lambda logs as csv from: https://app.datadoghq.com/logs?cols=&event&from_ts=1588845732475&index=&live=true&messageDisplay=inline&query=%40aws.awslogs.logGroup%3A%22%2Faws%2Flambda%2Fpublish-message-prod%22+++INFO+AND+actor+AND+-%22test-sqs%22&stream_sort=desc&to_ts=1588860132475 2. Extract webhooks logs from uwsgi logs on server """ # noqa:E501 def main(): date = sys.argv[1] lambda_logs = sys.argv[2] webhook_logs = sys.argv[3] # store expected notifications by artist and profile artist_records = { 'webhooks': {}, 'sqs': {} } message_records = { 'webhooks': {}, 'sqs': {} } def _add_count(source, feed, new_list): for n in new_list: metadata = json.loads(n['object']) name = metadata['name'] if name not in artist_records[source]: artist_records['sqs'][name] = 0 artist_records['webhooks'][name] = 0 artist_records[source][name] += 1 if feed not in message_records[source]: message_records['sqs'][feed] = [] message_records['webhooks'][feed] = [] message_records[source][feed].append(name) # open logs fom lambda and count them with open(lambda_logs, 'r') as filehandler: reader = csv.DictReader(filehandler) for row in reader: if row['date'][:10] == date: message = row['message'].split('\t')[3] message = message.replace('"', '\\"') message = message.replace("'", '"') message = message.replace('\n', '') message = json.loads(message) _add_count('sqs', message['feed'], message['new']) # open logs from uwsgi webhooks and count them with open(webhook_logs, 'r') as filehandler: lines = filehandler.readlines() for line in lines: if 'social_spike' not in line: continue line = line.replace('"', '\\"') line = line.replace("'", '"') line = line.replace('\n', '') data = [] try: data = json.loads(line) except: # noqa:E722 pass for row in data: if row['published_at'][:10] == date and row['new']: _add_count('webhooks', row['feed'], row['new']) def output(values): for key in sorted(values.keys()): print(f'{key} => {values[key]}') output(artist_records['sqs']) print('') output(artist_records['webhooks']) print('') print('') output(message_records['sqs']) print('') output(message_records['webhooks']) print('') if __name__ == '__main__': main()