)]}'
{"cloudkitty/storage/gnocchi/__init__.py":[{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"e049f34c88ea741f1f2ab01ea5b28bcdbcb751b6","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @staticmethod"},{"line_number":68,"context_line":"    def init():"},{"line_number":69,"context_line":"        auth \u003d ks_loading.load_auth_from_conf_options("},{"line_number":70,"context_line":"            CONF,"},{"line_number":71,"context_line":"            GNOCCHI_COLLECTOR_OPTS)"},{"line_number":72,"context_line":"        session \u003d ks_loading.load_session_from_conf_options("},{"line_number":73,"context_line":"            CONF,"},{"line_number":74,"context_line":"            GNOCCHI_COLLECTOR_OPTS,"},{"line_number":75,"context_line":"            auth\u003dauth)"},{"line_number":76,"context_line":"        conn \u003d gclient.Client(\u00271\u0027, session\u003dsession)"},{"line_number":77,"context_line":"        # Creates rating archive-policy if not exists"},{"line_number":78,"context_line":"        ck_policy \u003d {}"},{"line_number":79,"context_line":"        ck_policy[\"name\"] \u003d \"rating\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9abb7d3a_07108f00","line":76,"range":{"start_line":69,"start_character":8,"end_line":76,"end_character":51},"updated":"2016-05-30 15:07:00.000000000","message":"This part should not be needed as the __init__ will be called before setting these variables.","commit_id":"0495a0d43e88126b0b71e2d5e345ab6f93dfe0e2"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"e049f34c88ea741f1f2ab01ea5b28bcdbcb751b6","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            [{\"granularity\": CONF.collect.period, \"timespan\": \"90 days\"},"},{"line_number":84,"context_line":"             {\"granularity\": 86400, \"timespan\": \"360 days\"},"},{"line_number":85,"context_line":"             {\"granularity\": 2592000, \"timespan\": \"1800 days\"}, ])"},{"line_number":86,"context_line":"        conn.archive_policy.create(ck_policy)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _commit(self, tenant_id):"},{"line_number":89,"context_line":"        # Commit measures to gnocchi in batch"}],"source_content_type":"text/x-python","patch_set":2,"id":"9abb7d3a_271cb312","line":86,"updated":"2016-05-30 15:07:00.000000000","message":"Do gnocchi updates or returns an error if the archive-policy is already there?","commit_id":"0495a0d43e88126b0b71e2d5e345ab6f93dfe0e2"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"e049f34c88ea741f1f2ab01ea5b28bcdbcb751b6","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def _dispatch(self, data, tenant_id):"},{"line_number":97,"context_line":"        # Process rated data for batch commit into gnocchi"},{"line_number":98,"context_line":"        for metric_name, metric in data.iteritems():"},{"line_number":99,"context_line":"            for item in metric:"},{"line_number":100,"context_line":"                # Get the resource from gnocchi"},{"line_number":101,"context_line":"                resource \u003d self._conn.resource.get("}],"source_content_type":"text/x-python","patch_set":2,"id":"9abb7d3a_87a0ffa0","line":98,"range":{"start_line":98,"start_character":35,"end_line":98,"end_character":51},"updated":"2016-05-30 15:07:00.000000000","message":"You should use six.iteritems here.","commit_id":"0495a0d43e88126b0b71e2d5e345ab6f93dfe0e2"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"e049f34c88ea741f1f2ab01ea5b28bcdbcb751b6","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        for metric_name, metric in data.iteritems():"},{"line_number":99,"context_line":"            for item in metric:"},{"line_number":100,"context_line":"                # Get the resource from gnocchi"},{"line_number":101,"context_line":"                resource \u003d self._conn.resource.get("},{"line_number":102,"context_line":"                    self._collector.retrieve_mappings[metric_name],"},{"line_number":103,"context_line":"                    item[\"desc\"][\"resource_id\"], False)"},{"line_number":104,"context_line":"                metric_id \u003d None"},{"line_number":105,"context_line":"                # Get or create metric_name.cost if not exists"},{"line_number":106,"context_line":"                if metric_name + \".cost\" not in resource[\"metrics\"].keys():"}],"source_content_type":"text/x-python","patch_set":2,"id":"9abb7d3a_c71207b4","line":103,"range":{"start_line":101,"start_character":16,"end_line":103,"end_character":55},"updated":"2016-05-30 15:07:00.000000000","message":"I really prefer that you use the collector to do this kind of operation so we maintain collecting functions in the collector and storage ones in the storage backend.\nI\u0027ve got a patch in WIP which will hit master really soon (1 day max) that will enables you to do this easily.","commit_id":"0495a0d43e88126b0b71e2d5e345ab6f93dfe0e2"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"e049f34c88ea741f1f2ab01ea5b28bcdbcb751b6","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                    ck_metric[\"archive_policy_name\"] \u003d \"rating\""},{"line_number":109,"context_line":"                    ck_metric[\"name\"] \u003d metric_name + \".cost\""},{"line_number":110,"context_line":"                    ck_metric[\"resource_id\"] \u003d item[\"desc\"][\"resource_id\"]"},{"line_number":111,"context_line":"                    metric_id \u003d self._conn.metric.create(ck_metric)[\"id\"]"},{"line_number":112,"context_line":"                else:"},{"line_number":113,"context_line":"                    metric_id \u003d resource[\"metrics\"][metric_name + \".cost\"]"},{"line_number":114,"context_line":"                metric_measure \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"9abb7d3a_e75d8b7a","line":111,"range":{"start_line":111,"start_character":20,"end_line":111,"end_character":73},"updated":"2016-05-30 15:07:00.000000000","message":"Try to expand this in two lines. One for the create and one to get the id. It\u0027s way easier to debug it in case of failure.","commit_id":"0495a0d43e88126b0b71e2d5e345ab6f93dfe0e2"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"e049f34c88ea741f1f2ab01ea5b28bcdbcb751b6","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                metric_measure \u003d {}"},{"line_number":115,"context_line":"                metric_measure[\"timestamp\"] \u003d self.usage_start_dt.get("},{"line_number":116,"context_line":"                    tenant_id).isoformat()"},{"line_number":117,"context_line":"                metric_measure[\"value\"] \u003d str(item[\"rating\"][\"price\"])"},{"line_number":118,"context_line":"                if tenant_id in self._measures:"},{"line_number":119,"context_line":"                    self._measures[tenant_id][metric_id] \u003d [metric_measure]"},{"line_number":120,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9abb7d3a_87abdf1c","line":117,"range":{"start_line":117,"start_character":42,"end_line":117,"end_character":45},"updated":"2016-05-30 15:07:00.000000000","message":"use six.text_type()","commit_id":"0495a0d43e88126b0b71e2d5e345ab6f93dfe0e2"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"e049f34c88ea741f1f2ab01ea5b28bcdbcb751b6","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                    self._measures[tenant_id] \u003d {metric_id: [metric_measure]}"},{"line_number":122,"context_line":"                # Get or create total.cost metric if not exists"},{"line_number":123,"context_line":"                total_id \u003d None"},{"line_number":124,"context_line":"                if \"total.cost\" not in resource[\"metrics\"].keys():"},{"line_number":125,"context_line":"                    ck_metric \u003d {}"},{"line_number":126,"context_line":"                    ck_metric[\"archive_policy_name\"] \u003d \"rating\""},{"line_number":127,"context_line":"                    ck_metric[\"name\"] \u003d \"total.cost\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9abb7d3a_87075f1b","line":124,"range":{"start_line":124,"start_character":32,"end_line":124,"end_character":65},"updated":"2016-05-30 15:07:00.000000000","message":"in keyword is always searching for keys in a dict.","commit_id":"0495a0d43e88126b0b71e2d5e345ab6f93dfe0e2"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"d060c9d650ff8e46e14c955169fd645f475a5baf","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"GNOCCHI_COLLECTOR_OPTS \u003d \u0027gnocchi_collector\u0027"},{"line_number":34,"context_line":"ks_loading.register_session_conf_options("},{"line_number":35,"context_line":"    cfg.CONF,"},{"line_number":36,"context_line":"    GNOCCHI_COLLECTOR_OPTS)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_9b93e95a","line":33,"updated":"2016-06-30 12:31:44.000000000","message":"We plan on deprecating *_collector for sections and use collector_* which makes more sense.","commit_id":"d38bf9466b4ca249220492b96817f660a4d86dc8"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"d060c9d650ff8e46e14c955169fd645f475a5baf","unresolved":false,"context_lines":[{"line_number":43,"context_line":"               help\u003d\u0027Rating period in seconds.\u0027), ]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"CONF \u003d cfg.CONF"},{"line_number":46,"context_line":"CONF.register_opts(collect_opts, \u0027collect\u0027)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class GnocchiStorage(storage.BaseStorage):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_bbcb4552","line":46,"updated":"2016-06-30 12:31:44.000000000","message":"You are redefining here what\u0027s defined in collector/__init__.py.\nYou should be using CONF.import_opt(\u0027period\u0027, \u0027cloudkitty.collector\u0027, \u0027collect\u0027)","commit_id":"d38bf9466b4ca249220492b96817f660a4d86dc8"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"d060c9d650ff8e46e14c955169fd645f475a5baf","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            GNOCCHI_COLLECTOR_OPTS,"},{"line_number":64,"context_line":"            auth\u003dself.auth)"},{"line_number":65,"context_line":"        self._conn \u003d gclient.Client(\u00271\u0027, session\u003dself.session)"},{"line_number":66,"context_line":"        self._measures \u003d {}"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def init(self):"},{"line_number":69,"context_line":"        # Creates rating archive-policy if not exists"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_1b1899d2","line":66,"updated":"2016-06-30 12:31:44.000000000","message":"Create an attribute self._period which can be overridden by kwargs or use CONF.collect.period by default.\nIt\u0027s cleaner than referencing configuration variable every time you need it.","commit_id":"d38bf9466b4ca249220492b96817f660a4d86dc8"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"d060c9d650ff8e46e14c955169fd645f475a5baf","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self._measures \u003d {}"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def init(self):"},{"line_number":69,"context_line":"        # Creates rating archive-policy if not exists"},{"line_number":70,"context_line":"        ck_policy \u003d {}"},{"line_number":71,"context_line":"        ck_policy[\"name\"] \u003d \"rating\""},{"line_number":72,"context_line":"        ck_policy[\"back_window\"] \u003d 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_2846e27a","line":69,"updated":"2016-06-30 12:31:44.000000000","message":"Maybe try to do a show of the policy and if it doesn\u0027t exist (404) then create it.","commit_id":"d38bf9466b4ca249220492b96817f660a4d86dc8"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"d060c9d650ff8e46e14c955169fd645f475a5baf","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def init(self):"},{"line_number":69,"context_line":"        # Creates rating archive-policy if not exists"},{"line_number":70,"context_line":"        ck_policy \u003d {}"},{"line_number":71,"context_line":"        ck_policy[\"name\"] \u003d \"rating\""},{"line_number":72,"context_line":"        ck_policy[\"back_window\"] \u003d 0"},{"line_number":73,"context_line":"        ck_policy[\"aggregation_methods\"] \u003d [\"sum\", ]"},{"line_number":74,"context_line":"        ck_policy[\"definition\"] \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_6696643f","line":71,"updated":"2016-06-30 12:31:44.000000000","message":"A configuration variable for the policy name enables users to define their own policy and pass it to CloudKitty.\nTry to add something in the conf.","commit_id":"d38bf9466b4ca249220492b96817f660a4d86dc8"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"d060c9d650ff8e46e14c955169fd645f475a5baf","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        ck_policy[\"definition\"] \u003d ("},{"line_number":75,"context_line":"            [{\"granularity\": CONF.collect.period, \"timespan\": \"90 days\"},"},{"line_number":76,"context_line":"             {\"granularity\": 86400, \"timespan\": \"360 days\"},"},{"line_number":77,"context_line":"             {\"granularity\": 2592000, \"timespan\": \"1800 days\"}, ])"},{"line_number":78,"context_line":"        self._conn.archive_policy.create(ck_policy)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _commit(self, tenant_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_c6be38ad","line":77,"updated":"2016-06-30 12:31:44.000000000","message":"I guess this is calculated from CONF.collect.period, can you make the direct calculation so that granularity if fully configurable.","commit_id":"d38bf9466b4ca249220492b96817f660a4d86dc8"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"d060c9d650ff8e46e14c955169fd645f475a5baf","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            [{\"granularity\": CONF.collect.period, \"timespan\": \"90 days\"},"},{"line_number":76,"context_line":"             {\"granularity\": 86400, \"timespan\": \"360 days\"},"},{"line_number":77,"context_line":"             {\"granularity\": 2592000, \"timespan\": \"1800 days\"}, ])"},{"line_number":78,"context_line":"        self._conn.archive_policy.create(ck_policy)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _commit(self, tenant_id):"},{"line_number":81,"context_line":"        # Commit measures to gnocchi in batch"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_e81dfa73","line":78,"updated":"2016-06-30 12:31:44.000000000","message":"Will triggers a 409 (conflict) if already exists.","commit_id":"d38bf9466b4ca249220492b96817f660a4d86dc8"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"d060c9d650ff8e46e14c955169fd645f475a5baf","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    item[\"desc\"][\"resource_id\"], False)"},{"line_number":99,"context_line":"                metric_id \u003d None"},{"line_number":100,"context_line":"                # Get or create metric_name.cost if not exists"},{"line_number":101,"context_line":"                if metric_name + \".cost\" not in resource[\"metrics\"]:"},{"line_number":102,"context_line":"                    ck_metric \u003d {}"},{"line_number":103,"context_line":"                    ck_metric[\"archive_policy_name\"] \u003d \"rating\""},{"line_number":104,"context_line":"                    ck_metric[\"name\"] \u003d metric_name + \".cost\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_c3529fdd","line":101,"updated":"2016-06-30 12:31:44.000000000","message":"You can replace this by:\nmetric_id \u003d resource[\"metrics\"].get(metric_name + \".cost\")\nif not metric_id:\n    create_metric()","commit_id":"d38bf9466b4ca249220492b96817f660a4d86dc8"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"d060c9d650ff8e46e14c955169fd645f475a5baf","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                metric_id \u003d None"},{"line_number":100,"context_line":"                # Get or create metric_name.cost if not exists"},{"line_number":101,"context_line":"                if metric_name + \".cost\" not in resource[\"metrics\"]:"},{"line_number":102,"context_line":"                    ck_metric \u003d {}"},{"line_number":103,"context_line":"                    ck_metric[\"archive_policy_name\"] \u003d \"rating\""},{"line_number":104,"context_line":"                    ck_metric[\"name\"] \u003d metric_name + \".cost\""},{"line_number":105,"context_line":"                    ck_metric[\"resource_id\"] \u003d item[\"desc\"][\"resource_id\"]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_43234f58","line":102,"updated":"2016-06-30 12:31:44.000000000","message":"Can you put the code in the if to a new function like _create_cost_metric() or something alike. It will keep the dispath code short and easier to read.\nAre you sure this code needs to be here, can\u0027t you move it to the _pre_commit? So that we don\u0027t push data to the backend before the final commit?","commit_id":"d38bf9466b4ca249220492b96817f660a4d86dc8"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"d060c9d650ff8e46e14c955169fd645f475a5baf","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                    ck_metric[\"archive_policy_name\"] \u003d \"rating\""},{"line_number":104,"context_line":"                    ck_metric[\"name\"] \u003d metric_name + \".cost\""},{"line_number":105,"context_line":"                    ck_metric[\"resource_id\"] \u003d item[\"desc\"][\"resource_id\"]"},{"line_number":106,"context_line":"                    cost_metric \u003d self._conn.metric.create(ck_metric)[\"id\"]"},{"line_number":107,"context_line":"                    metric_id \u003d cost_metric[\"id\"]"},{"line_number":108,"context_line":"                else:"},{"line_number":109,"context_line":"                    metric_id \u003d resource[\"metrics\"][metric_name + \".cost\"]"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_02f64f8e","line":106,"range":{"start_line":106,"start_character":69,"end_line":106,"end_character":75},"updated":"2016-06-30 12:31:44.000000000","message":"Forgot to remove the [\"id\"]","commit_id":"d38bf9466b4ca249220492b96817f660a4d86dc8"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"d060c9d650ff8e46e14c955169fd645f475a5baf","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                    self._measures[tenant_id] \u003d {metric_id: [metric_measure]}"},{"line_number":118,"context_line":"                # Get or create total.cost metric if not exists"},{"line_number":119,"context_line":"                total_id \u003d None"},{"line_number":120,"context_line":"                if \"total.cost\" not in resource[\"metrics\"]:"},{"line_number":121,"context_line":"                    ck_metric \u003d {}"},{"line_number":122,"context_line":"                    ck_metric[\"archive_policy_name\"] \u003d \"rating\""},{"line_number":123,"context_line":"                    ck_metric[\"name\"] \u003d \"total.cost\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_837d371e","line":120,"updated":"2016-06-30 12:31:44.000000000","message":"Same a L#101","commit_id":"d38bf9466b4ca249220492b96817f660a4d86dc8"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"0ee6ab4fa17bbe54e75d1a9bdc53cc1438956dcc","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                metric_measure \u003d {}"},{"line_number":133,"context_line":"                metric_measure[\"timestamp\"] \u003d self.usage_start_dt.get("},{"line_number":134,"context_line":"                    tenant_id).isoformat()"},{"line_number":135,"context_line":"                metric_measure[\"value\"] \u003d str(item[\"rating\"][\"price\"])"},{"line_number":136,"context_line":"                if tenant_id in self._measures:"},{"line_number":137,"context_line":"                    self._measures[tenant_id][metric_id] \u003d [metric_measure]"},{"line_number":138,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_fbb085df","line":135,"updated":"2016-08-09 15:48:53.000000000","message":"str -\u003e six.text_type","commit_id":"81b58d7f740fed15633215af6328cd7873c3c914"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"0ee6ab4fa17bbe54e75d1a9bdc53cc1438956dcc","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                        # Accumulates total resource cost"},{"line_number":156,"context_line":"                        aux \u003d sum([decimal.Decimal(val[\"value\"]) for val in"},{"line_number":157,"context_line":"                                   self._measures[tenant_id][total_id]])"},{"line_number":158,"context_line":"                        total_measure[\"value\"] \u003d str(item[\"rating\"][\"price\"]"},{"line_number":159,"context_line":"                                                     + aux)"},{"line_number":160,"context_line":"                    self._measures[tenant_id][total_id] \u003d [total_measure]"},{"line_number":161,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_7bae5586","line":158,"updated":"2016-08-09 15:48:53.000000000","message":"str -\u003e six.text_type","commit_id":"81b58d7f740fed15633215af6328cd7873c3c914"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"0ee6ab4fa17bbe54e75d1a9bdc53cc1438956dcc","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        if service:"},{"line_number":192,"context_line":"            metric \u003d service + \".cost\""},{"line_number":193,"context_line":"        # We need to pass a query to force a post in gnocchi client metric"},{"line_number":194,"context_line":"        # aggregation, so we use one that allways meets"},{"line_number":195,"context_line":"        query \u003d {\"and\": [{\"\u003e\": {\"started_at\": \"1900-01-01T00:00\"}}]}"},{"line_number":196,"context_line":"        if tenant_id:"},{"line_number":197,"context_line":"            query \u003d {\"\u003d\": {\"project_id\": tenant_id}}"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_fbb6c588","line":194,"updated":"2016-08-09 15:48:53.000000000","message":"nitpick, only one l in always","commit_id":"81b58d7f740fed15633215af6328cd7873c3c914"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"0ee6ab4fa17bbe54e75d1a9bdc53cc1438956dcc","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        if not end:"},{"line_number":212,"context_line":"            end \u003d ck_utils.get_next_month()"},{"line_number":213,"context_line":"        # We need to pass a query to force a post in gnocchi client metric"},{"line_number":214,"context_line":"        # aggregation, so we use one that allways meets"},{"line_number":215,"context_line":"        query \u003d {\"and\": [{\"\u003e\": {\"started_at\": \"1900-01-01T00:00\"}}]}"},{"line_number":216,"context_line":"        r \u003d []"},{"line_number":217,"context_line":"        for metric in self._collector.retrieve_mappings.keys():"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_3bb17d90","line":214,"updated":"2016-08-09 15:48:53.000000000","message":"same as above","commit_id":"81b58d7f740fed15633215af6328cd7873c3c914"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"0ee6ab4fa17bbe54e75d1a9bdc53cc1438956dcc","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        query \u003d {\"and\": [{\"\u003e\": {\"started_at\": \"1900-01-01T00:00\"}}]}"},{"line_number":275,"context_line":"        if filters.get(\u0027tenant_id\u0027):"},{"line_number":276,"context_line":"            query[\"and\"] \u003d query[\"and\"].append("},{"line_number":277,"context_line":"                {\"\u003d\": {\"project_id\": filters.get(\u0027tenant_id\u0027)}})"},{"line_number":278,"context_line":"        metrics \u003d []"},{"line_number":279,"context_line":"        resource_type \u003d \"generic\""},{"line_number":280,"context_line":"        if not filters.get(\u0027res_type\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_16abb0d7","line":277,"updated":"2016-08-09 15:48:53.000000000","message":"This statement has no effect. Append is modifying query directly. So you can remove the query[\"and\"] \u003d","commit_id":"81b58d7f740fed15633215af6328cd7873c3c914"},{"author":{"_account_id":8358,"name":"zhangguoqing","email":"zhang.guoqing@99cloud.net","username":"zhangguoqing"},"change_message_id":"4d96887f9a622ce77f9b448d66b7d6a8914e1c07","unresolved":false,"context_lines":[{"line_number":45,"context_line":"               default\u003d\u0027[{\"granularity\": \u0027"},{"line_number":46,"context_line":"                       + six.text_type(CONF.collect.period) +"},{"line_number":47,"context_line":"                       \u0027, \"timespan\": \"90 days\"}, \u0027"},{"line_number":48,"context_line":"                       \u0027{\"granularity\": 86400, \"timespan\": \"360 days\"}, \u0027"},{"line_number":49,"context_line":"                       \u0027{\"granularity\": 2592000, \"timespan\": \"1800 days\"}]\u0027,"},{"line_number":50,"context_line":"               help\u003d\u0027Gnocchi storage archive policy definition.\u0027), ]"},{"line_number":51,"context_line":"CONF.register_opts(storage_opts, \u0027storage_gnocchi\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_196171a9","line":48,"range":{"start_line":48,"start_character":60,"end_line":48,"end_character":63},"updated":"2016-09-08 06:47:56.000000000","message":"why not 365?","commit_id":"451702b54011d1b0717d8418b84844c91291bac4"},{"author":{"_account_id":8358,"name":"zhangguoqing","email":"zhang.guoqing@99cloud.net","username":"zhangguoqing"},"change_message_id":"4d96887f9a622ce77f9b448d66b7d6a8914e1c07","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                       \u0027{\"granularity\": 86400, \"timespan\": \"360 days\"}, \u0027"},{"line_number":49,"context_line":"                       \u0027{\"granularity\": 2592000, \"timespan\": \"1800 days\"}]\u0027,"},{"line_number":50,"context_line":"               help\u003d\u0027Gnocchi storage archive policy definition.\u0027), ]"},{"line_number":51,"context_line":"CONF.register_opts(storage_opts, \u0027storage_gnocchi\u0027)"},{"line_number":52,"context_line":"ks_loading.register_session_conf_options("},{"line_number":53,"context_line":"    CONF,"},{"line_number":54,"context_line":"    STORAGE_GNOCCHI_OPTS)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_59a4d906","line":51,"range":{"start_line":51,"start_character":33,"end_line":51,"end_character":50},"updated":"2016-09-08 06:47:56.000000000","message":"STORAGE_GNOCCHI_OPTS","commit_id":"451702b54011d1b0717d8418b84844c91291bac4"},{"author":{"_account_id":23173,"name":"Maxime Cottret","email":"maxime.cottret@gmail.com","username":"aolwas"},"change_message_id":"2fe860b2c9698f986f563f2456dee343b184c792","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        if tenant_id:"},{"line_number":173,"context_line":"            query \u003d {\"\u003d\": {\"project_id\": tenant_id}}"},{"line_number":174,"context_line":"        r \u003d []"},{"line_number":175,"context_line":"        for metric in self._collector.retrieve_mappings.keys():"},{"line_number":176,"context_line":"            r \u003d self._conn.metric.aggregation(metrics\u003dmetric + \".cost\","},{"line_number":177,"context_line":"                                              query\u003dquery, start\u003dbegin,"},{"line_number":178,"context_line":"                                              stop\u003dend, aggregation\u003d\"sum\","}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_95ca50a0","line":175,"range":{"start_line":175,"start_character":38,"end_line":175,"end_character":55},"updated":"2016-09-05 08:31:33.000000000","message":"this attribute exists only in gnocchi collector","commit_id":"451702b54011d1b0717d8418b84844c91291bac4"},{"author":{"_account_id":23173,"name":"Maxime Cottret","email":"maxime.cottret@gmail.com","username":"aolwas"},"change_message_id":"8ebbe669b88f24e93c08ccbaab008d9bd787b034","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    def _get_resource_data(self, res_type, resource_id, begin, end):"},{"line_number":232,"context_line":"        # Get resource information from gnocchi"},{"line_number":233,"context_line":"        return self._collector.resource_info("},{"line_number":234,"context_line":"            resource_type\u003dres_type,"},{"line_number":235,"context_line":"            start\u003dbegin,"},{"line_number":236,"context_line":"            end\u003dend,"},{"line_number":237,"context_line":"            resource_id\u003dresource_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_4190c5ec","line":234,"range":{"start_line":234,"start_character":12,"end_line":234,"end_character":25},"updated":"2016-09-06 15:34:10.000000000","message":"since patch proposal, this parameter has been renamed in \u0027resource_name\u0027","commit_id":"451702b54011d1b0717d8418b84844c91291bac4"}]}
