# coding=utf-8 import sys from pprint import pprint from base import init_env init_env(interactive = True) from apps.web.device.models import Device from apps.web.management.models import Manager from apps.web.agent.models import Agent from apps.web.dealer.models import Dealer def check_error(devCache, errorPorts): for port in errorPorts: if port in devCache and isinstance(devCache[port], dict) and "status" in devCache: return True else: return False def clear_error_port(devNo, errorPorts): for port in errorPorts: Device.clear_port_control_cache(devNo, port) def main(flag, errorPorts): print "start" MANAGER_NAME = "15268825119" manager = Manager.objects.filter(username=MANAGER_NAME).first() if manager is None: raise Exception("no manager") agents = Agent.objects.filter(managerId=str(manager.id)).all() if not agents: raise Exception("no agent") agentIds = [str(item.id) for item in agents] print "agentIds:" pprint(agentIds) print "start search dealers" dealers = Dealer.objects.filter(agentId__in=agentIds).all() if not dealers: raise Exception("no dealer") dealerIds = [str(item.id) for item in dealers] print "start search devices" devices = Device.objects.filter(ownerId__in=dealerIds).all() if not devices: raise Exception("no devices") errorDevices = list() for dev in devices: devCache = Device.get_dev_control_cache(dev.devNo) if check_error(devCache, errorPorts): errorDevices.append({dev.devNo: devCache}) print len(errorDevices) if flag == "clear": makeSure = raw_input("Ready to clear post %s, please enter 'yes' to make sure" % errorPorts) if makeSure == "make sure": for devNo in errorDevices.keys(): clear_error_port(devNo, errorPorts) else: print "error port num is %s" % len(errorPorts) if __name__ == '__main__': print u"python port_check.py check/clear port1 port2......" flag = sys.argv[1] errorPorts = sys.argv[2:] main(flag, errorPorts)