import csv import time from datasdk.utils import clinic class Event: """ Event class for the SDK. """ def __init__(self, token): self.api = clinic.ClinicAPI(token) def get_events(self, cluster_id: str, start_timestamp: int, end_timestamp: int): """ Get event data from clinic. """ # we need to get the cluster info first cluster = self.api.get_clinic_cluster_info(cluster_id) # get event data # get event data part by part event_data = [] # query event data every 5 min start_time_range = start_timestamp end_time_range = start_timestamp while end_time_range < end_timestamp: end_time_range = end_time_range + 60 * 60 \ if end_time_range + 60 * 60 < end_timestamp \ else end_timestamp print('get event data from {} to {}\n'.format(start_time_range, end_time_range)) part_events = self.api.get_events(cluster.orgID, cluster_id, start_time_range, end_time_range) if part_events is None: continue event_data += part_events start_time_range = end_time_range # sleep 0.5s~1.5s to avoid too many requests time.sleep(0.5 + (time.time() % 1)) return event_data def write_to_csv(self, event_data: list, file_path: str): """ Write event data to csv file. """ with open(file_path, 'w') as f: csvwriter = csv.writer(f, delimiter=',', ) # write header csvwriter.writerow(["type", "name", "display_name", "catalog", "severity", "activity_id", "application_id", "concept_id", "target_id", "calibration_time", "source", "author", "context_id", "context", "payload"]) # write data for event in event_data: payload = '' for k, v in event['payload'].items(): payload += '# {}: {}\n'.format(k, v) csvwriter.writerow([ event["type"], event["name"], event["display_name"], event["catalog"], event["severity"], event["activity_id"], event["application_id"], event["concept_id"], event["target_id"], event["calibration_time"], event["source"], event["author"], event["context_id"], event["context"], payload])