# -*- coding: utf-8 -*- # !/usr/bin/env python import datetime import logging from mongoengine import DateTimeField, DictField, StringField, BooleanField from apilib.systypes import IterConstant from apps.web.core.db import Searchable from apps.web.device.models import DeviceDict, logger, Device logger = logging.getLogger(__name__) class DeviceUpgradeLog(Searchable): class Status(IterConstant): INIT = 'init' RUNNING = 'running' FAILURE = 'failure' TIMEOUT = 'timeout' UPGRADED = 'upgraded' SUCCESS = 'success' updateKey = StringField() devNo = StringField() logicalCode = StringField() ownerId = StringField() devInfo = DictField() beforeSoftVer = StringField() beforeCoreVer = StringField() beforeDriverCode = StringField() afterCoreVer = StringField() afterSoftVer = StringField() afterDriverCode = StringField() status = StringField(default = Status.INIT) updatePara = DictField() reboot = BooleanField(default = False) revertPulse = BooleanField(default = False) remark = StringField(default = '') dateTimeAdded = DateTimeField(verbose_name = u'添加时间', default = datetime.datetime.now) meta = { 'collection': 'device_upgrade', 'db_alias': 'logdata', "indexes": [ 'logicalCode', 'devNo', 'ownerId', {'fields': ['updateKey', 'devNo'], 'unique': True} ], } @staticmethod def make_update_key(right_core_ver, right_soft_ver): if 'ASR1802' in right_core_ver: return '{}_{}'.format(right_core_ver, right_soft_ver) else: return '{}'.format(right_soft_ver) @classmethod def new_log(cls, dev, coreVer, softVer, driverCode, updatePara): # type: (DeviceDict, basestring, basestring, basestring, basestring)->DeviceUpgradeLog try: update_key = cls.make_update_key(coreVer, softVer) dev_type = dev.get('devType', {}) return cls( updateKey = update_key, devNo = dev.devNo, logicalCode = dev.logicalCode, ownerId = dev.ownerId, devInfo = { 'devType': { 'code': dev_type.get('code', ''), 'name': dev_type.get('name', '') }, 'pulseWidth1': dev['pulseWidth1'], 'pulseInterval1': dev['pulseInterval1'], 'trapSwtich': dev['trapSwtich'], 'coreVer': dev['coreVer'], 'boardValid': dev.get('boardValid', Device.boardValid.default) }, beforeSoftVer = dev['softVer'], beforeCoreVer = dev['coreVer'], beforeDriverCode = dev['driverCode'], afterCoreVer = coreVer, afterSoftVer = softVer, afterDriverCode = driverCode, updatePara = updatePara, reboot = False).save() except Exception, e: logger.exception(e) def set_stauts(self, status): self.status = status self.save()