def getIntervalData(log): ''' Goes through filelines and gets working intervals input: filelines output: {"name": [ { "date": "2016-01-05", "data": [ { "start": "2016-01-05 12:16", "stop": "2016-01-05 12:18", "type": "working" } ] }, { "date": "2016-01-08", "data": [ { "start": "2016-01-08 15:49", "stop": "2016-01-08 15:49", "type": "working" } ] } ],} ''' data = [] chunk = [] old_date = None for line in log: line_date = nt.gettimestamp(line) if not line_date: continue if not old_date and line_date: old_date = line_date.date() if old_date and old_date != line_date.date(): if len(chunk): date_string = old_date.strftime('%Y-%m-%d') data.append({'date': date_string,'data': nt.getworkingintervalsforchunk(chunk)}) chunk = [] chunk.append(line) old_date = line_date.date() if len(chunk) : date_string = old_date.strftime('%Y-%m-%d') data.append({'date': date_string,'data': nt.getworkingintervalsforchunk(chunk)}) return data
def calcactions(log): result = { "merges": 0, "splits": 0, "bodies": {}, } initial = { 'merges': 0, 'splits': 0, 'working': 0, } day_result = {} current_assignment = None assignment_chunk = [] assignment_day_chunk = [] for l in log: if l[nt.loglevellength:].startswith('20'): line_date = nt.gettimestamp(l).strftime(nt.newtimestampformat)[0:8] if line_date not in day_result: day_result[line_date] = { "merges": 0, "splits": 0, "bodies": {}, } if assignment_day_chunk: wt_day = nt.getworkingtimeforchunk(assignment_day_chunk) assignment_day_chunk = [] if current_assignment not in day_result[line_date]['bodies']: day_result[line_date]['bodies'][current_assignment] = initial.copy() day_result[line_date]['bodies'][current_assignment]['working'] += wt_day['working'] if "Assigned bookmark" in l: # Retrieve bookmark bid = nt.getbookmarkid(l) if bid: if current_assignment and bid != current_assignment: wt = nt.getworkingtimeforchunk(assignment_chunk) wt_day = nt.getworkingtimeforchunk(assignment_day_chunk) assignment_chunk = [] assignment_day_chunk = [] result['bodies'][current_assignment]['working'] += wt['working'] if current_assignment not in day_result[line_date]['bodies']: day_result[line_date]['bodies'][current_assignment] = initial.copy() day_result[line_date]['bodies'][current_assignment]['working'] += wt_day['working'] # add time to old assignment current_assignment = bid if current_assignment not in result['bodies']: # If not exists, create dictionary result['bodies'][current_assignment] = initial.copy() if "Merge operation saved." in l: result['merges'] += 1 day_result[line_date]['merges'] += 1 if current_assignment: result['bodies'][current_assignment]['merges'] += 1 if current_assignment not in day_result[line_date]['bodies']: day_result[line_date]['bodies'][current_assignment] = initial.copy() day_result[line_date]['bodies'][current_assignment]['merges'] += 1 if "splitted" in l: result['splits'] += 1 day_result[line_date]['splits'] += 1 if current_assignment: result['bodies'][current_assignment]['splits'] += 1 if current_assignment not in day_result[line_date]['bodies']: day_result[line_date]['bodies'][current_assignment] = initial.copy() day_result[line_date]['bodies'][current_assignment]['splits'] += 1 if current_assignment: assignment_chunk.append(l) assignment_day_chunk.append(l) # TODO synapses # TODO volume return result, day_result