__init__.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import datetime
  4. import logging
  5. from mongoengine import DateTimeField, DictField, StringField, BooleanField
  6. from apilib.systypes import IterConstant
  7. from apps.web.core.db import Searchable
  8. from apps.web.device.models import DeviceDict, logger, Device
  9. logger = logging.getLogger(__name__)
  10. class DeviceUpgradeLog(Searchable):
  11. class Status(IterConstant):
  12. INIT = 'init'
  13. RUNNING = 'running'
  14. FAILURE = 'failure'
  15. TIMEOUT = 'timeout'
  16. UPGRADED = 'upgraded'
  17. SUCCESS = 'success'
  18. updateKey = StringField()
  19. devNo = StringField()
  20. logicalCode = StringField()
  21. ownerId = StringField()
  22. devInfo = DictField()
  23. beforeSoftVer = StringField()
  24. beforeCoreVer = StringField()
  25. beforeDriverCode = StringField()
  26. afterCoreVer = StringField()
  27. afterSoftVer = StringField()
  28. afterDriverCode = StringField()
  29. status = StringField(default = Status.INIT)
  30. updatePara = DictField()
  31. reboot = BooleanField(default = False)
  32. revertPulse = BooleanField(default = False)
  33. remark = StringField(default = '')
  34. dateTimeAdded = DateTimeField(verbose_name = u'添加时间', default = datetime.datetime.now)
  35. meta = {
  36. 'collection': 'device_upgrade',
  37. 'db_alias': 'logdata',
  38. "indexes": [
  39. 'logicalCode',
  40. 'devNo',
  41. 'ownerId',
  42. {'fields': ['updateKey', 'devNo'], 'unique': True}
  43. ],
  44. }
  45. @staticmethod
  46. def make_update_key(right_core_ver, right_soft_ver):
  47. if 'ASR1802' in right_core_ver:
  48. return '{}_{}'.format(right_core_ver, right_soft_ver)
  49. else:
  50. return '{}'.format(right_soft_ver)
  51. @classmethod
  52. def new_log(cls, dev, coreVer, softVer, driverCode, updatePara):
  53. # type: (DeviceDict, basestring, basestring, basestring, basestring)->DeviceUpgradeLog
  54. try:
  55. update_key = cls.make_update_key(coreVer, softVer)
  56. dev_type = dev.get('devType', {})
  57. return cls(
  58. updateKey = update_key,
  59. devNo = dev.devNo,
  60. logicalCode = dev.logicalCode,
  61. ownerId = dev.ownerId,
  62. devInfo = {
  63. 'devType': {
  64. 'code': dev_type.get('code', ''),
  65. 'name': dev_type.get('name', '')
  66. },
  67. 'pulseWidth1': dev['pulseWidth1'],
  68. 'pulseInterval1': dev['pulseInterval1'],
  69. 'trapSwtich': dev['trapSwtich'],
  70. 'coreVer': dev['coreVer'],
  71. 'boardValid': dev.get('boardValid', Device.boardValid.default)
  72. },
  73. beforeSoftVer = dev['softVer'],
  74. beforeCoreVer = dev['coreVer'],
  75. beforeDriverCode = dev['driverCode'],
  76. afterCoreVer = coreVer,
  77. afterSoftVer = softVer,
  78. afterDriverCode = driverCode,
  79. updatePara = updatePara,
  80. reboot = False).save()
  81. except Exception, e:
  82. logger.exception(e)
  83. def set_stauts(self, status):
  84. self.status = status
  85. self.save()