)]}'
{"ceilometer/api/controllers/v2/meters.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"4c7e1de19a956b79b6231232743fc9c431c0f5d3","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        rbac.enforce(\u0027create_samples\u0027, pecan.request)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        direct \u003d strutils.bool_from_string(direct)"},{"line_number":309,"context_line":"        if not samples:"},{"line_number":310,"context_line":"            msg \u003d _(\u0027Samples should be included in request body\u0027)"},{"line_number":311,"context_line":"            raise base.ClientSideError(msg)"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_75632742","line":309,"updated":"2015-06-22 14:26:45.000000000","message":"why is this needed?","commit_id":"84992bccd8069ecb019e9e04cc17a041334ab387"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"54c0e728aee8cf6c9b3b2a75b989d60f7ff68c5d","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        rbac.enforce(\u0027create_samples\u0027, pecan.request)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        direct \u003d strutils.bool_from_string(direct)"},{"line_number":309,"context_line":"        if not samples:"},{"line_number":310,"context_line":"            msg \u003d _(\u0027Samples should be included in request body\u0027)"},{"line_number":311,"context_line":"            raise base.ClientSideError(msg)"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_e02f579f","line":309,"in_reply_to":"fa32b979_75632742","updated":"2015-06-23 02:15:44.000000000","message":"In this change, I provide a None as the default value of samples parameter, I have tested that if I post a API request with a empty body, it will raise a NoneType error for the following for loop. previously, the return is a 400 error, this stuff to keep consistency.","commit_id":"84992bccd8069ecb019e9e04cc17a041334ab387"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"4c7e1de19a956b79b6231232743fc9c431c0f5d3","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        def_user_id \u003d pecan.request.headers.get(\u0027X-User-Id\u0027)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        ctxt \u003d context.RequestContext(user\u003ddef_user_id,"},{"line_number":320,"context_line":"                                      tenant\u003ddef_project_id,"},{"line_number":321,"context_line":"                                      is_admin\u003dTrue)"},{"line_number":322,"context_line":"        notifier \u003d pecan.request.notifier"},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_704d7598","line":320,"updated":"2015-06-22 14:26:45.000000000","message":"can we create this below when we send notification. just so we don\u0027t create it for no reason","commit_id":"84992bccd8069ecb019e9e04cc17a041334ab387"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"54c0e728aee8cf6c9b3b2a75b989d60f7ff68c5d","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        def_user_id \u003d pecan.request.headers.get(\u0027X-User-Id\u0027)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        ctxt \u003d context.RequestContext(user\u003ddef_user_id,"},{"line_number":320,"context_line":"                                      tenant\u003ddef_project_id,"},{"line_number":321,"context_line":"                                      is_admin\u003dTrue)"},{"line_number":322,"context_line":"        notifier \u003d pecan.request.notifier"},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_00027b0b","line":320,"in_reply_to":"fa32b979_704d7598","updated":"2015-06-23 02:15:44.000000000","message":"To avoid re-creating the context in the following for loop when bulk creating to low a bit cost. but I should add a if condition here.","commit_id":"84992bccd8069ecb019e9e04cc17a041334ab387"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"4c7e1de19a956b79b6231232743fc9c431c0f5d3","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                source\u003ds.source)"},{"line_number":362,"context_line":"            s.message_id \u003d published_sample.id"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"            sample_dict \u003d publisher_utils.meter_message_from_counter("},{"line_number":365,"context_line":"                published_sample, cfg.CONF.publisher.telemetry_secret)"},{"line_number":366,"context_line":"            if direct:"},{"line_number":367,"context_line":"                if sample_dict.get(\u0027timestamp\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_f020a5b2","line":364,"updated":"2015-06-22 14:26:45.000000000","message":"move this to else section","commit_id":"84992bccd8069ecb019e9e04cc17a041334ab387"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"54c0e728aee8cf6c9b3b2a75b989d60f7ff68c5d","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                source\u003ds.source)"},{"line_number":362,"context_line":"            s.message_id \u003d published_sample.id"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"            sample_dict \u003d publisher_utils.meter_message_from_counter("},{"line_number":365,"context_line":"                published_sample, cfg.CONF.publisher.telemetry_secret)"},{"line_number":366,"context_line":"            if direct:"},{"line_number":367,"context_line":"                if sample_dict.get(\u0027timestamp\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_f3189377","line":364,"in_reply_to":"fa32b979_f020a5b2","updated":"2015-06-23 02:15:44.000000000","message":"this is needed in both if section and else section.","commit_id":"84992bccd8069ecb019e9e04cc17a041334ab387"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"4c7e1de19a956b79b6231232743fc9c431c0f5d3","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            sample_dict \u003d publisher_utils.meter_message_from_counter("},{"line_number":365,"context_line":"                published_sample, cfg.CONF.publisher.telemetry_secret)"},{"line_number":366,"context_line":"            if direct:"},{"line_number":367,"context_line":"                if sample_dict.get(\u0027timestamp\u0027):"},{"line_number":368,"context_line":"                    ts \u003d timeutils.parse_isotime(sample_dict[\u0027timestamp\u0027])"},{"line_number":369,"context_line":"                    sample_dict[\u0027timestamp\u0027] \u003d timeutils.normalize_time(ts)"},{"line_number":370,"context_line":"                pecan.request.storage_conn.record_metering_data(sample_dict)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_4bff6201","line":367,"updated":"2015-06-22 14:26:45.000000000","message":"we don\u0027t need this (if we skip the above)","commit_id":"84992bccd8069ecb019e9e04cc17a041334ab387"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"54c0e728aee8cf6c9b3b2a75b989d60f7ff68c5d","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            sample_dict \u003d publisher_utils.meter_message_from_counter("},{"line_number":365,"context_line":"                published_sample, cfg.CONF.publisher.telemetry_secret)"},{"line_number":366,"context_line":"            if direct:"},{"line_number":367,"context_line":"                if sample_dict.get(\u0027timestamp\u0027):"},{"line_number":368,"context_line":"                    ts \u003d timeutils.parse_isotime(sample_dict[\u0027timestamp\u0027])"},{"line_number":369,"context_line":"                    sample_dict[\u0027timestamp\u0027] \u003d timeutils.normalize_time(ts)"},{"line_number":370,"context_line":"                pecan.request.storage_conn.record_metering_data(sample_dict)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_f3ec13f5","line":367,"in_reply_to":"fa32b979_4bff6201","updated":"2015-06-23 02:15:44.000000000","message":"this if condition isn\u0027t needed.","commit_id":"84992bccd8069ecb019e9e04cc17a041334ab387"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"54c0e728aee8cf6c9b3b2a75b989d60f7ff68c5d","unresolved":false,"context_lines":[{"line_number":367,"context_line":"                if sample_dict.get(\u0027timestamp\u0027):"},{"line_number":368,"context_line":"                    ts \u003d timeutils.parse_isotime(sample_dict[\u0027timestamp\u0027])"},{"line_number":369,"context_line":"                    sample_dict[\u0027timestamp\u0027] \u003d timeutils.normalize_time(ts)"},{"line_number":370,"context_line":"                pecan.request.storage_conn.record_metering_data(sample_dict)"},{"line_number":371,"context_line":"            else:"},{"line_number":372,"context_line":"                published_samples.append(sample_dict)"},{"line_number":373,"context_line":"        if not direct:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_13fad7bd","line":370,"updated":"2015-06-23 02:15:44.000000000","message":"here a dict object should be inputted to record_metering_data() method","commit_id":"84992bccd8069ecb019e9e04cc17a041334ab387"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"7efecedf4b8671e9eebba9a6929ad5d55ffc3130","unresolved":false,"context_lines":[{"line_number":295,"context_line":"                ]"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    @wsme_pecan.wsexpose([OldSample], str, body\u003d[OldSample], status_code\u003d201)"},{"line_number":298,"context_line":"    def post(self, direct\u003d\u0027\u0027, samples\u003dNone):"},{"line_number":299,"context_line":"        \"\"\"Post a list of new Samples to Telemetry."},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        :param direct: a flag indicates whether the samples will be posted"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_c9831e02","line":298,"updated":"2015-06-24 09:00:51.000000000","message":"how about adding a new scenario test case for direct\u003dtrue?","commit_id":"aa1a252b233a5eda125327caa0a7ece1e3dd4026"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"71baf1b2634a30d8fc5817865d1dbd1dbc81123d","unresolved":false,"context_lines":[{"line_number":295,"context_line":"                ]"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    @wsme_pecan.wsexpose([OldSample], str, body\u003d[OldSample], status_code\u003d201)"},{"line_number":298,"context_line":"    def post(self, direct\u003d\u0027\u0027, samples\u003dNone):"},{"line_number":299,"context_line":"        \"\"\"Post a list of new Samples to Telemetry."},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        :param direct: a flag indicates whether the samples will be posted"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_a4a7dfba","line":298,"in_reply_to":"fa32b979_c9831e02","updated":"2015-06-24 09:22:24.000000000","message":"I think the direct\u003dtrue scenario have tested with tests in ceilometer/tests/gabbi/gabbits/meters.yaml, for the gabbi test cases is based on real storage backend (mongodb), maybe the tests is sufficient.","commit_id":"aa1a252b233a5eda125327caa0a7ece1e3dd4026"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"cdcfb1d911d39909c1bf5dafa1d8d4c46ac42961","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        auth_project \u003d rbac.get_limited_to_project(pecan.request.headers)"},{"line_number":314,"context_line":"        def_source \u003d pecan.request.cfg.sample_source"},{"line_number":315,"context_line":"        def_project_id \u003d pecan.request.headers.get(\u0027X-Project-Id\u0027)"},{"line_number":316,"context_line":"        def_user_id \u003d pecan.request.headers.get(\u0027X-User-Id\u0027)"},{"line_number":317,"context_line":"        if not direct:"},{"line_number":318,"context_line":"            ctxt \u003d context.RequestContext(user\u003ddef_user_id,"},{"line_number":319,"context_line":"                                          tenant\u003ddef_project_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_67a2764d","line":316,"updated":"2015-06-23 08:09:34.000000000","message":"The following block may be merged with the one on the line 371","commit_id":"aa1a252b233a5eda125327caa0a7ece1e3dd4026"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"942f5c9eb7a8aa4d128bf2422470b387691f1a3d","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        auth_project \u003d rbac.get_limited_to_project(pecan.request.headers)"},{"line_number":314,"context_line":"        def_source \u003d pecan.request.cfg.sample_source"},{"line_number":315,"context_line":"        def_project_id \u003d pecan.request.headers.get(\u0027X-Project-Id\u0027)"},{"line_number":316,"context_line":"        def_user_id \u003d pecan.request.headers.get(\u0027X-User-Id\u0027)"},{"line_number":317,"context_line":"        if not direct:"},{"line_number":318,"context_line":"            ctxt \u003d context.RequestContext(user\u003ddef_user_id,"},{"line_number":319,"context_line":"                                          tenant\u003ddef_project_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_13cacc6e","line":316,"in_reply_to":"fa32b979_67a2764d","updated":"2015-06-23 09:07:32.000000000","message":"As I have replied previously :), to avoid generating context multi times in following for loop if bulk creating samples.","commit_id":"aa1a252b233a5eda125327caa0a7ece1e3dd4026"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"69f1468d389fba6e2afe06b35fef3d1a1b0e7107","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                pecan.request.storage_conn.record_metering_data(sample_dict)"},{"line_number":369,"context_line":"            else:"},{"line_number":370,"context_line":"                published_samples.append(sample_dict)"},{"line_number":371,"context_line":"        if not direct:"},{"line_number":372,"context_line":"            notifier.info(ctxt, \u0027telemetry.api\u0027, published_samples)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        return samples"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_d63df22b","line":371,"updated":"2015-06-24 12:38:50.000000000","message":"i think Nadya\u0027s suggestion was to define notifier and context here.","commit_id":"aa1a252b233a5eda125327caa0a7ece1e3dd4026"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"9bcb53f046739e01e9faa10af643679dd2042d26","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                pecan.request.storage_conn.record_metering_data(sample_dict)"},{"line_number":369,"context_line":"            else:"},{"line_number":370,"context_line":"                published_samples.append(sample_dict)"},{"line_number":371,"context_line":"        if not direct:"},{"line_number":372,"context_line":"            notifier.info(ctxt, \u0027telemetry.api\u0027, published_samples)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        return samples"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_ed792330","line":371,"in_reply_to":"fa32b979_d63df22b","updated":"2015-06-25 01:12:47.000000000","message":"yes, my misunderstanding, for ps6 has been merged conflict, it better to fix it in this change.","commit_id":"aa1a252b233a5eda125327caa0a7ece1e3dd4026"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"cdcfb1d911d39909c1bf5dafa1d8d4c46ac42961","unresolved":false,"context_lines":[{"line_number":370,"context_line":"                published_samples.append(sample_dict)"},{"line_number":371,"context_line":"        if not direct:"},{"line_number":372,"context_line":"            notifier.info(ctxt, \u0027telemetry.api\u0027, published_samples)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        return samples"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    @wsme_pecan.wsexpose([Statistics],"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_2721ceb4","line":373,"updated":"2015-06-23 08:09:34.000000000","message":"btw, why do we return samples? maybe it\u0027s better to return what was successfully published (published_samples)? It\u0027s just a question because I guess we cannot change it","commit_id":"aa1a252b233a5eda125327caa0a7ece1e3dd4026"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"942f5c9eb7a8aa4d128bf2422470b387691f1a3d","unresolved":false,"context_lines":[{"line_number":370,"context_line":"                published_samples.append(sample_dict)"},{"line_number":371,"context_line":"        if not direct:"},{"line_number":372,"context_line":"            notifier.info(ctxt, \u0027telemetry.api\u0027, published_samples)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        return samples"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    @wsme_pecan.wsexpose([Statistics],"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_33359045","line":373,"in_reply_to":"fa32b979_2721ceb4","updated":"2015-06-23 09:07:32.000000000","message":"The return should be a instance of \u0027[OldSample]\u0027 see L297, the first parameter of the  @wsme_pecan.wsexpose() is the return type.","commit_id":"aa1a252b233a5eda125327caa0a7ece1e3dd4026"}]}
