set_device_start_error_times.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. # coding=utf-8
  2. """
  3. 为设备添加errorTimes的otherConf。
  4. 添加了此参数的设备,如果其adapter文件被startErrorTimer装饰器装饰
  5. 在错误启动次数达到errorTimes之后,会进行一定的操作,比如锁定端口或者上报设备故障等等
  6. """
  7. import os
  8. import click
  9. from base import init_env
  10. import pandas as pd
  11. init_env(interactive=True)
  12. from apps.web.device.models import Device, Group
  13. from apps.web.dealer.models import Dealer
  14. from apps.web.agent.models import Agent
  15. from apps.web.constant import Const
  16. def update_device_conf(devNos, times, driverCode=None):
  17. faultDev = list()
  18. successDev = list()
  19. print(devNos)
  20. for dev in Device.objects.filter(devNo__in=devNos):
  21. print(dev.devNo)
  22. if driverCode is not None and dev.devType.code != driverCode:
  23. continue
  24. otherConf = dev.otherConf or dict()
  25. otherConf.update({"errorTimes": times})
  26. try:
  27. dev.otherConf = otherConf
  28. dev.save()
  29. except Exception as e:
  30. faultDev.append(dev.logicalCode)
  31. else:
  32. successDev.append(dev.logicalCode)
  33. # 清除掉设备的缓存
  34. Device.invalid_device_cache(dev.devNo)
  35. return faultDev, successDev
  36. @click.group()
  37. def cli():
  38. click.echo("""
  39. 为设备添加errorTimes的otherConf。\n
  40. 添加了此参数的设备,如果其adapter文件被startErrorTimer装饰器装饰\n
  41. 在错误启动次数达到errorTimes之后,会进行一定的操作,比如锁定端口或者上报设备故障等等
  42. """)
  43. @cli.command()
  44. @click.option("--path", prompt="请输入设备编号(logicalCode)文件地址")
  45. @click.option("--times", default=Const.ERROR_START_TIMES, type=int, prompt="请输入最大错误次数")
  46. def from_file(path, times):
  47. if not os.path.exists(path):
  48. click.echo("path 不存在!")
  49. return
  50. try:
  51. dataForm = pd.read_excel(path, header=None, usecols=1)
  52. except Exception as e:
  53. click.echo("读取文件失败,请使用excel文件格式将logicalCode设置在第一列")
  54. return
  55. # dataForm.
  56. logicalCodes = dataForm.values.tolist()
  57. # print dataForm
  58. print logicalCodes
  59. devNos = [Device.get_devNo_by_logicalCode(str(int(item[0]))) for item in logicalCodes]
  60. devNos = filter(lambda x:x is not None, devNos)
  61. faultDev, successDev = update_device_conf(devNos, times)
  62. click.echo("共修改 {} 设备相关配置".format(len(successDev)))
  63. if faultDev:
  64. message = "修改失败 {} 设备, 编号为:\n{}".format(len(faultDev), "\n".join(faultDev))
  65. click.echo(message)
  66. @cli.command()
  67. @click.option("--logical", prompt="请输入设备编号(logicalCode)")
  68. @click.option("--times", default=Const.ERROR_START_TIMES, type=int, prompt="请输入最大错误次数")
  69. def from_enter(logical, times):
  70. devNo = Device.get_devNo_by_logicalCode(logical)
  71. faultDev, successDev = update_device_conf([devNo], times)
  72. if faultDev:
  73. click.echo("修改失败")
  74. else:
  75. click.echo("修改成功!")
  76. @cli.command()
  77. @click.option("--group", prompt="请输入设备组ID")
  78. @click.option("--driver", prompt="请输入驱动编号")
  79. @click.option("--times", default=Const.ERROR_START_TIMES, type=int, prompt="请输入最大错误次数")
  80. def from_group(group, driver, times):
  81. devNos = Device.get_devNos_by_group([group])
  82. faultDev, successDev = update_device_conf(devNos, times, driverCode=driver)
  83. click.echo("共修改 {} 设备相关配置".format(len(successDev)))
  84. if faultDev:
  85. message = "修改失败 {} 设备, 编号为:\n{}".format(len(faultDev), "\n".join(faultDev))
  86. click.echo(message)
  87. @cli.command()
  88. @click.option("--username", prompt="请输入经销商手机号码")
  89. @click.option("--driver", prompt="请输入驱动编号")
  90. @click.option("--times", default=Const.ERROR_START_TIMES, type=int, prompt="请输入最大错误次数")
  91. def from_dealer(username, driver, times):
  92. devNos = list()
  93. for dealer in Dealer.objects.filter(username=username):
  94. groupIds = Group.get_group_ids_of_dealer(str(dealer.id))
  95. devNos.extend(Device.get_devNos_by_group(groupIds))
  96. faultDev, successDev = update_device_conf(devNos, times, driverCode=driver)
  97. click.echo("共修改 {} 设备相关配置".format(len(successDev)))
  98. if faultDev:
  99. message = "修改失败 {} 设备, 编号为:\n{}".format(len(faultDev), "\n".join(faultDev))
  100. click.echo(message)
  101. @cli.command()
  102. @click.option("--username", prompt="请输入代理商手机号码")
  103. @click.option("--driver", prompt="请输入驱动编号")
  104. @click.option("--times", default=Const.ERROR_START_TIMES, type=int, prompt="请输入最大错误次数")
  105. def from_agent(username, driver, times):
  106. devNos = list()
  107. agent = Agent.objects.get(username=username)
  108. dealers = agent.get_dealers()
  109. for dealer in dealers:
  110. groupIds = Group.get_group_ids_of_dealer(str(dealer.id))
  111. devNos.extend(Device.get_devNos_by_group(groupIds))
  112. faultDev, successDev = update_device_conf(devNos, times, driverCode=driver)
  113. click.echo("共修改 {} 设备相关配置".format(len(successDev)))
  114. if faultDev:
  115. message = "修改失败 {} 设备, 编号为:\n{}".format(len(faultDev), "\n".join(faultDev))
  116. click.echo(message)
  117. if __name__ == '__main__':
  118. cli()