Esempio n. 1
0
    def getWMBSInjectStatus(self, request=None):
        """
        This service only provided by global queue
        """
        options = {'group': True}
        if request:
            options.update(key=request)
        data = self.db.loadView('WorkQueue', 'wmbsInjectStatusByRequest',
                                options)
        if request:
            if data['rows']:
                injectionStatus = data['rows'][0]['value']
                inboxElement = self.getInboxElements(
                    elementIDs=[data['rows'][0]['key']])
                return injectionStatus and not inboxElement[0].get(
                    'OpenForNewData', False)
            else:
                raise WorkQueueNoMatchingElements("%s not found" % request)
        else:
            injectionStatus = dict(
                (x['key'], x['value']) for x in data.get('rows', []))
            inboxElements = self.getInboxElements(
                elementIDs=injectionStatus.keys())
            finalInjectionStatus = []
            for element in inboxElements:
                if not element.get('OpenForNewData',
                                   False) and injectionStatus[element._id]:
                    finalInjectionStatus.append({element._id: True})
                else:
                    finalInjectionStatus.append({element._id: False})

            return finalInjectionStatus
Esempio n. 2
0
    def getWMBSInjectStatus(self, request=None):
        """
        This service only provided by global queue except on draining agent
        """
        options = {'group': True, 'reduce': True}
        if request:
            options.update(key=request)
        data = self.db.loadView('WorkQueue', 'wmbsInjectStatusByRequest',
                                options)
        if request:
            if data['rows']:
                injectionStatus = data['rows'][0]['value']
                inboxElement = self.getInboxElements(WorkflowName=request)
                requestOpen = inboxElement[0].get(
                    'OpenForNewData', False) if inboxElement else False
                return injectionStatus and not requestOpen
            else:
                raise WorkQueueNoMatchingElements("%s not found" % request)
        else:
            injectionStatus = dict(
                (x['key'], x['value']) for x in data.get('rows', []))
            finalInjectionStatus = []
            for request in injectionStatus.keys():
                inboxElement = self.getInboxElements(WorkflowName=request)
                requestOpen = inboxElement[0].get(
                    'OpenForNewData', False) if inboxElement else False
                finalInjectionStatus.append(
                    {request: injectionStatus[request] and not requestOpen})

            return finalInjectionStatus
Esempio n. 3
0
 def getWMBSInjectStatus(self, request=None):
     """
     This service only provided by global queue
     """
     options = {'group': True}
     if request:
         options.update(key=request)
     data = self.db.loadView('WorkQueue', 'wmbsInjectStatusByRequest',
                             options)
     if request:
         if data['rows']:
             return data['rows'][0]['value']
         else:
             raise WorkQueueNoMatchingElements("%s not found" % request)
     else:
         return [{x['key']: x['value']} for x in data.get('rows', [])]