)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"b371116164a4d25cec97c6dbeef8744d9901fe94","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] Add Gnocchi datasource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch set adds Gnocchi datasource support"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I41653149435fd355548071de855586004371c4fc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da36d5c6_7ff21308","line":9,"updated":"2017-02-28 09:27:28.000000000","message":"Please add BP name here.","commit_id":"0860cd3d92474a0354c4ef81e7a804c78cb8189b"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"f8c856afacd6d8e794f9d1875cfb68bf24578cfb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] Add Gnocchi datasource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch set adds Gnocchi datasource support"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I41653149435fd355548071de855586004371c4fc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba2be162_f1d57ab9","line":9,"in_reply_to":"da36d5c6_7ff21308","updated":"2017-02-28 14:51:15.000000000","message":"Done","commit_id":"0860cd3d92474a0354c4ef81e7a804c78cb8189b"}],"watcher/conf/gnocchi_client.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"7f8d927bccabee308f958cb6768f781b9c97b91a","unresolved":false,"context_lines":[{"line_number":24,"context_line":"GNOCCHI_CLIENT_OPTS \u003d ["},{"line_number":25,"context_line":"    cfg.StrOpt(\u0027api_version\u0027,"},{"line_number":26,"context_line":"               default\u003d\u00271\u0027,"},{"line_number":27,"context_line":"               help\u003d\u0027Version of Gnocchi API to use in glanceclient.\u0027)]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def register_opts(conf):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_52a9ea23","line":27,"range":{"start_line":27,"start_character":54,"end_line":27,"end_character":66},"updated":"2017-02-27 15:31:41.000000000","message":"shouldn\u0027t this be gnocchiclient instead?","commit_id":"0860cd3d92474a0354c4ef81e7a804c78cb8189b"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"f8c856afacd6d8e794f9d1875cfb68bf24578cfb","unresolved":false,"context_lines":[{"line_number":24,"context_line":"GNOCCHI_CLIENT_OPTS \u003d ["},{"line_number":25,"context_line":"    cfg.StrOpt(\u0027api_version\u0027,"},{"line_number":26,"context_line":"               default\u003d\u00271\u0027,"},{"line_number":27,"context_line":"               help\u003d\u0027Version of Gnocchi API to use in glanceclient.\u0027)]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def register_opts(conf):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_e592faf5","line":27,"range":{"start_line":27,"start_character":54,"end_line":27,"end_character":66},"in_reply_to":"da36d5c6_52a9ea23","updated":"2017-02-28 14:51:15.000000000","message":"Done","commit_id":"0860cd3d92474a0354c4ef81e7a804c78cb8189b"}],"watcher/datasource/gnocchi.py":[{"author":{"_account_id":22775,"name":"Prudhvi Rao Shedimbi","email":"prudhvi.rao.shedimbi@intel.com","username":"pshedimb"},"change_message_id":"d19b10774fe33da0e74269cadf7b2d485ad55b3d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        raw_kwargs \u003d dict("},{"line_number":59,"context_line":"            metric\u003dmetric,"},{"line_number":60,"context_line":"            start\u003dstart_time,"},{"line_number":61,"context_line":"            end\u003dend_time,"},{"line_number":62,"context_line":"            resource_id\u003dresource_id,"},{"line_number":63,"context_line":"            granularity\u003dgranularity,"},{"line_number":64,"context_line":"            aggregation\u003daggregation,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_1cba1c6f","line":61,"range":{"start_line":61,"start_character":12,"end_line":61,"end_character":15},"updated":"2017-02-27 18:42:14.000000000","message":"Going by get_measure method in https://github.com/openstack/python-gnocchiclient/blob/5f2a3697133155b54d5567c208751fbb32681b8c/gnocchiclient/v1/metric.py file,\nI think \"end\" should be changed to \"stop\"","commit_id":"0860cd3d92474a0354c4ef81e7a804c78cb8189b"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"e6f7b35b5fcf1da43b853aacfc77f1c1496cd632","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        raw_kwargs \u003d dict("},{"line_number":59,"context_line":"            metric\u003dmetric,"},{"line_number":60,"context_line":"            start\u003dstart_time,"},{"line_number":61,"context_line":"            end\u003dend_time,"},{"line_number":62,"context_line":"            resource_id\u003dresource_id,"},{"line_number":63,"context_line":"            granularity\u003dgranularity,"},{"line_number":64,"context_line":"            aggregation\u003daggregation,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_bf12cb56","line":61,"range":{"start_line":61,"start_character":12,"end_line":61,"end_character":15},"in_reply_to":"da36d5c6_1cba1c6f","updated":"2017-02-28 09:25:47.000000000","message":"+1, good catch.","commit_id":"0860cd3d92474a0354c4ef81e7a804c78cb8189b"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"f8c856afacd6d8e794f9d1875cfb68bf24578cfb","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        raw_kwargs \u003d dict("},{"line_number":59,"context_line":"            metric\u003dmetric,"},{"line_number":60,"context_line":"            start\u003dstart_time,"},{"line_number":61,"context_line":"            end\u003dend_time,"},{"line_number":62,"context_line":"            resource_id\u003dresource_id,"},{"line_number":63,"context_line":"            granularity\u003dgranularity,"},{"line_number":64,"context_line":"            aggregation\u003daggregation,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_65b52a7d","line":61,"range":{"start_line":61,"start_character":12,"end_line":61,"end_character":15},"in_reply_to":"da36d5c6_1cba1c6f","updated":"2017-02-28 14:51:15.000000000","message":"Done","commit_id":"0860cd3d92474a0354c4ef81e7a804c78cb8189b"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"f8c856afacd6d8e794f9d1875cfb68bf24578cfb","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        raw_kwargs \u003d dict("},{"line_number":59,"context_line":"            metric\u003dmetric,"},{"line_number":60,"context_line":"            start\u003dstart_time,"},{"line_number":61,"context_line":"            end\u003dend_time,"},{"line_number":62,"context_line":"            resource_id\u003dresource_id,"},{"line_number":63,"context_line":"            granularity\u003dgranularity,"},{"line_number":64,"context_line":"            aggregation\u003daggregation,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba2be162_91ed1e91","line":61,"range":{"start_line":61,"start_character":12,"end_line":61,"end_character":15},"in_reply_to":"da36d5c6_bf12cb56","updated":"2017-02-28 14:51:15.000000000","message":"Done","commit_id":"0860cd3d92474a0354c4ef81e7a804c78cb8189b"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"33ee3f6e37933c9f610b8c10875a33f20cdf48f0","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            end\u003dend_time,"},{"line_number":62,"context_line":"            resource_id\u003dresource_id,"},{"line_number":63,"context_line":"            granularity\u003dgranularity,"},{"line_number":64,"context_line":"            aggregation\u003daggregation,"},{"line_number":65,"context_line":"        )"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        kwargs \u003d {k: v for k, v in raw_kwargs.items() if k and v}"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_740ebae6","line":64,"range":{"start_line":64,"start_character":24,"end_line":64,"end_character":35},"updated":"2017-02-28 09:09:29.000000000","message":"can you add a pre-check that makes sure that aggregation is among the valid aggregation methods: (\"count\", \"std\", \"mean\", \"sum\", \"min\", \"max\")\n\nCan you also the same kind of validation for th start_time and end_time to make sure they are correcly formatted and that start_time \u003c\u003d end_time ?","commit_id":"0860cd3d92474a0354c4ef81e7a804c78cb8189b"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"f8c856afacd6d8e794f9d1875cfb68bf24578cfb","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            end\u003dend_time,"},{"line_number":62,"context_line":"            resource_id\u003dresource_id,"},{"line_number":63,"context_line":"            granularity\u003dgranularity,"},{"line_number":64,"context_line":"            aggregation\u003daggregation,"},{"line_number":65,"context_line":"        )"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        kwargs \u003d {k: v for k, v in raw_kwargs.items() if k and v}"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba2be162_9c2a95e6","line":64,"range":{"start_line":64,"start_character":24,"end_line":64,"end_character":35},"in_reply_to":"da36d5c6_5f78ef8f","updated":"2017-02-28 14:51:15.000000000","message":"I agree, each archive policy may contain different aggregation methods.","commit_id":"0860cd3d92474a0354c4ef81e7a804c78cb8189b"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"f8c856afacd6d8e794f9d1875cfb68bf24578cfb","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            end\u003dend_time,"},{"line_number":62,"context_line":"            resource_id\u003dresource_id,"},{"line_number":63,"context_line":"            granularity\u003dgranularity,"},{"line_number":64,"context_line":"            aggregation\u003daggregation,"},{"line_number":65,"context_line":"        )"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        kwargs \u003d {k: v for k, v in raw_kwargs.items() if k and v}"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba2be162_7cd8811e","line":64,"range":{"start_line":64,"start_character":24,"end_line":64,"end_character":35},"in_reply_to":"da36d5c6_740ebae6","updated":"2017-02-28 14:51:15.000000000","message":"It isn\u0027t good pattern to compare start_time and stop_time for TS DB.","commit_id":"0860cd3d92474a0354c4ef81e7a804c78cb8189b"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"e6f7b35b5fcf1da43b853aacfc77f1c1496cd632","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            end\u003dend_time,"},{"line_number":62,"context_line":"            resource_id\u003dresource_id,"},{"line_number":63,"context_line":"            granularity\u003dgranularity,"},{"line_number":64,"context_line":"            aggregation\u003daggregation,"},{"line_number":65,"context_line":"        )"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        kwargs \u003d {k: v for k, v in raw_kwargs.items() if k and v}"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_5f78ef8f","line":64,"range":{"start_line":64,"start_character":24,"end_line":64,"end_character":35},"in_reply_to":"da36d5c6_740ebae6","updated":"2017-02-28 09:25:47.000000000","message":"Vincent, wouldn\u0027t validating these fields in watcher create problem in terms of syncing it with gnocchi in future?","commit_id":"0860cd3d92474a0354c4ef81e7a804c78cb8189b"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"1758cf000cfe275a30766827ab9be9b8aec9f8e7","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            self.osc.reset_clients()"},{"line_number":43,"context_line":"            self.gnocchi \u003d self.osc.gnocchi()"},{"line_number":44,"context_line":"            return f(*args, **kwargs)"},{"line_number":45,"context_line":"        except Exception:"},{"line_number":46,"context_line":"            raise"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def statistic_aggregation(self,"},{"line_number":49,"context_line":"                              resource_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_f713aa0b","line":46,"range":{"start_line":45,"start_character":0,"end_line":46,"end_character":17},"updated":"2017-02-28 15:04:28.000000000","message":"this is useless","commit_id":"c5c6a1af2a01d82ee8799ffb801c67d9a2ec3a32"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"d52a5c7c90dfb4f4cc12f7c12505b5a930748f0f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            self.osc.reset_clients()"},{"line_number":43,"context_line":"            self.gnocchi \u003d self.osc.gnocchi()"},{"line_number":44,"context_line":"            return f(*args, **kwargs)"},{"line_number":45,"context_line":"        except Exception:"},{"line_number":46,"context_line":"            raise"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def statistic_aggregation(self,"},{"line_number":49,"context_line":"                              resource_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_d8f5d983","line":46,"range":{"start_line":45,"start_character":0,"end_line":46,"end_character":17},"in_reply_to":"ba2be162_f713aa0b","updated":"2017-03-01 07:41:47.000000000","message":"Done","commit_id":"c5c6a1af2a01d82ee8799ffb801c67d9a2ec3a32"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"ef21ddf78c4b7647e6ceb338a1b9fbcb1c4717a3","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                              resource_id,"},{"line_number":50,"context_line":"                              metric,"},{"line_number":51,"context_line":"                              granularity,"},{"line_number":52,"context_line":"                              start_time\u003dNone,"},{"line_number":53,"context_line":"                              stop_time\u003dNone,"},{"line_number":54,"context_line":"                              aggregation\u003d\u0027mean\u0027):"},{"line_number":55,"context_line":"        \"\"\"Representing a statistic aggregate by operators"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_47174ca3","line":53,"range":{"start_line":52,"start_character":30,"end_line":53,"end_character":45},"updated":"2017-03-01 05:12:01.000000000","message":"In other datasource we are taking period and calculating start and end time.  Any specific reasons for the difference here?","commit_id":"c5c6a1af2a01d82ee8799ffb801c67d9a2ec3a32"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"d52a5c7c90dfb4f4cc12f7c12505b5a930748f0f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                              resource_id,"},{"line_number":50,"context_line":"                              metric,"},{"line_number":51,"context_line":"                              granularity,"},{"line_number":52,"context_line":"                              start_time\u003dNone,"},{"line_number":53,"context_line":"                              stop_time\u003dNone,"},{"line_number":54,"context_line":"                              aggregation\u003d\u0027mean\u0027):"},{"line_number":55,"context_line":"        \"\"\"Representing a statistic aggregate by operators"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_98e28102","line":53,"range":{"start_line":52,"start_character":30,"end_line":53,"end_character":45},"in_reply_to":"ba2be162_47174ca3","updated":"2017-03-01 07:41:47.000000000","message":"We don\u0027t have period in Time Series Database. Actually, Gnocchi gather metrics and make timespan points with specified granularity. You can read more here: http://gnocchi.xyz/architecture.html#how-to-define-archive-policies","commit_id":"c5c6a1af2a01d82ee8799ffb801c67d9a2ec3a32"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"beeccb247d06c9bd8aa5c8a32041fd6453051efa","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        if start_time is not None and not isinstance(start_time, datetime):"},{"line_number":68,"context_line":"            LOG.error(_LE(\u0027start_time has to be datetime type\u0027))"},{"line_number":69,"context_line":"            raise exception.WatcherException"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if stop_time is not None and not isinstance(stop_time, datetime):"},{"line_number":72,"context_line":"            LOG.error(_LE(\u0027stop_time has to be datetime type\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_cf51ae10","line":69,"range":{"start_line":69,"start_character":28,"end_line":69,"end_character":44},"updated":"2017-02-28 15:51:04.000000000","message":"IMHO, we should raise a new InvalidParameter error that inherits from exception.Invalid() and that would have the content of you logging as error message like\n\n    class InvalidParameter(Invalid):\n        msg_fmt \u003d _(\"%(parameter)s has to be of type %(parameter_type)s\")\n\n    [...]\n    if start_time is not None and not isinstance(start_time, datetime):\n        raise exception.InvalidParameter(\n            parameter\u003d\"start_time\", parameter_type\u003ddatetime)","commit_id":"c5c6a1af2a01d82ee8799ffb801c67d9a2ec3a32"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"d52a5c7c90dfb4f4cc12f7c12505b5a930748f0f","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        if start_time is not None and not isinstance(start_time, datetime):"},{"line_number":68,"context_line":"            LOG.error(_LE(\u0027start_time has to be datetime type\u0027))"},{"line_number":69,"context_line":"            raise exception.WatcherException"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if stop_time is not None and not isinstance(stop_time, datetime):"},{"line_number":72,"context_line":"            LOG.error(_LE(\u0027stop_time has to be datetime type\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_b8f8257e","line":69,"range":{"start_line":69,"start_character":28,"end_line":69,"end_character":44},"in_reply_to":"ba2be162_cf51ae10","updated":"2017-03-01 07:41:47.000000000","message":"Done","commit_id":"c5c6a1af2a01d82ee8799ffb801c67d9a2ec3a32"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"beeccb247d06c9bd8aa5c8a32041fd6453051efa","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            LOG.error(_LE(\u0027start_time has to be datetime type\u0027))"},{"line_number":69,"context_line":"            raise exception.WatcherException"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if stop_time is not None and not isinstance(stop_time, datetime):"},{"line_number":72,"context_line":"            LOG.error(_LE(\u0027stop_time has to be datetime type\u0027))"},{"line_number":73,"context_line":"            raise exception.WatcherException"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        raw_kwargs \u003d dict("},{"line_number":76,"context_line":"            metric\u003dmetric,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_6fe7e240","line":73,"range":{"start_line":71,"start_character":0,"end_line":73,"end_character":44},"updated":"2017-02-28 15:51:04.000000000","message":"ditto","commit_id":"c5c6a1af2a01d82ee8799ffb801c67d9a2ec3a32"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"d52a5c7c90dfb4f4cc12f7c12505b5a930748f0f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            LOG.error(_LE(\u0027start_time has to be datetime type\u0027))"},{"line_number":69,"context_line":"            raise exception.WatcherException"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if stop_time is not None and not isinstance(stop_time, datetime):"},{"line_number":72,"context_line":"            LOG.error(_LE(\u0027stop_time has to be datetime type\u0027))"},{"line_number":73,"context_line":"            raise exception.WatcherException"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        raw_kwargs \u003d dict("},{"line_number":76,"context_line":"            metric\u003dmetric,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_98036173","line":73,"range":{"start_line":71,"start_character":0,"end_line":73,"end_character":44},"in_reply_to":"ba2be162_6fe7e240","updated":"2017-03-01 07:41:47.000000000","message":"Done","commit_id":"c5c6a1af2a01d82ee8799ffb801c67d9a2ec3a32"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"210fda7296a53799728f22d250a98d11ab588836","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        except exceptions.Unauthorized:"},{"line_number":38,"context_line":"            self.osc.reset_clients()"},{"line_number":39,"context_line":"            self.gnocchi \u003d self.osc.gnocchi()"},{"line_number":40,"context_line":"            return f(*args, **kwargs)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def statistic_aggregation(self,"},{"line_number":43,"context_line":"                              resource_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_050a9a26","line":40,"updated":"2017-03-01 14:00:07.000000000","message":"if this raises again, it\u0027ll fail. is it really what you want, just retry _one_ time, without delay?\n\ni\u0027m not even sure how having Unauthorized and retrying can help, but there might be something I don\u0027t know.","commit_id":"0be2014f7a2d3f363aa00c94ef2768a6427ce057"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"7743a729a4b8d0b878d5fbffe8874374fdfa2fa0","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        except exceptions.Unauthorized:"},{"line_number":38,"context_line":"            self.osc.reset_clients()"},{"line_number":39,"context_line":"            self.gnocchi \u003d self.osc.gnocchi()"},{"line_number":40,"context_line":"            return f(*args, **kwargs)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def statistic_aggregation(self,"},{"line_number":43,"context_line":"                              resource_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_7166faed","line":40,"in_reply_to":"ba2be162_050a9a26","updated":"2017-03-23 11:04:26.000000000","message":"Done","commit_id":"0be2014f7a2d3f363aa00c94ef2768a6427ce057"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"210fda7296a53799728f22d250a98d11ab588836","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if start_time is not None and not isinstance(start_time, datetime):"},{"line_number":62,"context_line":"            raise exception.InvalidParameter(parameter\u003d\u0027start_time\u0027,"},{"line_number":63,"context_line":"                                             parameter_type\u003ddatetime)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        if stop_time is not None and not isinstance(stop_time, datetime):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_103816d3","line":62,"updated":"2017-03-01 14:00:07.000000000","message":"using a builtin such as ValueError would be nice, at least it ought to be in the inheritance chain","commit_id":"0be2014f7a2d3f363aa00c94ef2768a6427ce057"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"7743a729a4b8d0b878d5fbffe8874374fdfa2fa0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if start_time is not None and not isinstance(start_time, datetime):"},{"line_number":62,"context_line":"            raise exception.InvalidParameter(parameter\u003d\u0027start_time\u0027,"},{"line_number":63,"context_line":"                                             parameter_type\u003ddatetime)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        if stop_time is not None and not isinstance(stop_time, datetime):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_856170d5","line":62,"in_reply_to":"ba2be162_103816d3","updated":"2017-03-23 11:04:26.000000000","message":"Done","commit_id":"0be2014f7a2d3f363aa00c94ef2768a6427ce057"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"210fda7296a53799728f22d250a98d11ab588836","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        statistics \u003d self.query_retry("},{"line_number":81,"context_line":"            f\u003dself.gnocchi.metric.get_measures, **kwargs)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        item_value \u003d None"},{"line_number":84,"context_line":"        if statistics:"},{"line_number":85,"context_line":"            # return value of latest measure"},{"line_number":86,"context_line":"            # measure has structure [time, granularity, value]"},{"line_number":87,"context_line":"            item_value \u003d statistics[-1][2]"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        return item_value"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_f041c23a","line":89,"range":{"start_line":83,"start_character":8,"end_line":89,"end_character":25},"updated":"2017-03-01 14:00:07.000000000","message":"if statistics:\n    return statistics[-1][-2]","commit_id":"0be2014f7a2d3f363aa00c94ef2768a6427ce057"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"7743a729a4b8d0b878d5fbffe8874374fdfa2fa0","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        statistics \u003d self.query_retry("},{"line_number":81,"context_line":"            f\u003dself.gnocchi.metric.get_measures, **kwargs)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        item_value \u003d None"},{"line_number":84,"context_line":"        if statistics:"},{"line_number":85,"context_line":"            # return value of latest measure"},{"line_number":86,"context_line":"            # measure has structure [time, granularity, value]"},{"line_number":87,"context_line":"            item_value \u003d statistics[-1][2]"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        return item_value"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_b7e6a741","line":89,"range":{"start_line":83,"start_character":8,"end_line":89,"end_character":25},"in_reply_to":"ba2be162_f041c23a","updated":"2017-03-23 11:04:26.000000000","message":"Done","commit_id":"0be2014f7a2d3f363aa00c94ef2768a6427ce057"}]}
