stats.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. import re, sys, os, json
  4. from PIL import Image, ImageDraw, ImageFont
  5. # Acciones validas
  6. CMDS = ['LOAD', 'CPU', 'BLOCK', 'UNBLOCK', 'EXIT', 'DEADLINE']
  7. def parseData(fin):
  8. ln = 0
  9. lastBlock = 0
  10. result = []
  11. for l in fin:
  12. ln+=1
  13. vls = l.split()
  14. # Si no es un comando valido
  15. if (vls[0] not in CMDS):
  16. # sys.stderr.write('Warning: Ignoring line %d: %s' % (ln, l))
  17. continue
  18. # Parseo los datos estos
  19. accion = vls[0]
  20. tick = int(vls[1])
  21. proceso = int(vls[2])
  22. # Ignoro a idle
  23. if proceso == -1:
  24. continue
  25. # Empiezo a contar cuando carga un proceso
  26. if accion == 'LOAD':
  27. # result[i] = Proceso
  28. result.append({'cargaTick': tick, 'primerTick': 0, 'ultimoTick': 0, 'ticksCpu': 0, 'ticksBlock': 0 })
  29. # Tick CPU
  30. if accion == 'CPU':
  31. if result[proceso]['ticksCpu'] == 0:
  32. result[proceso]['primerTick'] = tick
  33. # Si no hubo un block en el mismo tick
  34. if lastBlock != tick:
  35. result[proceso]['ticksCpu'] +=1
  36. # Tick Block
  37. if accion == 'BLOCK':
  38. lastBlock = tick
  39. result[proceso]['ticksBlock'] += 1
  40. if accion == 'UNBLOCK':
  41. if lastBlock == tick:
  42. lastBlock -= 1
  43. result[proceso]['ticksBlock'] -= 1
  44. if accion == 'EXIT':
  45. result[proceso]['ultimoTick'] = tick
  46. return result
  47. def main(argv):
  48. if len(argv) <= 1:
  49. fin = sys.stdin
  50. else:
  51. return 1
  52. data = parseData(fin)
  53. print(json.dumps(data))
  54. return 0
  55. if __name__ == "__main__":
  56. main(sys.argv)