)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c19f65afc91b17eb32c69be03051692fab57033d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allows alarms to have time constraints specified."},{"line_number":10,"context_line":"If one or more time constraints are specified, the alarm is"},{"line_number":11,"context_line":"evaluated only if within at least one time constraint."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"A field \u0027time_constraints\u0027 is added to the alarm model"},{"line_number":14,"context_line":"that holds a list of the time constraints. Each time constraint"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAVX%2F%2FtfM%3D","line":11,"updated":"2014-02-28 21:37:04.000000000","message":"evaluated only if *the current time* is within at least one time constraint.","commit_id":"88b08012c2212a1cdf35f20ceccba4388f7fcee8"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"925d7dda9f5a118a5b2836c9ec2d1b3e4af8bfba","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allows alarms to have time constraints specified."},{"line_number":10,"context_line":"If one or more time constraints are specified, the alarm is"},{"line_number":11,"context_line":"evaluated only if within at least one time constraint."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"A field \u0027time_constraints\u0027 is added to the alarm model"},{"line_number":14,"context_line":"that holds a list of the time constraints. Each time constraint"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAVX%2F%2FtNU%3D","line":11,"in_reply_to":"AAAAVX%2F%2FtfM%3D","updated":"2014-03-01 09:48:44.000000000","message":"Done","commit_id":"88b08012c2212a1cdf35f20ceccba4388f7fcee8"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c19f65afc91b17eb32c69be03051692fab57033d","unresolved":false,"context_lines":[{"line_number":16,"context_line":"- name\t\tthe name of the constraint"},{"line_number":17,"context_line":"- description\tdescription, default is auto-generated from start and duration"},{"line_number":18,"context_line":"- start\t\tstarting point(s) of the constraint, in cron format"},{"line_number":19,"context_line":"- duration\tduration od the constraint, in seconds"},{"line_number":20,"context_line":"- timezone\toptional timezone information"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I2d1bcd6728affc31834d7e2f3a0bdd570b2413bb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAVX%2F%2Fte0%3D","line":19,"updated":"2014-02-28 21:37:04.000000000","message":"duration *of* the constraint","commit_id":"88b08012c2212a1cdf35f20ceccba4388f7fcee8"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"925d7dda9f5a118a5b2836c9ec2d1b3e4af8bfba","unresolved":false,"context_lines":[{"line_number":16,"context_line":"- name\t\tthe name of the constraint"},{"line_number":17,"context_line":"- description\tdescription, default is auto-generated from start and duration"},{"line_number":18,"context_line":"- start\t\tstarting point(s) of the constraint, in cron format"},{"line_number":19,"context_line":"- duration\tduration od the constraint, in seconds"},{"line_number":20,"context_line":"- timezone\toptional timezone information"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I2d1bcd6728affc31834d7e2f3a0bdd570b2413bb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAVX%2F%2FtNM%3D","line":19,"in_reply_to":"AAAAVX%2F%2Fte0%3D","updated":"2014-03-01 09:48:44.000000000","message":"Done","commit_id":"88b08012c2212a1cdf35f20ceccba4388f7fcee8"}],"ceilometer/alarm/evaluator/__init__.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"cccf6e43d081628a7e7ef4fd834bccba634fe88c","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            LOG.exception(_(\u0027alarm state update failed\u0027))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @staticmethod"},{"line_number":85,"context_line":"    def is_within_time_constraint(alarm):"},{"line_number":86,"context_line":"        \"\"\"Check whether the alarm is within at least one of its time"},{"line_number":87,"context_line":"        constraints. If there are none, then the answer is yes."},{"line_number":88,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2BZGo%3D","line":85,"updated":"2014-02-21 13:07:57.000000000","message":"Would within_time_constraint suffice as the method name, a little less unwieldy?","commit_id":"99c6f4201a2dd4036a295758a68588c46b616449"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"9885e8aa034bfc86d5f87910d3c08279ed7e11ab","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            LOG.exception(_(\u0027alarm state update failed\u0027))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @staticmethod"},{"line_number":85,"context_line":"    def is_within_time_constraint(alarm):"},{"line_number":86,"context_line":"        \"\"\"Check whether the alarm is within at least one of its time"},{"line_number":87,"context_line":"        constraints. If there are none, then the answer is yes."},{"line_number":88,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2BY%2F4%3D","line":85,"in_reply_to":"AAAAUX%2F%2BZGo%3D","updated":"2014-02-28 10:00:28.000000000","message":"Done","commit_id":"99c6f4201a2dd4036a295758a68588c46b616449"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c19f65afc91b17eb32c69be03051692fab57033d","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        for tc in alarm.time_constraints:"},{"line_number":93,"context_line":"            tz \u003d pytz.timezone(tc[\u0027timezone\u0027]) if tc[\u0027timezone\u0027] else None"},{"line_number":94,"context_line":"            now \u003d ceilometer_utils.now(tz)"},{"line_number":95,"context_line":"            start_cron \u003d croniter.croniter(tc[\u0027start\u0027], now)"},{"line_number":96,"context_line":"            latest_start \u003d start_cron.get_prev(datetime.datetime)"},{"line_number":97,"context_line":"            duration \u003d datetime.timedelta(seconds\u003dtc[\u0027duration\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2FtbE%3D","line":94,"updated":"2014-02-28 21:37:04.000000000","message":"To avoid odd edge-effects, the current time should be evaluated only once for all constraints for this alarm, before entering the for loop.","commit_id":"88b08012c2212a1cdf35f20ceccba4388f7fcee8"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"925d7dda9f5a118a5b2836c9ec2d1b3e4af8bfba","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        for tc in alarm.time_constraints:"},{"line_number":93,"context_line":"            tz \u003d pytz.timezone(tc[\u0027timezone\u0027]) if tc[\u0027timezone\u0027] else None"},{"line_number":94,"context_line":"            now \u003d ceilometer_utils.now(tz)"},{"line_number":95,"context_line":"            start_cron \u003d croniter.croniter(tc[\u0027start\u0027], now)"},{"line_number":96,"context_line":"            latest_start \u003d start_cron.get_prev(datetime.datetime)"},{"line_number":97,"context_line":"            duration \u003d datetime.timedelta(seconds\u003dtc[\u0027duration\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2FtMk%3D","line":94,"in_reply_to":"AAAAVX%2F%2FtbE%3D","updated":"2014-03-01 09:48:44.000000000","message":"Great point, Done.","commit_id":"88b08012c2212a1cdf35f20ceccba4388f7fcee8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acc81b5cdad0b696cd80d1c6204f3a7da476ae03","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            tz \u003d pytz.timezone(tc[\u0027timezone\u0027]) if tc[\u0027timezone\u0027] else None"},{"line_number":95,"context_line":"            now_tz \u003d now_utc.astimezone(tz) if tz else now_utc"},{"line_number":96,"context_line":"            start_cron \u003d croniter.croniter(tc[\u0027start\u0027], now_tz)"},{"line_number":97,"context_line":"            latest_start \u003d start_cron.get_prev(datetime.datetime)"},{"line_number":98,"context_line":"            duration \u003d datetime.timedelta(seconds\u003dtc[\u0027duration\u0027])"},{"line_number":99,"context_line":"            if latest_start \u003c\u003d now_tz \u003c\u003d latest_start + duration:"},{"line_number":100,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F3fM%3D","line":97,"updated":"2014-03-03 18:19:23.000000000","message":"I think the get_prev call has an edge case that might cause strange behaviour. If the current time is matching exactly (on minute level) with one start of the cron definition then the get_prev call returns the previous start not the current one and therefore the condition below will be evaluated to false.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            tz \u003d pytz.timezone(tc[\u0027timezone\u0027]) if tc[\u0027timezone\u0027] else None"},{"line_number":95,"context_line":"            now_tz \u003d now_utc.astimezone(tz) if tz else now_utc"},{"line_number":96,"context_line":"            start_cron \u003d croniter.croniter(tc[\u0027start\u0027], now_tz)"},{"line_number":97,"context_line":"            latest_start \u003d start_cron.get_prev(datetime.datetime)"},{"line_number":98,"context_line":"            duration \u003d datetime.timedelta(seconds\u003dtc[\u0027duration\u0027])"},{"line_number":99,"context_line":"            if latest_start \u003c\u003d now_tz \u003c\u003d latest_start + duration:"},{"line_number":100,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FxW8%3D","line":97,"in_reply_to":"AAAAVn%2F%2F3fM%3D","updated":"2014-03-04 12:42:35.000000000","message":"Great catch. Done!","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c63cc0d681e30321c4340e894060c008e9273ab7","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        at the original point in time."},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        cron.get_prev()"},{"line_number":114,"context_line":"        diff \u003d abs(ts - cron.get_next(datetime.datetime)).seconds"},{"line_number":115,"context_line":"        return diff \u003c 60  # minute precision"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAVn%2F%2FuhQ%3D","line":114,"updated":"2014-03-04 13:07:29.000000000","message":"I\u0027m not 100% sure this is safe, depends on how the datetime object returned by cron.get_next() is constructed.\n\nFor example:\n\n  \u003e\u003e\u003e now \u003d datetime.datetime.now()\n  \u003e\u003e\u003e tmrw \u003d now + datetime.timedelta(days\u003d1, seconds\u003d1)\n  \u003e\u003e\u003e abs(now - tmrw).seconds\n  1\n  \u003e\u003e\u003e abs(now - tmrw).total_seconds()\n  86401.0\n\nSo to be sure:\n\n  s/seconds/total_seconds()/\n\nor else use ceilometer.openstack.common.timeutils.delta_seconds()","commit_id":"fc60299f68c71f3b3d6e3e14086ae38c872f9183"}],"ceilometer/alarm/evaluator/combination.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c19f65afc91b17eb32c69be03051692fab57033d","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            self._refresh(alarm, state, reason, reason_data)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def evaluate(self, alarm):"},{"line_number":99,"context_line":"        if not self.within_time_constraint(alarm):"},{"line_number":100,"context_line":"            return"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        states \u003d zip(alarm.rule[\u0027alarm_ids\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2FtT8%3D","line":99,"updated":"2014-02-28 21:37:04.000000000","message":"LOG message appropriate here to indicate that the alarm was seen but not evaluated?","commit_id":"88b08012c2212a1cdf35f20ceccba4388f7fcee8"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"925d7dda9f5a118a5b2836c9ec2d1b3e4af8bfba","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            self._refresh(alarm, state, reason, reason_data)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def evaluate(self, alarm):"},{"line_number":99,"context_line":"        if not self.within_time_constraint(alarm):"},{"line_number":100,"context_line":"            return"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        states \u003d zip(alarm.rule[\u0027alarm_ids\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2Fs7k%3D","line":99,"in_reply_to":"AAAAVX%2F%2FtT8%3D","updated":"2014-03-01 09:48:44.000000000","message":"Done, please comment on the wording of the log message in the latest patch.","commit_id":"88b08012c2212a1cdf35f20ceccba4388f7fcee8"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def evaluate(self, alarm):"},{"line_number":99,"context_line":"        if not self.within_time_constraint(alarm):"},{"line_number":100,"context_line":"            LOG.debug(_(\u0027Attempted to evaluate alarm %s, but it is not\u0027"},{"line_number":101,"context_line":"                        \u0027within its time constraint.\u0027) % alarm.alarm_id)"},{"line_number":102,"context_line":"            return"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F4bA%3D","line":100,"updated":"2014-03-03 18:05:20.000000000","message":"Whitespace is needed after not.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def evaluate(self, alarm):"},{"line_number":99,"context_line":"        if not self.within_time_constraint(alarm):"},{"line_number":100,"context_line":"            LOG.debug(_(\u0027Attempted to evaluate alarm %s, but it is not\u0027"},{"line_number":101,"context_line":"                        \u0027within its time constraint.\u0027) % alarm.alarm_id)"},{"line_number":102,"context_line":"            return"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FxCo%3D","line":100,"in_reply_to":"AAAAVn%2F%2F4bA%3D","updated":"2014-03-04 12:42:35.000000000","message":"Done","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"}],"ceilometer/alarm/evaluator/threshold.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c19f65afc91b17eb32c69be03051692fab57033d","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            self._refresh(alarm, state, reason, reason_data)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def evaluate(self, alarm):"},{"line_number":176,"context_line":"        if not self.within_time_constraint(alarm):"},{"line_number":177,"context_line":"            return"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        query \u003d self._bound_duration("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2FtTc%3D","line":176,"updated":"2014-02-28 21:37:04.000000000","message":"Similarly, a log message here?","commit_id":"88b08012c2212a1cdf35f20ceccba4388f7fcee8"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"925d7dda9f5a118a5b2836c9ec2d1b3e4af8bfba","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            self._refresh(alarm, state, reason, reason_data)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def evaluate(self, alarm):"},{"line_number":176,"context_line":"        if not self.within_time_constraint(alarm):"},{"line_number":177,"context_line":"            return"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        query \u003d self._bound_duration("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2Fs7g%3D","line":176,"in_reply_to":"AAAAVX%2F%2FtTc%3D","updated":"2014-03-01 09:48:44.000000000","message":"Done","commit_id":"88b08012c2212a1cdf35f20ceccba4388f7fcee8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acc81b5cdad0b696cd80d1c6204f3a7da476ae03","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            self._refresh(alarm, state, reason, reason_data)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def evaluate(self, alarm):"},{"line_number":176,"context_line":"        if not self.within_time_constraint(alarm):"},{"line_number":177,"context_line":"            LOG.debug(_(\u0027Attempted to evaluate alarm %s, but it is not\u0027"},{"line_number":178,"context_line":"                        \u0027within its time constraint.\u0027) % alarm.alarm_id)"},{"line_number":179,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F4Ug%3D","line":176,"updated":"2014-03-03 18:19:23.000000000","message":"Seems this code is duplicated with the change in combination.py I think It should be put into the base class to avoid duplication.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            self._refresh(alarm, state, reason, reason_data)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def evaluate(self, alarm):"},{"line_number":176,"context_line":"        if not self.within_time_constraint(alarm):"},{"line_number":177,"context_line":"            LOG.debug(_(\u0027Attempted to evaluate alarm %s, but it is not\u0027"},{"line_number":178,"context_line":"                        \u0027within its time constraint.\u0027) % alarm.alarm_id)"},{"line_number":179,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FxB0%3D","line":176,"in_reply_to":"AAAAVn%2F%2F4Ug%3D","updated":"2014-03-04 12:42:35.000000000","message":"Putting in the base class would require changes to subclassing, since evaluate is called directly on subclasses. I think this would be best postponed to a later patch, if it is deemed necessary.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c282de4934f1c3dd16fa2ec35331735b4c11134","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            self._refresh(alarm, state, reason, reason_data)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def evaluate(self, alarm):"},{"line_number":176,"context_line":"        if not self.within_time_constraint(alarm):"},{"line_number":177,"context_line":"            LOG.debug(_(\u0027Attempted to evaluate alarm %s, but it is not\u0027"},{"line_number":178,"context_line":"                        \u0027within its time constraint.\u0027) % alarm.alarm_id)"},{"line_number":179,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2Fupw%3D","line":176,"in_reply_to":"AAAAVn%2F%2FxB0%3D","updated":"2014-03-04 12:58:29.000000000","message":"Ok. Let\u0027s postpone this refactor for later patch.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def evaluate(self, alarm):"},{"line_number":176,"context_line":"        if not self.within_time_constraint(alarm):"},{"line_number":177,"context_line":"            LOG.debug(_(\u0027Attempted to evaluate alarm %s, but it is not\u0027"},{"line_number":178,"context_line":"                        \u0027within its time constraint.\u0027) % alarm.alarm_id)"},{"line_number":179,"context_line":"            return"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F4ak%3D","line":177,"updated":"2014-03-03 18:05:20.000000000","message":"Whitespace is needed after not.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def evaluate(self, alarm):"},{"line_number":176,"context_line":"        if not self.within_time_constraint(alarm):"},{"line_number":177,"context_line":"            LOG.debug(_(\u0027Attempted to evaluate alarm %s, but it is not\u0027"},{"line_number":178,"context_line":"                        \u0027within its time constraint.\u0027) % alarm.alarm_id)"},{"line_number":179,"context_line":"            return"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FxCg%3D","line":177,"in_reply_to":"AAAAVn%2F%2F4ak%3D","updated":"2014-03-04 12:42:35.000000000","message":"Done","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"}],"ceilometer/api/controllers/v2.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7c1edba6c0aa8b66c9745c448dd1a1175d90835","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright © 2012 New Dream Network, LLC (DreamHost)"},{"line_number":4,"context_line":"# Copyright 2013 IBM Corp."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2BY2I%3D","line":1,"updated":"2014-02-21 13:31:21.000000000","message":"was the trailing \u0027-*-\u0027 deletion intentional?","commit_id":"99c6f4201a2dd4036a295758a68588c46b616449"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"9885e8aa034bfc86d5f87910d3c08279ed7e11ab","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright © 2012 New Dream Network, LLC (DreamHost)"},{"line_number":4,"context_line":"# Copyright 2013 IBM Corp."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVX%2F%2FyfE%3D","line":1,"in_reply_to":"AAAAUX%2F%2BY2I%3D","updated":"2014-02-28 10:00:28.000000000","message":"nope, sorry about this","commit_id":"99c6f4201a2dd4036a295758a68588c46b616449"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"88faed7e67fa0234eff9a1ae602ee4737e5a93e5","unresolved":false,"context_lines":[{"line_number":1506,"context_line":"                   description\u003d\u0027nightly build every night at 23h for 3 hours\u0027,"},{"line_number":1507,"context_line":"                   start\u003d\u00270 23 * * *\u0027,"},{"line_number":1508,"context_line":"                   duration\u003d\u00273 hours\u0027,"},{"line_number":1509,"context_line":"                   timezone\u003d\u0027Europe/Ljubljana\u0027)"},{"line_number":1510,"context_line":""},{"line_number":1511,"context_line":""},{"line_number":1512,"context_line":"class Alarm(_Base):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2BZMo%3D","line":1509,"updated":"2014-02-21 13:04:45.000000000","message":"Would it be simpler, less error prone and less exposed to potential localization issues to only support the simple UTC+/-offset form of timezone specifier?\n\n(e.g. UTC+01:00 as opposed to Europe/Ljubljana)","commit_id":"99c6f4201a2dd4036a295758a68588c46b616449"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7c1edba6c0aa8b66c9745c448dd1a1175d90835","unresolved":false,"context_lines":[{"line_number":1506,"context_line":"                   description\u003d\u0027nightly build every night at 23h for 3 hours\u0027,"},{"line_number":1507,"context_line":"                   start\u003d\u00270 23 * * *\u0027,"},{"line_number":1508,"context_line":"                   duration\u003d\u00273 hours\u0027,"},{"line_number":1509,"context_line":"                   timezone\u003d\u0027Europe/Ljubljana\u0027)"},{"line_number":1510,"context_line":""},{"line_number":1511,"context_line":""},{"line_number":1512,"context_line":"class Alarm(_Base):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2BY2A%3D","line":1509,"in_reply_to":"AAAAUX%2F%2BZBw%3D","updated":"2014-02-21 13:31:21.000000000","message":"A-ha, OK, the DST aspect does make sense. Yes, I agree it would be better to keep that twice-yearly discontinuity as transparent as possible :)","commit_id":"99c6f4201a2dd4036a295758a68588c46b616449"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"62f7998107b1a81a22624c657649878dc2c1dd4a","unresolved":false,"context_lines":[{"line_number":1506,"context_line":"                   description\u003d\u0027nightly build every night at 23h for 3 hours\u0027,"},{"line_number":1507,"context_line":"                   start\u003d\u00270 23 * * *\u0027,"},{"line_number":1508,"context_line":"                   duration\u003d\u00273 hours\u0027,"},{"line_number":1509,"context_line":"                   timezone\u003d\u0027Europe/Ljubljana\u0027)"},{"line_number":1510,"context_line":""},{"line_number":1511,"context_line":""},{"line_number":1512,"context_line":"class Alarm(_Base):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2BZBw%3D","line":1509,"in_reply_to":"AAAAUX%2F%2BZMo%3D","updated":"2014-02-21 13:14:55.000000000","message":"I chose this approach because it was the simplest to parse (pytz library, which is already in openstack/requirements). Also, UTC+01:00 does not take DST into account - what is your opinion about this? Should the user change their alarms at DST transition?","commit_id":"99c6f4201a2dd4036a295758a68588c46b616449"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c19f65afc91b17eb32c69be03051692fab57033d","unresolved":false,"context_lines":[{"line_number":1489,"context_line":"                              \u0027153462d0-a9b8-4b5b-8175-9e4b05e9b856\u0027])"},{"line_number":1490,"context_line":""},{"line_number":1491,"context_line":""},{"line_number":1492,"context_line":"class TimeConstraint(_Base):"},{"line_number":1493,"context_line":"    \"\"\"Representation of a time constraint.\"\"\""},{"line_number":1494,"context_line":""},{"line_number":1495,"context_line":"    name \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2FtTE%3D","line":1492,"updated":"2014-02-28 21:37:04.000000000","message":"s/TimeConstraint/AlarmTimeConstraint/ ?","commit_id":"88b08012c2212a1cdf35f20ceccba4388f7fcee8"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"925d7dda9f5a118a5b2836c9ec2d1b3e4af8bfba","unresolved":false,"context_lines":[{"line_number":1489,"context_line":"                              \u0027153462d0-a9b8-4b5b-8175-9e4b05e9b856\u0027])"},{"line_number":1490,"context_line":""},{"line_number":1491,"context_line":""},{"line_number":1492,"context_line":"class TimeConstraint(_Base):"},{"line_number":1493,"context_line":"    \"\"\"Representation of a time constraint.\"\"\""},{"line_number":1494,"context_line":""},{"line_number":1495,"context_line":"    name \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2Fs68%3D","line":1492,"in_reply_to":"AAAAVX%2F%2FtTE%3D","updated":"2014-03-01 09:48:44.000000000","message":"Done","commit_id":"88b08012c2212a1cdf35f20ceccba4388f7fcee8"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c19f65afc91b17eb32c69be03051692fab57033d","unresolved":false,"context_lines":[{"line_number":1490,"context_line":""},{"line_number":1491,"context_line":""},{"line_number":1492,"context_line":"class TimeConstraint(_Base):"},{"line_number":1493,"context_line":"    \"\"\"Representation of a time constraint.\"\"\""},{"line_number":1494,"context_line":""},{"line_number":1495,"context_line":"    name \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"},{"line_number":1496,"context_line":"    \"The name of the constraint\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2FtSw%3D","line":1493,"updated":"2014-02-28 21:37:04.000000000","message":"Representation of a time constraint *on an alarm*.","commit_id":"88b08012c2212a1cdf35f20ceccba4388f7fcee8"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"eb64c745f2583579d98f2da32c7d008f9f20ed10","unresolved":false,"context_lines":[{"line_number":1530,"context_line":"    @staticmethod"},{"line_number":1531,"context_line":"    def validate(tc):"},{"line_number":1532,"context_line":"        if tc[\u0027timezone\u0027]:"},{"line_number":1533,"context_line":"            pytz.timezone(tc[\u0027timezone\u0027])"},{"line_number":1534,"context_line":"        return tc"},{"line_number":1535,"context_line":""},{"line_number":1536,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2F87Y%3D","line":1533,"updated":"2014-03-03 08:05:43.000000000","message":"this can raise pytz.exceptions.* and will result to an error 500 in the API, it must be catch and raise a ClientSideError","commit_id":"b6022bcb4ed3872168f4434ec330c8f53bf8df3e"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"cbad4068fb1792e9782b64536485b0359aad6319","unresolved":false,"context_lines":[{"line_number":1530,"context_line":"    @staticmethod"},{"line_number":1531,"context_line":"    def validate(tc):"},{"line_number":1532,"context_line":"        if tc[\u0027timezone\u0027]:"},{"line_number":1533,"context_line":"            pytz.timezone(tc[\u0027timezone\u0027])"},{"line_number":1534,"context_line":"        return tc"},{"line_number":1535,"context_line":""},{"line_number":1536,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2F8bE%3D","line":1533,"in_reply_to":"AAAAVn%2F%2F87Y%3D","updated":"2014-03-03 09:16:18.000000000","message":"Done","commit_id":"b6022bcb4ed3872168f4434ec330c8f53bf8df3e"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":1493,"context_line":"                              \u0027153462d0-a9b8-4b5b-8175-9e4b05e9b856\u0027])"},{"line_number":1494,"context_line":""},{"line_number":1495,"context_line":""},{"line_number":1496,"context_line":"class AlarmTimeConstraint(_Base):"},{"line_number":1497,"context_line":"    \"\"\"Representation of a time constraint on an alarm.\"\"\""},{"line_number":1498,"context_line":""},{"line_number":1499,"context_line":"    name \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F3r0%3D","line":1496,"updated":"2014-03-03 18:05:20.000000000","message":"AlarmTimeConstraint should be added to the API doc in v2.rst, like in case of AlarmCombinationRule the doc looks like the following:\n.. autotype:: ceilometer.api.controllers.v2.AlarmCombinationRule\n   :members:","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":1493,"context_line":"                              \u0027153462d0-a9b8-4b5b-8175-9e4b05e9b856\u0027])"},{"line_number":1494,"context_line":""},{"line_number":1495,"context_line":""},{"line_number":1496,"context_line":"class AlarmTimeConstraint(_Base):"},{"line_number":1497,"context_line":"    \"\"\"Representation of a time constraint on an alarm.\"\"\""},{"line_number":1498,"context_line":""},{"line_number":1499,"context_line":"    name \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FxLA%3D","line":1496,"in_reply_to":"AAAAVn%2F%2F3r0%3D","updated":"2014-03-04 12:42:35.000000000","message":"Done","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":1533,"context_line":"            try:"},{"line_number":1534,"context_line":"                pytz.timezone(tc[\u0027timezone\u0027])"},{"line_number":1535,"context_line":"            except Exception:"},{"line_number":1536,"context_line":"                raise ClientSideError(\"Timezone format invalid.\")"},{"line_number":1537,"context_line":"        return tc"},{"line_number":1538,"context_line":""},{"line_number":1539,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F3rE%3D","line":1536,"updated":"2014-03-03 18:05:20.000000000","message":"Translation is missing, see other exception texts.\n\nThe invalid timezone text would be good to be inserted in the error message.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":1533,"context_line":"            try:"},{"line_number":1534,"context_line":"                pytz.timezone(tc[\u0027timezone\u0027])"},{"line_number":1535,"context_line":"            except Exception:"},{"line_number":1536,"context_line":"                raise ClientSideError(\"Timezone format invalid.\")"},{"line_number":1537,"context_line":"        return tc"},{"line_number":1538,"context_line":""},{"line_number":1539,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FxBo%3D","line":1536,"in_reply_to":"AAAAVn%2F%2F3rE%3D","updated":"2014-03-04 12:42:35.000000000","message":"Done","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":1672,"context_line":"                   name\u003d\"SwiftObjectAlarm\","},{"line_number":1673,"context_line":"                   description\u003d\"An alarm\","},{"line_number":1674,"context_line":"                   type\u003d\u0027combination\u0027,"},{"line_number":1675,"context_line":"                   threshold_rule\u003dNone,"},{"line_number":1676,"context_line":"                   combination_rule\u003dAlarmCombinationRule.sample(),"},{"line_number":1677,"context_line":"                   user_id\u003d\"c96c887c216949acbdfbd8b494863567\","},{"line_number":1678,"context_line":"                   project_id\u003d\"c96c887c216949acbdfbd8b494863567\","}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F3us%3D","line":1675,"updated":"2014-03-03 18:05:20.000000000","message":"\u0027time_constraints\u0027 is missing from sample.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":1672,"context_line":"                   name\u003d\"SwiftObjectAlarm\","},{"line_number":1673,"context_line":"                   description\u003d\"An alarm\","},{"line_number":1674,"context_line":"                   type\u003d\u0027combination\u0027,"},{"line_number":1675,"context_line":"                   threshold_rule\u003dNone,"},{"line_number":1676,"context_line":"                   combination_rule\u003dAlarmCombinationRule.sample(),"},{"line_number":1677,"context_line":"                   user_id\u003d\"c96c887c216949acbdfbd8b494863567\","},{"line_number":1678,"context_line":"                   project_id\u003d\"c96c887c216949acbdfbd8b494863567\","}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FxBA%3D","line":1675,"in_reply_to":"AAAAVn%2F%2F3us%3D","updated":"2014-03-04 12:42:35.000000000","message":"Done","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"0527327b87c4f0e18ac71dde5a01d079f79a588f","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"                   type\u003d\u0027combination\u0027,"},{"line_number":1676,"context_line":"                   threshold_rule\u003dNone,"},{"line_number":1677,"context_line":"                   combination_rule\u003dAlarmCombinationRule.sample(),"},{"line_number":1678,"context_line":"                   time_constraints\u003d[AlarmTimeConstraint.sample()],"},{"line_number":1679,"context_line":"                   user_id\u003d\"c96c887c216949acbdfbd8b494863567\","},{"line_number":1680,"context_line":"                   project_id\u003d\"c96c887c216949acbdfbd8b494863567\","},{"line_number":1681,"context_line":"                   enabled\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2FuMY%3D","line":1678,"updated":"2014-03-04 13:55:05.000000000","message":"This definition will not work with sphinx as I saw, I think it is better to insert a sample here by hand, hopefully it solves the build issue.","commit_id":"939f46ff4276cab246e85c8d87d33e7a3b78e8a9"}],"ceilometer/tests/alarm/evaluator/test_base.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        alarm.time_constraints \u003d ["},{"line_number":55,"context_line":"            {\u0027name\u0027: \u0027test\u0027,"},{"line_number":56,"context_line":"             \u0027description\u0027: \u0027test\u0027,"},{"line_number":57,"context_line":"             \u0027start\u0027: \u00270 11 * * *\u0027,"},{"line_number":58,"context_line":"             \u0027duration\u0027: 10800,  # 3 hours"},{"line_number":59,"context_line":"             \u0027timezone\u0027: \u0027\u0027},"},{"line_number":60,"context_line":"            {\u0027name\u0027: \u0027test2\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F4Qg%3D","line":57,"updated":"2014-03-03 18:05:20.000000000","message":"As there is a comment for duration, maybe it would worth to add one to \u0027start\u0027 too.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        alarm.time_constraints \u003d ["},{"line_number":55,"context_line":"            {\u0027name\u0027: \u0027test\u0027,"},{"line_number":56,"context_line":"             \u0027description\u0027: \u0027test\u0027,"},{"line_number":57,"context_line":"             \u0027start\u0027: \u00270 11 * * *\u0027,"},{"line_number":58,"context_line":"             \u0027duration\u0027: 10800,  # 3 hours"},{"line_number":59,"context_line":"             \u0027timezone\u0027: \u0027\u0027},"},{"line_number":60,"context_line":"            {\u0027name\u0027: \u0027test2\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FxAY%3D","line":57,"in_reply_to":"AAAAVn%2F%2F4Qg%3D","updated":"2014-03-04 12:42:35.000000000","message":"Done","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":59,"context_line":"             \u0027timezone\u0027: \u0027\u0027},"},{"line_number":60,"context_line":"            {\u0027name\u0027: \u0027test2\u0027,"},{"line_number":61,"context_line":"             \u0027description\u0027: \u0027test\u0027,"},{"line_number":62,"context_line":"             \u0027start\u0027: \u00270 23 * * *\u0027,"},{"line_number":63,"context_line":"             \u0027duration\u0027: 10800,  # 3 hours"},{"line_number":64,"context_line":"             \u0027timezone\u0027: \u0027\u0027},"},{"line_number":65,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F4QU%3D","line":62,"updated":"2014-03-03 18:05:20.000000000","message":"Same as above.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":59,"context_line":"             \u0027timezone\u0027: \u0027\u0027},"},{"line_number":60,"context_line":"            {\u0027name\u0027: \u0027test2\u0027,"},{"line_number":61,"context_line":"             \u0027description\u0027: \u0027test\u0027,"},{"line_number":62,"context_line":"             \u0027start\u0027: \u00270 23 * * *\u0027,"},{"line_number":63,"context_line":"             \u0027duration\u0027: 10800,  # 3 hours"},{"line_number":64,"context_line":"             \u0027timezone\u0027: \u0027\u0027},"},{"line_number":65,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FxAU%3D","line":62,"in_reply_to":"AAAAVn%2F%2F4QU%3D","updated":"2014-03-04 12:42:35.000000000","message":"Done","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def test_base_time_constraints_timezone(self):"},{"line_number":77,"context_line":"        alarm \u003d mock.MagicMock()"},{"line_number":78,"context_line":"        alarm.time_constraints \u003d ["},{"line_number":79,"context_line":"            {\u0027name\u0027: \u0027test\u0027,"},{"line_number":80,"context_line":"             \u0027description\u0027: \u0027test\u0027,"},{"line_number":81,"context_line":"             \u0027start\u0027: \u00270 11 * * *\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F4Lo%3D","line":78,"updated":"2014-03-03 18:05:20.000000000","message":"The test data is very similar in the two cases, it would be good to extract as much as possible.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def test_base_time_constraints_timezone(self):"},{"line_number":77,"context_line":"        alarm \u003d mock.MagicMock()"},{"line_number":78,"context_line":"        alarm.time_constraints \u003d ["},{"line_number":79,"context_line":"            {\u0027name\u0027: \u0027test\u0027,"},{"line_number":80,"context_line":"             \u0027description\u0027: \u0027test\u0027,"},{"line_number":81,"context_line":"             \u0027start\u0027: \u00270 11 * * *\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2Fw9s%3D","line":78,"in_reply_to":"AAAAVn%2F%2F4Lo%3D","updated":"2014-03-04 12:42:35.000000000","message":"Since the test data is so small, I think the increased readability of test cases is worth keeping it the way it is.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        alarm.time_constraints \u003d ["},{"line_number":79,"context_line":"            {\u0027name\u0027: \u0027test\u0027,"},{"line_number":80,"context_line":"             \u0027description\u0027: \u0027test\u0027,"},{"line_number":81,"context_line":"             \u0027start\u0027: \u00270 11 * * *\u0027,"},{"line_number":82,"context_line":"             \u0027duration\u0027: 10800,  # 3 hours"},{"line_number":83,"context_line":"             \u0027timezone\u0027: \u0027Europe/Ljubljana\u0027}"},{"line_number":84,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F4NY%3D","line":81,"updated":"2014-03-03 18:05:20.000000000","message":"Add comment, same as above.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        alarm.time_constraints \u003d ["},{"line_number":79,"context_line":"            {\u0027name\u0027: \u0027test\u0027,"},{"line_number":80,"context_line":"             \u0027description\u0027: \u0027test\u0027,"},{"line_number":81,"context_line":"             \u0027start\u0027: \u00270 11 * * *\u0027,"},{"line_number":82,"context_line":"             \u0027duration\u0027: 10800,  # 3 hours"},{"line_number":83,"context_line":"             \u0027timezone\u0027: \u0027Europe/Ljubljana\u0027}"},{"line_number":84,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2Fw9g%3D","line":81,"in_reply_to":"AAAAVn%2F%2F4NY%3D","updated":"2014-03-04 12:42:35.000000000","message":"Done","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acc81b5cdad0b696cd80d1c6204f3a7da476ae03","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.assertTrue(cls.within_time_constraint(alarm))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        timeutils.set_time_override(dt_us.astimezone(pytz.UTC))"},{"line_number":94,"context_line":"        self.assertFalse(cls.within_time_constraint(alarm))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F38k%3D","line":94,"updated":"2014-03-03 18:19:23.000000000","message":"I think it would be good to have one more test with a more complicated cron expression like \"3-57 3-12/2 * * Sunday\"","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.assertTrue(cls.within_time_constraint(alarm))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        timeutils.set_time_override(dt_us.astimezone(pytz.UTC))"},{"line_number":94,"context_line":"        self.assertFalse(cls.within_time_constraint(alarm))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FwwI%3D","line":94,"in_reply_to":"AAAAVn%2F%2F38k%3D","updated":"2014-03-04 12:42:35.000000000","message":"Done, I tried to check the edge cases without actually writing the unit tests for the whole croniter library :)","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c282de4934f1c3dd16fa2ec35331735b4c11134","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.assertTrue(cls.within_time_constraint(alarm))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        timeutils.set_time_override(dt_us.astimezone(pytz.UTC))"},{"line_number":94,"context_line":"        self.assertFalse(cls.within_time_constraint(alarm))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2Fumw%3D","line":94,"in_reply_to":"AAAAVn%2F%2FwwI%3D","updated":"2014-03-04 12:58:29.000000000","message":"Fair enough. Thanks!","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"}],"ceilometer/tests/alarm/evaluator/test_combination.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        self.alarms[0].time_constraints \u003d ["},{"line_number":316,"context_line":"            {\u0027name\u0027: \u0027test\u0027,"},{"line_number":317,"context_line":"             \u0027description\u0027: \u0027test\u0027,"},{"line_number":318,"context_line":"             \u0027start\u0027: \u00270 11 * * *\u0027,"},{"line_number":319,"context_line":"             \u0027duration\u0027: 10800,  # 3 hours"},{"line_number":320,"context_line":"             \u0027timezone\u0027: \u0027Europe/Ljubljana\u0027}"},{"line_number":321,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F4Kc%3D","line":318,"updated":"2014-03-03 18:05:20.000000000","message":"Add comment here as below for duration.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        self.alarms[0].time_constraints \u003d ["},{"line_number":316,"context_line":"            {\u0027name\u0027: \u0027test\u0027,"},{"line_number":317,"context_line":"             \u0027description\u0027: \u0027test\u0027,"},{"line_number":318,"context_line":"             \u0027start\u0027: \u00270 11 * * *\u0027,"},{"line_number":319,"context_line":"             \u0027duration\u0027: 10800,  # 3 hours"},{"line_number":320,"context_line":"             \u0027timezone\u0027: \u0027Europe/Ljubljana\u0027}"},{"line_number":321,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FwvE%3D","line":318,"in_reply_to":"AAAAVn%2F%2F4Kc%3D","updated":"2014-03-04 12:42:35.000000000","message":"Done","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":335,"context_line":"            expected \u003d [mock.call(alarm.alarm_id, state\u003d\u0027ok\u0027)"},{"line_number":336,"context_line":"                        for alarm in self.alarms]"},{"line_number":337,"context_line":"            update_calls \u003d self.api_client.alarms.set_state.call_args_list"},{"line_number":338,"context_line":"            self.assertEqual(update_calls, expected,"},{"line_number":339,"context_line":"                             \"Alarm should change state if the current\""},{"line_number":340,"context_line":"                             \"time is inside its time constraint.\")"},{"line_number":341,"context_line":"            reasons, reason_datas \u003d self._combination_transition_reason("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F4IA%3D","line":338,"updated":"2014-03-03 18:05:20.000000000","message":"According to bug #1277104 the order should be expected, update_calls","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":335,"context_line":"            expected \u003d [mock.call(alarm.alarm_id, state\u003d\u0027ok\u0027)"},{"line_number":336,"context_line":"                        for alarm in self.alarms]"},{"line_number":337,"context_line":"            update_calls \u003d self.api_client.alarms.set_state.call_args_list"},{"line_number":338,"context_line":"            self.assertEqual(update_calls, expected,"},{"line_number":339,"context_line":"                             \"Alarm should change state if the current\""},{"line_number":340,"context_line":"                             \"time is inside its time constraint.\")"},{"line_number":341,"context_line":"            reasons, reason_datas \u003d self._combination_transition_reason("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2Fwss%3D","line":338,"in_reply_to":"AAAAVn%2F%2F4IA%3D","updated":"2014-03-04 12:42:35.000000000","message":"Done","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                        for alarm in self.alarms]"},{"line_number":337,"context_line":"            update_calls \u003d self.api_client.alarms.set_state.call_args_list"},{"line_number":338,"context_line":"            self.assertEqual(update_calls, expected,"},{"line_number":339,"context_line":"                             \"Alarm should change state if the current\""},{"line_number":340,"context_line":"                             \"time is inside its time constraint.\")"},{"line_number":341,"context_line":"            reasons, reason_datas \u003d self._combination_transition_reason("},{"line_number":342,"context_line":"                \u0027ok\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F4H0%3D","line":339,"updated":"2014-03-03 18:05:20.000000000","message":"Whitespace is needed after current.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                                  reason, reason_data)"},{"line_number":347,"context_line":"                        for alarm, reason, reason_data"},{"line_number":348,"context_line":"                        in zip(self.alarms, reasons, reason_datas)]"},{"line_number":349,"context_line":"            self.assertEqual(self.notifier.notify.call_args_list, expected)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def test_no_state_change_outside_time_constraint(self):"},{"line_number":352,"context_line":"        self._set_all_alarms(\u0027insufficient data\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F4Go%3D","line":349,"updated":"2014-03-03 18:05:20.000000000","message":"Order change same, as above.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def test_no_state_change_outside_time_constraint(self):"},{"line_number":352,"context_line":"        self._set_all_alarms(\u0027insufficient data\u0027)"},{"line_number":353,"context_line":"        self.alarms[0].time_constraints \u003d ["},{"line_number":354,"context_line":"            {\u0027name\u0027: \u0027test\u0027,"},{"line_number":355,"context_line":"             \u0027description\u0027: \u0027test\u0027,"},{"line_number":356,"context_line":"             \u0027start\u0027: \u00270 11 * * *\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F4Bg%3D","line":353,"updated":"2014-03-03 18:05:20.000000000","message":"The test data is the same as above, it should be extracted into a common place and reuse it from there.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":371,"context_line":"            ]"},{"line_number":372,"context_line":"            self._evaluate_all_alarms()"},{"line_number":373,"context_line":"            update_calls \u003d self.api_client.alarms.set_state.call_args_list"},{"line_number":374,"context_line":"            self.assertEqual(update_calls, [],"},{"line_number":375,"context_line":"                             \"Alarm should not change state if the current\""},{"line_number":376,"context_line":"                             \" time is outside its time constraint.\")"},{"line_number":377,"context_line":"            self.assertEqual(self.notifier.notify.call_args_list, [])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F36Y%3D","line":374,"updated":"2014-03-03 18:05:20.000000000","message":"Order change, as above.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":374,"context_line":"            self.assertEqual(update_calls, [],"},{"line_number":375,"context_line":"                             \"Alarm should not change state if the current\""},{"line_number":376,"context_line":"                             \" time is outside its time constraint.\")"},{"line_number":377,"context_line":"            self.assertEqual(self.notifier.notify.call_args_list, [])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F36M%3D","line":377,"updated":"2014-03-03 18:05:20.000000000","message":"Order change, as above.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"}],"ceilometer/tests/alarm/evaluator/test_threshold.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        self.alarms[0].time_constraints \u003d ["},{"line_number":448,"context_line":"            {\u0027name\u0027: \u0027test\u0027,"},{"line_number":449,"context_line":"             \u0027description\u0027: \u0027test\u0027,"},{"line_number":450,"context_line":"             \u0027start\u0027: \u00270 11 * * *\u0027,"},{"line_number":451,"context_line":"             \u0027duration\u0027: 10800,  # 3 hours"},{"line_number":452,"context_line":"             \u0027timezone\u0027: \u0027Europe/Ljubljana\u0027}"},{"line_number":453,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F3%2BA%3D","line":450,"updated":"2014-03-03 18:05:20.000000000","message":"Add comment here, as for duration below.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                                  state\u003d\u0027insufficient data\u0027)"},{"line_number":466,"context_line":"                        for alarm in self.alarms]"},{"line_number":467,"context_line":"            update_calls \u003d self.api_client.alarms.set_state.call_args_list"},{"line_number":468,"context_line":"            self.assertEqual(update_calls, expected,"},{"line_number":469,"context_line":"                             \"Alarm should change state if the current\""},{"line_number":470,"context_line":"                             \"time is inside its time constraint.\")"},{"line_number":471,"context_line":"            expected \u003d [mock.call("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F39g%3D","line":468,"updated":"2014-03-03 18:05:20.000000000","message":"According to bug #1277104, the order should be expected, update_calls.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":466,"context_line":"                        for alarm in self.alarms]"},{"line_number":467,"context_line":"            update_calls \u003d self.api_client.alarms.set_state.call_args_list"},{"line_number":468,"context_line":"            self.assertEqual(update_calls, expected,"},{"line_number":469,"context_line":"                             \"Alarm should change state if the current\""},{"line_number":470,"context_line":"                             \"time is inside its time constraint.\")"},{"line_number":471,"context_line":"            expected \u003d [mock.call("},{"line_number":472,"context_line":"                alarm,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F38w%3D","line":469,"updated":"2014-03-03 18:05:20.000000000","message":"Whitespace is missing after current.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":477,"context_line":"                                  alarm.rule[\u0027evaluation_periods\u0027],"},{"line_number":478,"context_line":"                                  None))"},{"line_number":479,"context_line":"                for alarm in self.alarms]"},{"line_number":480,"context_line":"            self.assertEqual(self.notifier.notify.call_args_list, expected)"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    def test_no_state_change_outside_time_constraint(self):"},{"line_number":483,"context_line":"        self._set_all_alarms(\u0027ok\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F38Y%3D","line":480,"updated":"2014-03-03 18:05:20.000000000","message":"Order change, as above.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    def test_no_state_change_outside_time_constraint(self):"},{"line_number":483,"context_line":"        self._set_all_alarms(\u0027ok\u0027)"},{"line_number":484,"context_line":"        self.alarms[0].time_constraints \u003d ["},{"line_number":485,"context_line":"            {\u0027name\u0027: \u0027test\u0027,"},{"line_number":486,"context_line":"             \u0027description\u0027: \u0027test\u0027,"},{"line_number":487,"context_line":"             \u0027start\u0027: \u00270 11 * * *\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F37s%3D","line":484,"updated":"2014-03-03 18:05:20.000000000","message":"Test data should be extracted to a common place.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":498,"context_line":"            self._evaluate_all_alarms()"},{"line_number":499,"context_line":"            self._assert_all_alarms(\u0027ok\u0027)"},{"line_number":500,"context_line":"            update_calls \u003d self.api_client.alarms.set_state.call_args_list"},{"line_number":501,"context_line":"            self.assertEqual(update_calls, [],"},{"line_number":502,"context_line":"                             \"Alarm should not change state if the current\""},{"line_number":503,"context_line":"                             \" time is outside its time constraint.\")"},{"line_number":504,"context_line":"            self.assertEqual(self.notifier.notify.call_args_list, [])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F37A%3D","line":501,"updated":"2014-03-03 18:05:20.000000000","message":"Order change, as above.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":501,"context_line":"            self.assertEqual(update_calls, [],"},{"line_number":502,"context_line":"                             \"Alarm should not change state if the current\""},{"line_number":503,"context_line":"                             \" time is outside its time constraint.\")"},{"line_number":504,"context_line":"            self.assertEqual(self.notifier.notify.call_args_list, [])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F36w%3D","line":504,"updated":"2014-03-03 18:05:20.000000000","message":"Order change, as above.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"}],"ceilometer/tests/api/v2/test_alarm_scenarios.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"d1b686d594f26eaad32b8937c9985254babedae6","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        self.post_json(\u0027/alarms\u0027, params\u003djson, expect_errors\u003dTrue, status\u003d400,"},{"line_number":376,"context_line":"                       headers\u003dself.auth_headers)"},{"line_number":377,"context_line":"        alarms \u003d list(self.conn.get_alarms())"},{"line_number":378,"context_line":"        self.assertEqual(4, len(alarms))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_post_invalid_alarm_period(self):"},{"line_number":381,"context_line":"        json \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F3zc%3D","line":378,"updated":"2014-03-03 18:05:20.000000000","message":"The Error message that is raised in the validate function in v2.py could be checked here also.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        self.post_json(\u0027/alarms\u0027, params\u003djson, expect_errors\u003dTrue, status\u003d400,"},{"line_number":376,"context_line":"                       headers\u003dself.auth_headers)"},{"line_number":377,"context_line":"        alarms \u003d list(self.conn.get_alarms())"},{"line_number":378,"context_line":"        self.assertEqual(4, len(alarms))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_post_invalid_alarm_period(self):"},{"line_number":381,"context_line":"        json \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2Fwmk%3D","line":378,"in_reply_to":"AAAAVn%2F%2F3zc%3D","updated":"2014-03-04 12:42:35.000000000","message":"Is it wise checking a translatable string in unit tests?","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acc81b5cdad0b696cd80d1c6204f3a7da476ae03","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                       headers\u003dself.auth_headers)"},{"line_number":377,"context_line":"        alarms \u003d list(self.conn.get_alarms())"},{"line_number":378,"context_line":"        self.assertEqual(4, len(alarms))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_post_invalid_alarm_period(self):"},{"line_number":381,"context_line":"        json \u003d {"},{"line_number":382,"context_line":"            \u0027name\u0027: \u0027added_alarm_invalid_period\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F3v4%3D","line":379,"updated":"2014-03-03 18:19:23.000000000","message":"I think it would be good to have one more test case getting and alarm which has a non empty time_constraints field","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                       headers\u003dself.auth_headers)"},{"line_number":377,"context_line":"        alarms \u003d list(self.conn.get_alarms())"},{"line_number":378,"context_line":"        self.assertEqual(4, len(alarms))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_post_invalid_alarm_period(self):"},{"line_number":381,"context_line":"        json \u003d {"},{"line_number":382,"context_line":"            \u0027name\u0027: \u0027added_alarm_invalid_period\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2Fwik%3D","line":379,"in_reply_to":"AAAAVn%2F%2F3v4%3D","updated":"2014-03-04 12:42:35.000000000","message":"Done","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"}],"ceilometer/tests/storage/test_storage_scenarios.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acc81b5cdad0b696cd80d1c6204f3a7da476ae03","unresolved":false,"context_lines":[{"line_number":696,"context_line":"                             alarm_actions\u003d[\u0027http://nowhere/alarms\u0027],"},{"line_number":697,"context_line":"                             insufficient_data_actions\u003d[],"},{"line_number":698,"context_line":"                             repeat_actions\u003dFalse,"},{"line_number":699,"context_line":"                             time_constraints\u003d[],"},{"line_number":700,"context_line":"                             rule\u003ddict(comparison_operator\u003d\u0027eq\u0027,"},{"line_number":701,"context_line":"                                       threshold\u003d36,"},{"line_number":702,"context_line":"                                       statistic\u003d\u0027count\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2F3uA%3D","line":699,"updated":"2014-03-03 18:19:23.000000000","message":"I think it would be good to add a non empty time_constraints field to one of the test alarms.","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5079676b9ef8e09667370c68fb452c662f7d2ca9","unresolved":false,"context_lines":[{"line_number":696,"context_line":"                             alarm_actions\u003d[\u0027http://nowhere/alarms\u0027],"},{"line_number":697,"context_line":"                             insufficient_data_actions\u003d[],"},{"line_number":698,"context_line":"                             repeat_actions\u003dFalse,"},{"line_number":699,"context_line":"                             time_constraints\u003d[],"},{"line_number":700,"context_line":"                             rule\u003ddict(comparison_operator\u003d\u0027eq\u0027,"},{"line_number":701,"context_line":"                                       threshold\u003d36,"},{"line_number":702,"context_line":"                                       statistic\u003d\u0027count\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2Fwe0%3D","line":699,"in_reply_to":"AAAAVn%2F%2F3uA%3D","updated":"2014-03-04 12:42:35.000000000","message":"Done","commit_id":"0625de616369065c451e06c7fdb5ea2be48e79b1"}],"ceilometer/utils.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"88faed7e67fa0234eff9a1ae602ee4737e5a93e5","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        raise ValueError(\u0027Does not match duration format\u0027)"},{"line_number":149,"context_line":"    kwargs \u003d dict((k, float(v)) for k, v in m.groupdict().items()"},{"line_number":150,"context_line":"                  if v is not None)"},{"line_number":151,"context_line":"    return datetime.timedelta(**kwargs)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"# Necessary for testing, because datetime cannot be patched directly"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2BZLA%3D","line":151,"updated":"2014-02-21 13:04:45.000000000","message":"I can see where you\u0027re going with this from a usability PoV.\n\nHowever, given that we currently only allow the alarm period to be specified in seconds, I\u0027m thinking it would be more consistent and simpler to do the same for the time constraint duration.","commit_id":"99c6f4201a2dd4036a295758a68588c46b616449"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"62f7998107b1a81a22624c657649878dc2c1dd4a","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        raise ValueError(\u0027Does not match duration format\u0027)"},{"line_number":149,"context_line":"    kwargs \u003d dict((k, float(v)) for k, v in m.groupdict().items()"},{"line_number":150,"context_line":"                  if v is not None)"},{"line_number":151,"context_line":"    return datetime.timedelta(**kwargs)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"# Necessary for testing, because datetime cannot be patched directly"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2BZDo%3D","line":151,"in_reply_to":"AAAAUX%2F%2BZLA%3D","updated":"2014-02-21 13:14:55.000000000","message":"Good point, seconds only would also lessen the overhead of the regex parse.","commit_id":"99c6f4201a2dd4036a295758a68588c46b616449"}]}
