)]}'
{"cloudkitty/api/v1/datamodels/rating.py":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"61c9b714f4fc69418e094a886f4c8c0ca7f03326","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"METRICS_CONF \u003d ck_utils.get_metrics_conf(CONF.collect.metrics_conf)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CLOUDKITTY_SERVICES \u003d wtypes.Enum(wtypes.text,"},{"line_number":31,"context_line":"                                  *METRICS_CONF[\u0027services\u0027])"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class CloudkittyResource(wtypes.Base):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_b7ed6bf1","line":31,"range":{"start_line":30,"start_character":0,"end_line":31,"end_character":60},"updated":"2017-09-28 06:52:30.000000000","message":"we can put this in one line","commit_id":"e9c3891304ada9ce1a4354f89ac9a2224f954afe"}],"cloudkitty/collector/gnocchi.py":[{"author":{"_account_id":23173,"name":"Maxime Cottret","email":"maxime.cottret@gmail.com","username":"aolwas"},"change_message_id":"98061f11e2fc3397d9f3811815ad281774b1f721","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def _expand_metrics(self, resources, mappings, start, end):"},{"line_number":191,"context_line":"        for resource in resources:"},{"line_number":192,"context_line":"            metrics \u003d resource.get(\u0027metrics\u0027, {})"},{"line_number":193,"context_line":"            # NOTE(mc): deprecated except part kept for backward compatibility."},{"line_number":194,"context_line":"            try:"},{"line_number":195,"context_line":"                for mapping in mappings:"},{"line_number":196,"context_line":"                    self._expand("}],"source_content_type":"text/x-python","patch_set":13,"id":"ff82abbf_f10c2f95","line":193,"updated":"2017-11-28 15:34:56.000000000","message":"You should put this note juste after the except ... it\u0027s quite confusing here (thx luka for the explaination)\n\nFor the other notes as well ;-)","commit_id":"2a89b4aeee793d1fba2ce0e1656a0e3dbbfa2f9b"},{"author":{"_account_id":23173,"name":"Maxime Cottret","email":"maxime.cottret@gmail.com","username":"aolwas"},"change_message_id":"98061f11e2fc3397d9f3811815ad281774b1f721","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"            self._expand_metrics([resource_data], mappings, start, end)"},{"line_number":288,"context_line":"            resource_data.pop(\u0027metrics\u0027, None)"},{"line_number":289,"context_line":"            # Convert network.bw.in, network.bw.out and image unit to MB"},{"line_number":290,"context_line":"            if resource.get(\u0027type\u0027) \u003d\u003d \u0027instance_network_interface\u0027:"},{"line_number":291,"context_line":"                resource_data[qty] \u003d ("},{"line_number":292,"context_line":"                    decimal.Decimal(resource_data[qty]) / units.M)"},{"line_number":293,"context_line":"            elif resource.get(\u0027type\u0027) \u003d\u003d \u0027image\u0027:"},{"line_number":294,"context_line":"                resource_data[qty] \u003d ("},{"line_number":295,"context_line":"                    decimal.Decimal(resource_data[qty]) / units.Mi)"},{"line_number":296,"context_line":"            data \u003d self.t_cloudkitty.format_item("},{"line_number":297,"context_line":"                resource_data, unit,"},{"line_number":298,"context_line":"                decimal.Decimal("},{"line_number":299,"context_line":"                    qty if isinstance(qty, int) else resource_data[qty]))"},{"line_number":300,"context_line":"            # NOTE(sheeprine): Reference to gnocchi resource used by storage"},{"line_number":301,"context_line":"            data[\u0027resource_id\u0027] \u003d data[\u0027desc\u0027][\u0027resource_id\u0027]"},{"line_number":302,"context_line":"            formated_resources.append(data)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff82abbf_b179c7c8","line":299,"range":{"start_line":289,"start_character":1,"end_line":299,"end_character":73},"updated":"2017-11-28 15:34:56.000000000","message":"Now that services are defined outside the code, we should not have hardcoded references to any services. We shoud provide generic unit conversion from what\u0027s provided in the yaml. \n\nIt means we also should add in the yaml the original unit of the metric.\n\nFor me, this can be done in another patch IF we are sure it will be done for the next release, at least for gnocchi and monasca (since ceilometer is deprecated)\n\n@all, what do you think ?","commit_id":"2a89b4aeee793d1fba2ce0e1656a0e3dbbfa2f9b"}],"cloudkitty/collector/monasca.py":[{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"2d4cba75570693a4d96e221ebebfa94ae3fbe37e","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    def _get_resource_metadata(self, resource_type, start, end, resource_id):"},{"line_number":182,"context_line":"        # NOTE(mc): deprecated except part kept for backward compatibility."},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            meter \u003d METRICS_CONF[\u0027services_objects\u0027].get(resource_type)"},{"line_number":185,"context_line":"        except KeyError:"},{"line_number":186,"context_line":"            LOG.warning(\u0027Error when trying to use yaml metrology conf.\u0027)"},{"line_number":187,"context_line":"            LOG.warning(\u0027Fallback on the deprecated oslo config method.\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f485f77_2cec6028","line":184,"range":{"start_line":184,"start_character":20,"end_line":184,"end_character":71},"updated":"2017-11-18 18:19:12.000000000","message":"From the config I see in index.rst, this does not match with retrieve_mappings. GnocchiCollector\u0027s retrieve_mappings should be updated because some metrics have been removed in the ocata release (https://docs.openstack.org/ceilometer/pike/admin/telemetry-measurements.html), but I think that requires another patch.","commit_id":"9c6fe7f9d37d8516855f5e93f45c4f6c1f9ae382"},{"author":{"_account_id":26767,"name":"Martin CAMEY","email":"martin.camey@objectif-libre.com","username":"MC"},"change_message_id":"4d54dfe52f493513f0b9fd3f544e37f477e4aa66","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    def _get_resource_metadata(self, resource_type, start, end, resource_id):"},{"line_number":182,"context_line":"        # NOTE(mc): deprecated except part kept for backward compatibility."},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            meter \u003d METRICS_CONF[\u0027services_objects\u0027].get(resource_type)"},{"line_number":185,"context_line":"        except KeyError:"},{"line_number":186,"context_line":"            LOG.warning(\u0027Error when trying to use yaml metrology conf.\u0027)"},{"line_number":187,"context_line":"            LOG.warning(\u0027Fallback on the deprecated oslo config method.\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_42f2a708","line":184,"range":{"start_line":184,"start_character":20,"end_line":184,"end_character":71},"in_reply_to":"1f485f77_2cec6028","updated":"2017-11-20 14:09:04.000000000","message":"As we discussed, the update of the metrics should be done in another patch (I\u0027m based on Gnocchi collector for the yaml file, not the Monasca one).","commit_id":"9c6fe7f9d37d8516855f5e93f45c4f6c1f9ae382"}],"cloudkitty/utils.py":[{"author":{"_account_id":7923,"name":"Gauvain Pocentek","email":"gauvainpocentek@gmail.com","username":"gpocentek"},"change_message_id":"b2aac193eec66b1e1c644d51e77b7498313517b4","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"def get_metrics_conf(conf_path):"},{"line_number":197,"context_line":"    with open(conf_path) as conf:"},{"line_number":198,"context_line":"        return yaml.load(conf)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_e7258d5d","line":198,"updated":"2017-09-27 12:31:36.000000000","message":"It would be nice to try/except this, to be able to log useful information to the admin.","commit_id":"97d11c9e848b16701c5614b4fc9e0d9927ad4652"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"2d4cba75570693a4d96e221ebebfa94ae3fbe37e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    cfg.ListOpt(\u0027services\u0027,"},{"line_number":59,"context_line":"                default\u003d["},{"line_number":60,"context_line":"                    \u0027compute\u0027,"},{"line_number":61,"context_line":"                    \u0027volume\u0027,"},{"line_number":62,"context_line":"                    \u0027network.bw.in\u0027,"},{"line_number":63,"context_line":"                    \u0027network.bw.out\u0027,"},{"line_number":64,"context_line":"                    \u0027network.floating\u0027,"},{"line_number":65,"context_line":"                    \u0027image\u0027,"},{"line_number":66,"context_line":"                ],"},{"line_number":67,"context_line":"                deprecated_for_removal\u003dTrue,"},{"line_number":68,"context_line":"                help\u003d\u0027Services to monitor.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f485f77_6c6258da","line":65,"range":{"start_line":61,"start_character":8,"end_line":65,"end_character":28},"updated":"2017-11-18 18:19:12.000000000","message":"Until now, only the compute service was enabled","commit_id":"9c6fe7f9d37d8516855f5e93f45c4f6c1f9ae382"},{"author":{"_account_id":26767,"name":"Martin CAMEY","email":"martin.camey@objectif-libre.com","username":"MC"},"change_message_id":"4d54dfe52f493513f0b9fd3f544e37f477e4aa66","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    cfg.ListOpt(\u0027services\u0027,"},{"line_number":59,"context_line":"                default\u003d["},{"line_number":60,"context_line":"                    \u0027compute\u0027,"},{"line_number":61,"context_line":"                    \u0027volume\u0027,"},{"line_number":62,"context_line":"                    \u0027network.bw.in\u0027,"},{"line_number":63,"context_line":"                    \u0027network.bw.out\u0027,"},{"line_number":64,"context_line":"                    \u0027network.floating\u0027,"},{"line_number":65,"context_line":"                    \u0027image\u0027,"},{"line_number":66,"context_line":"                ],"},{"line_number":67,"context_line":"                deprecated_for_removal\u003dTrue,"},{"line_number":68,"context_line":"                help\u003d\u0027Services to monitor.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_9fcb2c1d","line":65,"range":{"start_line":61,"start_character":8,"end_line":65,"end_character":28},"in_reply_to":"1f485f77_6c6258da","updated":"2017-11-20 14:09:04.000000000","message":"No, every service are enabled. See changes in collector/__init__.py file. I know what you are talking about but this is for devstack only.","commit_id":"9c6fe7f9d37d8516855f5e93f45c4f6c1f9ae382"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"1067dc1147e9f2825a9322c560e65e6a17a14f45","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"collect_opts \u003d ["},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027collector\u0027,"},{"line_number":43,"context_line":"               default\u003d\u0027gnocchi\u0027,"},{"line_number":44,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":45,"context_line":"               help\u003d\u0027Data collector.\u0027),"},{"line_number":46,"context_line":"    cfg.IntOpt(\u0027window\u0027,"},{"line_number":47,"context_line":"               default\u003d1800,"},{"line_number":48,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":49,"context_line":"               help\u003d\u0027Number of samples to collect per call.\u0027),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027period\u0027,"},{"line_number":51,"context_line":"               default\u003d3600,"},{"line_number":52,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":53,"context_line":"               help\u003d\u0027Rating period in seconds.\u0027),"},{"line_number":54,"context_line":"    cfg.IntOpt(\u0027wait_periods\u0027,"},{"line_number":55,"context_line":"               default\u003d2,"},{"line_number":56,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":57,"context_line":"               help\u003d\u0027Wait for N periods before collecting new data.\u0027),"},{"line_number":58,"context_line":"    cfg.ListOpt(\u0027services\u0027,"},{"line_number":59,"context_line":"                default\u003d["},{"line_number":60,"context_line":"                    \u0027compute\u0027,"},{"line_number":61,"context_line":"                    \u0027volume\u0027,"},{"line_number":62,"context_line":"                    \u0027network.bw.in\u0027,"},{"line_number":63,"context_line":"                    \u0027network.bw.out\u0027,"},{"line_number":64,"context_line":"                    \u0027network.floating\u0027,"},{"line_number":65,"context_line":"                    \u0027image\u0027,"},{"line_number":66,"context_line":"                ],"},{"line_number":67,"context_line":"                deprecated_for_removal\u003dTrue,"},{"line_number":68,"context_line":"                help\u003d\u0027Services to monitor.\u0027),"},{"line_number":69,"context_line":"    cfg.StrOpt(\u0027metrics_conf\u0027,"},{"line_number":70,"context_line":"               default\u003d\u0027/etc/cloudkitty/metrics.yml\u0027,"},{"line_number":71,"context_line":"               help\u003d\u0027Metrology configuration file.\u0027),"},{"line_number":72,"context_line":"]"},{"line_number":73,"context_line":"CONF \u003d cfg.CONF"},{"line_number":74,"context_line":"CONF.register_opts(collect_opts, \u0027collect\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"def isotime(at\u003dNone, subsecond\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff82abbf_7b473c1f","line":74,"range":{"start_line":41,"start_character":0,"end_line":74,"end_character":43},"updated":"2017-11-21 11:25:01.000000000","message":"This should be moved to service.py. The config file is parsed in the \u0027prepare_service\u0027 function (CONF() call). In the case of cloudkitty-processor, these options are registered after prepare_service() is called and cfg.CONF is not refreshed, causing get_metrics_conf to always return the default values when metrics.yml is not found.","commit_id":"49951aa717b26285d5ff60991572082918cfcd89"}],"devstack/plugin.sh":[{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"28f944a1090288dfd26f4a455ebe4796184e6d94","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    # auth"},{"line_number":145,"context_line":"    iniset $CLOUDKITTY_CONF authinfos auth_type v3password"},{"line_number":146,"context_line":"    iniset $CLOUDKITTY_CONF authinfos auth_protocol http"},{"line_number":147,"context_line":"    iniset $CLOUDKITTY_CONF authinfos auth_url \"$KEYSTONE_SERVICE_URI/v3\""},{"line_number":148,"context_line":"    iniset $CLOUDKITTY_CONF authinfos identity_uri \"$KEYSTONE_SERVICE_URI/v3\""},{"line_number":149,"context_line":"    iniset $CLOUDKITTY_CONF authinfos username cloudkitty"},{"line_number":150,"context_line":"    iniset $CLOUDKITTY_CONF authinfos password $SERVICE_PASSWORD"}],"source_content_type":"text/x-sh","patch_set":7,"id":"1f485f77_32467c7e","line":147,"range":{"start_line":147,"start_character":69,"end_line":147,"end_character":73},"updated":"2017-11-14 08:31:17.000000000","message":"Remove this","commit_id":"82c32659d8b88ec0e4fb3a680fbd6802059a3a86"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"28f944a1090288dfd26f4a455ebe4796184e6d94","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    iniset $CLOUDKITTY_CONF authinfos auth_type v3password"},{"line_number":146,"context_line":"    iniset $CLOUDKITTY_CONF authinfos auth_protocol http"},{"line_number":147,"context_line":"    iniset $CLOUDKITTY_CONF authinfos auth_url \"$KEYSTONE_SERVICE_URI/v3\""},{"line_number":148,"context_line":"    iniset $CLOUDKITTY_CONF authinfos identity_uri \"$KEYSTONE_SERVICE_URI/v3\""},{"line_number":149,"context_line":"    iniset $CLOUDKITTY_CONF authinfos username cloudkitty"},{"line_number":150,"context_line":"    iniset $CLOUDKITTY_CONF authinfos password $SERVICE_PASSWORD"},{"line_number":151,"context_line":"    iniset $CLOUDKITTY_CONF authinfos project_name $SERVICE_TENANT_NAME"}],"source_content_type":"text/x-sh","patch_set":7,"id":"1f485f77_f25fc43e","line":148,"range":{"start_line":148,"start_character":73,"end_line":148,"end_character":76},"updated":"2017-11-14 08:31:17.000000000","message":"Remove this","commit_id":"82c32659d8b88ec0e4fb3a680fbd6802059a3a86"}],"doc/source/configuration/index.rst":[{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"2d4cba75570693a4d96e221ebebfa94ae3fbe37e","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"The collect information, is separated from the Cloudkitty configuration file, in a yaml one."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"This allows Cloudkitty users to change metrology configuration, without modifying source code or Cloudkitty configuration file."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":".. code-block:: ini"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"1f485f77_4b5e9976","line":172,"range":{"start_line":172,"start_character":97,"end_line":172,"end_character":127},"updated":"2017-11-18 18:19:12.000000000","message":"Please make this \u003c 80 characters.","commit_id":"9c6fe7f9d37d8516855f5e93f45c4f6c1f9ae382"},{"author":{"_account_id":26767,"name":"Martin CAMEY","email":"martin.camey@objectif-libre.com","username":"MC"},"change_message_id":"4d54dfe52f493513f0b9fd3f544e37f477e4aa66","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"The collect information, is separated from the Cloudkitty configuration file, in a yaml one."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"This allows Cloudkitty users to change metrology configuration, without modifying source code or Cloudkitty configuration file."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":".. code-block:: ini"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ff82abbf_ffd918f4","line":172,"range":{"start_line":172,"start_character":97,"end_line":172,"end_character":127},"in_reply_to":"1f485f77_4b5e9976","updated":"2017-11-20 14:09:04.000000000","message":"Sure, thanks!","commit_id":"9c6fe7f9d37d8516855f5e93f45c4f6c1f9ae382"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"2d4cba75570693a4d96e221ebebfa94ae3fbe37e","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        - network.floating"},{"line_number":199,"context_line":"        - image"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"      services_objects:"},{"line_number":202,"context_line":"        compute: instance"},{"line_number":203,"context_line":"        volume: volume"},{"line_number":204,"context_line":"        network.bw.in: instance_network_interface"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1f485f77_8c959489","line":201,"range":{"start_line":201,"start_character":6,"end_line":201,"end_character":22},"updated":"2017-11-18 18:19:12.000000000","message":"See comment in collector/monasca.py","commit_id":"9c6fe7f9d37d8516855f5e93f45c4f6c1f9ae382"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"2d4cba75570693a4d96e221ebebfa94ae3fbe37e","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        network.floating: network"},{"line_number":207,"context_line":"        image: image"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"      services_metrics:"},{"line_number":210,"context_line":"        compute:"},{"line_number":211,"context_line":"          - vcpus: max"},{"line_number":212,"context_line":"          - memory: max"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1f485f77_6cb7f83b","line":209,"range":{"start_line":209,"start_character":4,"end_line":209,"end_character":23},"updated":"2017-11-18 18:19:12.000000000","message":"Shouldn\u0027t it be made clear that these are the metrics as they are called in ceilometer/gnocchi/monasca ?","commit_id":"9c6fe7f9d37d8516855f5e93f45c4f6c1f9ae382"}],"etc/cloudkitty/metrics.yml":[{"author":{"_account_id":7923,"name":"Gauvain Pocentek","email":"gauvainpocentek@gmail.com","username":"gpocentek"},"change_message_id":"3626317e0ae130333619358ff70f762fcc994c3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"collector: gnocchi"},{"line_number":2,"context_line":"period: 3600"},{"line_number":3,"context_line":"wait_periods: 2"},{"line_number":4,"context_line":"window: 1800"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7f515b1d_2decd88d","line":1,"updated":"2017-10-06 05:07:51.000000000","message":"With this syntax we will not be able to support multiple collectors, with different definitions. We would need a list for this.\n\nMaybe it\u0027s too soon but I wonder if we should update the syntax right away, and find a way to handle it properly in the code.\n\nOr maybe we should handle multiple collectors in the code first?\n\nJust a though, maybe we should discuss this.","commit_id":"e5cf1e649e4d239ccd60b7dd86afab2977645f89"}]}
