stats.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. lastBlock = 0
  11. result = []
  12. for l in fin:
  13. ln+=1
  14. vls = l.split()
  15. # Si no es un comando valido
  16. if (vls[0] not in CMDS):
  17. # sys.stderr.write('Warning: Ignoring line %d: %s' % (ln, l))
  18. continue
  19. # Parseo los datos estos
  20. accion = vls[0]
  21. tick = int(vls[1])
  22. proceso = int(vls[2])
  23. # Ignoro a idle
  24. if proceso == -1:
  25. continue
  26. # Empiezo a contar cuando carga un proceso
  27. if accion == 'LOAD':
  28. # result[i] = Proceso
  29. result.append({'cargaTick': tick, 'primerTick': 0, 'ultimoTick': 0, 'ticksCpu': 0, 'ticksBlock': 0 })
  30. # Tick CPU
  31. if accion == 'CPU':
  32. if result[proceso]['ticksCpu'] == 0:
  33. result[proceso]['primerTick'] = tick
  34. # Si no hubo un block en el mismo tick
  35. if lastBlock != tick:
  36. result[proceso]['ticksCpu'] +=1
  37. # Tick Block
  38. if accion == 'BLOCK':
  39. lastBlock = tick
  40. result[proceso]['ticksBlock'] += 1
  41. if accion == 'UNBLOCK':
  42. lastBlock -= 1
  43. result[proceso]['ticksBlock'] -= 1
  44. if accion == 'EXIT':
  45. result[proceso]['ultimoTick'] = tick
  46. #Sobra una ronda de cores idles
  47. return result
  48. def main(argv):
  49. if len(argv) <= 1:
  50. fin = sys.stdin
  51. else:
  52. return 1
  53. data = parseData(fin)
  54. pprint (data)
  55. return 0
  56. if __name__ == "__main__":
  57. main(sys.argv)