)]}'
{"aodh/alarm/evaluator/event.py":[{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"98a948b316ef1dac7859d81fddcb510fd24243b6","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        enabled \u003d {\u0027field\u0027: \u0027enabled\u0027, \u0027value\u0027: True}"},{"line_number":84,"context_line":"        type_event \u003d {\u0027field\u0027: \u0027type\u0027, \u0027value\u0027: \u0027event\u0027}"},{"line_number":85,"context_line":"        project \u003d {\u0027field\u0027: \u0027project_id\u0027, \u0027value\u0027: project_id}"},{"line_number":86,"context_line":"        alarms \u003d self._client.alarms.list(q\u003d[enabled, type_event, project])"},{"line_number":87,"context_line":"        return alarms"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _evaluate_event_alarm(self, event, alarm):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_883f0db3","line":86,"updated":"2015-08-07 14:05:18.000000000","message":"This should be replaced by direct DB access.","commit_id":"f7c74f3eaf8ac644b01050dcd2a2ab8fa1f202df"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"478c9bd78991f3f4fc37e44b3f09ffef319f56b7","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        When the received event met conditions defined in alarm \u0027event_type\u0027"},{"line_number":96,"context_line":"        and \u0027query\u0027, the alarm will be updated to state\u003d\u0027alarm\u0027 (alarmed)."},{"line_number":97,"context_line":"        Note: by this evaluator, the alarm won\u0027t be changed to state\u003d\u0027ok\u0027"},{"line_number":98,"context_line":"        neither state\u003d\u0027insufficient data\u0027."},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        LOG.debug(_(\u0027evaluating event alarm %s\u0027) % alarm.alarm_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_955b9454","line":98,"updated":"2015-08-03 15:25:04.000000000","message":"nit, I think you mean \"nor\" where you\u0027ve got \"neither\".","commit_id":"f7c74f3eaf8ac644b01050dcd2a2ab8fa1f202df"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"98a948b316ef1dac7859d81fddcb510fd24243b6","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        When the received event met conditions defined in alarm \u0027event_type\u0027"},{"line_number":96,"context_line":"        and \u0027query\u0027, the alarm will be updated to state\u003d\u0027alarm\u0027 (alarmed)."},{"line_number":97,"context_line":"        Note: by this evaluator, the alarm won\u0027t be changed to state\u003d\u0027ok\u0027"},{"line_number":98,"context_line":"        neither state\u003d\u0027insufficient data\u0027."},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        LOG.debug(_(\u0027evaluating event alarm %s\u0027) % alarm.alarm_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_08053d0f","line":98,"in_reply_to":"1a4dcd0f_955b9454","updated":"2015-08-07 14:05:18.000000000","message":"Done","commit_id":"f7c74f3eaf8ac644b01050dcd2a2ab8fa1f202df"}],"aodh/evaluator/event.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"eef05ba215bd388d1e5fc5a9d90afc8ba1a8a5a3","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        if event.get(\u0027event_type\u0027) and event.get(\u0027message_id\u0027):"},{"line_number":79,"context_line":"            return True"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        LOG.error(_LE(\u0027Failed to extract event_type from event \u003d %s\u0027), event)"},{"line_number":82,"context_line":"        return False"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_bde500dd","line":81,"updated":"2015-08-16 13:01:02.000000000","message":"Theoretically it\u0027s possible that there was an issue with the \u0027message_id\u0027 as opposed to the \u0027event_type\u0027 here. I think it would be good to mention this in the error message or handle these two cases separately. What do you think?","commit_id":"780592439db19a850d00152df70c8652fb08cc66"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"f1dbb81a62786ca69592bf549d3ba55239425423","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        if event.get(\u0027event_type\u0027) and event.get(\u0027message_id\u0027):"},{"line_number":79,"context_line":"            return True"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        LOG.error(_LE(\u0027Failed to extract event_type from event \u003d %s\u0027), event)"},{"line_number":82,"context_line":"        return False"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_21bb6dc6","line":81,"in_reply_to":"1a4dcd0f_bde500dd","updated":"2015-08-17 13:21:27.000000000","message":"Make sense!","commit_id":"780592439db19a850d00152df70c8652fb08cc66"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e618e53f08f233bfa5ad87857d767cf76cef09ca","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                LOG.debug(\u0027Aborting evaluation of the event.\u0027)"},{"line_number":53,"context_line":"                continue"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"            project \u003d self._project(event)"},{"line_number":56,"context_line":"            alarms \u003d self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":57,"context_line":"                                                   alarm_type\u003d\u0027event\u0027,"},{"line_number":58,"context_line":"                                                   project\u003dproject)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_3eddb814","line":55,"updated":"2015-08-17 21:22:15.000000000","message":"rename to _get_project","commit_id":"3bfadeec4ee8ffddb1b927331b17cecdb65431ba"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"7c591988dfd4a5e64a6f2d7cbc770b4d94975cf7","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                LOG.debug(\u0027Aborting evaluation of the event.\u0027)"},{"line_number":53,"context_line":"                continue"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"            project \u003d self._project(event)"},{"line_number":56,"context_line":"            alarms \u003d self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":57,"context_line":"                                                   alarm_type\u003d\u0027event\u0027,"},{"line_number":58,"context_line":"                                                   project\u003dproject)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_9c796996","line":55,"in_reply_to":"fa1b9901_3eddb814","updated":"2015-08-17 23:20:49.000000000","message":"Done","commit_id":"3bfadeec4ee8ffddb1b927331b17cecdb65431ba"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e618e53f08f233bfa5ad87857d767cf76cef09ca","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                continue"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"            project \u003d self._project(event)"},{"line_number":56,"context_line":"            alarms \u003d self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":57,"context_line":"                                                   alarm_type\u003d\u0027event\u0027,"},{"line_number":58,"context_line":"                                                   project\u003dproject)"},{"line_number":59,"context_line":"            LOG.debug(\u0027Found %(num)d alarms related to the event \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_5e098c94","line":56,"updated":"2015-08-17 21:22:15.000000000","message":"do we want to grab this constantly? this seems like it will flood db with queries.","commit_id":"3bfadeec4ee8ffddb1b927331b17cecdb65431ba"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"7c591988dfd4a5e64a6f2d7cbc770b4d94975cf7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                continue"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"            project \u003d self._project(event)"},{"line_number":56,"context_line":"            alarms \u003d self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":57,"context_line":"                                                   alarm_type\u003d\u0027event\u0027,"},{"line_number":58,"context_line":"                                                   project\u003dproject)"},{"line_number":59,"context_line":"            LOG.debug(\u0027Found %(num)d alarms related to the event \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_1cdb197e","line":56,"in_reply_to":"fa1b9901_5e098c94","updated":"2015-08-17 23:20:49.000000000","message":"No, we should have cache mechanism as we agreed in spec. I will add TODO here.","commit_id":"3bfadeec4ee8ffddb1b927331b17cecdb65431ba"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e618e53f08f233bfa5ad87857d767cf76cef09ca","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            for alarm in alarms:"},{"line_number":64,"context_line":"                try:"},{"line_number":65,"context_line":"                    if self._evaluate_alarm(alarm, event):"},{"line_number":66,"context_line":"                        self._fire_alarm(alarm, event)"},{"line_number":67,"context_line":"                except Exception:"},{"line_number":68,"context_line":"                    LOG.exception(_LE(\u0027Failed to evaluate alarm (id\u003d%(a)s) \u0027"},{"line_number":69,"context_line":"                                      \u0027triggered by event \u003d %(e)s.\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_5e30ac56","line":66,"updated":"2015-08-17 21:22:15.000000000","message":"is there a reason we need this as if clause? can we not let evaluate_alarm call fire_alarm.","commit_id":"3bfadeec4ee8ffddb1b927331b17cecdb65431ba"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"7c591988dfd4a5e64a6f2d7cbc770b4d94975cf7","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            for alarm in alarms:"},{"line_number":64,"context_line":"                try:"},{"line_number":65,"context_line":"                    if self._evaluate_alarm(alarm, event):"},{"line_number":66,"context_line":"                        self._fire_alarm(alarm, event)"},{"line_number":67,"context_line":"                except Exception:"},{"line_number":68,"context_line":"                    LOG.exception(_LE(\u0027Failed to evaluate alarm (id\u003d%(a)s) \u0027"},{"line_number":69,"context_line":"                                      \u0027triggered by event \u003d %(e)s.\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_bc030db8","line":66,"in_reply_to":"fa1b9901_5e30ac56","updated":"2015-08-17 23:20:49.000000000","message":"OK, I will move \u0027fire_alarm()\u0027 into \u0027_evaluate_alarm()\u0027.","commit_id":"3bfadeec4ee8ffddb1b927331b17cecdb65431ba"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e618e53f08f233bfa5ad87857d767cf76cef09ca","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                  \u0027(message_id\u003d%(e)s).\u0027,"},{"line_number":119,"context_line":"                  {\u0027a\u0027: alarm.alarm_id, \u0027e\u0027: event[\u0027message_id\u0027]})"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        if not alarm.repeat_actions and alarm.state \u003d\u003d evaluator.ALARM:"},{"line_number":122,"context_line":"            LOG.debug(\u0027Skip evaluation of the alarm id\u003d%s which have already \u0027"},{"line_number":123,"context_line":"                      \u0027fired.\u0027, alarm.alarm_id)"},{"line_number":124,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_d93e16b8","line":121,"updated":"2015-08-17 21:22:15.000000000","message":"when do we reset state? it seems like once we fire once, the alarm is always in alarm state.","commit_id":"3bfadeec4ee8ffddb1b927331b17cecdb65431ba"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"7c591988dfd4a5e64a6f2d7cbc770b4d94975cf7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                  \u0027(message_id\u003d%(e)s).\u0027,"},{"line_number":119,"context_line":"                  {\u0027a\u0027: alarm.alarm_id, \u0027e\u0027: event[\u0027message_id\u0027]})"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        if not alarm.repeat_actions and alarm.state \u003d\u003d evaluator.ALARM:"},{"line_number":122,"context_line":"            LOG.debug(\u0027Skip evaluation of the alarm id\u003d%s which have already \u0027"},{"line_number":123,"context_line":"                      \u0027fired.\u0027, alarm.alarm_id)"},{"line_number":124,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_dcc12130","line":121,"in_reply_to":"fa1b9901_d93e16b8","updated":"2015-08-17 23:20:49.000000000","message":"Yes, alarm state will be remained in \u0027alarm\u0027 once it fired. Only manual update by a user can change the state.","commit_id":"3bfadeec4ee8ffddb1b927331b17cecdb65431ba"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"199a2bbd84bc7b6aeb51e093f6c1dca350f74227","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                  \u0027(message_id\u003d%(e)s).\u0027,"},{"line_number":119,"context_line":"                  {\u0027a\u0027: alarm.alarm_id, \u0027e\u0027: event[\u0027message_id\u0027]})"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        if not alarm.repeat_actions and alarm.state \u003d\u003d evaluator.ALARM:"},{"line_number":122,"context_line":"            LOG.debug(\u0027Skip evaluation of the alarm id\u003d%s which have already \u0027"},{"line_number":123,"context_line":"                      \u0027fired.\u0027, alarm.alarm_id)"},{"line_number":124,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_7341100b","line":121,"in_reply_to":"fa1b9901_dcc12130","updated":"2015-08-18 09:29:06.000000000","message":"Is there an intention to have this automated or we stick with the traditional alarm handling methods?\n\nWe will need to document this either way.","commit_id":"3bfadeec4ee8ffddb1b927331b17cecdb65431ba"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e618e53f08f233bfa5ad87857d767cf76cef09ca","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        state \u003d evaluator.ALARM"},{"line_number":158,"context_line":"        reason \u003d (_(\u0027Event (message_id\u003d%(message)s) hit the query of alarm \u0027"},{"line_number":159,"context_line":"                    \u0027(id\u003d%(alarm)s)\u0027)"},{"line_number":160,"context_line":"                  % {\u0027message\u0027: event[\u0027message_id\u0027], \u0027alarm\u0027: alarm.alarm_id})"},{"line_number":161,"context_line":"        reason_data \u003d {\u0027type\u0027: \u0027event\u0027, \u0027event\u0027: event}"},{"line_number":162,"context_line":"        self._refresh(alarm, state, reason, reason_data)"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_5e68acf5","line":160,"updated":"2015-08-17 21:22:15.000000000","message":"use \u0027,\u0027 instead of \u0027%\u0027","commit_id":"3bfadeec4ee8ffddb1b927331b17cecdb65431ba"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"7c591988dfd4a5e64a6f2d7cbc770b4d94975cf7","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        state \u003d evaluator.ALARM"},{"line_number":158,"context_line":"        reason \u003d (_(\u0027Event (message_id\u003d%(message)s) hit the query of alarm \u0027"},{"line_number":159,"context_line":"                    \u0027(id\u003d%(alarm)s)\u0027)"},{"line_number":160,"context_line":"                  % {\u0027message\u0027: event[\u0027message_id\u0027], \u0027alarm\u0027: alarm.alarm_id})"},{"line_number":161,"context_line":"        reason_data \u003d {\u0027type\u0027: \u0027event\u0027, \u0027event\u0027: event}"},{"line_number":162,"context_line":"        self._refresh(alarm, state, reason, reason_data)"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_9c3169a5","line":160,"in_reply_to":"fa1b9901_5e68acf5","updated":"2015-08-17 23:20:49.000000000","message":"Done","commit_id":"3bfadeec4ee8ffddb1b927331b17cecdb65431ba"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"8a8fd2819b2dd8234d20b8b33a475fba5b752e5b","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        state \u003d evaluator.ALARM"},{"line_number":158,"context_line":"        reason \u003d (_(\u0027Event (message_id\u003d%(message)s) hit the query of alarm \u0027"},{"line_number":159,"context_line":"                    \u0027(id\u003d%(alarm)s)\u0027)"},{"line_number":160,"context_line":"                  % {\u0027message\u0027: event[\u0027message_id\u0027], \u0027alarm\u0027: alarm.alarm_id})"},{"line_number":161,"context_line":"        reason_data \u003d {\u0027type\u0027: \u0027event\u0027, \u0027event\u0027: event}"},{"line_number":162,"context_line":"        self._refresh(alarm, state, reason, reason_data)"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_3d037475","line":160,"in_reply_to":"fa1b9901_9c3169a5","updated":"2015-08-18 02:50:52.000000000","message":"Wrong. The \u0027reason\u0027 has to be just string as the same as other evaluators. So, I will keep using \u0027%\u0027.\n\nhttps://github.com/openstack/aodh/blob/master/aodh/evaluator/combination.py#L57-L59\n\nhttps://github.com/openstack/aodh/blob/master/aodh/evaluator/threshold.py#L138-L139","commit_id":"3bfadeec4ee8ffddb1b927331b17cecdb65431ba"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"8799529c354c4cb5c0de4748bf8a27a0d98b8604","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \u0027eq\u0027: operator.eq,"},{"line_number":33,"context_line":"    \u0027ne\u0027: operator.ne,"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":"PROJECT_NONE \u003d \u0027\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class EventAlarmEvaluator(evaluator.Evaluator):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_573aa699","line":35,"updated":"2015-08-24 14:36:39.000000000","message":"this is a very strange constant.  it does not seem very useful.","commit_id":"e38ec7e2272e4b3e265289eae4a9e48b8c38b9f6"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"6d83f47aeb886b8e8b3ec7c633d7f42055f4dbd0","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \u0027eq\u0027: operator.eq,"},{"line_number":33,"context_line":"    \u0027ne\u0027: operator.ne,"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":"PROJECT_NONE \u003d \u0027\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class EventAlarmEvaluator(evaluator.Evaluator):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_1f152448","line":35,"in_reply_to":"fa1b9901_573aa699","updated":"2015-08-24 15:47:08.000000000","message":"ok, I will delete it","commit_id":"e38ec7e2272e4b3e265289eae4a9e48b8c38b9f6"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"2fc4b97296ac05f0a5596a0219de165a257cbc7f","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def _validate(event):"},{"line_number":76,"context_line":"        \"\"\"Validate received event has mandatory parameters.\"\"\""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        if not event.get(\u0027event_type\u0027):"},{"line_number":79,"context_line":"            LOG.error(_LE(\u0027Failed to extract event_type from event \u003d %s\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_eeb8d22c","line":76,"updated":"2015-08-24 12:44:09.000000000","message":"Shouldn\u0027t we check that event is not None?","commit_id":"e38ec7e2272e4b3e265289eae4a9e48b8c38b9f6"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"6d83f47aeb886b8e8b3ec7c633d7f42055f4dbd0","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def _validate(event):"},{"line_number":76,"context_line":"        \"\"\"Validate received event has mandatory parameters.\"\"\""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        if not event.get(\u0027event_type\u0027):"},{"line_number":79,"context_line":"            LOG.error(_LE(\u0027Failed to extract event_type from event \u003d %s\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_a22f3b87","line":76,"in_reply_to":"fa1b9901_eeb8d22c","updated":"2015-08-24 15:47:08.000000000","message":"Agree, we cannot grantee in aodh, so I will add the check.","commit_id":"e38ec7e2272e4b3e265289eae4a9e48b8c38b9f6"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"ff35495b361d0f1bf87ae8df8c07ce7b768ac3fc","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    # NOTE(r-mibu): This method won\u0027t be used, but we have to define here in"},{"line_number":165,"context_line":"    # order to overwrite the abstract method in the super class."},{"line_number":166,"context_line":"    def evaluate(self, alarm):"},{"line_number":167,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_76b9f02d","line":167,"updated":"2015-08-24 13:28:30.000000000","message":"I think this is not clean, the alarm evaluator service will load this evaluator for nothing. And the events evaluator\n\nI propose to rename the class Evaluator -\u003e BaseEvaluator and remove all its abc stuffs\n\nCreate a new base class for already existing evaluators with just the needed method:\n\n   @six.add_metaclass(abc.ABCMeta)\n   class Evaluator(BaseEvaluator):\n         @abc.abstractmethod\n         def evaluate(self, alarm):\n             \"\"\"Interface definition. evaluate an alarm\"\"\"\n\nRemove the entry into setup.cfg","commit_id":"e38ec7e2272e4b3e265289eae4a9e48b8c38b9f6"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"6d83f47aeb886b8e8b3ec7c633d7f42055f4dbd0","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    # NOTE(r-mibu): This method won\u0027t be used, but we have to define here in"},{"line_number":165,"context_line":"    # order to overwrite the abstract method in the super class."},{"line_number":166,"context_line":"    def evaluate(self, alarm):"},{"line_number":167,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_5d4ac484","line":167,"in_reply_to":"fa1b9901_76b9f02d","updated":"2015-08-24 15:47:08.000000000","message":"I agree that this is not clean. But it is hard to put new feature running in different process/sequence from existing evaluators. I think we need two base class for periodic evaluation and event-base evaluation eventually.\n\nCan we put this task (improvement in Base class design) in other patch focusing on refactor?","commit_id":"e38ec7e2272e4b3e265289eae4a9e48b8c38b9f6"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"c365812a2ccf53dd667161ce72652f1e1f353acc","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    # NOTE(r-mibu): This method won\u0027t be used, but we have to define here in"},{"line_number":168,"context_line":"    # order to overwrite the abstract method in the super class."},{"line_number":169,"context_line":"    # TODO(r-mibu): Change the base (common) class design for evaluators."},{"line_number":170,"context_line":"    def evaluate(self, alarm):"},{"line_number":171,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_b043026c","line":170,"updated":"2015-08-24 16:53:10.000000000","message":"This TODO is fine too :p","commit_id":"1c529e0c4261ba52544975c43dc54007ea43857b"}]}
