diff --git a/heat/engine/api.py b/heat/engine/api.py index 2077f298fc..8b7c77a802 100644 --- a/heat/engine/api.py +++ b/heat/engine/api.py @@ -463,7 +463,7 @@ def format_watch(watch): return result -def format_watch_data(wd): +def format_watch_data(wd, rule_names): # Demangle DB format data into something more easily used in the API # We are expecting a dict with exactly two items, Namespace and @@ -477,7 +477,7 @@ def format_watch_data(wd): return result = { - rpc_api.WATCH_DATA_ALARM: wd.watch_rule.name, + rpc_api.WATCH_DATA_ALARM: rule_names.get(wd.watch_rule_id), rpc_api.WATCH_DATA_METRIC: metric_name, rpc_api.WATCH_DATA_TIME: wd.created_at.isoformat(), rpc_api.WATCH_DATA_NAMESPACE: namespace, diff --git a/heat/engine/service.py b/heat/engine/service.py index 141c7dee32..f6932285d4 100644 --- a/heat/engine/service.py +++ b/heat/engine/service.py @@ -2063,11 +2063,14 @@ class EngineService(service.Service): try: wds = watch_data.WatchData.get_all(cnxt) + rule_names = { + r.id: r.name for r in watch_rule.WatchRule.get_all(cnxt) + } except Exception as ex: LOG.warning(_LW('show_metric (all) db error %s'), ex) return - result = [api.format_watch_data(w) for w in wds] + result = [api.format_watch_data(w, rule_names) for w in wds] return result @context.request_context diff --git a/heat/objects/watch_data.py b/heat/objects/watch_data.py index ad4254cf14..97f600b5d9 100644 --- a/heat/objects/watch_data.py +++ b/heat/objects/watch_data.py @@ -31,22 +31,14 @@ class WatchData( 'id': fields.IntegerField(), 'data': heat_fields.JsonField(nullable=True), 'watch_rule_id': fields.StringField(), - 'watch_rule': fields.ObjectField('WatchRule'), 'created_at': fields.DateTimeField(read_only=True), 'updated_at': fields.DateTimeField(nullable=True), } @staticmethod def _from_db_object(context, rule, db_data): - from heat.objects import watch_rule for field in rule.fields: - if field == 'watch_rule': - rule[field] = watch_rule.WatchRule._from_db_object( - context, - watch_rule.WatchRule(), - db_data['watch_rule']) - else: - rule[field] = db_data[field] + rule[field] = db_data[field] rule._context = context rule.obj_reset_changes() return rule diff --git a/heat/objects/watch_rule.py b/heat/objects/watch_rule.py index 5545131fbb..cec487b355 100644 --- a/heat/objects/watch_rule.py +++ b/heat/objects/watch_rule.py @@ -20,7 +20,6 @@ from oslo_versionedobjects import fields from heat.db import api as db_api from heat.objects import base as heat_base from heat.objects import fields as heat_fields -from heat.objects import stack from heat.objects import watch_data @@ -36,7 +35,6 @@ class WatchRule( 'state': fields.StringField(nullable=True), 'last_evaluated': fields.DateTimeField(nullable=True), 'stack_id': fields.StringField(), - 'stack': fields.ObjectField(stack.Stack), 'watch_data': fields.ListOfObjectsField(watch_data.WatchData), 'created_at': fields.DateTimeField(read_only=True), 'updated_at': fields.DateTimeField(nullable=True), @@ -45,10 +43,7 @@ class WatchRule( @staticmethod def _from_db_object(context, rule, db_rule): for field in rule.fields: - if field == 'stack': - rule[field] = stack.Stack._from_db_object( - context, stack.Stack(), db_rule[field]) - elif field == 'watch_data': + if field == 'watch_data': rule[field] = watch_data.WatchData.get_all_by_watch_rule_id( context, db_rule['id']) else: