def __init__(self): self.itemDbApi = ItemDbApi() self.userDbApi = UserDbApi() self.propertyDbApi = PropertyDbApi() self.logDbApi = LogDbApi() self.emailUtility = CdbEmailUtility.getInstance() self.cdbPortalUrlUtility = CdbPortalUrlUtility.getInstance() self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__)
class LogControllerImpl(CdbObjectManager): def __init__(self): CdbObjectManager.__init__(self) self.logDbApi = LogDbApi() self.storageUtility = StorageUtility.getInstance() def addLogAttachment(self, logId, attachmentName, attachmentDescription, attachmentAddedByUserId, cherryPyData): # Verify user will have permission to add log attachment before saving attachment. self.logDbApi.verifyUserCreatedLogEntry(attachmentAddedByUserId, logId) storedAttachmentName = self.storageUtility.storeLogAttachment(cherryPyData, attachmentName) return self.logDbApi.addLogAttachment(logId, storedAttachmentName, attachmentName, attachmentDescription, attachmentAddedByUserId) def getLogById(self, id): return self.logDbApi.getLogById(id) def getLogEntriesForItemElement(self, itemElementId): return self.logDbApi.getLogEntriesForItemElementId(itemElementId) def updateLogEntry(self, logId, enteredByUserId, text, effectiveFromDateTime, effectiveToDateTime, logTopicName): return self.logDbApi.updateLogEntry(logId, enteredByUserId, text, effectiveFromDateTime, effectiveToDateTime, logTopicName) def deleteLogEntry(self, logId, userId): self.logDbApi.deleteLogEntry(logId, userId)
class SparePartsTask: ITEM_DOMAIN_INVENTORY_STATUS_PROPERTY_TYPE_NAME = "Component Instance Status" ITEM_DOMAIN_INVENTORY_STATUS_SPARE_VALUE = "Spare" SPARE_PARTS_CONFIGURATION_PROPERTY_TYPE_NAME = 'Spare Parts Configuration' SPARE_PARTS_CONFIGURATION_MIN_KEY = 'minQuantity' SPARE_PARTS_CONFIGURATION_EMAIL_KEY = 'email' SPARE_PARTS_CONFIGURATION_NOEMAIL_VALUE = 'None' SPARE_PARTS_WARNING_LOG_LEVEL = 'Spares Warning' CDB_SYSTEM_ACCOUNT_USERNAME = '******' CATALOG_DOMAIN_NAME = 'Catalog' SPARE_PARTS_EMAIL_NOTIFICATION_NAME = 'Spare Parts' def __init__(self): self.itemDbApi = ItemDbApi() self.userDbApi = UserDbApi() self.propertyDbApi = PropertyDbApi() self.logDbApi = LogDbApi() self.emailUtility = CdbEmailUtility.getInstance() self.cdbPortalUrlUtility = CdbPortalUrlUtility.getInstance() self.logger = LoggingManager.getInstance().getLogger( self.__class__.__name__) def getPropertyMetadataDict(self, propertyValue): propertyValueId = propertyValue.data['id'] propertyMetadataList = self.propertyDbApi.getPropertyMetadataForPropertyValueId( propertyValueId) propertyMetadataDict = {} for propertyMetadata in propertyMetadataList: key = propertyMetadata.data['metadataKey'] value = propertyMetadata.data['metadataValue'] propertyMetadataDict[key] = value return propertyMetadataDict def getOwnerUserEmail(self, itemId): selfItemElement = self.itemDbApi.getSelfElementByItemId(itemId) entityInfo = selfItemElement.data['entityInfo'] ownerUserInfo = entityInfo['ownerUserInfo'] return ownerUserInfo.data['email'] def getSystemAccountUserId(self): cdbUser = self.userDbApi.getUserByUsername( self.CDB_SYSTEM_ACCOUNT_USERNAME) return cdbUser.data['id'] def getSelfElementIdForItemId(self, itemId): selfItemElement = self.itemDbApi.getSelfElementByItemId(itemId) return selfItemElement.data['id'] def addSparePartsWarningLogEntryToItem(self, itemElementId, message): systemAccountUserId = self.getSystemAccountUserId() self.itemDbApi.addItemElementLog(itemElementId, message, systemAccountUserId, None, None, None, None, self.SPARE_PARTS_WARNING_LOG_LEVEL) @staticmethod def generateSparesMessage(minSpares, currentSpares): if currentSpares == 1: plural = '' else: plural = 's' return "Item has %s spare part%s & requires %s" % (currentSpares, plural, minSpares) def checkSpares(self): self.logger.debug('Checking status of spare parts.') catalogItemsWithSparePartsConfiguration = self.itemDbApi.getItemsWithPropertyType( self.SPARE_PARTS_CONFIGURATION_PROPERTY_TYPE_NAME, itemDomainName=self.CATALOG_DOMAIN_NAME) for catalogItem in catalogItemsWithSparePartsConfiguration: catalogItemId = catalogItem.data['id'] catalogSelfElementId = self.getSelfElementIdForItemId( catalogItemId) sparePartsConfigurationPropertyValue = self.propertyDbApi.getPropertyValueListForItemElementId( catalogSelfElementId, propertyTypeName=self. SPARE_PARTS_CONFIGURATION_PROPERTY_TYPE_NAME) if sparePartsConfigurationPropertyValue: metadataDict = self.getPropertyMetadataDict( sparePartsConfigurationPropertyValue[0]) else: raise ObjectNotFound( "Could not find required property: %s" % self.SPARE_PARTS_CONFIGURATION_PROPERTY_TYPE_NAME) if self.SPARE_PARTS_CONFIGURATION_MIN_KEY in metadataDict: minSpares = int( metadataDict[self.SPARE_PARTS_CONFIGURATION_MIN_KEY]) else: raise CdbException( "required metadata %s not specified for spare part configuration" % self.SPARE_PARTS_CONFIGURATION_MIN_KEY) email = '' if metadataDict.has_key(self.SPARE_PARTS_CONFIGURATION_EMAIL_KEY): emailValue = metadataDict[ self.SPARE_PARTS_CONFIGURATION_EMAIL_KEY] if emailValue == self.SPARE_PARTS_CONFIGURATION_NOEMAIL_VALUE: email = None else: email = emailValue else: # Use owner user email. email = self.getOwnerUserEmail(catalogItemId) sparePartsList = self.itemDbApi.getItemsWithPropertyType( self.ITEM_DOMAIN_INVENTORY_STATUS_PROPERTY_TYPE_NAME, itemDerivedFromItemId=catalogItemId, propertyValueMatch=self. ITEM_DOMAIN_INVENTORY_STATUS_SPARE_VALUE) spares = sparePartsList.__len__() if minSpares > spares: validNotification = True sparesMessage = self.generateSparesMessage(minSpares, spares) spareLogEntries = self.logDbApi.getLogEntriesForItemElementId( catalogSelfElementId, self.SPARE_PARTS_WARNING_LOG_LEVEL) if spareLogEntries: lastSpareLogEntry = spareLogEntries[-1] lastSparesLogMessage = lastSpareLogEntry.data['text'] if lastSparesLogMessage == sparesMessage: validNotification = False if validNotification: self.addSparePartsWarningLogEntryToItem( catalogSelfElementId, sparesMessage) if email is not None: itemUrl = self.cdbPortalUrlUtility.getItemUrlAddress( catalogItemId) catalogItemName = catalogItem.data['name'] catalogItemModel = catalogItem.data['item_identifier1'] catalogItemAlternateName = catalogItem.data[ 'item_identifier2'] itemDictValue = '<a href=%s>%s</a>' % (itemUrl, catalogItemName) # Create an ordered dict for the table emailed to user. informationDict = OrderedDict() informationDict['Name'] = itemDictValue informationDict['Model'] = catalogItemModel informationDict[ 'Alternate Name'] = catalogItemAlternateName informationDict['Spares On Hand'] = spares informationDict['Minimum Spares Required '] = minSpares emailTable = CdbEmailUtility.generateSimpleHtmlTableMessage( informationDict) emailMessage = '%s <br/><br/> %s' % (sparesMessage, emailTable) self.emailUtility.sendEmailNotification( email, self.SPARE_PARTS_EMAIL_NOTIFICATION_NAME, emailMessage)
dataDirectory = deploymentConfigurationDictionary['CDB_DATA_DIR'] if os.path.exists(dataDirectory) == False: print >> sys.stderr, "Data directory '%s' does not exist." % ( dataDirectory) exit(1) from cdb.common.db.api.propertyDbApi import PropertyDbApi from cdb.common.db.api.logDbApi import LogDbApi from cdb.common.utility.configurationManager import ConfigurationManager import re TOTAL_HEADER_SIZE = 80 propertyApi = PropertyDbApi() logApi = LogDbApi() cm = ConfigurationManager.getInstance() print "DB Name: " + cm.getDbSchema() print "DB User: "******"Data Directory: " + dataDirectory print '' def appendNonEmptyValue(array, value): if value is None or value == "": return array.append(value) def getPropertyValueListByPropertyTypeHandler(handlerName):
def __init__(self): CdbObjectManager.__init__(self) self.logDbApi = LogDbApi() self.storageUtility = StorageUtility.getInstance()