Esempio n. 1
0
    def load(cls, context, watch_name=None, watch=None):
        """Load the watchrule object.

        Loading object either by name or via an existing DB object.
        """
        if watch is None:
            try:
                watch = watch_rule_objects.WatchRule.get_by_name(
                    context, watch_name)
            except Exception as ex:
                LOG.warn(
                    _LW('WatchRule.load (%(watch_name)s) db error '
                        '%(ex)s'), {
                            'watch_name': watch_name,
                            'ex': ex
                        })
        if watch is None:
            raise exception.WatchRuleNotFound(watch_name=watch_name)
        else:
            return cls(context=context,
                       watch_name=watch.name,
                       rule=watch.rule,
                       stack_id=watch.stack_id,
                       state=watch.state,
                       wid=watch.id,
                       watch_data=watch.watch_data,
                       last_evaluated=watch.last_evaluated)
Esempio n. 2
0
 def load(cls, context, watch_name=None, watch=None):
     '''
     Load the watchrule object, either by name or via an existing DB object
     '''
     if watch is None:
         try:
             watch = db_api.watch_rule_get_by_name(context, watch_name)
         except Exception as ex:
             logger.warn(
                 _('WatchRule.load (%(watch_name)s) db error '
                   '%(ex)s') % {
                       'watch_name': watch_name,
                       'ex': str(ex)
                   })
     if watch is None:
         raise exception.WatchRuleNotFound(watch_name=watch_name)
     else:
         return cls(context=context,
                    watch_name=watch.name,
                    rule=watch.rule,
                    stack_id=watch.stack_id,
                    state=watch.state,
                    wid=watch.id,
                    watch_data=watch.watch_data,
                    last_evaluated=watch.last_evaluated)
Esempio n. 3
0
    def test_resource_delete_notfound(self):
        # if a resource is not found, handle_delete() should not raise
        # an exception.
        s = self.parse_stack()
        self.assertIsNone(scheduler.TaskRunner(s['test_me'].create)())
        res_name = self.stack['test_me'].physical_resource_name()
        self.wr = watchrule.WatchRule.load(self.ctx, watch_name=res_name)

        with patch.object(watchrule.WatchRule, 'destroy') as bad_destroy:
            watch_exc = exception.WatchRuleNotFound(watch_name='test')
            bad_destroy.side_effect = watch_exc
            self.assertIsNone(scheduler.TaskRunner(s['test_me'].delete)())
Esempio n. 4
0
    def test_delete_no_watchrule(self):
        t = template_format.parse(alarm_template)

        self.stack = self.create_stack(template=json.dumps(t))
        rsrc = self.stack['MEMAlarmHigh']

        wr = mock.MagicMock()
        self.patchobject(watchrule.WatchRule, 'load',
                         side_effect=[exception.WatchRuleNotFound(
                             watch_name='test')])
        wr.destroy.return_value = None

        self.patchobject(ceilometer.CeilometerClientPlugin, 'client',
                         return_value=self.fa)
        self.patchobject(self.fa.alarms, 'delete')
        rsrc.resource_id = '12345'

        self.assertEqual('12345', rsrc.handle_delete())
        self.assertEqual(0, wr.destroy.call_count)
        # check that super method has been called and execute deleting
        self.assertEqual(1, self.fa.alarms.delete.call_count)
Esempio n. 5
0
    def create_watch_data(self, cnxt, watch_name, stats_data):
        '''
        This could be used by CloudWatch and WaitConditions
        and treat HA service events like any other CloudWatch.
        '''
        def get_matching_watches():
            if watch_name:
                yield watchrule.WatchRule.load(cnxt, watch_name)
            else:
                for wr in db_api.watch_rule_get_all(cnxt):
                    if watchrule.rule_can_use_sample(wr, stats_data):
                        yield watchrule.WatchRule.load(cnxt, watch=wr)

        rule_run = False
        for rule in get_matching_watches():
            rule.create_watch_data(stats_data)
            rule_run = True

        if not rule_run:
            if watch_name is None:
                watch_name = 'Unknown'
            raise exception.WatchRuleNotFound(watch_name=watch_name)

        return stats_data