)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7ee452bc5664ff3376ff778300c6f02a1d47a78","unresolved":false,"context_lines":[{"line_number":13,"context_line":"ceilometer alarm-notification-create"},{"line_number":14,"context_line":"    --name network-alarm"},{"line_number":15,"context_line":"    --notification-type \"network.*\""},{"line_number":16,"context_line":"    -q \"network.name\u003dexample;age\u003c5\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"this will create an alarm, when a notification type matches"},{"line_number":19,"context_line":"network.* and the payload of the notification with network.name"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAAUX%2F%2FsTs%3D","line":16,"updated":"2014-02-11 13:56:12.000000000","message":"Better to give an example here that illustrates the raw API, as opposed to the CLI usage.\n\ne.g.\n\n  POST /v2/alarms\n  {\"type\": \"notification\", ...}","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"88d16af702056c8c2d7e952d4f3e79d2378c1125","unresolved":false,"context_lines":[{"line_number":20,"context_line":"equals word \"example\", and the age less than 5, an alarm will"},{"line_number":21,"context_line":"be triggered."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I3493ad23640e9ecac40b5c6a8b6cfb1eedb8b7ab"},{"line_number":24,"context_line":"bp: https://blueprints.launchpad.net/ceilometer/+spec/alarm-on-notification"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"AAAAUX%2F%2B37c%3D","line":23,"updated":"2014-02-18 14:44:29.000000000","message":"Please change to Implements bp alarm-on-notification . It will display the change on bp\u0027s whiteboard","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"928e7430b1c545799c5c5b44b84dc36c8ffb37d5","unresolved":false,"context_lines":[{"line_number":20,"context_line":"equals word \"example\", and the age less than 5, an alarm will"},{"line_number":21,"context_line":"be triggered."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I3493ad23640e9ecac40b5c6a8b6cfb1eedb8b7ab"},{"line_number":24,"context_line":"bp: https://blueprints.launchpad.net/ceilometer/+spec/alarm-on-notification"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"AAAAUX%2F%2B3HA%3D","line":23,"in_reply_to":"AAAAUX%2F%2B37c%3D","updated":"2014-02-25 12:57:47.000000000","message":"the problem with that is when the blue print gets completed. the link will\npoint to nowhere. You may want to try a link after BP has been completed.","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9de9541455280a3981c887ff03c9d8424483fbf2","unresolved":false,"context_lines":[{"line_number":51,"context_line":"since the trigger time."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Change-Id: I3493ad23640e9ecac40b5c6a8b6cfb1eedb8b7ab"},{"line_number":54,"context_line":"bp: https://blueprints.launchpad.net/ceilometer/+spec/alarm-on-notification"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"AAAAVX%2F%2Fv7A%3D","line":54,"updated":"2014-02-28 15:36:26.000000000","message":"This is not in the right format.","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"4717988c67500441e512fec838fdf752074ffc51","unresolved":false,"context_lines":[{"line_number":51,"context_line":"since the trigger time."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Change-Id: I3493ad23640e9ecac40b5c6a8b6cfb1eedb8b7ab"},{"line_number":54,"context_line":"bp: https://blueprints.launchpad.net/ceilometer/+spec/alarm-on-notification"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"AAAAVX%2F%2Fvr4%3D","line":54,"in_reply_to":"AAAAVX%2F%2Fv7A%3D","updated":"2014-02-28 16:02:08.000000000","message":"If you do not use this, when the BP eventually marked completed, the link\nwill point to nowhere. use the hard link, it will always work.","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"9b3b10c055fad55038e4aeeba4f9f15eaca5945f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"since the trigger time."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Change-Id: I3493ad23640e9ecac40b5c6a8b6cfb1eedb8b7ab"},{"line_number":54,"context_line":"bp: https://blueprints.launchpad.net/ceilometer/+spec/alarm-on-notification"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"AAAAVX%2F%2FvTc%3D","line":54,"in_reply_to":"AAAAVX%2F%2Fvn4%3D","updated":"2014-02-28 16:49:54.000000000","message":"OK","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"cc00acff227c18330cba626164b133e06b0cfc00","unresolved":false,"context_lines":[{"line_number":51,"context_line":"since the trigger time."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Change-Id: I3493ad23640e9ecac40b5c6a8b6cfb1eedb8b7ab"},{"line_number":54,"context_line":"bp: https://blueprints.launchpad.net/ceilometer/+spec/alarm-on-notification"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"AAAAVX%2F%2Fvn4%3D","line":54,"in_reply_to":"AAAAVX%2F%2Fvr4%3D","updated":"2014-02-28 16:07:59.000000000","message":"No, the bp will not be marked complete, and Jenkins will update the whiteboard. Please do change the format to the correct one which is something like:\n\nBlueprint: alarm-on-notification","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"}],"ceilometer/alarm/evaluator/notification.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7ee452bc5664ff3376ff778300c6f02a1d47a78","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    \u0027lt\u0027: operator.lt,"},{"line_number":45,"context_line":"    \u0027gt\u0027: operator.gt,"},{"line_number":46,"context_line":"    \u0027ge\u0027: operator.ge,"},{"line_number":47,"context_line":"}"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"TYPE_CONVERTERS \u003d {\u0027integer\u0027: int,"},{"line_number":50,"context_line":"                   \u0027float\u0027: float,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FsS8%3D","line":47,"updated":"2014-02-11 13:56:12.000000000","message":"These comparators are already defined in ceilometer/alarm/evaluator/threshold.py, maybe promote to ceilometer/alarm/evaluator/__init__.py to avoid repetition?\n\nAlso, is the duplication between COMPARATORS.eq|ne and QUERY_COMPARATORS.eq|ne really needed?","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"3e3a1d0f93dfb06ab3ec45e904106de147cfbaa6","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    \u0027lt\u0027: operator.lt,"},{"line_number":45,"context_line":"    \u0027gt\u0027: operator.gt,"},{"line_number":46,"context_line":"    \u0027ge\u0027: operator.ge,"},{"line_number":47,"context_line":"}"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"TYPE_CONVERTERS \u003d {\u0027integer\u0027: int,"},{"line_number":50,"context_line":"                   \u0027float\u0027: float,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FOZ0%3D","line":47,"in_reply_to":"AAAAUX%2F%2FsS8%3D","updated":"2014-02-17 14:05:32.000000000","message":"moved as suggested.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7ee452bc5664ff3376ff778300c6f02a1d47a78","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                  \u0027notification matching the defined condition for alarm \u0027"},{"line_number":116,"context_line":"                  \u0027 %(alarm_name)s\u0027) %"},{"line_number":117,"context_line":"                {\u0027state\u0027: state, \u0027old_state\u0027: alarm.state,"},{"line_number":118,"context_line":"                 \u0027alarm_name\u0027: alarm.name})"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    @staticmethod"},{"line_number":121,"context_line":"    def _checkquery(query_conditions, notification):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FsSU%3D","line":118,"updated":"2014-02-11 13:56:12.000000000","message":"Should more information about the matching notification be included in the reason?\n\ne.g. at least the event type?","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"79fe7f3b14eb64e44c8d7b12e0eec45e7f8d6b53","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                  \u0027notification matching the defined condition for alarm \u0027"},{"line_number":116,"context_line":"                  \u0027 %(alarm_name)s\u0027) %"},{"line_number":117,"context_line":"                {\u0027state\u0027: state, \u0027old_state\u0027: alarm.state,"},{"line_number":118,"context_line":"                 \u0027alarm_name\u0027: alarm.name})"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    @staticmethod"},{"line_number":121,"context_line":"    def _checkquery(query_conditions, notification):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2Foac%3D","line":118,"in_reply_to":"AAAAUX%2F%2FsSU%3D","updated":"2014-02-11 21:49:15.000000000","message":"Done","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7ee452bc5664ff3376ff778300c6f02a1d47a78","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    def _sufficient(self, alarm, notification):"},{"line_number":145,"context_line":"        \"\"\"Ensure there is sufficient data for evaluation,"},{"line_number":146,"context_line":"           transitioning to unknown otherwise."},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        op \u003d COMPARATORS[alarm.rule[\u0027comparison_operator\u0027]]"},{"line_number":149,"context_line":"        if op(fnmatch.fnmatch(notification[\u0027event_type\u0027],"},{"line_number":150,"context_line":"                              alarm.rule[\u0027notification_type\u0027]), True):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FsHU%3D","line":147,"updated":"2014-02-11 13:56:12.000000000","message":"The purpose of this method in the threshold evaluator is to manage the transition to the insufficient data state in the case of there being fewer datapoints than quorum to make a state determination.\n\nI don\u0027t see the relevance of sufficiency to the logic below.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a0f789d89c1656d8d0ff0f24d110826b244beebd","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    def _sufficient(self, alarm, notification):"},{"line_number":145,"context_line":"        \"\"\"Ensure there is sufficient data for evaluation,"},{"line_number":146,"context_line":"           transitioning to unknown otherwise."},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        op \u003d COMPARATORS[alarm.rule[\u0027comparison_operator\u0027]]"},{"line_number":149,"context_line":"        if op(fnmatch.fnmatch(notification[\u0027event_type\u0027],"},{"line_number":150,"context_line":"                              alarm.rule[\u0027notification_type\u0027]), True):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2Fjhw%3D","line":147,"in_reply_to":"AAAAUX%2F%2FoZc%3D","updated":"2014-02-12 11:54:05.000000000","message":"OK, so using _sufficient as the method name and the docstr copied from the threshold evaluator is probably not a good idea in that case, as the name confuses matters and the docstring is plain wrong.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"79fe7f3b14eb64e44c8d7b12e0eec45e7f8d6b53","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    def _sufficient(self, alarm, notification):"},{"line_number":145,"context_line":"        \"\"\"Ensure there is sufficient data for evaluation,"},{"line_number":146,"context_line":"           transitioning to unknown otherwise."},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        op \u003d COMPARATORS[alarm.rule[\u0027comparison_operator\u0027]]"},{"line_number":149,"context_line":"        if op(fnmatch.fnmatch(notification[\u0027event_type\u0027],"},{"line_number":150,"context_line":"                              alarm.rule[\u0027notification_type\u0027]), True):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FoZc%3D","line":147,"in_reply_to":"AAAAUX%2F%2FsHU%3D","updated":"2014-02-11 21:49:15.000000000","message":"the method is to use to check if the given notification matches defined\nalarm condition.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7ee452bc5664ff3376ff778300c6f02a1d47a78","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def evaluate(self, alarm, notification):"},{"line_number":166,"context_line":"        if self._sufficient(alarm, notification):"},{"line_number":167,"context_line":"            self._transition(alarm, evaluator.ALARM)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FsFQ%3D","line":167,"updated":"2014-02-11 13:56:12.000000000","message":"I don\u0027t understand how the alarm would ever transition back to the OK state?\n\nIs it expected that the alarm rule query always contains a timestamp (or \"age\") constraint?\n\nWould it make more sense to build in a well-defined concept of an evaluation time window (analogous to the threshold evaluator\u0027s periods*eval_periods)?","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"7c666003629669f96f80f66ecf538ee34415e5f1","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def evaluate(self, alarm, notification):"},{"line_number":166,"context_line":"        if self._sufficient(alarm, notification):"},{"line_number":167,"context_line":"            self._transition(alarm, evaluator.ALARM)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FPug%3D","line":167,"in_reply_to":"AAAAUX%2F%2Fdm0%3D","updated":"2014-02-14 15:16:28.000000000","message":"The use case I think that this BP is trying to address is this.\n\nWhen a message comes, something happens. These messages like a command. For example, Heat sends a message based on its judgement that\na new set of machines should be created. That message will be very specific,\nthe action (in this case creating a set of machines) has to be carried out. if\nthe second notification comes, then it will have to do this again, I am not\nreally sure the time has to be required. Seems to me that you are second\nguessing what the notification means.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":9684,"name":"Jia Dong","email":"joey5566@yeah.net","username":"joey5678"},"change_message_id":"873e4fc8da794c596e029286d163a82ab1aaed88","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def evaluate(self, alarm, notification):"},{"line_number":166,"context_line":"        if self._sufficient(alarm, notification):"},{"line_number":167,"context_line":"            self._transition(alarm, evaluator.ALARM)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2Fdm0%3D","line":167,"in_reply_to":"AAAAUX%2F%2FjhQ%3D","updated":"2014-02-13 01:43:15.000000000","message":"I agree with Eoghan.\nI think in notification case also need a time parameter. \nwhen alarm state is changed to ALARM and during this time no notification occurs, the state should be reset; if occurs, re-timing.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a0f789d89c1656d8d0ff0f24d110826b244beebd","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def evaluate(self, alarm, notification):"},{"line_number":166,"context_line":"        if self._sufficient(alarm, notification):"},{"line_number":167,"context_line":"            self._transition(alarm, evaluator.ALARM)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FjhQ%3D","line":167,"in_reply_to":"AAAAUX%2F%2FoX4%3D","updated":"2014-02-12 11:54:05.000000000","message":"I think you did misunderstand, the notifier does not reset the alarm state.\n\nIn the threshold case, the state is reset by the alarm evaluator if and when the observed data trend goes back inside the threshold.\n\nIn the combination case, the state is reset by the alarm evaluator if and when the consistent sub-alarms are themselves reset.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"79fe7f3b14eb64e44c8d7b12e0eec45e7f8d6b53","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def evaluate(self, alarm, notification):"},{"line_number":166,"context_line":"        if self._sufficient(alarm, notification):"},{"line_number":167,"context_line":"            self._transition(alarm, evaluator.ALARM)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FoX4%3D","line":167,"in_reply_to":"AAAAUX%2F%2FsFQ%3D","updated":"2014-02-11 21:49:15.000000000","message":"I was expecting the notifier to reset the state to OK state. So the alarm\nstate basically are Insufficient data, alarm, OK, insufficient data is like the\ninitial state, once the condition met, it changes to alarm, the notifier should\nchange the state to OK after notifier action occurs. Unless, I misunderstood\nhow notifier works.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"88d16af702056c8c2d7e952d4f3e79d2378c1125","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                    converted_value \u003d ast.literal_eval(query[\u0027value\u0027])"},{"line_number":66,"context_line":"                except (ValueError, SyntaxError):"},{"line_number":67,"context_line":"                    msg \u003d _(\u0027Failed to convert the query value %s\u0027"},{"line_number":68,"context_line":"                            \u0027 automatically\u0027) % (query[\u0027value\u0027])"},{"line_number":69,"context_line":"                    LOG.debug(msg)"},{"line_number":70,"context_line":"            else:"},{"line_number":71,"context_line":"                if type not in NotificationEvaluator._supported_types:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUX%2F%2B3zI%3D","line":68,"updated":"2014-02-18 14:44:29.000000000","message":"Is it enough just to debug error message? I think we should change find_error to True at least","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"928e7430b1c545799c5c5b44b84dc36c8ffb37d5","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                    converted_value \u003d ast.literal_eval(query[\u0027value\u0027])"},{"line_number":66,"context_line":"                except (ValueError, SyntaxError):"},{"line_number":67,"context_line":"                    msg \u003d _(\u0027Failed to convert the query value %s\u0027"},{"line_number":68,"context_line":"                            \u0027 automatically\u0027) % (query[\u0027value\u0027])"},{"line_number":69,"context_line":"                    LOG.debug(msg)"},{"line_number":70,"context_line":"            else:"},{"line_number":71,"context_line":"                if type not in NotificationEvaluator._supported_types:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUX%2F%2B3GY%3D","line":68,"in_reply_to":"AAAAUX%2F%2B3zI%3D","updated":"2014-02-25 12:57:47.000000000","message":"Done","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4a9a03bb7fd5a1eabb0b0f8eb33a5689ca4b2699","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                if state !\u003d evaluator.ALARM:"},{"line_number":161,"context_line":"                    alarm.state_timestamp \u003d now"},{"line_number":162,"context_line":"                    need_transit \u003d True"},{"line_number":163,"context_line":"                    state \u003d evaluator.ALARM"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return need_transit, state"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAVX%2F%2Ft9I%3D","line":163,"updated":"2014-02-28 20:39:52.000000000","message":"What about the case where reset time has elapsed *and* the new notification matches the alarm condition?\n\nIn that case line 148 set the state \u003d evaluator.OK, so then the conditional in line 160 evaluates to true.\n\nSo I think we end with a spurious state transition or ALARM-\u003eALARM reported if I understand correctly.\n\nWhereas instead only the alarm state_timestamp should be updated.","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"f82e7d9a9c99a1d19ee26654d3857be91dd6eff0","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                if state !\u003d evaluator.ALARM:"},{"line_number":161,"context_line":"                    alarm.state_timestamp \u003d now"},{"line_number":162,"context_line":"                    need_transit \u003d True"},{"line_number":163,"context_line":"                    state \u003d evaluator.ALARM"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return need_transit, state"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAVn%2F%2F6i0%3D","line":163,"in_reply_to":"AAAAVX%2F%2Ft9I%3D","updated":"2014-03-03 13:23:19.000000000","message":"Correct. if time passes and any matching notification will cause another\nalarm to be triggered, this is expected. state may not change, but timestamp\nshould have been changed.","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"}],"ceilometer/alarm/service.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7ee452bc5664ff3376ff778300c6f02a1d47a78","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        pass"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class AlarmNotificationService(AlarmService):"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    EXTENSIONS_NAMESPACE \u003d \"ceilometer.alarm.notification.evaluator\""},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FsLI%3D","line":118,"updated":"2014-02-11 13:56:12.000000000","message":"Hmmm, seems wrong to term this a \"service\", given that the real service wrapping this logic is the notification agent.\n\n(whereas the other alarm evaluation services are \"real\" standalone services)","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"79fe7f3b14eb64e44c8d7b12e0eec45e7f8d6b53","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        pass"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class AlarmNotificationService(AlarmService):"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    EXTENSIONS_NAMESPACE \u003d \"ceilometer.alarm.notification.evaluator\""},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FoWg%3D","line":118,"in_reply_to":"AAAAUX%2F%2FsLI%3D","updated":"2014-02-11 21:49:15.000000000","message":"It is sort of acting like a service, also it inherits AlarmService. I am open\nfor suggestions though, can change to something else.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7ee452bc5664ff3376ff778300c6f02a1d47a78","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def _assigned_alarms(self):"},{"line_number":139,"context_line":"        alarms \u003d self._client.alarms.list(q\u003d[{\u0027field\u0027: \u0027enabled\u0027,"},{"line_number":140,"context_line":"                                              \u0027value\u0027: True}])"},{"line_number":141,"context_line":"        return filter(lambda x: x.type \u003d\u003d \u0027notification\u0027, alarms)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FsKU%3D","line":140,"updated":"2014-02-11 13:56:12.000000000","message":"Couldn\u0027t {\u0027field\u0027: \u0027type\u0027,\u0027value\u0027: \u0027notification\u0027} be added to the query constraints instead of grabbing *all* alarms, then post-filtering?","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a0f789d89c1656d8d0ff0f24d110826b244beebd","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def _assigned_alarms(self):"},{"line_number":139,"context_line":"        alarms \u003d self._client.alarms.list(q\u003d[{\u0027field\u0027: \u0027enabled\u0027,"},{"line_number":140,"context_line":"                                              \u0027value\u0027: True}])"},{"line_number":141,"context_line":"        return filter(lambda x: x.type \u003d\u003d \u0027notification\u0027, alarms)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2Fjgk%3D","line":140,"in_reply_to":"AAAAUX%2F%2FoXo%3D","updated":"2014-02-12 11:54:05.000000000","message":"Is the complex query needed in this case?\n\nI could see that it would be for filtering type\u003d\u003dcombination OR type\u003d\u003dthreshold, but not for type\u003d\u003dnotification, or?","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"79fe7f3b14eb64e44c8d7b12e0eec45e7f8d6b53","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def _assigned_alarms(self):"},{"line_number":139,"context_line":"        alarms \u003d self._client.alarms.list(q\u003d[{\u0027field\u0027: \u0027enabled\u0027,"},{"line_number":140,"context_line":"                                              \u0027value\u0027: True}])"},{"line_number":141,"context_line":"        return filter(lambda x: x.type \u003d\u003d \u0027notification\u0027, alarms)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FoXo%3D","line":140,"in_reply_to":"AAAAUX%2F%2FsKU%3D","updated":"2014-02-11 21:49:15.000000000","message":"Yes, it could, waiting for the complex query patch set to land. then this\ncan be changed.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7ee452bc5664ff3376ff778300c6f02a1d47a78","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        alarms \u003d self._client.alarms.list(q\u003d[{\u0027field\u0027: \u0027enabled\u0027,"},{"line_number":164,"context_line":"                                              \u0027value\u0027: True}])"},{"line_number":165,"context_line":"        return filter(lambda x: x.type in [\u0027threshold\u0027, \u0027combination\u0027],"},{"line_number":166,"context_line":"                      alarms)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"def alarm_evaluator():"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FsQU%3D","line":166,"updated":"2014-02-11 13:56:12.000000000","message":"Wouldn\u0027t this filtering out of notification alarms be needed for the partitioned alarm service also?","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a0f789d89c1656d8d0ff0f24d110826b244beebd","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        alarms \u003d self._client.alarms.list(q\u003d[{\u0027field\u0027: \u0027enabled\u0027,"},{"line_number":164,"context_line":"                                              \u0027value\u0027: True}])"},{"line_number":165,"context_line":"        return filter(lambda x: x.type in [\u0027threshold\u0027, \u0027combination\u0027],"},{"line_number":166,"context_line":"                      alarms)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"def alarm_evaluator():"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FjgI%3D","line":166,"in_reply_to":"AAAAUX%2F%2FoXQ%3D","updated":"2014-02-12 11:54:05.000000000","message":"Not sure what you mean by persisted in the database ... all alarms are persistent in DB surely?\n\nIn any case, partitioned evaluation is just a mechanism for spreading the evaluation workload over multiple evaluators. Currently all alarms can be evaluated by either the singleton or multiple partitioned evaluators.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"79fe7f3b14eb64e44c8d7b12e0eec45e7f8d6b53","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        alarms \u003d self._client.alarms.list(q\u003d[{\u0027field\u0027: \u0027enabled\u0027,"},{"line_number":164,"context_line":"                                              \u0027value\u0027: True}])"},{"line_number":165,"context_line":"        return filter(lambda x: x.type in [\u0027threshold\u0027, \u0027combination\u0027],"},{"line_number":166,"context_line":"                      alarms)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"def alarm_evaluator():"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FoXQ%3D","line":166,"in_reply_to":"AAAAUX%2F%2FsQU%3D","updated":"2014-02-11 21:49:15.000000000","message":"hmmm, should not. Since alarm types can only be threshold, combination\nand notification (new), partitioned alarms persisted in database?","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"}],"ceilometer/api/controllers/v2.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7ee452bc5664ff3376ff778300c6f02a1d47a78","unresolved":false,"context_lines":[{"line_number":1372,"context_line":""},{"line_number":1373,"context_line":"    comparison_operator \u003d AdvEnum(\u0027comparison_operator\u0027, str, \u0027eq\u0027, \u0027ne\u0027,"},{"line_number":1374,"context_line":"                                  default\u003d\u0027eq\u0027)"},{"line_number":1375,"context_line":"    \"How to handle differentcombine the sub-alarms\""},{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"    query \u003d wsme.wsattr([Query], default\u003d[])"},{"line_number":1378,"context_line":"    \"\"\"The query to find the data for matching notofications."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FsPc%3D","line":1375,"updated":"2014-02-11 13:56:12.000000000","message":"Reference to sub-alarms looks like copy\u0027n\u0027paste from the combination alarm rule.\n\nAlso missing whitespace: \"differentcombine\"","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"79fe7f3b14eb64e44c8d7b12e0eec45e7f8d6b53","unresolved":false,"context_lines":[{"line_number":1372,"context_line":""},{"line_number":1373,"context_line":"    comparison_operator \u003d AdvEnum(\u0027comparison_operator\u0027, str, \u0027eq\u0027, \u0027ne\u0027,"},{"line_number":1374,"context_line":"                                  default\u003d\u0027eq\u0027)"},{"line_number":1375,"context_line":"    \"How to handle differentcombine the sub-alarms\""},{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"    query \u003d wsme.wsattr([Query], default\u003d[])"},{"line_number":1378,"context_line":"    \"\"\"The query to find the data for matching notofications."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FoWI%3D","line":1375,"in_reply_to":"AAAAUX%2F%2FsPc%3D","updated":"2014-02-11 21:49:15.000000000","message":"Yes, it was copy and paste. Will correct in next patch.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7ee452bc5664ff3376ff778300c6f02a1d47a78","unresolved":false,"context_lines":[{"line_number":1375,"context_line":"    \"How to handle differentcombine the sub-alarms\""},{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"    query \u003d wsme.wsattr([Query], default\u003d[])"},{"line_number":1378,"context_line":"    \"\"\"The query to find the data for matching notofications."},{"line_number":1379,"context_line":"    Ownership settings are automatically included based on the Alarm owner."},{"line_number":1380,"context_line":"    \"\"\""},{"line_number":1381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FsPY%3D","line":1378,"updated":"2014-02-11 13:56:12.000000000","message":"s/notofications/notifications/","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"79fe7f3b14eb64e44c8d7b12e0eec45e7f8d6b53","unresolved":false,"context_lines":[{"line_number":1375,"context_line":"    \"How to handle differentcombine the sub-alarms\""},{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"    query \u003d wsme.wsattr([Query], default\u003d[])"},{"line_number":1378,"context_line":"    \"\"\"The query to find the data for matching notofications."},{"line_number":1379,"context_line":"    Ownership settings are automatically included based on the Alarm owner."},{"line_number":1380,"context_line":"    \"\"\""},{"line_number":1381,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FoV0%3D","line":1378,"in_reply_to":"AAAAUX%2F%2FsPY%3D","updated":"2014-02-11 21:49:15.000000000","message":"yeah, typed too fast. will change it.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7ee452bc5664ff3376ff778300c6f02a1d47a78","unresolved":false,"context_lines":[{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"    query \u003d wsme.wsattr([Query], default\u003d[])"},{"line_number":1378,"context_line":"    \"\"\"The query to find the data for matching notofications."},{"line_number":1379,"context_line":"    Ownership settings are automatically included based on the Alarm owner."},{"line_number":1380,"context_line":"    \"\"\""},{"line_number":1381,"context_line":""},{"line_number":1382,"context_line":"    def __init__(self, query\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FsPI%3D","line":1379,"updated":"2014-02-11 13:56:12.000000000","message":"Ownership of what?\n\nDo notifications have a concept of owner?","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"3e3a1d0f93dfb06ab3ec45e904106de147cfbaa6","unresolved":false,"context_lines":[{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"    query \u003d wsme.wsattr([Query], default\u003d[])"},{"line_number":1378,"context_line":"    \"\"\"The query to find the data for matching notofications."},{"line_number":1379,"context_line":"    Ownership settings are automatically included based on the Alarm owner."},{"line_number":1380,"context_line":"    \"\"\""},{"line_number":1381,"context_line":""},{"line_number":1382,"context_line":"    def __init__(self, query\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FCdo%3D","line":1379,"in_reply_to":"AAAAUX%2F%2FjfU%3D","updated":"2014-02-17 14:05:32.000000000","message":"Sanitize_query is needed and notification comes in will be checked against\nthe sanitized rule. Please see the logic in the alarm/evaluator/notification.py","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a0f789d89c1656d8d0ff0f24d110826b244beebd","unresolved":false,"context_lines":[{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"    query \u003d wsme.wsattr([Query], default\u003d[])"},{"line_number":1378,"context_line":"    \"\"\"The query to find the data for matching notofications."},{"line_number":1379,"context_line":"    Ownership settings are automatically included based on the Alarm owner."},{"line_number":1380,"context_line":"    \"\"\""},{"line_number":1381,"context_line":""},{"line_number":1382,"context_line":"    def __init__(self, query\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FjfU%3D","line":1379,"in_reply_to":"AAAAUX%2F%2FoVo%3D","updated":"2014-02-12 11:54:05.000000000","message":"\"Ownership settings are automatically included based on the Alarm owner.\"\n\n... that implied to me something like the logic in sanitize_query, that you seem to indicate below you\u0027ll be removing for notification alarms, right?","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"79fe7f3b14eb64e44c8d7b12e0eec45e7f8d6b53","unresolved":false,"context_lines":[{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"    query \u003d wsme.wsattr([Query], default\u003d[])"},{"line_number":1378,"context_line":"    \"\"\"The query to find the data for matching notofications."},{"line_number":1379,"context_line":"    Ownership settings are automatically included based on the Alarm owner."},{"line_number":1380,"context_line":"    \"\"\""},{"line_number":1381,"context_line":""},{"line_number":1382,"context_line":"    def __init__(self, query\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FoVo%3D","line":1379,"in_reply_to":"AAAAUX%2F%2FsPI%3D","updated":"2014-02-11 21:49:15.000000000","message":"Should be since the notification actually contains the information.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7ee452bc5664ff3376ff778300c6f02a1d47a78","unresolved":false,"context_lines":[{"line_number":1535,"context_line":"                alarm.notification_rule.query,"},{"line_number":1536,"context_line":"                storage.SampleFilter.__init__,"},{"line_number":1537,"context_line":"                on_behalf_of\u003dalarm.project_id"},{"line_number":1538,"context_line":"            )"},{"line_number":1539,"context_line":""},{"line_number":1540,"context_line":"        return alarm"},{"line_number":1541,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FsNw%3D","line":1538,"updated":"2014-02-11 13:56:12.000000000","message":"I\u0027m not sure why the query is being sanitized here.\n\nNormally sanitization is required to ensure that visibility onto other users\u0027 alarms or statistics is not leaked to non-admin users.\n\nWhat is the relevance of that for notifications, if such notifications are already being issued on the public message bus and could potentially be also consumed by agents other than ceilometer?\n\n(... I may be missing something here)","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"79fe7f3b14eb64e44c8d7b12e0eec45e7f8d6b53","unresolved":false,"context_lines":[{"line_number":1535,"context_line":"                alarm.notification_rule.query,"},{"line_number":1536,"context_line":"                storage.SampleFilter.__init__,"},{"line_number":1537,"context_line":"                on_behalf_of\u003dalarm.project_id"},{"line_number":1538,"context_line":"            )"},{"line_number":1539,"context_line":""},{"line_number":1540,"context_line":"        return alarm"},{"line_number":1541,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FoPo%3D","line":1538,"in_reply_to":"AAAAUX%2F%2FsNw%3D","updated":"2014-02-11 21:49:15.000000000","message":"copy paste error. will take it away.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"88d16af702056c8c2d7e952d4f3e79d2378c1125","unresolved":false,"context_lines":[{"line_number":1371,"context_line":"    \"type of notifications to be processed\""},{"line_number":1372,"context_line":""},{"line_number":1373,"context_line":"    comparison_operator \u003d AdvEnum(\u0027comparison_operator\u0027, str, \u0027eq\u0027, \u0027ne\u0027,"},{"line_number":1374,"context_line":"                                  default\u003d\u0027eq\u0027)"},{"line_number":1375,"context_line":"    \"the opeartor on how to compare notification type against a notification\""},{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"    period \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), default\u003d0)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUX%2F%2B3gw%3D","line":1374,"updated":"2014-02-18 14:44:29.000000000","message":"Spelling mistake: \"opeartror\"","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"928e7430b1c545799c5c5b44b84dc36c8ffb37d5","unresolved":false,"context_lines":[{"line_number":1371,"context_line":"    \"type of notifications to be processed\""},{"line_number":1372,"context_line":""},{"line_number":1373,"context_line":"    comparison_operator \u003d AdvEnum(\u0027comparison_operator\u0027, str, \u0027eq\u0027, \u0027ne\u0027,"},{"line_number":1374,"context_line":"                                  default\u003d\u0027eq\u0027)"},{"line_number":1375,"context_line":"    \"the opeartor on how to compare notification type against a notification\""},{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"    period \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), default\u003d0)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUX%2F%2B3Eg%3D","line":1374,"in_reply_to":"AAAAUX%2F%2B3gw%3D","updated":"2014-02-25 12:57:47.000000000","message":"Done","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"88d16af702056c8c2d7e952d4f3e79d2378c1125","unresolved":false,"context_lines":[{"line_number":1387,"context_line":"        super(AlarmNotificationRule, self).__init__(query\u003dquery, **kwargs)"},{"line_number":1388,"context_line":""},{"line_number":1389,"context_line":"    @property"},{"line_number":1390,"context_line":"    def default_description(self):"},{"line_number":1391,"context_line":"        return (_(\u0027Notification type to be processed to generate alarms %s\u0027) %"},{"line_number":1392,"context_line":"                self.notification_type)"},{"line_number":1393,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUX%2F%2B3fY%3D","line":1390,"updated":"2014-02-18 14:44:29.000000000","message":"Should self.notification_type be translated?","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"928e7430b1c545799c5c5b44b84dc36c8ffb37d5","unresolved":false,"context_lines":[{"line_number":1387,"context_line":"        super(AlarmNotificationRule, self).__init__(query\u003dquery, **kwargs)"},{"line_number":1388,"context_line":""},{"line_number":1389,"context_line":"    @property"},{"line_number":1390,"context_line":"    def default_description(self):"},{"line_number":1391,"context_line":"        return (_(\u0027Notification type to be processed to generate alarms %s\u0027) %"},{"line_number":1392,"context_line":"                self.notification_type)"},{"line_number":1393,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUX%2F%2B3Dw%3D","line":1390,"in_reply_to":"AAAAUX%2F%2B3fY%3D","updated":"2014-02-25 12:57:47.000000000","message":"no, it is string value to be matched against notification type.","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"88d16af702056c8c2d7e952d4f3e79d2378c1125","unresolved":false,"context_lines":[{"line_number":1397,"context_line":"                                       \u0027period\u0027])"},{"line_number":1398,"context_line":"        if self.query:"},{"line_number":1399,"context_line":"            rule[\u0027query\u0027] \u003d [q.as_dict() for q in self.query]"},{"line_number":1400,"context_line":"        else:"},{"line_number":1401,"context_line":"            rule[\u0027query\u0027] \u003d []"},{"line_number":1402,"context_line":"        return rule"},{"line_number":1403,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUX%2F%2B3dw%3D","line":1400,"updated":"2014-02-18 14:44:29.000000000","message":"this line may be moved before \u0027if\u0027 to avoid \u0027else\u0027. Not really important anyway :)","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"928e7430b1c545799c5c5b44b84dc36c8ffb37d5","unresolved":false,"context_lines":[{"line_number":1397,"context_line":"                                       \u0027period\u0027])"},{"line_number":1398,"context_line":"        if self.query:"},{"line_number":1399,"context_line":"            rule[\u0027query\u0027] \u003d [q.as_dict() for q in self.query]"},{"line_number":1400,"context_line":"        else:"},{"line_number":1401,"context_line":"            rule[\u0027query\u0027] \u003d []"},{"line_number":1402,"context_line":"        return rule"},{"line_number":1403,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUX%2F%2B3BY%3D","line":1400,"in_reply_to":"AAAAUX%2F%2B3dw%3D","updated":"2014-02-25 12:57:47.000000000","message":"they are not the same. little difference in terms code cost. doing the\nassignment first, then if query is not none, then you are doing the assigment\nstatement twice, so the code you suggested will cost more.","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"88d16af702056c8c2d7e952d4f3e79d2378c1125","unresolved":false,"context_lines":[{"line_number":1511,"context_line":"            error \u003d _(\"one of the threshold_rule, combination_rule or \""},{"line_number":1512,"context_line":"                      \"notification_rule must be set\")"},{"line_number":1513,"context_line":"            raise ClientSideError(error)"},{"line_number":1514,"context_line":""},{"line_number":1515,"context_line":"        if rules \u003e\u003d 2:"},{"line_number":1516,"context_line":"            error \u003d _(\"only one of threshold_rule, combination_rule or \""},{"line_number":1517,"context_line":"                      \"notification_rule can be set\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUX%2F%2B3bk%3D","line":1514,"updated":"2014-02-18 14:44:29.000000000","message":"if rules\u003e1 is simpler ;)","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"928e7430b1c545799c5c5b44b84dc36c8ffb37d5","unresolved":false,"context_lines":[{"line_number":1511,"context_line":"            error \u003d _(\"one of the threshold_rule, combination_rule or \""},{"line_number":1512,"context_line":"                      \"notification_rule must be set\")"},{"line_number":1513,"context_line":"            raise ClientSideError(error)"},{"line_number":1514,"context_line":""},{"line_number":1515,"context_line":"        if rules \u003e\u003d 2:"},{"line_number":1516,"context_line":"            error \u003d _(\"only one of threshold_rule, combination_rule or \""},{"line_number":1517,"context_line":"                      \"notification_rule can be set\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUX%2F%2B3DY%3D","line":1514,"in_reply_to":"AAAAUX%2F%2B3bk%3D","updated":"2014-02-25 12:57:47.000000000","message":"not the same. in case, somebody change it to make rules to be float.","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4a9a03bb7fd5a1eabb0b0f8eb33a5689ca4b2699","unresolved":false,"context_lines":[{"line_number":1477,"context_line":""},{"line_number":1478,"context_line":"class AlarmNotificationRule(_Base):"},{"line_number":1479,"context_line":"    notification_type \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"},{"line_number":1480,"context_line":"    \"type of notifications to be processed\""},{"line_number":1481,"context_line":""},{"line_number":1482,"context_line":"    comparison_operator \u003d AdvEnum(\u0027comparison_operator\u0027, str, \u0027eq\u0027, \u0027ne\u0027,"},{"line_number":1483,"context_line":"                                  default\u003d\u0027eq\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAVX%2F%2FuGA%3D","line":1480,"updated":"2014-02-28 20:39:52.000000000","message":"Shouldn\u0027t the docstr indicate that the notification_type may be wildcarded?","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"f82e7d9a9c99a1d19ee26654d3857be91dd6eff0","unresolved":false,"context_lines":[{"line_number":1477,"context_line":""},{"line_number":1478,"context_line":"class AlarmNotificationRule(_Base):"},{"line_number":1479,"context_line":"    notification_type \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"},{"line_number":1480,"context_line":"    \"type of notifications to be processed\""},{"line_number":1481,"context_line":""},{"line_number":1482,"context_line":"    comparison_operator \u003d AdvEnum(\u0027comparison_operator\u0027, str, \u0027eq\u0027, \u0027ne\u0027,"},{"line_number":1483,"context_line":"                                  default\u003d\u0027eq\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAVn%2F%2F6ig%3D","line":1480,"in_reply_to":"AAAAVX%2F%2FuGA%3D","updated":"2014-03-03 13:23:19.000000000","message":"sure.","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4a9a03bb7fd5a1eabb0b0f8eb33a5689ca4b2699","unresolved":false,"context_lines":[{"line_number":1481,"context_line":""},{"line_number":1482,"context_line":"    comparison_operator \u003d AdvEnum(\u0027comparison_operator\u0027, str, \u0027eq\u0027, \u0027ne\u0027,"},{"line_number":1483,"context_line":"                                  default\u003d\u0027eq\u0027)"},{"line_number":1484,"context_line":"    \"the operator on how to compare notification type against a notification\""},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"    period \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), default\u003d0)"},{"line_number":1487,"context_line":"    \"The time period in seconds to reset the alarm state to OK\""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAVX%2F%2FuGk%3D","line":1484,"updated":"2014-02-28 20:39:52.000000000","message":"the operator *used* to compare notification type against a notification","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"f82e7d9a9c99a1d19ee26654d3857be91dd6eff0","unresolved":false,"context_lines":[{"line_number":1481,"context_line":""},{"line_number":1482,"context_line":"    comparison_operator \u003d AdvEnum(\u0027comparison_operator\u0027, str, \u0027eq\u0027, \u0027ne\u0027,"},{"line_number":1483,"context_line":"                                  default\u003d\u0027eq\u0027)"},{"line_number":1484,"context_line":"    \"the operator on how to compare notification type against a notification\""},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"    period \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), default\u003d0)"},{"line_number":1487,"context_line":"    \"The time period in seconds to reset the alarm state to OK\""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAVn%2F%2F6iI%3D","line":1484,"in_reply_to":"AAAAVX%2F%2FuGk%3D","updated":"2014-03-03 13:23:19.000000000","message":"Done","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4a9a03bb7fd5a1eabb0b0f8eb33a5689ca4b2699","unresolved":false,"context_lines":[{"line_number":1484,"context_line":"    \"the operator on how to compare notification type against a notification\""},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"    period \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), default\u003d0)"},{"line_number":1487,"context_line":"    \"The time period in seconds to reset the alarm state to OK\""},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"    query \u003d wsme.wsattr([Query], default\u003d[])"},{"line_number":1490,"context_line":"    \"\"\"The query to find the data for matching notofications."}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAVX%2F%2FuJA%3D","line":1487,"updated":"2014-02-28 20:39:52.000000000","message":"\"Period\" in sense used in ceilometer generally refers to a regular cadence (i.e. the inverse of frequency).\n\nWhere in this context, the concept is closer to a standalone duration.","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"f82e7d9a9c99a1d19ee26654d3857be91dd6eff0","unresolved":false,"context_lines":[{"line_number":1484,"context_line":"    \"the operator on how to compare notification type against a notification\""},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"    period \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), default\u003d0)"},{"line_number":1487,"context_line":"    \"The time period in seconds to reset the alarm state to OK\""},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"    query \u003d wsme.wsattr([Query], default\u003d[])"},{"line_number":1490,"context_line":"    \"\"\"The query to find the data for matching notofications."}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAVn%2F%2F6h0%3D","line":1487,"in_reply_to":"AAAAVX%2F%2FuJA%3D","updated":"2014-03-03 13:23:19.000000000","message":"can change that to duration. I was thinking state reset period.","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4a9a03bb7fd5a1eabb0b0f8eb33a5689ca4b2699","unresolved":false,"context_lines":[{"line_number":1487,"context_line":"    \"The time period in seconds to reset the alarm state to OK\""},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"    query \u003d wsme.wsattr([Query], default\u003d[])"},{"line_number":1490,"context_line":"    \"\"\"The query to find the data for matching notofications."},{"line_number":1491,"context_line":"    \"\"\""},{"line_number":1492,"context_line":""},{"line_number":1493,"context_line":"    def __init__(self, query\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAVX%2F%2FuNY%3D","line":1490,"updated":"2014-02-28 20:39:52.000000000","message":"s/notofications/notifications/","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"f82e7d9a9c99a1d19ee26654d3857be91dd6eff0","unresolved":false,"context_lines":[{"line_number":1487,"context_line":"    \"The time period in seconds to reset the alarm state to OK\""},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"    query \u003d wsme.wsattr([Query], default\u003d[])"},{"line_number":1490,"context_line":"    \"\"\"The query to find the data for matching notofications."},{"line_number":1491,"context_line":"    \"\"\""},{"line_number":1492,"context_line":""},{"line_number":1493,"context_line":"    def __init__(self, query\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAVn%2F%2F6hs%3D","line":1490,"in_reply_to":"AAAAVX%2F%2FuNY%3D","updated":"2014-03-03 13:23:19.000000000","message":"Done","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"}],"ceilometer/notification.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7ee452bc5664ff3376ff778300c6f02a1d47a78","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                        self.NOTIFICATION_NAMESPACE)"},{"line_number":91,"context_line":"        self.notification_manager.map(self._setup_subscription)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        self.anotification_service \u003d alarm_service.AlarmNotificationService()"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _setup_subscription(self, ext, *args, **kwds):"},{"line_number":96,"context_line":"        \"\"\"Connect to message bus to get notifications"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FsMU%3D","line":93,"updated":"2014-02-11 13:56:12.000000000","message":"The anotification_service identifier needs to be more alarm-specific for readability I think (given that the devstack notification agent is called ceilometer-anotification).\n\n... perhaps notification_alarm_service","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"79fe7f3b14eb64e44c8d7b12e0eec45e7f8d6b53","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                        self.NOTIFICATION_NAMESPACE)"},{"line_number":91,"context_line":"        self.notification_manager.map(self._setup_subscription)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        self.anotification_service \u003d alarm_service.AlarmNotificationService()"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _setup_subscription(self, ext, *args, **kwds):"},{"line_number":96,"context_line":"        \"\"\"Connect to message bus to get notifications"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2FoPE%3D","line":93,"in_reply_to":"AAAAUX%2F%2FsMU%3D","updated":"2014-02-11 21:49:15.000000000","message":"had just like that, but it was too long. need to think something shorter.\nwill correct.","commit_id":"c6d370294eb4c8108fff8c6e2950debe46a7f9d7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4a9a03bb7fd5a1eabb0b0f8eb33a5689ca4b2699","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        if cfg.CONF.notification.store_events:"},{"line_number":142,"context_line":"            self._message_to_event(notification)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        self.notification_alarm_mgr._evaluate_assigned_alarms(notification)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _message_to_event(self, body):"},{"line_number":147,"context_line":"        \"\"\"Convert message to Ceilometer Event."}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAVX%2F%2FtnE%3D","line":144,"updated":"2014-02-28 20:39:52.000000000","message":"By convention the leading underscore in _evaluate_assigned_alarms indicates a private method, so shouldn\u0027t be called from another class, or?","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"f82e7d9a9c99a1d19ee26654d3857be91dd6eff0","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        if cfg.CONF.notification.store_events:"},{"line_number":142,"context_line":"            self._message_to_event(notification)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        self.notification_alarm_mgr._evaluate_assigned_alarms(notification)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _message_to_event(self, body):"},{"line_number":147,"context_line":"        \"\"\"Convert message to Ceilometer Event."}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAVn%2F%2F6hM%3D","line":144,"in_reply_to":"AAAAVX%2F%2FtnE%3D","updated":"2014-03-03 13:23:19.000000000","message":"the method was defined as private. unless I add a new one to make it public.","commit_id":"5fa34b9994286692c5f2ac7b174e173af2d21b79"}],"setup.cfg":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"88d16af702056c8c2d7e952d4f3e79d2378c1125","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    rpc \u003d ceilometer.publisher.rpc:RPCPublisher"},{"line_number":114,"context_line":"    udp \u003d ceilometer.publisher.udp:UDPPublisher"},{"line_number":115,"context_line":"    file \u003d ceilometer.publisher.file:FilePublisher"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"ceilometer.alarm.evaluator \u003d"},{"line_number":118,"context_line":"    threshold \u003d ceilometer.alarm.evaluator.threshold:ThresholdEvaluator"},{"line_number":119,"context_line":"    combination \u003d ceilometer.alarm.evaluator.combination:CombinationEvaluator"}],"source_content_type":"text/x-ttcn-cfg","patch_set":14,"id":"AAAAUX%2F%2B3YQ%3D","line":116,"updated":"2014-02-18 14:44:29.000000000","message":"Why can\u0027t you add notification\u003d... to this section?","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"928e7430b1c545799c5c5b44b84dc36c8ffb37d5","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    rpc \u003d ceilometer.publisher.rpc:RPCPublisher"},{"line_number":114,"context_line":"    udp \u003d ceilometer.publisher.udp:UDPPublisher"},{"line_number":115,"context_line":"    file \u003d ceilometer.publisher.file:FilePublisher"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"ceilometer.alarm.evaluator \u003d"},{"line_number":118,"context_line":"    threshold \u003d ceilometer.alarm.evaluator.threshold:ThresholdEvaluator"},{"line_number":119,"context_line":"    combination \u003d ceilometer.alarm.evaluator.combination:CombinationEvaluator"}],"source_content_type":"text/x-ttcn-cfg","patch_set":14,"id":"AAAAUX%2F%2B3BM%3D","line":116,"in_reply_to":"AAAAUX%2F%2B3YQ%3D","updated":"2014-02-25 12:57:47.000000000","message":"different name space. being loaded by different loaders at different time.","commit_id":"c83c4601e54f9f54ccc9459a46fb6f0024bf9305"}]}
