123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- # coding=utf-8
- """
- 为设备添加errorTimes的otherConf。
- 添加了此参数的设备,如果其adapter文件被startErrorTimer装饰器装饰
- 在错误启动次数达到errorTimes之后,会进行一定的操作,比如锁定端口或者上报设备故障等等
- """
- import os
- import click
- from base import init_env
- import pandas as pd
- init_env(interactive=True)
- from apps.web.device.models import Device, Group
- from apps.web.dealer.models import Dealer
- from apps.web.agent.models import Agent
- from apps.web.constant import Const
- def update_device_conf(devNos, times, driverCode=None):
- faultDev = list()
- successDev = list()
- print(devNos)
- for dev in Device.objects.filter(devNo__in=devNos):
- print(dev.devNo)
- if driverCode is not None and dev.devType.code != driverCode:
- continue
- otherConf = dev.otherConf or dict()
- otherConf.update({"errorTimes": times})
- try:
- dev.otherConf = otherConf
- dev.save()
- except Exception as e:
- faultDev.append(dev.logicalCode)
- else:
- successDev.append(dev.logicalCode)
- # 清除掉设备的缓存
- Device.invalid_device_cache(dev.devNo)
- return faultDev, successDev
- @click.group()
- def cli():
- click.echo("""
- 为设备添加errorTimes的otherConf。\n
- 添加了此参数的设备,如果其adapter文件被startErrorTimer装饰器装饰\n
- 在错误启动次数达到errorTimes之后,会进行一定的操作,比如锁定端口或者上报设备故障等等
- """)
- @cli.command()
- @click.option("--path", prompt="请输入设备编号(logicalCode)文件地址")
- @click.option("--times", default=Const.ERROR_START_TIMES, type=int, prompt="请输入最大错误次数")
- def from_file(path, times):
- if not os.path.exists(path):
- click.echo("path 不存在!")
- return
- try:
- dataForm = pd.read_excel(path, header=None, usecols=1)
- except Exception as e:
- click.echo("读取文件失败,请使用excel文件格式将logicalCode设置在第一列")
- return
- # dataForm.
- logicalCodes = dataForm.values.tolist()
- # print dataForm
- print logicalCodes
- devNos = [Device.get_devNo_by_logicalCode(str(int(item[0]))) for item in logicalCodes]
- devNos = filter(lambda x:x is not None, devNos)
- faultDev, successDev = update_device_conf(devNos, times)
- click.echo("共修改 {} 设备相关配置".format(len(successDev)))
- if faultDev:
- message = "修改失败 {} 设备, 编号为:\n{}".format(len(faultDev), "\n".join(faultDev))
- click.echo(message)
- @cli.command()
- @click.option("--logical", prompt="请输入设备编号(logicalCode)")
- @click.option("--times", default=Const.ERROR_START_TIMES, type=int, prompt="请输入最大错误次数")
- def from_enter(logical, times):
- devNo = Device.get_devNo_by_logicalCode(logical)
- faultDev, successDev = update_device_conf([devNo], times)
- if faultDev:
- click.echo("修改失败")
- else:
- click.echo("修改成功!")
- @cli.command()
- @click.option("--group", prompt="请输入设备组ID")
- @click.option("--driver", prompt="请输入驱动编号")
- @click.option("--times", default=Const.ERROR_START_TIMES, type=int, prompt="请输入最大错误次数")
- def from_group(group, driver, times):
- devNos = Device.get_devNos_by_group([group])
- faultDev, successDev = update_device_conf(devNos, times, driverCode=driver)
- click.echo("共修改 {} 设备相关配置".format(len(successDev)))
- if faultDev:
- message = "修改失败 {} 设备, 编号为:\n{}".format(len(faultDev), "\n".join(faultDev))
- click.echo(message)
- @cli.command()
- @click.option("--username", prompt="请输入经销商手机号码")
- @click.option("--driver", prompt="请输入驱动编号")
- @click.option("--times", default=Const.ERROR_START_TIMES, type=int, prompt="请输入最大错误次数")
- def from_dealer(username, driver, times):
- devNos = list()
- for dealer in Dealer.objects.filter(username=username):
- groupIds = Group.get_group_ids_of_dealer(str(dealer.id))
- devNos.extend(Device.get_devNos_by_group(groupIds))
- faultDev, successDev = update_device_conf(devNos, times, driverCode=driver)
- click.echo("共修改 {} 设备相关配置".format(len(successDev)))
- if faultDev:
- message = "修改失败 {} 设备, 编号为:\n{}".format(len(faultDev), "\n".join(faultDev))
- click.echo(message)
- @cli.command()
- @click.option("--username", prompt="请输入代理商手机号码")
- @click.option("--driver", prompt="请输入驱动编号")
- @click.option("--times", default=Const.ERROR_START_TIMES, type=int, prompt="请输入最大错误次数")
- def from_agent(username, driver, times):
- devNos = list()
- agent = Agent.objects.get(username=username)
- dealers = agent.get_dealers()
- for dealer in dealers:
- groupIds = Group.get_group_ids_of_dealer(str(dealer.id))
- devNos.extend(Device.get_devNos_by_group(groupIds))
- faultDev, successDev = update_device_conf(devNos, times, driverCode=driver)
- click.echo("共修改 {} 设备相关配置".format(len(successDev)))
- if faultDev:
- message = "修改失败 {} 设备, 编号为:\n{}".format(len(faultDev), "\n".join(faultDev))
- click.echo(message)
- if __name__ == '__main__':
- cli()
|