Remove ActionReporters

We no longer need action reporters that we load a new instance
of each reporter for each pipeline/action couple.

Change-Id: I3b6c6f9fd5402786dbc9916e1d18df34e348a7bd
diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py
index 5168588..4f52911 100755
--- a/tests/test_scheduler.py
+++ b/tests/test_scheduler.py
@@ -3356,23 +3356,23 @@
             len(self.sched.layout.pipelines['gate'].merge_failure_actions), 2)
 
         self.assertTrue(isinstance(
-            self.sched.layout.pipelines['check'].merge_failure_actions[0].
-            reporter, zuul.reporter.gerrit.GerritReporter))
+            self.sched.layout.pipelines['check'].merge_failure_actions[0],
+            zuul.reporter.gerrit.GerritReporter))
 
         self.assertTrue(
             (
                 isinstance(self.sched.layout.pipelines['gate'].
-                           merge_failure_actions[0].reporter,
+                           merge_failure_actions[0],
                            zuul.reporter.smtp.SMTPReporter) and
                 isinstance(self.sched.layout.pipelines['gate'].
-                           merge_failure_actions[1].reporter,
+                           merge_failure_actions[1],
                            zuul.reporter.gerrit.GerritReporter)
             ) or (
                 isinstance(self.sched.layout.pipelines['gate'].
-                           merge_failure_actions[0].reporter,
+                           merge_failure_actions[0],
                            zuul.reporter.gerrit.GerritReporter) and
                 isinstance(self.sched.layout.pipelines['gate'].
-                           merge_failure_actions[1].reporter,
+                           merge_failure_actions[1],
                            zuul.reporter.smtp.SMTPReporter)
             )
         )
diff --git a/zuul/model.py b/zuul/model.py
index f742d71..54f776c 100644
--- a/zuul/model.py
+++ b/zuul/model.py
@@ -292,27 +292,6 @@
         return j_pipeline
 
 
-class ActionReporter(object):
-    """An ActionReporter has a reporter and its configured parameters"""
-
-    def __repr__(self):
-        return '<ActionReporter %s>' % (self.reporter)
-
-    def __init__(self, reporter):
-        self.reporter = reporter
-
-    def report(self, source, change, message):
-        """Sends the built message off to the configured reporter.
-        Takes the change and message and adds the configured parameters.
-        """
-        return self.reporter.report(source, change, message)
-
-    def getSubmitAllowNeeds(self):
-        """Gets the submit allow needs from the reporter based off the
-        parameters."""
-        return self.reporter.getSubmitAllowNeeds()
-
-
 class ChangeQueue(object):
     """DependentPipelines have multiple parallel queues shared by
     different projects; this is one of them.  For instance, there may
diff --git a/zuul/scheduler.py b/zuul/scheduler.py
index 0836ab4..91bcf13 100644
--- a/zuul/scheduler.py
+++ b/zuul/scheduler.py
@@ -29,7 +29,7 @@
 
 import layoutvalidator
 import model
-from model import ActionReporter, Pipeline, Project, ChangeQueue
+from model import Pipeline, Project, ChangeQueue
 from model import ChangeishFilter, NullChange
 from zuul import change_matcher, exceptions
 from zuul import version as zuul_version
@@ -202,6 +202,15 @@
         self.zuul_version = zuul_version.version_info.release_string()
         self.last_reconfigured = None
 
+        # A set of reporter configuration keys to action mapping
+        self._reporter_actions = {
+            'start': 'start_actions',
+            'success': 'success_actions',
+            'failure': 'failure_actions',
+            'merge-failure': 'merge_failure_actions',
+            'disabled': 'disabled_actions',
+        }
+
     def stop(self):
         self._stopped = True
         self._unloadDrivers()
@@ -256,10 +265,9 @@
             trigger.stop()
         for pipeline in self.layout.pipelines.values():
             pipeline.source.stop()
-            for action in ['start_actions', 'success_actions',
-                           'failure_actions', 'merge_failure_actions']:
-                for action_reporter in pipeline.__getattribute__(action):
-                    action_reporter.reporter.stop()
+            for action in self._reporter_actions.values():
+                for reporter in pipeline.__getattribute__(action):
+                    reporter.stop()
 
     def _getDriver(self, dtype, connection_name, driver_config={}):
         # Instantiate a driver such as a trigger, source or reporter
@@ -359,26 +367,19 @@
             pipeline.ignore_dependencies = conf_pipeline.get(
                 'ignore-dependencies', False)
 
-            action_reporters = {}
-            for action in ['start', 'success', 'failure', 'merge-failure',
-                           'disabled']:
-                action_reporters[action] = []
-                if conf_pipeline.get(action):
+            for conf_key, action in self._reporter_actions.items():
+                reporter_set = []
+                if conf_pipeline.get(conf_key):
                     for reporter_name, params \
-                        in conf_pipeline.get(action).items():
+                        in conf_pipeline.get(conf_key).items():
                         reporter = self._getReporterDriver(reporter_name,
                                                            params)
-                        action_reporters[action].append(ActionReporter(
-                            reporter))
-            pipeline.start_actions = action_reporters['start']
-            pipeline.success_actions = action_reporters['success']
-            pipeline.failure_actions = action_reporters['failure']
-            pipeline.disabled_actions = action_reporters['disabled']
-            if len(action_reporters['merge-failure']) > 0:
-                pipeline.merge_failure_actions = \
-                    action_reporters['merge-failure']
-            else:
-                pipeline.merge_failure_actions = action_reporters['failure']
+                        reporter_set.append(reporter)
+                setattr(pipeline, action, reporter_set)
+
+            # If merge-failure actions aren't explicit, use the failure actions
+            if not pipeline.merge_failure_actions:
+                pipeline.merge_failure_actions = pipeline.failure_actions
 
             pipeline.disable_at = conf_pipeline.get(
                 'disable-after-consecutive-failures', None)
@@ -774,10 +775,9 @@
                 trigger.postConfig()
             for pipeline in self.layout.pipelines.values():
                 pipeline.source.postConfig()
-                for action in ['start_actions', 'success_actions',
-                               'failure_actions', 'merge_failure_actions']:
-                    for action_reporter in pipeline.__getattribute__(action):
-                        action_reporter.reporter.postConfig()
+                for action in self._reporter_actions.values():
+                    for reporter in pipeline.__getattribute__(action):
+                        reporter.postConfig()
             if statsd:
                 try:
                     for pipeline in self.layout.pipelines.values():
@@ -1177,8 +1177,8 @@
         """
         report_errors = []
         if len(action_reporters) > 0:
-            for action_reporter in action_reporters:
-                ret = action_reporter.report(source, change, message)
+            for reporter in action_reporters:
+                ret = reporter.report(source, change, message)
                 if ret:
                     report_errors.append(ret)
             if len(report_errors) == 0: