main.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/env python
  2. import sys
  3. import os
  4. sys.path.append("wrappers")
  5. from modelverse import *
  6. from subprocess import Popen, PIPE
  7. import json
  8. def lola_service(port):
  9. json_input = service_get(port)
  10. input_data = json.loads(json_input)
  11. print(input_data['petrinet'])
  12. print(input_data['query'])
  13. query_formula = "--formula=EF ("+ input_data['query']+")"
  14. lola = Popen(["services/LoLA/lola", "--path=path_output", query_formula, "--json=output.json"], stdin=PIPE, stdout=PIPE).communicate(input=input_data['petrinet'])
  15. output_file = open('output.json', 'r')
  16. result = json.load(output_file)
  17. output_file.close()
  18. # If safety query is violated resulting True in output
  19. path = ''
  20. if result['analysis']['result']:
  21. with open('path_output') as f:
  22. for transition in f:
  23. transition = transition.replace('\n',',')
  24. path = path + transition
  25. #json_result = '{"analysis_result": True , "path":\"'+path.rstrip(',') + '\"}'
  26. service_set(port, result['analysis']['result'])
  27. service_set(port, path.rstrip(','))
  28. os.remove("path_output")
  29. os.remove("output.json")
  30. try:
  31. init(sys.argv[1])
  32. login("LoLA", "LoLA_password")
  33. service_register("lola", lola_service)
  34. try:
  35. if sys.version_info[0] < 3:
  36. while raw_input() != "STOP":
  37. # Stay active, as we shouldn't exit while the service is running!
  38. pass
  39. else:
  40. while input() != "STOP":
  41. # Stay active, as we shouldn't exit while the service is running!
  42. pass
  43. finally:
  44. service_stop()
  45. except KeyboardInterrupt:
  46. pass