Exemple #1
0
 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__)
Exemple #2
0
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)
Exemple #3
0
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):
Exemple #5
0
 def __init__(self):
     CdbObjectManager.__init__(self)
     self.logDbApi = LogDbApi()
     self.storageUtility = StorageUtility.getInstance()