Skip to content
Snippets Groups Projects
Commit 1922d5de authored by Stefano Borini's avatar Stefano Borini
Browse files

Spawning of the KPI evaluator from a trivial MCO

parent a9e2eab2
No related branches found
No related tags found
1 merge request!2Prototype using envisage plugins
import subprocess
import sys
from traits.api import provides, HasStrictTraits from traits.api import provides, HasStrictTraits
from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer
...@@ -5,5 +7,9 @@ from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer ...@@ -5,5 +7,9 @@ from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer
@provides(IMultiCriteriaOptimizer) @provides(IMultiCriteriaOptimizer)
class BasicMultiCriteriaOptimizer(HasStrictTraits): class BasicMultiCriteriaOptimizer(HasStrictTraits):
def run(self, workflow): def run(self, application):
print("Basic multicriteria optimizer in action, {}".format(workflow)) print("Basic multicriteria optimizer in action")
subprocess.check_call([sys.argv[0], "--evaluate",
application.workflow_filepath])
import json import json
from envisage.api import Application from envisage.api import Application
from traits.api import Unicode from traits.api import Unicode, Bool, Instance
from traits.trait_types import List, Bool, Instance
from force_bdss.workspecs.workflow import Workflow from force_bdss.workspecs.workflow import Workflow
class BDSSApplication(Application): class BDSSApplication(Application):
"""Main application for the BDSS.
"""
id = "force_bdss.bdss_application" id = "force_bdss.bdss_application"
#: The path of the workflow file to open
workflow_filepath = Unicode() workflow_filepath = Unicode()
#: Deserialized content of the workflow file.
workflow = Instance(Workflow) workflow = Instance(Workflow)
#: This flags signals to the application not to execute and orchestrate
#: the MCO, but instead to perform a single evaluation under the
#: coordination of the MCO itself. See design notes for more details.
evaluate = Bool() evaluate = Bool()
def _workflow_default(self): def _workflow_default(self):
......
...@@ -8,10 +8,23 @@ from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer ...@@ -8,10 +8,23 @@ from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer
class CoreMCODriver(Plugin): class CoreMCODriver(Plugin):
"""Main plugin that handles the execution of the MCO
or the evaluation.
"""
# Note: we are forced to declare these extensions points here instead
# of the application object, and this is why we have to use this plugin.
# It is a workaround to an envisage bug that does not find the extension
# points if declared on the application.
#: A List of the available Multi Criteria Optimizers.
#: This will be populated by MCO plugins.
multi_criteria_optimizers = ExtensionPoint( multi_criteria_optimizers = ExtensionPoint(
List(IMultiCriteriaOptimizer), List(IMultiCriteriaOptimizer),
id='force_bdss.multi_criteria_optimizers') id='force_bdss.multi_criteria_optimizers')
#: A list of the available Key Performance Indicator calculators.
#: It will be populated by plugins.
key_performance_calculators = ExtensionPoint( key_performance_calculators = ExtensionPoint(
List(IKeyPerformanceCalculator), List(IKeyPerformanceCalculator),
id='force_bdss.key_performance_calculators') id='force_bdss.key_performance_calculators')
...@@ -20,7 +33,7 @@ class CoreMCODriver(Plugin): ...@@ -20,7 +33,7 @@ class CoreMCODriver(Plugin):
def application_started(self): def application_started(self):
if self.application.evaluate: if self.application.evaluate:
for kpi in self.key_performance_calculators: for kpi in self.key_performance_calculators:
kpi.run(self.application.workflow) kpi.run(self.application)
else: else:
for mco in self.multi_criteria_optimizers: for mco in self.multi_criteria_optimizers:
mco.run(self.application.workflow) mco.run(self.application)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment