stats.py 1.6 KB

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