Example #1
0
 def __init__(self):
     """
     Constructor of the class ...
     """
     EDPluginControl.__init__(self)
     self.__strControlledPluginWaitFile = "EDPluginWaitFile"
     self.__strControlledPluginAccumulator = "EDPluginAccumulatorv1_0"
     self.setXSDataInputClass(XSDataInputWaitMultiFile)
     self.__filesize = []
     self.__bAnyTimeOut = False
     self.__expectedSize = None
     self.listXsdFiles = None
     self.listXsdStrings = None
     self.listXsdFiles = []
     self.listXsdStrings
     self.xsdDataOut = XSDataResultWaitMultiFile()
Example #2
0
class EDPluginWaitMultiFile(EDPluginControl):
    """
    Plugins that waits for a set of files to be written and reach a certain minimum size
    """

    def __init__(self):
        """
        Constructor of the class ...
        """
        EDPluginControl.__init__(self)
        self.__strControlledPluginWaitFile = "EDPluginWaitFile"
        self.__strControlledPluginAccumulator = "EDPluginAccumulatorv1_0"
        self.setXSDataInputClass(XSDataInputWaitMultiFile)
        self.__filesize = []
        self.__bAnyTimeOut = False
        self.__expectedSize = None
        self.listXsdFiles = None
        self.listXsdStrings = None
        self.listXsdFiles = []
        self.listXsdStrings
        self.xsdDataOut = XSDataResultWaitMultiFile()

    def checkParameters(self):
        """
        Checks the mandatory parameters.
        """
        self.DEBUG("EDPluginWaitMultiFile.checkParameters")
        self.checkMandatoryParameters(self.dataInput, "Data Input is None")
        self.checkMandatoryParameters(self.dataInput.expectedFile, "Data Input is None")
        self.checkMandatoryParameters(self.dataInput.expectedSize, "Data Input is None")

    def preProcess(self, _edObject=None):
        EDPluginControl.preProcess(self)
        self.DEBUG("EDPluginWaitMultiFile.preProcess")
        self.__expectedSize = self.dataInput.expectedSize.getValue()
        self.listXsdFiles = self.dataInput.expectedFile
        if not isinstance(self.listXsdFiles, list):
            self.listXsdFiles = [self.listXsdFiles]
        self.listXsdStrings = [ xsd.getPath() for xsd in  self.listXsdFiles]

    def process(self, _edObject=None):
        EDPluginControl.process(self)
        self.DEBUG("EDPluginWaitMultiFile.process  global time-out is set to: %s (default value)" % (self.getTimeOut()))
        self.setTimeInit()
################################################################################
# Initialize the accumulator with the query
################################################################################
        xsdiAccumulator = XSDataInputAccumulator()
        xsdQuery = XSDataQuery()
        xsdQuery.setRemoveItems(XSDataBoolean(1))
        xsdQuery.setItem(self.listXsdStrings)
        xsdiAccumulator.setQuery([xsdQuery])
        edPluginAccumulator = self.loadPlugin(self.__strControlledPluginAccumulator)
        edPluginAccumulator.setDataInput(xsdiAccumulator)
        edPluginAccumulator.connectSUCCESS(self.doSuccessAccumulator)
        edPluginAccumulator.connectFAILURE(self.doFailureAccumulator)
        edPluginAccumulator.execute()

        for oneXSDImage in self.listXsdFiles:
            xsdiWaitFile = XSDataInputWaitFile()
            xsdiWaitFile.setExpectedFile(oneXSDImage)
            xsdiWaitFile.setExpectedSize(self.dataInput.expectedSize)
            xsdiWaitFile.setTimeOut(self.dataInput.timeOut)
            edPluginWaitFile = self.loadPlugin(self.__strControlledPluginWaitFile)
            edPluginWaitFile.setDataInput(xsdiWaitFile)
            edPluginWaitFile.connectSUCCESS(self.doSuccessWaitFile)
            edPluginWaitFile.connectFAILURE(self.doFailureWaitFile)
            edPluginWaitFile.execute()


    def postProcess(self, _edObject=None):
        EDPluginControl.postProcess(self)
        self.DEBUG("EDPluginWaitMultiFile.Synchronize")
        bAllPluginEnded = False
        bOnePluginIsRunning = True
        self.synchronizePlugins()

        self.DEBUG("EDPluginWaitMultiFile.postProcess: Waited for %.3f s" % self.getRunTime())
        if self.__filesize:
            self.xsdDataOut.actualMinSize = XSDataInteger(min(self.__filesize))
        self.xsdDataOut.setTimedOut(XSDataBoolean(self.__bAnyTimeOut))
        # Create some output data
        self.setDataOutput(self.xsdDataOut)


    def doSuccessAccumulator(self, _edPlugin=None):
        with self.locked():
            self.DEBUG("EDPluginWaitMultiFile.doSuccessAccumulator")
            self.retrieveSuccessMessages(_edPlugin, "EDPluginWaitMultiFile.doSuccessAccumulator")
            xsdQueries = _edPlugin.dataOutput.getQuery()
            if xsdQueries is not None and len(xsdQueries) == 1 :
                xsdQuery = xsdQueries[0]
                if (xsdQuery is not None) and (len(xsdQuery.getItem()) == len(self.listXsdFiles)):
                    self.xsdDataOut.setActualFile([XSDataFile(xsd) for xsd in xsdQuery.getItem() ])


    def doFailureAccumulator(self, _edPlugin=None):
        with self.locked():
            self.DEBUG("EDPluginWaitMultiFile.doFailureAccumulator")
            self.retrieveSuccessMessages(_edPlugin, "EDPluginWaitMultiFile.doFailureAccumulator")
            self.ERROR("XSDataInput from EDPluginAccumulator that failed: \n%s" % _edPlugin.dataInput.marshal())
            self.ERROR("XSDataResult from EDPluginAccumulator that failed: \n%s" % _edPlugin.dataOutput.marshal())
            self.setFailure()


    def doSuccessWaitFile(self, _edPlugin=None):
        with self.locked():
            self.DEBUG("EDPluginWaitMultiFile.doSuccessWaitFile")
            self.retrieveSuccessMessages(_edPlugin, "EDPluginWaitMultiFile.doSuccessWaitFile")
            xsdFile = _edPlugin.dataOutput.actualFile
            if _edPlugin.dataOutput.getActualSize() is None:
                self.WARNING("Wait for file %s finished in timeout!" % _edPlugin.dataInput.expectedFile.path.value)
                self.DEBUG("Please check why XSDataResultWaitFile is:\n%s" % _edPlugin.dataOutput.marshal())
                self.DEBUG("This usually happens when EDPluginWaitFile has no configuration file or EDNA_SITE is undefined")
                self.setFailure()
            else:
                self.__filesize.append(_edPlugin.dataOutput.actualSize.value)
                if _edPlugin.dataOutput.timedOut.value:
                    self.__bAnyTimeOut = True
                if xsdFile is not None:
                    xsdiAccumulator = XSDataInputAccumulator()
                    xsdiAccumulator.setItem([xsdFile.path]) #Mandatory to be a list !!!
                    edPluginAccumulator = self.loadPlugin(self.__strControlledPluginAccumulator)
                    edPluginAccumulator.setDataInput(xsdiAccumulator)
                    edPluginAccumulator.connectSUCCESS(self.doSuccessAccumulator)
                    edPluginAccumulator.connectFAILURE(self.doFailureAccumulator)
                    edPluginAccumulator.execute()

    def doFailureWaitFile(self, _edPlugin=None):
        with self.locked():
            self.DEBUG("EDPluginWaitMultiFile.doFailureWaitFile")
            self.retrieveFailureMessages(_edPlugin, "EDPluginWaitMultiFile.doFailureWaitFile")
            self.WARNING("XSDataResult from EDPluginWaitFile that failed: \n%s" % _edPlugin.dataOutput.marshal())
            self.setFailure()