port_check.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # coding=utf-8
  2. import sys
  3. from pprint import pprint
  4. from base import init_env
  5. init_env(interactive = True)
  6. from apps.web.device.models import Device
  7. from apps.web.management.models import Manager
  8. from apps.web.agent.models import Agent
  9. from apps.web.dealer.models import Dealer
  10. def check_error(devCache, errorPorts):
  11. for port in errorPorts:
  12. if port in devCache and isinstance(devCache[port], dict) and "status" in devCache:
  13. return True
  14. else:
  15. return False
  16. def clear_error_port(devNo, errorPorts):
  17. for port in errorPorts:
  18. Device.clear_port_control_cache(devNo, port)
  19. def main(flag, errorPorts):
  20. print "start"
  21. MANAGER_NAME = "15268825119"
  22. manager = Manager.objects.filter(username=MANAGER_NAME).first()
  23. if manager is None:
  24. raise Exception("no manager")
  25. agents = Agent.objects.filter(managerId=str(manager.id)).all()
  26. if not agents:
  27. raise Exception("no agent")
  28. agentIds = [str(item.id) for item in agents]
  29. print "agentIds:"
  30. pprint(agentIds)
  31. print "start search dealers"
  32. dealers = Dealer.objects.filter(agentId__in=agentIds).all()
  33. if not dealers:
  34. raise Exception("no dealer")
  35. dealerIds = [str(item.id) for item in dealers]
  36. print "start search devices"
  37. devices = Device.objects.filter(ownerId__in=dealerIds).all()
  38. if not devices:
  39. raise Exception("no devices")
  40. errorDevices = list()
  41. for dev in devices:
  42. devCache = Device.get_dev_control_cache(dev.devNo)
  43. if check_error(devCache, errorPorts):
  44. errorDevices.append({dev.devNo: devCache})
  45. print len(errorDevices)
  46. if flag == "clear":
  47. makeSure = raw_input("Ready to clear post %s, please enter 'yes' to make sure" % errorPorts)
  48. if makeSure == "make sure":
  49. for devNo in errorDevices.keys():
  50. clear_error_port(devNo, errorPorts)
  51. else:
  52. print "error port num is %s" % len(errorPorts)
  53. if __name__ == '__main__':
  54. print u"python port_check.py check/clear port1 port2......"
  55. flag = sys.argv[1]
  56. errorPorts = sys.argv[2:]
  57. main(flag, errorPorts)