stats.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. import re, sys, os
  4. from pprint import pprint
  5. from PIL import Image, ImageDraw, ImageFont
  6. # Acciones validas
  7. CMDS = ['LOAD', 'CPU', 'BLOCK', 'UNBLOCK', 'EXIT', 'DEADLINE']
  8. def parseData(fin):
  9. ln = 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. result[proceso]['ticksCpu'] +=1
  34. # Tick Block
  35. if accion == 'BLOCK':
  36. result[proceso]['ticksBlock'] += 1
  37. if accion == 'UNBLOCK':
  38. result[proceso]['ticksBlock'] -= 1
  39. if accion == 'EXIT':
  40. result[proceso]['ultimoTick'] = tick
  41. #Sobra una ronda de cores idles
  42. return result
  43. def main(argv):
  44. if len(argv) <= 1:
  45. fin = sys.stdin
  46. else:
  47. return 1
  48. data = parseData(fin)
  49. pprint (data)
  50. return 0
  51. if __name__ == "__main__":
  52. main(sys.argv)