)]}'
{"ceilometer/alarm/threshold_evaluation.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"02ef5c4f322a39bcb3a4c3e198c62dc5c6a64181","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright © 2012 Red Hat, Inc"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Author: Eoghan Glynn \u003ceglynn@redhat.com\u003e"},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2Fogo%3D","line":3,"updated":"2013-06-28 08:17:56.000000000","message":"Did you keep this code hidden for months? :)","commit_id":"5c393c4f9fda7963088e977e04e31bcf17ef70d5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"02ef5c4f322a39bcb3a4c3e198c62dc5c6a64181","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"COMPARATORS \u003d {"},{"line_number":29,"context_line":"    \u0027gt\u0027: lambda x, y: x \u003e y,"},{"line_number":30,"context_line":"    \u0027lt\u0027: lambda x, y: x \u003c y,"},{"line_number":31,"context_line":"    \u0027ge\u0027: lambda x, y: x \u003e\u003d y,"},{"line_number":32,"context_line":"    \u0027le\u0027: lambda x, y: x \u003c\u003d y,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FogY%3D","line":29,"updated":"2013-06-28 08:17:56.000000000","message":"You should use functions from the operator module.","commit_id":"5c393c4f9fda7963088e977e04e31bcf17ef70d5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"02ef5c4f322a39bcb3a4c3e198c62dc5c6a64181","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"\"\"Assign alarms  to be evaluated.\"\"\""},{"line_number":62,"context_line":"        self.alarms \u003d alarms"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _client(self):"},{"line_number":65,"context_line":"        \"\"\"Construct or reuse an authenticated API client.\"\"\""},{"line_number":66,"context_line":"        if not self.api_client:"},{"line_number":67,"context_line":"            auth_config \u003d cfg.CONF.service_credentials"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FlIM%3D","line":64,"updated":"2013-06-28 08:17:56.000000000","message":"I guess you could use a @property :)","commit_id":"5c393c4f9fda7963088e977e04e31bcf17ef70d5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"02ef5c4f322a39bcb3a4c3e198c62dc5c6a64181","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        \"\"\"Ensure there is sufficient data for evaluation,"},{"line_number":139,"context_line":"           transitioning to unknown otherwise."},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        sufficient \u003d len(statistics) \u003e\u003d Evaluator.quorum"},{"line_number":142,"context_line":"        if not sufficient and alarm.state !\u003d UNKNOWN:"},{"line_number":143,"context_line":"            reason \u003d _(\u0027%d datapoints are unknown\u0027) % alarm.evaluation_periods"},{"line_number":144,"context_line":"            self._update(alarm, UNKNOWN, reason)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FlG0%3D","line":141,"updated":"2013-06-28 08:17:56.000000000","message":"Don\u0027t use Evaluator, use self.\n\nAlso I wonder why quorum shouldn\u0027t be part of Alarm itself, though that should be added in another change.","commit_id":"5c393c4f9fda7963088e977e04e31bcf17ef70d5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"02ef5c4f322a39bcb3a4c3e198c62dc5c6a64181","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        if unequivocal:"},{"line_number":173,"context_line":"            state \u003d ALARM if distilled else OK"},{"line_number":174,"context_line":"            if alarm.state !\u003d state:"},{"line_number":175,"context_line":"                reason \u003d Evaluator._reason(alarm, statistics, distilled, state)"},{"line_number":176,"context_line":"                self._update(alarm, state, reason)"},{"line_number":177,"context_line":"        elif alarm.state \u003d\u003d UNKNOWN:"},{"line_number":178,"context_line":"            state \u003d ALARM if compared[-1] else OK"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FlGE%3D","line":175,"updated":"2013-06-28 08:17:56.000000000","message":"self","commit_id":"5c393c4f9fda7963088e977e04e31bcf17ef70d5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"02ef5c4f322a39bcb3a4c3e198c62dc5c6a64181","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                reason \u003d Evaluator._reason(alarm, statistics, distilled, state)"},{"line_number":176,"context_line":"                self._update(alarm, state, reason)"},{"line_number":177,"context_line":"        elif alarm.state \u003d\u003d UNKNOWN:"},{"line_number":178,"context_line":"            state \u003d ALARM if compared[-1] else OK"},{"line_number":179,"context_line":"            reason \u003d Evaluator._reason(alarm, statistics, distilled, state)"},{"line_number":180,"context_line":"            self._update(alarm, state, reason)"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FlFo%3D","line":178,"updated":"2013-06-28 08:17:56.000000000","message":"I\u0027m just not sure I get the -1 here. Why not any(compared)?","commit_id":"5c393c4f9fda7963088e977e04e31bcf17ef70d5"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"95443b3414f21e96f1402b4c2afdef05452efc48","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                reason \u003d Evaluator._reason(alarm, statistics, distilled, state)"},{"line_number":176,"context_line":"                self._update(alarm, state, reason)"},{"line_number":177,"context_line":"        elif alarm.state \u003d\u003d UNKNOWN:"},{"line_number":178,"context_line":"            state \u003d ALARM if compared[-1] else OK"},{"line_number":179,"context_line":"            reason \u003d Evaluator._reason(alarm, statistics, distilled, state)"},{"line_number":180,"context_line":"            self._update(alarm, state, reason)"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FiVk%3D","line":178,"in_reply_to":"AAAAPn%2F%2FlFo%3D","updated":"2013-06-28 10:17:42.000000000","message":"That implements the state transition rule that in the equivocal case (i.e. mixed datapoints on either side of the threshold) transitioning from the unknown state is on the basis of the most recent datapoint.\n\nSee the TestEvaluate.test_equivocal_from_unknown testcase.","commit_id":"5c393c4f9fda7963088e977e04e31bcf17ef70d5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"02ef5c4f322a39bcb3a4c3e198c62dc5c6a64181","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                self._update(alarm, state, reason)"},{"line_number":177,"context_line":"        elif alarm.state \u003d\u003d UNKNOWN:"},{"line_number":178,"context_line":"            state \u003d ALARM if compared[-1] else OK"},{"line_number":179,"context_line":"            reason \u003d Evaluator._reason(alarm, statistics, distilled, state)"},{"line_number":180,"context_line":"            self._update(alarm, state, reason)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def evaluate(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FlGA%3D","line":179,"updated":"2013-06-28 08:17:56.000000000","message":"self","commit_id":"5c393c4f9fda7963088e977e04e31bcf17ef70d5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"02ef5c4f322a39bcb3a4c3e198c62dc5c6a64181","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                continue"},{"line_number":193,"context_line":"            LOG.debug(_(\u0027evaluating alarm %s\u0027) % alarm.alarm_id)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"            query \u003d Evaluator._bound_duration("},{"line_number":196,"context_line":"                alarm,"},{"line_number":197,"context_line":"                Evaluator._constraints(alarm)"},{"line_number":198,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FlHA%3D","line":195,"updated":"2013-06-28 08:17:56.000000000","message":"Don\u0027t use Evaluator. \nUse self.\nOtherwise that would break a potential class inheriting.","commit_id":"5c393c4f9fda7963088e977e04e31bcf17ef70d5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"02ef5c4f322a39bcb3a4c3e198c62dc5c6a64181","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"            query \u003d Evaluator._bound_duration("},{"line_number":196,"context_line":"                alarm,"},{"line_number":197,"context_line":"                Evaluator._constraints(alarm)"},{"line_number":198,"context_line":"            )"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"            statistics \u003d Evaluator._sanitize("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FlG8%3D","line":197,"updated":"2013-06-28 08:17:56.000000000","message":"Same here.","commit_id":"5c393c4f9fda7963088e977e04e31bcf17ef70d5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"02ef5c4f322a39bcb3a4c3e198c62dc5c6a64181","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                Evaluator._constraints(alarm)"},{"line_number":198,"context_line":"            )"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"            statistics \u003d Evaluator._sanitize("},{"line_number":201,"context_line":"                alarm,"},{"line_number":202,"context_line":"                self._statistics(alarm, query)"},{"line_number":203,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FlG4%3D","line":200,"updated":"2013-06-28 08:17:56.000000000","message":"Ditto.","commit_id":"5c393c4f9fda7963088e977e04e31bcf17ef70d5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"352f9b3f50d7cca42f5e8b77ea8370cadbb41240","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        \"\"\"\"Bound the duration of the statistics query.\"\"\""},{"line_number":90,"context_line":"        now \u003d datetime.datetime.utcnow()"},{"line_number":91,"context_line":"        window \u003d (alarm.period *"},{"line_number":92,"context_line":"                  (alarm.evaluation_periods + Evaluator.look_back))"},{"line_number":93,"context_line":"        start \u003d now - datetime.timedelta(seconds\u003dwindow)"},{"line_number":94,"context_line":"        LOG.debug(_(\u0027query stats from %(start)s to %(now)s\u0027) % locals())"},{"line_number":95,"context_line":"        after \u003d dict(field\u003d\u0027timestamp\u0027, op\u003d\u0027ge\u0027, value\u003dstart.isoformat())"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fh7M%3D","line":92,"updated":"2013-06-28 13:30:45.000000000","message":"missed a self replacement","commit_id":"f696e19312c53949a9c982e90c60e6306c5d8519"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"2796ef9ef1ce9461a98a78d5003cc5e07aa37949","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        \"\"\"\"Bound the duration of the statistics query.\"\"\""},{"line_number":90,"context_line":"        now \u003d datetime.datetime.utcnow()"},{"line_number":91,"context_line":"        window \u003d (alarm.period *"},{"line_number":92,"context_line":"                  (alarm.evaluation_periods + Evaluator.look_back))"},{"line_number":93,"context_line":"        start \u003d now - datetime.timedelta(seconds\u003dwindow)"},{"line_number":94,"context_line":"        LOG.debug(_(\u0027query stats from %(start)s to %(now)s\u0027) % locals())"},{"line_number":95,"context_line":"        after \u003d dict(field\u003d\u0027timestamp\u0027, op\u003d\u0027ge\u0027, value\u003dstart.isoformat())"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fh30%3D","line":92,"in_reply_to":"AAAAPn%2F%2Fh4k%3D","updated":"2013-06-28 13:37:02.000000000","message":"So it\u0027s not really static :) At least classmethod.","commit_id":"f696e19312c53949a9c982e90c60e6306c5d8519"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a702a5afad33899c2662e643ebd373656d6b2b86","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        \"\"\"\"Bound the duration of the statistics query.\"\"\""},{"line_number":90,"context_line":"        now \u003d datetime.datetime.utcnow()"},{"line_number":91,"context_line":"        window \u003d (alarm.period *"},{"line_number":92,"context_line":"                  (alarm.evaluation_periods + Evaluator.look_back))"},{"line_number":93,"context_line":"        start \u003d now - datetime.timedelta(seconds\u003dwindow)"},{"line_number":94,"context_line":"        LOG.debug(_(\u0027query stats from %(start)s to %(now)s\u0027) % locals())"},{"line_number":95,"context_line":"        after \u003d dict(field\u003d\u0027timestamp\u0027, op\u003d\u0027ge\u0027, value\u003dstart.isoformat())"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fh4k%3D","line":92,"in_reply_to":"AAAAPn%2F%2Fh7M%3D","updated":"2013-06-28 13:35:20.000000000","message":"It\u0027s within a static method though, so no self reference in this case.","commit_id":"f696e19312c53949a9c982e90c60e6306c5d8519"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"0375984d032e4c251a0405f977f8e39b8dbb3306","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    # the sliding evaluation window is extended to allow"},{"line_number":49,"context_line":"    # for reporting/ingestion lag"},{"line_number":50,"context_line":"    look_back \u003d 1"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    # minimum number of datapoints within sliding window to"},{"line_number":53,"context_line":"    # avoid unknown state"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FgfE%3D","line":50,"updated":"2013-06-28 22:11:28.000000000","message":"are these attributes suppose to be configurable later on? also, is there a reason look_back is used at class level and quorum at the instance level?","commit_id":"8ddf4c207a4d448a01b359718531fa8fedd8bdac"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ef963059a73cb6c761048369f32435af6101843a","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    # the sliding evaluation window is extended to allow"},{"line_number":49,"context_line":"    # for reporting/ingestion lag"},{"line_number":50,"context_line":"    look_back \u003d 1"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    # minimum number of datapoints within sliding window to"},{"line_number":53,"context_line":"    # avoid unknown state"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FdoA%3D","line":50,"in_reply_to":"AAAAPn%2F%2FgfE%3D","updated":"2013-07-01 13:16:02.000000000","message":"Yes, the idea is that these should be configurable or policy-driven in some way (either globally or per-alarm).\n\nWRT to the style of access, that\u0027s really just an artifact of the context in the variable is referenced (cls.variable in a classmethod, self.variable otherwise).","commit_id":"8ddf4c207a4d448a01b359718531fa8fedd8bdac"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"0375984d032e4c251a0405f977f8e39b8dbb3306","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.api_client \u003d None"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def assign_alarms(self, alarms):"},{"line_number":62,"context_line":"        \"\"\"Assign alarms  to be evaluated.\"\"\""},{"line_number":63,"context_line":"        self.alarms \u003d alarms"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FggU%3D","line":62,"updated":"2013-06-28 22:11:28.000000000","message":"(nit) double space","commit_id":"8ddf4c207a4d448a01b359718531fa8fedd8bdac"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ef963059a73cb6c761048369f32435af6101843a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.api_client \u003d None"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def assign_alarms(self, alarms):"},{"line_number":62,"context_line":"        \"\"\"Assign alarms  to be evaluated.\"\"\""},{"line_number":63,"context_line":"        self.alarms \u003d alarms"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2Fdn0%3D","line":62,"in_reply_to":"AAAAPn%2F%2FggU%3D","updated":"2013-07-01 13:16:02.000000000","message":"Good catch! Fixed.","commit_id":"8ddf4c207a4d448a01b359718531fa8fedd8bdac"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"0375984d032e4c251a0405f977f8e39b8dbb3306","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @staticmethod"},{"line_number":80,"context_line":"    def _constraints(alarm):"},{"line_number":81,"context_line":"        \"\"\"\"Assert the constraints on the statistics query.\"\"\""},{"line_number":82,"context_line":"        constraints \u003d []"},{"line_number":83,"context_line":"        for (field, value) in alarm.matching_metadata.iteritems():"},{"line_number":84,"context_line":"            constraints.append(dict(field\u003dfield, op\u003d\u0027eq\u0027, value\u003dvalue))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2Fggg%3D","line":81,"updated":"2013-06-28 22:11:28.000000000","message":"(nit) incorrect amount of quotes - 4 versus 3","commit_id":"8ddf4c207a4d448a01b359718531fa8fedd8bdac"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ef963059a73cb6c761048369f32435af6101843a","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @staticmethod"},{"line_number":80,"context_line":"    def _constraints(alarm):"},{"line_number":81,"context_line":"        \"\"\"\"Assert the constraints on the statistics query.\"\"\""},{"line_number":82,"context_line":"        constraints \u003d []"},{"line_number":83,"context_line":"        for (field, value) in alarm.matching_metadata.iteritems():"},{"line_number":84,"context_line":"            constraints.append(dict(field\u003dfield, op\u003d\u0027eq\u0027, value\u003dvalue))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2Fdns%3D","line":81,"in_reply_to":"AAAAPn%2F%2Fggg%3D","updated":"2013-07-01 13:16:02.000000000","message":"Good catch! Fixed.","commit_id":"8ddf4c207a4d448a01b359718531fa8fedd8bdac"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"0375984d032e4c251a0405f977f8e39b8dbb3306","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @classmethod"},{"line_number":88,"context_line":"    def _bound_duration(cls, alarm, constraints):"},{"line_number":89,"context_line":"        \"\"\"\"Bound the duration of the statistics query.\"\"\""},{"line_number":90,"context_line":"        now \u003d datetime.datetime.utcnow()"},{"line_number":91,"context_line":"        window \u003d (alarm.period *"},{"line_number":92,"context_line":"                  (alarm.evaluation_periods + cls.look_back))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2Fggc%3D","line":89,"updated":"2013-06-28 22:11:28.000000000","message":"(nit) incorrect amount of quotes - 4 versus 3","commit_id":"8ddf4c207a4d448a01b359718531fa8fedd8bdac"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ef963059a73cb6c761048369f32435af6101843a","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @classmethod"},{"line_number":88,"context_line":"    def _bound_duration(cls, alarm, constraints):"},{"line_number":89,"context_line":"        \"\"\"\"Bound the duration of the statistics query.\"\"\""},{"line_number":90,"context_line":"        now \u003d datetime.datetime.utcnow()"},{"line_number":91,"context_line":"        window \u003d (alarm.period *"},{"line_number":92,"context_line":"                  (alarm.evaluation_periods + cls.look_back))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2Fdno%3D","line":89,"in_reply_to":"AAAAPn%2F%2Fggc%3D","updated":"2013-07-01 13:16:02.000000000","message":"Good catch! Fixed.","commit_id":"8ddf4c207a4d448a01b359718531fa8fedd8bdac"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"0375984d032e4c251a0405f977f8e39b8dbb3306","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    def evaluate(self):"},{"line_number":185,"context_line":"        \"\"\"Evaluate the alarms assigned to this evaluator.\"\"\""},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        LOG.info(_(\u0027intiating evaluation cycle on %d alarms\u0027) %"},{"line_number":188,"context_line":"                 len(self.alarms))"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        for alarm in self.alarms:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2Fga8%3D","line":187,"updated":"2013-06-28 22:11:28.000000000","message":"(nit) s/intiating/initiating","commit_id":"8ddf4c207a4d448a01b359718531fa8fedd8bdac"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ef963059a73cb6c761048369f32435af6101843a","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    def evaluate(self):"},{"line_number":185,"context_line":"        \"\"\"Evaluate the alarms assigned to this evaluator.\"\"\""},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        LOG.info(_(\u0027intiating evaluation cycle on %d alarms\u0027) %"},{"line_number":188,"context_line":"                 len(self.alarms))"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        for alarm in self.alarms:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2Fdnk%3D","line":187,"in_reply_to":"AAAAPn%2F%2Fga8%3D","updated":"2013-07-01 13:16:02.000000000","message":"Good catch! Fixed.","commit_id":"8ddf4c207a4d448a01b359718531fa8fedd8bdac"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"0375984d032e4c251a0405f977f8e39b8dbb3306","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                self._constraints(alarm)"},{"line_number":200,"context_line":"            )"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"            statistics \u003d self._sanitize("},{"line_number":203,"context_line":"                alarm,"},{"line_number":204,"context_line":"                self._statistics(alarm, query)"},{"line_number":205,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2Fgdo%3D","line":202,"updated":"2013-06-28 22:11:28.000000000","message":"(nit) i\u0027d prefer if _sanitize was accessed via class but it doesn\u0027t really matter","commit_id":"8ddf4c207a4d448a01b359718531fa8fedd8bdac"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ef963059a73cb6c761048369f32435af6101843a","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                self._constraints(alarm)"},{"line_number":200,"context_line":"            )"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"            statistics \u003d self._sanitize("},{"line_number":203,"context_line":"                alarm,"},{"line_number":204,"context_line":"                self._statistics(alarm, query)"},{"line_number":205,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FdnI%3D","line":202,"in_reply_to":"AAAAPn%2F%2Fgdo%3D","updated":"2013-07-01 13:16:02.000000000","message":"There was some discussion on this earlier in the review trail, jd_ preferred the self. style of access.","commit_id":"8ddf4c207a4d448a01b359718531fa8fedd8bdac"}]}
