)]}'
{"cloudkitty/api/v1/controllers/info.py":[{"author":{"_account_id":21797,"name":"Jeremy Liu","display_name":"Jeremy Liu","email":"liujiong.cc@gmail.com","username":"liujiong"},"change_message_id":"b86d8244056ef1c58c940d92b86db078a4a912de","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        :return: List of every services."},{"line_number":42,"context_line":"        \"\"\""},{"line_number":43,"context_line":"        policy.enforce(pecan.request.context, \u0027info:list_service_info\u0027, {})"},{"line_number":44,"context_line":"        services_info_list \u003d []"},{"line_number":45,"context_line":"        for service, metadata in METADATA.items():"},{"line_number":46,"context_line":"            info \u003d metadata.copy()"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_3b9172f1","line":43,"range":{"start_line":43,"start_character":47,"end_line":43,"end_character":69},"updated":"2017-01-03 07:15:26.000000000","message":"I suggest change this to `info:list_services_info`. Need to sync the policy.json file as well.\nAlso, the policy.json needs to be modified and uploaded here.","commit_id":"a0f1b7dd33a52d6d9069f30cfedcea66222df993"},{"author":{"_account_id":21797,"name":"Jeremy Liu","display_name":"Jeremy Liu","email":"liujiong.cc@gmail.com","username":"liujiong"},"change_message_id":"b86d8244056ef1c58c940d92b86db078a4a912de","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    def get_one(self, service_name):"},{"line_number":55,"context_line":"        \"\"\"Return a service."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        :param service_id: UUID of the service to filter on."},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":"        policy.enforce(pecan.request.context, \u0027info:get_service_info\u0027, {})"},{"line_number":60,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_7bf3fa73","line":57,"range":{"start_line":57,"start_character":9,"end_line":57,"end_character":59},"updated":"2017-01-03 07:15:26.000000000","message":"This needs to be adjusted.","commit_id":"a0f1b7dd33a52d6d9069f30cfedcea66222df993"},{"author":{"_account_id":21797,"name":"Jeremy Liu","display_name":"Jeremy Liu","email":"liujiong.cc@gmail.com","username":"liujiong"},"change_message_id":"b86d8244056ef1c58c940d92b86db078a4a912de","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class InfoController(rest.RestController):"},{"line_number":69,"context_line":"    \"\"\"REST Controller managing Cloukitty general information.\"\"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    services \u003d ServiceInfoController()"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_7b65ba43","line":69,"range":{"start_line":69,"start_character":32,"end_line":69,"end_character":41},"updated":"2017-01-03 07:15:26.000000000","message":"Cloudkitty","commit_id":"a0f1b7dd33a52d6d9069f30cfedcea66222df993"},{"author":{"_account_id":21797,"name":"Jeremy Liu","display_name":"Jeremy Liu","email":"liujiong.cc@gmail.com","username":"liujiong"},"change_message_id":"b86d8244056ef1c58c940d92b86db078a4a912de","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    })"},{"line_number":78,"context_line":"    def config(self):"},{"line_number":79,"context_line":"        \"\"\"Return current configuration.\"\"\""},{"line_number":80,"context_line":"        policy.enforce(pecan.request.context, \u0027info:config\u0027, {})"},{"line_number":81,"context_line":"        info \u003d {}"},{"line_number":82,"context_line":"        info[\"collect\"] \u003d {key: value for key, value in CONF.collect.items()}"},{"line_number":83,"context_line":"        return info"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_1b074e1d","line":80,"range":{"start_line":80,"start_character":46,"end_line":80,"end_character":59},"updated":"2017-01-03 07:15:26.000000000","message":"Why not make the action name more clear? Something like `info:get_collector_config`.","commit_id":"a0f1b7dd33a52d6d9069f30cfedcea66222df993"},{"author":{"_account_id":21797,"name":"Jeremy Liu","display_name":"Jeremy Liu","email":"liujiong.cc@gmail.com","username":"liujiong"},"change_message_id":"9dbbbf8482dd21270da09547b67c40602fd9e5b3","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class InfoController(rest.RestController):"},{"line_number":69,"context_line":"    \"\"\"REST Controller managing Cloukitty general information.\"\"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    services \u003d ServiceInfoController()"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_db29bfe7","line":69,"range":{"start_line":69,"start_character":32,"end_line":69,"end_character":41},"updated":"2017-01-06 06:13:18.000000000","message":"Cloudkitty","commit_id":"16d813fe837c85e2c299c0e76a3dab5e5c0d3a60"}],"cloudkitty/api/v1/datamodels/info.py":[{"author":{"_account_id":21797,"name":"Jeremy Liu","display_name":"Jeremy Liu","email":"liujiong.cc@gmail.com","username":"liujiong"},"change_message_id":"b86d8244056ef1c58c940d92b86db078a4a912de","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    service_id \u003d CLOUDKITTY_SERVICES"},{"line_number":33,"context_line":"    \"\"\"Name of the service.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    metadata \u003d [wtypes.text]"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_3e496060","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":14},"updated":"2017-01-03 07:15:26.000000000","message":"This seems strange. Actually, it is more like service name or service type. Can this be improved?","commit_id":"a0f1b7dd33a52d6d9069f30cfedcea66222df993"},{"author":{"_account_id":23173,"name":"Maxime Cottret","email":"maxime.cottret@gmail.com","username":"aolwas"},"change_message_id":"52b97f407b3901b7571a962d600dd2a50ec739cb","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    service_id \u003d CLOUDKITTY_SERVICES"},{"line_number":33,"context_line":"    \"\"\"Name of the service.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    metadata \u003d [wtypes.text]"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_2b459d16","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":14},"in_reply_to":"ba5201f7_3e496060","updated":"2017-01-03 11:04:42.000000000","message":"That\u0027s what I\u0027ve done at first but there is a constraint from the python client: when creating a resource with the openstack common client code, it internally add \"_id\" to the primary attribute, meaning that you have to use a name with \"_id\" on the API side.","commit_id":"a0f1b7dd33a52d6d9069f30cfedcea66222df993"}],"cloudkitty/collector/ceilometer.py":[{"author":{"_account_id":8358,"name":"zhangguoqing","email":"zhang.guoqing@99cloud.net","username":"zhangguoqing"},"change_message_id":"a9e394c2c1cd077df6ca62f622a2a39199910060","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    dependencies \u003d (\u0027CeilometerTransformer\u0027,"},{"line_number":75,"context_line":"                    \u0027CloudKittyFormatTransformer\u0027)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    units_mappings \u003d {"},{"line_number":78,"context_line":"        \u0027compute\u0027: \u0027instance\u0027,"},{"line_number":79,"context_line":"        \u0027image\u0027: \u0027MB\u0027,"},{"line_number":80,"context_line":"        \u0027volume\u0027: \u0027GB\u0027,"},{"line_number":81,"context_line":"        \u0027network.bw.out\u0027: \u0027MB\u0027,"},{"line_number":82,"context_line":"        \u0027network.bw.in\u0027: \u0027MB\u0027,"},{"line_number":83,"context_line":"        \u0027network.floating\u0027: \u0027ip\u0027,"},{"line_number":84,"context_line":"    }"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def __init__(self, transformers, **kwargs):"},{"line_number":87,"context_line":"        super(CeilometerCollector, self).__init__(transformers, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_88d85655","line":84,"range":{"start_line":77,"start_character":4,"end_line":84,"end_character":5},"updated":"2017-01-03 04:24:51.000000000","message":"This information not only in CeilometerCollector but also in other Collector, so just put here may not better. :)","commit_id":"a0f1b7dd33a52d6d9069f30cfedcea66222df993"},{"author":{"_account_id":23173,"name":"Maxime Cottret","email":"maxime.cottret@gmail.com","username":"aolwas"},"change_message_id":"95831c62d7ba794d5828f94442a71647f93584c0","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    dependencies \u003d (\u0027CeilometerTransformer\u0027,"},{"line_number":75,"context_line":"                    \u0027CloudKittyFormatTransformer\u0027)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    units_mappings \u003d {"},{"line_number":78,"context_line":"        \u0027compute\u0027: \u0027instance\u0027,"},{"line_number":79,"context_line":"        \u0027image\u0027: \u0027MB\u0027,"},{"line_number":80,"context_line":"        \u0027volume\u0027: \u0027GB\u0027,"},{"line_number":81,"context_line":"        \u0027network.bw.out\u0027: \u0027MB\u0027,"},{"line_number":82,"context_line":"        \u0027network.bw.in\u0027: \u0027MB\u0027,"},{"line_number":83,"context_line":"        \u0027network.floating\u0027: \u0027ip\u0027,"},{"line_number":84,"context_line":"    }"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def __init__(self, transformers, **kwargs):"},{"line_number":87,"context_line":"        super(CeilometerCollector, self).__init__(transformers, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_99e8a67e","line":84,"range":{"start_line":77,"start_character":4,"end_line":84,"end_character":5},"in_reply_to":"ba5201f7_88d85655","updated":"2017-01-03 08:19:46.000000000","message":"I don\u0027t known if we should make output units generic or keep the possibility to define them by collector.","commit_id":"a0f1b7dd33a52d6d9069f30cfedcea66222df993"}],"cloudkitty/tests/gabbi/gabbits/v1_info.yaml":[{"author":{"_account_id":21797,"name":"Jeremy Liu","display_name":"Jeremy Liu","email":"liujiong.cc@gmail.com","username":"liujiong"},"change_message_id":"9dbbbf8482dd21270da09547b67c40602fd9e5b3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"fixtures:"},{"line_number":2,"context_line":"  - ConfigFixture"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"tests:"},{"line_number":5,"context_line":"  - name: get config"},{"line_number":6,"context_line":"    url: /v1/info/config"},{"line_number":7,"context_line":"    status: 200"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"ba5201f7_1b4ee7c0","line":4,"range":{"start_line":4,"start_character":0,"end_line":4,"end_character":5},"updated":"2017-01-06 06:13:18.000000000","message":"Can you please also add more testcases about getting services/service information?","commit_id":"16d813fe837c85e2c299c0e76a3dab5e5c0d3a60"},{"author":{"_account_id":21797,"name":"Jeremy Liu","display_name":"Jeremy Liu","email":"liujiong.cc@gmail.com","username":"liujiong"},"change_message_id":"c412f92e08f5d3d6f38e94d8ad5a57355938e43b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"      $.collect.wait_periods: 2"},{"line_number":19,"context_line":"      $.collect.period: 3600"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"  - name: get service info"},{"line_number":22,"context_line":"    url: /v1/info/services"},{"line_number":23,"context_line":"    status: 200"},{"line_number":24,"context_line":"    response_json_paths:"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba5201f7_50cc9388","line":21,"range":{"start_line":21,"start_character":14,"end_line":21,"end_character":21},"updated":"2017-01-09 03:35:58.000000000","message":"services","commit_id":"7dc4010ebea79071beacd8b3e622d74f77a9e412"}],"cloudkitty/transformer/__init__.py":[{"author":{"_account_id":21797,"name":"Jeremy Liu","display_name":"Jeremy Liu","email":"liujiong.cc@gmail.com","username":"liujiong"},"change_message_id":"b86d8244056ef1c58c940d92b86db078a4a912de","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return self.generic_strip(res_type, res_data) or res_data"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def get_metadata(self, res_type):"},{"line_number":69,"context_line":"        \"\"\"Return list of metadata available after transformation for given"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        resource type."},{"line_number":72,"context_line":"        \"\"\""},{"line_number":73,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_9e588cfc","line":71,"range":{"start_line":69,"start_character":11,"end_line":71,"end_character":21},"updated":"2017-01-03 07:15:26.000000000","message":"This is not so readable. Try this:\n\"Return list of available metadata after transformation for a given resource type\"","commit_id":"a0f1b7dd33a52d6d9069f30cfedcea66222df993"},{"author":{"_account_id":23173,"name":"Maxime Cottret","email":"maxime.cottret@gmail.com","username":"aolwas"},"change_message_id":"52b97f407b3901b7571a962d600dd2a50ec739cb","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return self.generic_strip(res_type, res_data) or res_data"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def get_metadata(self, res_type):"},{"line_number":69,"context_line":"        \"\"\"Return list of metadata available after transformation for given"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        resource type."},{"line_number":72,"context_line":"        \"\"\""},{"line_number":73,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_4803c742","line":71,"range":{"start_line":69,"start_character":11,"end_line":71,"end_character":21},"in_reply_to":"ba5201f7_9e588cfc","updated":"2017-01-03 11:04:42.000000000","message":"The problem is pep8 :-). I\u0027ll try another formulation","commit_id":"a0f1b7dd33a52d6d9069f30cfedcea66222df993"}],"cloudkitty/transformer/ceilometer.py":[{"author":{"_account_id":8358,"name":"zhangguoqing","email":"zhang.guoqing@99cloud.net","username":"zhangguoqing"},"change_message_id":"a9e394c2c1cd077df6ca62f622a2a39199910060","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        class FakeData(dict):"},{"line_number":115,"context_line":"            \"\"\"FFakeData object.\"\"\""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            def __getattr__(self, name, default\u003dNone):"},{"line_number":118,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_c846de22","line":115,"range":{"start_line":115,"start_character":15,"end_line":115,"end_character":24},"updated":"2017-01-03 04:24:51.000000000","message":"Should it be FakeData?","commit_id":"a0f1b7dd33a52d6d9069f30cfedcea66222df993"}],"cloudkitty/transformer/gnocchi.py":[{"author":{"_account_id":8358,"name":"zhangguoqing","email":"zhang.guoqing@99cloud.net","username":"zhangguoqing"},"change_message_id":"a9e394c2c1cd077df6ca62f622a2a39199910060","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        fkdt \u003d FakeData()"},{"line_number":81,"context_line":"        res_data \u003d self.strip_resource_data(res_type, fkdt)"},{"line_number":82,"context_line":"        return res_data.keys()"},{"line_number":83,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_48bcae05","line":83,"range":{"start_line":83,"start_character":0,"end_line":83,"end_character":8},"updated":"2017-01-03 04:24:51.000000000","message":"delete this line","commit_id":"a0f1b7dd33a52d6d9069f30cfedcea66222df993"}]}
