)]}'
{"watcher/datasources/base.py":[{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"7620fe9a66f66f9aec74fbd0baa68c6352c09582","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Possible options for the parameters named aggregate\"\"\""},{"line_number":29,"context_line":"    AGGREGATES \u003d [\u0027mean\u0027, \u0027min\u0027, \u0027max\u0027, \u0027count\u0027]"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    \"\"\"Possible options for the parameters names resource_type\"\"\""},{"line_number":32,"context_line":"    RESOURCE_TYPES \u003d [\u0027compute_node\u0027, \u0027instance\u0027, \u0027bare_metal\u0027, \u0027storage\u0027]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    \"\"\"Possible metrics a datasource can support and their internal name\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"bfb3d3c7_6a73f781","line":31,"range":{"start_line":31,"start_character":43,"end_line":31,"end_character":48},"updated":"2019-05-20 09:18:56.000000000","message":"named","commit_id":"10fc0bf4654c8751e3a38e3929c93a05c327f3ac"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"12f7410dc0ac2d257cacd795d26f1425ad88b7ba","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Possible options for the parameters named aggregate\"\"\""},{"line_number":29,"context_line":"    AGGREGATES \u003d [\u0027mean\u0027, \u0027min\u0027, \u0027max\u0027, \u0027count\u0027]"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    \"\"\"Possible options for the parameters names resource_type\"\"\""},{"line_number":32,"context_line":"    RESOURCE_TYPES \u003d [\u0027compute_node\u0027, \u0027instance\u0027, \u0027bare_metal\u0027, \u0027storage\u0027]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    \"\"\"Possible metrics a datasource can support and their internal name\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"bfb3d3c7_138f122b","line":31,"range":{"start_line":31,"start_character":43,"end_line":31,"end_character":48},"in_reply_to":"bfb3d3c7_6a73f781","updated":"2019-05-20 09:59:39.000000000","message":"Done","commit_id":"10fc0bf4654c8751e3a38e3929c93a05c327f3ac"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"7620fe9a66f66f9aec74fbd0baa68c6352c09582","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                      instance_root_disk_size\u003dNone,"},{"line_number":46,"context_line":"                      )"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _get_resource_hostname(self, resource, resource_type):"},{"line_number":49,"context_line":"        \"\"\"Get the hostname from the resource given the specific type"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        :param resource: The object to extract the hostname from"}],"source_content_type":"text/x-python","patch_set":18,"id":"bfb3d3c7_6d3b11d1","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":30},"updated":"2019-05-20 09:18:56.000000000","message":"Where is this invoked? I can\u0027t find","commit_id":"10fc0bf4654c8751e3a38e3929c93a05c327f3ac"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"12f7410dc0ac2d257cacd795d26f1425ad88b7ba","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                      instance_root_disk_size\u003dNone,"},{"line_number":46,"context_line":"                      )"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _get_resource_hostname(self, resource, resource_type):"},{"line_number":49,"context_line":"        \"\"\"Get the hostname from the resource given the specific type"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        :param resource: The object to extract the hostname from"}],"source_content_type":"text/x-python","patch_set":18,"id":"bfb3d3c7_93cc628a","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":30},"in_reply_to":"bfb3d3c7_6d3b11d1","updated":"2019-05-20 09:59:39.000000000","message":"Done","commit_id":"10fc0bf4654c8751e3a38e3929c93a05c327f3ac"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"7620fe9a66f66f9aec74fbd0baa68c6352c09582","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            return \u0027\u0027"},{"line_number":69,"context_line":"        else:"},{"line_number":70,"context_line":"            raise exception.InvalidParameter("},{"line_number":71,"context_line":"                parameter\u003d\u0027resource_type\u0027, parameter_type\u003d\u0027RESOURCE_TYPES\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @abc.abstractmethod"},{"line_number":74,"context_line":"    def query_retry(self, f, *args, **kargs):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bfb3d3c7_4ac2b335","line":71,"range":{"start_line":71,"start_character":58,"end_line":71,"end_character":74},"updated":"2019-05-20 09:18:56.000000000","message":"If you want to display the content of RESOURCE_TYPES, here should be RESOURCE_TYPES, not a string.","commit_id":"10fc0bf4654c8751e3a38e3929c93a05c327f3ac"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"12f7410dc0ac2d257cacd795d26f1425ad88b7ba","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            return \u0027\u0027"},{"line_number":69,"context_line":"        else:"},{"line_number":70,"context_line":"            raise exception.InvalidParameter("},{"line_number":71,"context_line":"                parameter\u003d\u0027resource_type\u0027, parameter_type\u003d\u0027RESOURCE_TYPES\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @abc.abstractmethod"},{"line_number":74,"context_line":"    def query_retry(self, f, *args, **kargs):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bfb3d3c7_53c6ea69","line":71,"range":{"start_line":71,"start_character":58,"end_line":71,"end_character":74},"in_reply_to":"bfb3d3c7_4ac2b335","updated":"2019-05-20 09:59:39.000000000","message":"Done","commit_id":"10fc0bf4654c8751e3a38e3929c93a05c327f3ac"}],"watcher/datasources/ceilometer.py":[{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"7620fe9a66f66f9aec74fbd0baa68c6352c09582","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            aggregate \u003d \u0027avg\u0027"},{"line_number":176,"context_line":"        elif aggregate \u003d\u003d \u0027count\u0027:"},{"line_number":177,"context_line":"            aggregate \u003d \u0027avg\u0027"},{"line_number":178,"context_line":"            LOG.warning(\u0027aggregate type count not supported by ceilometer\u0027)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        resource_id \u003d resource.uuid"},{"line_number":181,"context_line":"        if resource_type \u003d\u003d \u0027compute_node\u0027:"}],"source_content_type":"text/x-python","patch_set":18,"id":"bfb3d3c7_8d0a0524","line":178,"range":{"start_line":178,"start_character":25,"end_line":178,"end_character":73},"updated":"2019-05-20 09:18:56.000000000","message":"I think here should add something like \u0027replaced with avg\u0027","commit_id":"10fc0bf4654c8751e3a38e3929c93a05c327f3ac"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"caa1f9ccd60fad30bda00a08d1123088a2d7cabb","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            aggregate \u003d \u0027avg\u0027"},{"line_number":176,"context_line":"        elif aggregate \u003d\u003d \u0027count\u0027:"},{"line_number":177,"context_line":"            aggregate \u003d \u0027avg\u0027"},{"line_number":178,"context_line":"            LOG.warning(\u0027aggregate type count not supported by ceilometer\u0027)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        resource_id \u003d resource.uuid"},{"line_number":181,"context_line":"        if resource_type \u003d\u003d \u0027compute_node\u0027:"}],"source_content_type":"text/x-python","patch_set":18,"id":"bfb3d3c7_8b2bbb92","line":178,"range":{"start_line":178,"start_character":25,"end_line":178,"end_character":73},"in_reply_to":"bfb3d3c7_13e2b2d6","updated":"2019-05-21 05:56:58.000000000","message":"OK, thanks","commit_id":"10fc0bf4654c8751e3a38e3929c93a05c327f3ac"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"12f7410dc0ac2d257cacd795d26f1425ad88b7ba","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            aggregate \u003d \u0027avg\u0027"},{"line_number":176,"context_line":"        elif aggregate \u003d\u003d \u0027count\u0027:"},{"line_number":177,"context_line":"            aggregate \u003d \u0027avg\u0027"},{"line_number":178,"context_line":"            LOG.warning(\u0027aggregate type count not supported by ceilometer\u0027)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        resource_id \u003d resource.uuid"},{"line_number":181,"context_line":"        if resource_type \u003d\u003d \u0027compute_node\u0027:"}],"source_content_type":"text/x-python","patch_set":18,"id":"bfb3d3c7_13e2b2d6","line":178,"range":{"start_line":178,"start_character":25,"end_line":178,"end_character":73},"in_reply_to":"bfb3d3c7_8d0a0524","updated":"2019-05-20 09:59:39.000000000","message":"Yes I agree but I think we should say `replaced with mean` as that is what is used to define this aggregate in the baseclass. That Ceilometer internally identifies this aggregate as \u0027avg\u0027 would be of a lesser value imo.","commit_id":"10fc0bf4654c8751e3a38e3929c93a05c327f3ac"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"c39a61787eb7943e6840a834111e2bf60cdb237e","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def get_host_cpu_usage(self, resource_id, period, aggregate,"},{"line_number":232,"context_line":"                           granularity\u003dNone):"},{"line_number":233,"context_line":"        meter_name \u003d self.METRIC_MAP.get(\u0027host_cpu_usage\u0027)"},{"line_number":234,"context_line":"        return self.statistic_aggregation(resource_id, meter_name, period,"},{"line_number":235,"context_line":"                                          granularity, aggregation\u003daggregate)"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"bfb3d3c7_ccd0e6cc","side":"PARENT","line":233,"range":{"start_line":233,"start_character":7,"end_line":233,"end_character":58},"updated":"2019-05-21 11:16:01.000000000","message":"Hi, i think this option should be saved, since sumitjami\u0027s commit has been merged. please see: https://review.opendev.org/#/c/657374/","commit_id":"f049815cf41081c8016993982f5fbea3456eaabb"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"ea625d6ba83f966e704b305d988d3f9c00207151","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def get_host_cpu_usage(self, resource_id, period, aggregate,"},{"line_number":232,"context_line":"                           granularity\u003dNone):"},{"line_number":233,"context_line":"        meter_name \u003d self.METRIC_MAP.get(\u0027host_cpu_usage\u0027)"},{"line_number":234,"context_line":"        return self.statistic_aggregation(resource_id, meter_name, period,"},{"line_number":235,"context_line":"                                          granularity, aggregation\u003daggregate)"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"bfb3d3c7_e713830c","side":"PARENT","line":233,"range":{"start_line":233,"start_character":7,"end_line":233,"end_character":58},"in_reply_to":"bfb3d3c7_ccd0e6cc","updated":"2019-05-21 11:38:54.000000000","message":"No that should no longer be done here at this point in the code. To keep it simple we pass \u0027host_cpu_usage\u0027 as metric name until the last moment.","commit_id":"f049815cf41081c8016993982f5fbea3456eaabb"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"ea625d6ba83f966e704b305d988d3f9c00207151","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        end_time \u003d datetime.datetime.utcnow()"},{"line_number":168,"context_line":"        start_time \u003d end_time - datetime.timedelta(seconds\u003dint(period))"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        meter \u003d self.METRIC_MAP.get(meter_name)"},{"line_number":171,"context_line":"        if meter is None:"},{"line_number":172,"context_line":"            raise exception.NoSuchMetric()"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"bfb3d3c7_c7275f64","line":170,"updated":"2019-05-21 11:38:54.000000000","message":"Translation of metrics to how they are internally stored in datasources is now done here.","commit_id":"84cb589aa9294b95e026c9fa4a30daac704d0c8c"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"4c7aaf77c9c9d848caa3304bc3668caa43436c74","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        end_time \u003d datetime.datetime.utcnow()"},{"line_number":168,"context_line":"        start_time \u003d end_time - datetime.timedelta(seconds\u003dint(period))"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        meter \u003d self.METRIC_MAP.get(meter_name)"},{"line_number":171,"context_line":"        if meter is None:"},{"line_number":172,"context_line":"            raise exception.NoSuchMetric()"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"bfb3d3c7_c798bf6b","line":170,"in_reply_to":"bfb3d3c7_c7275f64","updated":"2019-05-21 11:46:45.000000000","message":"Thanks, i got it.\nI walked through all the code and overall it looks very good to me.","commit_id":"84cb589aa9294b95e026c9fa4a30daac704d0c8c"}],"watcher/datasources/gnocchi.py":[{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"7620fe9a66f66f9aec74fbd0baa68c6352c09582","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            resource, \u0027compute_node\u0027, \u0027host_cpu_usage\u0027, period,"},{"line_number":140,"context_line":"            aggregate, granularity)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def get_host_ram_usage(self, resource, resource_type, period,"},{"line_number":143,"context_line":"                           aggregate, granularity\u003d300):"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        return self.statistic_aggregation("}],"source_content_type":"text/x-python","patch_set":18,"id":"bfb3d3c7_d813d90c","line":142,"range":{"start_line":142,"start_character":43,"end_line":142,"end_character":56},"updated":"2019-05-20 09:18:56.000000000","message":"It seems the resource_type unused, could remove it?","commit_id":"10fc0bf4654c8751e3a38e3929c93a05c327f3ac"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"12f7410dc0ac2d257cacd795d26f1425ad88b7ba","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            resource, \u0027compute_node\u0027, \u0027host_cpu_usage\u0027, period,"},{"line_number":140,"context_line":"            aggregate, granularity)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def get_host_ram_usage(self, resource, resource_type, period,"},{"line_number":143,"context_line":"                           aggregate, granularity\u003d300):"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        return self.statistic_aggregation("}],"source_content_type":"text/x-python","patch_set":18,"id":"bfb3d3c7_d3041a7e","line":142,"range":{"start_line":142,"start_character":43,"end_line":142,"end_character":56},"in_reply_to":"bfb3d3c7_d813d90c","updated":"2019-05-20 09:59:39.000000000","message":"Yes for now resource_type can be removed when calling methods to get specific metrics. In the future we might need it as getting the list of hypervisors includes bare metal compute_nodes for example and we might need to be able to differentiate the two.","commit_id":"10fc0bf4654c8751e3a38e3929c93a05c327f3ac"}],"watcher/decision_engine/strategy/strategies/basic_consolidation.py":[{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"caa1f9ccd60fad30bda00a08d1123088a2d7cabb","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def get_compute_node_cpu_usage(self, compute_node):"},{"line_number":261,"context_line":"        return self.datasource_backend.get_host_cpu_usage("},{"line_number":262,"context_line":"            compute_node, \u0027compute_node\u0027, self.period,"},{"line_number":263,"context_line":"            self.aggregation_method[\u0027compute_node\u0027], self.granularity)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def get_instance_cpu_usage(self, instance):"}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_0b402b56","line":262,"range":{"start_line":262,"start_character":27,"end_line":262,"end_character":39},"updated":"2019-05-21 05:56:58.000000000","message":"watcher-tempest-basic_optim failed, should remove this field","commit_id":"14a9392eb3592faaa107722d3b9da0bb3195b9e0"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"c3493ba234489ed95320ee770a4f13e7954c7a5f","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def get_compute_node_cpu_usage(self, compute_node):"},{"line_number":261,"context_line":"        return self.datasource_backend.get_host_cpu_usage("},{"line_number":262,"context_line":"            compute_node, \u0027compute_node\u0027, self.period,"},{"line_number":263,"context_line":"            self.aggregation_method[\u0027compute_node\u0027], self.granularity)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def get_instance_cpu_usage(self, instance):"}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_1de94e19","line":262,"range":{"start_line":262,"start_character":27,"end_line":262,"end_character":39},"in_reply_to":"bfb3d3c7_0b402b56","updated":"2019-05-21 06:18:41.000000000","message":"It is my own fault don\u0027t  get me wrong but I think it would be better if unit tests would catch these mistakes.","commit_id":"14a9392eb3592faaa107722d3b9da0bb3195b9e0"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"089db413654543fce35455b7a65729c106e1cbae","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def get_compute_node_cpu_usage(self, compute_node):"},{"line_number":261,"context_line":"        return self.datasource_backend.get_host_cpu_usage("},{"line_number":262,"context_line":"            compute_node, \u0027compute_node\u0027, self.period,"},{"line_number":263,"context_line":"            self.aggregation_method[\u0027compute_node\u0027], self.granularity)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def get_instance_cpu_usage(self, instance):"}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_9dcf7e7e","line":262,"range":{"start_line":262,"start_character":27,"end_line":262,"end_character":39},"in_reply_to":"bfb3d3c7_1de94e19","updated":"2019-05-21 06:36:32.000000000","message":"Done","commit_id":"14a9392eb3592faaa107722d3b9da0bb3195b9e0"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"caa1f9ccd60fad30bda00a08d1123088a2d7cabb","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def get_instance_cpu_usage(self, instance):"},{"line_number":266,"context_line":"        return self.datasource_backend.get_instance_cpu_usage("},{"line_number":267,"context_line":"            instance, \u0027instance\u0027, self.period,"},{"line_number":268,"context_line":"            self.aggregation_method[\u0027instance\u0027], self.granularity)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def calculate_score_node(self, node):"}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_ab247fc7","line":267,"range":{"start_line":267,"start_character":23,"end_line":267,"end_character":31},"updated":"2019-05-21 05:56:58.000000000","message":"ditto","commit_id":"14a9392eb3592faaa107722d3b9da0bb3195b9e0"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"089db413654543fce35455b7a65729c106e1cbae","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def get_instance_cpu_usage(self, instance):"},{"line_number":266,"context_line":"        return self.datasource_backend.get_instance_cpu_usage("},{"line_number":267,"context_line":"            instance, \u0027instance\u0027, self.period,"},{"line_number":268,"context_line":"            self.aggregation_method[\u0027instance\u0027], self.granularity)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def calculate_score_node(self, node):"}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_5dc90676","line":267,"range":{"start_line":267,"start_character":23,"end_line":267,"end_character":31},"in_reply_to":"bfb3d3c7_ab247fc7","updated":"2019-05-21 06:36:32.000000000","message":"Done","commit_id":"14a9392eb3592faaa107722d3b9da0bb3195b9e0"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"29028dfaf43b75561904c03143bf19612f8aa0ea","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    DATASOURCE_METRICS \u003d [\u0027host_cpu_usage\u0027, \u0027instance_cpu_usage\u0027]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    MIGRATION \u003d \"migrate\""},{"line_number":54,"context_line":"    CHANGE_NOVA_SERVICE_STATE \u003d \"change_nova_service_state\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def __init__(self, config, osc\u003dNone):"}],"source_content_type":"text/x-python","patch_set":23,"id":"bfb3d3c7_738f59cc","line":53,"range":{"start_line":53,"start_character":0,"end_line":53,"end_character":25},"updated":"2019-05-21 08:59:48.000000000","message":"This patch needs to update the code.","commit_id":"827873acc8ad3ac97094625672e340c5c7f3ba29"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"0e3ed612c60c954514d4ec561ac47134e83814f0","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    DATASOURCE_METRICS \u003d [\u0027host_cpu_usage\u0027, \u0027instance_cpu_usage\u0027]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    MIGRATION \u003d \"migrate\""},{"line_number":54,"context_line":"    CHANGE_NOVA_SERVICE_STATE \u003d \"change_nova_service_state\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def __init__(self, config, osc\u003dNone):"}],"source_content_type":"text/x-python","patch_set":23,"id":"bfb3d3c7_d313a565","line":53,"range":{"start_line":53,"start_character":0,"end_line":53,"end_character":25},"in_reply_to":"bfb3d3c7_738f59cc","updated":"2019-05-21 09:03:39.000000000","message":"Done","commit_id":"827873acc8ad3ac97094625672e340c5c7f3ba29"}]}
