diff options
Diffstat (limited to 'src/python/openlmi/common/JobManager.py')
-rw-r--r-- | src/python/openlmi/common/JobManager.py | 134 |
1 files changed, 83 insertions, 51 deletions
diff --git a/src/python/openlmi/common/JobManager.py b/src/python/openlmi/common/JobManager.py index 5ed7830..e78967c 100644 --- a/src/python/openlmi/common/JobManager.py +++ b/src/python/openlmi/common/JobManager.py @@ -47,10 +47,33 @@ import threading from Queue import Queue import pywbem import openlmi.common.cmpi_logging as cmpi_logging +from openlmi.common.IndicationManager import IndicationManager from pywbem.cim_provider2 import CIMProvider2 import socket import traceback +@cmpi_logging.trace_function +def register_filters(job_clsname, indication_manager=None): + """ + This function registers static indication filters at IndicationManager. + It should be called upon provider's initialization. + + :param job_clsname: (``String``) CIM class name for asynchonous jobs. + Will be part of filter queries. + :param indication_manager: If not given, global instance will be obtained. + """ + if indication_manager is None: + ind_manager = IndicationManager.get_instance() + filters = {} + query_args = { + "classname" : job_clsname, + "prefix" : indication_manager.nameprefix + } + for fltr_id, fltr_props in JobManager.IND_FILTERS.items(): + filters[fltr_id] = fltr_props.copy() + filters[fltr_id]['Query'] = fltr_props['Query'] % query_args + indication_manager.add_filters(job_clsname, filters) + # Too many instance attributes # pylint: disable-msg=R0902 class Job(object): @@ -495,6 +518,23 @@ class Job(object): return inst @cmpi_logging.trace_method + def get_cim_error(self): + """ + Return job error as CIMInstance of CIM_Error. + :returns: CIMInstance of CIM_Error + """ + path = pywbem.CIMInstanceName( + classname="CIM_Error", + host=socket.gethostname(), + namespace=self.job_manager.namespace) + err = pywbem.CIMInstance( + classname="CIM_Error", + path=path) + err['CIMStatusCode'] = pywbem.Uint32(self.error[0]) + err['Message'] = self.error[1] + return err + + @cmpi_logging.trace_method def get_post_call(self): """ Return indication that describes the post-execution values of the @@ -524,15 +564,7 @@ class Job(object): if self.return_value is not None: inst['ReturnValue'] = str(self.return_value) if self.error is not None: - path = pywbem.CIMInstanceName( - classname="CIM_Error", - host=socket.gethostname(), - namespace=self.job_manager.namespace) - err = pywbem.CIMInstance( - classname="CIM_Error", - path=path) - err['CIMStatusCode'] = pywbem.Uint32(self.error[0]) - err['Message'] = self.error[1] + err = self.get_cim_error() inst['Error'] = [err, ] return inst @@ -651,6 +683,43 @@ class JobManager(object): IND_JOB_CHANGED = "Changed" IND_JOB_CREATED = "Created" + IND_FILTERS = { + IND_JOB_PERCENT_UPDATED: { + "Query" : "SELECT * FROM LMI_%(prefix)sInstModification WHERE " + "SourceInstance ISA %(classname)s AND " + "SourceInstance.CIM_ConcreteJob::PercentComplete <> " + "PreviousInstance.CIM_ConcreteJob::PercentComplete", + "Description" : "Modification of Percentage Complete for a " + "Concrete Job.", + }, + IND_JOB_SUCCEEDED: { + "Query" : "SELECT * FROM LMI_%(prefix)sInstModification WHERE " + "SourceInstance ISA %(classname)s AND " + "SourceInstance.CIM_ConcreteJob::JobState = 17", + "Description": "Modification of Job State for a " + "Concrete Job to 'Complete'.", + }, + IND_JOB_FAILED: { + "Query" : "SELECT * FROM LMI_%(prefix)sInstModification WHERE " + "SourceInstance ISA %(classname)s AND " + "SourceInstance.CIM_ConcreteJob::JobState = 10", + "Description": "Modification of Job State for a " + "Concrete Job to 'Exception'.", + }, + IND_JOB_CHANGED: { + "Query" : "SELECT * FROM LMI_%(prefix)sInstModification WHERE " + "SourceInstance ISA %(classname)s AND " + "SourceInstance.CIM_ConcreteJob::JobState <> " + "PreviousInstance.CIM_ConcreteJob::JobState", + "Description": "Modification of Job State for a ConcreteJob.", + }, + IND_JOB_CREATED: { + "Query" : "SELECT * FROM LMI_%(prefix)sInstCreation WHERE " + "SourceInstance ISA %(classname)s", + "Description": "Creation of a ConcreteJob.", + }, + } + @cmpi_logging.trace_method def __init__(self, name, namespace, indication_manager, timer_manager): """ @@ -701,46 +770,7 @@ class JobManager(object): """ Add all job-related ``IndicationFilters`` to indication manager. """ - filters = { - self.IND_JOB_PERCENT_UPDATED: { - "Query" : "SELECT * FROM CIM_InstModification WHERE " - "SourceInstance ISA %(classname)s AND " - "SourceInstance.CIM_ConcreteJob::PercentComplete <> " - "PreviousInstance.CIM_ConcreteJob::PercentComplete", - "Description" : "Modification of Percentage Complete for a " - "Concrete Job.", - }, - self.IND_JOB_SUCCEEDED: { - "Query" : "SELECT * FROM CIM_InstModification WHERE " - "SourceInstance ISA %(classname)s AND " - "SourceInstance.CIM_ConcreteJob::JobState = 17", - "Description": "Modification of Job State for a " - "Concrete Job to 'Complete'.", - }, - self.IND_JOB_FAILED: { - "Query" : "SELECT * FROM CIM_InstModification WHERE " - "SourceInstance ISA %(classname)s AND " - "SourceInstance.CIM_ConcreteJob::JobState = 10", - "Description": "Modification of Job State for a " - "Concrete Job to 'Exception'.", - }, - self.IND_JOB_CHANGED: { - "Query" : "SELECT * FROM CIM_InstModification WHERE " - "SourceInstance ISA %(classname)s AND " - "SourceInstance.CIM_ConcreteJob::JobState <> " - "PreviousInstance.CIM_ConcreteJob::JobState", - "Description": "Modification of Job State for a ConcreteJob.", - }, - self.IND_JOB_CREATED: { - "Query" : "SELECT * FROM CIM_InstCreation WHERE " - "SourceInstance ISA %(classname)s", - "Description": "Creation of a ConcreteJob.", - }, - } - # add class name - for f in filters.itervalues(): - f['Query'] = f['Query'] % {"classname" : self.job_classname } - self.indication_manager.add_filters(self.job_classname, filters) + register_filters(self.job_classname, self.indication_manager) @cmpi_logging.trace_method def get_providers(self): @@ -1139,7 +1169,8 @@ class LMI_ConcreteJob(CIMProvider2): if job.error is None: errors = [] else: - errors = [job.error, ] + err = job.get_cim_error() + errors = [err, ] out_params = [ pywbem.CIMParameter( name='errors', @@ -1283,9 +1314,10 @@ class LMI_ConcreteJob(CIMProvider2): type='instance', is_array=False) else: + err = job.get_cim_error() error = pywbem.CIMParameter( name='error', - value=job.error, + value=err, type='instance') rval = self.Values.GetError.Success return (rval, [error]) |