#!/usr/bin/env python # coding: utf-8 import re, sys, os, json from PIL import Image, ImageDraw, ImageFont # Acciones validas CMDS = ['LOAD', 'CPU', 'BLOCK', 'UNBLOCK', 'EXIT', 'DEADLINE'] def parseData(fin): ln = 0 lastBlock = 0 result = [] for l in fin: if len(l) <= 1: continue ln+=1 vls = l.split() # Si no es un comando valido if (vls[0] not in CMDS): # sys.stderr.write('Warning: Ignoring line %d: %s' % (ln, l)) continue # Parseo los datos estos accion = vls[0] tick = int(vls[1]) proceso = int(vls[2]) # Ignoro a idle if proceso == -1: continue # Empiezo a contar cuando carga un proceso if accion == 'LOAD': # result[i] = Proceso result.append({'cargaTick': tick, 'primerTick': 0, 'ultimoTick': 0, 'ticksCpu': 0, 'ticksBlock': 0 }) # Tick CPU if accion == 'CPU': if result[proceso]['ticksCpu'] == 0: result[proceso]['primerTick'] = tick # Si no hubo un block en el mismo tick if lastBlock != tick: result[proceso]['ticksCpu'] +=1 # Tick Block if accion == 'BLOCK': lastBlock = tick result[proceso]['ticksBlock'] += 1 if accion == 'UNBLOCK': if lastBlock == tick: lastBlock -= 1 result[proceso]['ticksBlock'] -= 1 if accion == 'EXIT': result[proceso]['ultimoTick'] = tick return result def main(argv): if len(argv) <= 1: fin = sys.stdin else: return 1 data = parseData(fin) print(json.dumps(data)) return 0 if __name__ == "__main__": main(sys.argv)