stats.py 1.5 KB

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