)]}'
{"aodh/alarm/evaluator/__init__.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0e56372abbd60f21e6ce336473e56962e224691e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.api_client \u003d None"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @property"},{"line_number":52,"context_line":"    def _client(self):"},{"line_number":53,"context_line":"        \"\"\"Construct or reuse an authenticated API client.\"\"\""},{"line_number":54,"context_line":"        if not self.api_client:"},{"line_number":55,"context_line":"            auth_config \u003d cfg.CONF.service_credentials"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_b106bb1e","side":"PARENT","line":52,"updated":"2015-07-20 16:02:41.000000000","message":"This can be removed now? Or is there concern that there are custom evaluators that might be using it?","commit_id":"b0263f2c35fdabe0428f3dbb6c859dedef3c9b56"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d7cfa17180d4e40fa1f8074f2501a03ffe7725db","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.api_client \u003d None"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @property"},{"line_number":52,"context_line":"    def _client(self):"},{"line_number":53,"context_line":"        \"\"\"Construct or reuse an authenticated API client.\"\"\""},{"line_number":54,"context_line":"        if not self.api_client:"},{"line_number":55,"context_line":"            auth_config \u003d cfg.CONF.service_credentials"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_f00c133d","side":"PARENT","line":52,"in_reply_to":"3a50d1a3_3175af97","updated":"2015-07-21 09:59:51.000000000","message":"In that case should it just be in the threshold class? As this stand it appears to be a fundamental part of Evaluator when in fact it is not: it is now a fundamental part of the thing which actually checks the data (which is ThresholdEvaluator).\n\nIf we move it over there now then later we can explore ways of making Threshold subclass in the same vein as the gnocchi evaluator. One for gnocchi, one for ceilometer, one for some other system, etc.","commit_id":"b0263f2c35fdabe0428f3dbb6c859dedef3c9b56"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"fc14d74105b78c0b3ba2ca9c838b7ab5eae1b457","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.api_client \u003d None"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @property"},{"line_number":52,"context_line":"    def _client(self):"},{"line_number":53,"context_line":"        \"\"\"Construct or reuse an authenticated API client.\"\"\""},{"line_number":54,"context_line":"        if not self.api_client:"},{"line_number":55,"context_line":"            auth_config \u003d cfg.CONF.service_credentials"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_3175af97","side":"PARENT","line":52,"in_reply_to":"3a50d1a3_b106bb1e","updated":"2015-07-21 07:16:54.000000000","message":"the threshold evaluator need this to invoke ceilometerclient to get statistics list.","commit_id":"b0263f2c35fdabe0428f3dbb6c859dedef3c9b56"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"5392279b8e4f6fa1ca1016edf7a3597cf00524ad","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.api_client \u003d None"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @property"},{"line_number":52,"context_line":"    def _client(self):"},{"line_number":53,"context_line":"        \"\"\"Construct or reuse an authenticated API client.\"\"\""},{"line_number":54,"context_line":"        if not self.api_client:"},{"line_number":55,"context_line":"            auth_config \u003d cfg.CONF.service_credentials"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_525147d7","side":"PARENT","line":52,"in_reply_to":"3a50d1a3_f00c133d","updated":"2015-07-21 11:37:13.000000000","message":"thanks for clarify, make sense to me, will be done.","commit_id":"b0263f2c35fdabe0428f3dbb6c859dedef3c9b56"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0e56372abbd60f21e6ce336473e56962e224691e","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        type \u003d models.AlarmChange.STATE_TRANSITION"},{"line_number":96,"context_line":"        detail \u003d json.dumps({\u0027state\u0027: alarm.state})"},{"line_number":97,"context_line":"        # TODO(liusheng) the user_id and project_id should be"},{"line_number":98,"context_line":"        # specify than None?"},{"line_number":99,"context_line":"        user_id \u003d None"},{"line_number":100,"context_line":"        project_id \u003d None"},{"line_number":101,"context_line":"        on_behalf_of \u003d alarm.project_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_7131130b","line":98,"updated":"2015-07-20 16:02:41.000000000","message":"Is this something we need to address now?\n\nPresumably when using the client instead of direct storage the user_id and tenant information is coming from auth_config. Can that information be used here?","commit_id":"0267836bc53a98daec0174c2b47c561fac4f84da"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"fc14d74105b78c0b3ba2ca9c838b7ab5eae1b457","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        type \u003d models.AlarmChange.STATE_TRANSITION"},{"line_number":96,"context_line":"        detail \u003d json.dumps({\u0027state\u0027: alarm.state})"},{"line_number":97,"context_line":"        # TODO(liusheng) the user_id and project_id should be"},{"line_number":98,"context_line":"        # specify than None?"},{"line_number":99,"context_line":"        user_id \u003d None"},{"line_number":100,"context_line":"        project_id \u003d None"},{"line_number":101,"context_line":"        on_behalf_of \u003d alarm.project_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_c65dac7a","line":98,"in_reply_to":"3a50d1a3_7131130b","updated":"2015-07-21 07:16:54.000000000","message":"yeah, thanks for this suggestion. but the the auth_config usually only include username and projectname, not the user_id and project_id, maybe we can query the project_id and user_id by initializing a keystoneclient when the alarm-evaluator service being stated. maybe this works can be done in another patch ?","commit_id":"0267836bc53a98daec0174c2b47c561fac4f84da"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d7cfa17180d4e40fa1f8074f2501a03ffe7725db","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        type \u003d models.AlarmChange.STATE_TRANSITION"},{"line_number":96,"context_line":"        detail \u003d json.dumps({\u0027state\u0027: alarm.state})"},{"line_number":97,"context_line":"        # TODO(liusheng) the user_id and project_id should be"},{"line_number":98,"context_line":"        # specify than None?"},{"line_number":99,"context_line":"        user_id \u003d None"},{"line_number":100,"context_line":"        project_id \u003d None"},{"line_number":101,"context_line":"        on_behalf_of \u003d alarm.project_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_d06eb7c8","line":98,"in_reply_to":"3a50d1a3_c65dac7a","updated":"2015-07-21 09:59:51.000000000","message":"Sounds reasonable to me.\n\nI don\u0027t know what our obligations are with regard to data in the alarm history. I guess since these are administrative changes, none is okay?","commit_id":"0267836bc53a98daec0174c2b47c561fac4f84da"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"5392279b8e4f6fa1ca1016edf7a3597cf00524ad","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        type \u003d models.AlarmChange.STATE_TRANSITION"},{"line_number":96,"context_line":"        detail \u003d json.dumps({\u0027state\u0027: alarm.state})"},{"line_number":97,"context_line":"        # TODO(liusheng) the user_id and project_id should be"},{"line_number":98,"context_line":"        # specify than None?"},{"line_number":99,"context_line":"        user_id \u003d None"},{"line_number":100,"context_line":"        project_id \u003d None"},{"line_number":101,"context_line":"        on_behalf_of \u003d alarm.project_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_571cd9c0","line":98,"in_reply_to":"3a50d1a3_d06eb7c8","updated":"2015-07-21 11:37:13.000000000","message":"here recording the can keep the compatibility as former, previously, the \"elf._client.alarms.set_state\" process through previously will record alarm history [1], the None value will have a pain for filter query, that is a issue. I will try the approach I replied above if it can be done. maybe the user_id and project is of service credentials is reasonable ? because this change is do act by ceilometer user.\n\n[1] https://github.com/openstack/ceilometer/blob/master/ceilometer/api/controllers/v2/alarms.py#L604","commit_id":"0267836bc53a98daec0174c2b47c561fac4f84da"}]}
