)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e5fb470858d8fe417ecabd0c857d9a2ee05e36e9","unresolved":false,"context_lines":[{"line_number":16,"context_line":"PUT /v2/meta/pipelines"},{"line_number":17,"context_line":"    Create a new pipeline configuration item with a user-defined id"},{"line_number":18,"context_line":"    Parameters: data(configuration) - a configuration within the"},{"line_number":19,"context_line":"    request body"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: Ic0ce45d957ed969f771469c4a4c4faf2f91406e8"},{"line_number":22,"context_line":"Partially-Implements: blueprint ceilometer-configuration-via-data-store"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da86d52c_bfb5c27f","line":19,"updated":"2015-02-16 15:53:26.000000000","message":"Since you\u0027re writing about adding a new API \"endpoint\" you should add \"APIImpact\" to the commit message the api working group can come along and have a look to see how this aligns with emerging guidelines they are creating.","commit_id":"5b5d57bc823934fb3f37dafdd64f8a447580097f"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"6c7e9687a1f14081657e303d30484dc108c62271","unresolved":false,"context_lines":[{"line_number":16,"context_line":"PUT /v2/meta/pipelines"},{"line_number":17,"context_line":"    Create a new pipeline configuration item with a user-defined id"},{"line_number":18,"context_line":"    Parameters: data(configuration) - a configuration within the"},{"line_number":19,"context_line":"    request body"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: Ic0ce45d957ed969f771469c4a4c4faf2f91406e8"},{"line_number":22,"context_line":"Partially-Implements: blueprint ceilometer-configuration-via-data-store"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da86d52c_9f1e3d0c","line":19,"in_reply_to":"da86d52c_bfb5c27f","updated":"2015-02-19 13:25:21.000000000","message":"will do, thanks","commit_id":"5b5d57bc823934fb3f37dafdd64f8a447580097f"}],"ceilometer/api/controllers/v2/meta.py":[{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"670b9b77d779933ded0a1f2e611e6f42f2c8f51f","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        :param data: a pipeline within the request body."},{"line_number":314,"context_line":"        \"\"\""},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        if data is None:"},{"line_number":317,"context_line":"            cfg_file \u003d cfg.CONF.pipeline_cfg_file"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"            if not os.path.exists(cfg_file):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_e20a07d1","line":316,"updated":"2015-02-17 22:03:25.000000000","message":"I have a question about this.\nIt seems to me that if you don\u0027t specify a pipeline file in the payload you are going to read it from the default config file. This can be OK if it is validated with the option of having a config pipeline loaded in the database. We want to preserve the original behavior for agents to have pipeline loaded from file as default.","commit_id":"5b5d57bc823934fb3f37dafdd64f8a447580097f"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"6c7e9687a1f14081657e303d30484dc108c62271","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        :param data: a pipeline within the request body."},{"line_number":314,"context_line":"        \"\"\""},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        if data is None:"},{"line_number":317,"context_line":"            cfg_file \u003d cfg.CONF.pipeline_cfg_file"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"            if not os.path.exists(cfg_file):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_835ae41b","line":316,"in_reply_to":"da86d52c_e20a07d1","updated":"2015-02-19 13:25:21.000000000","message":"good point thanks for that will improve","commit_id":"5b5d57bc823934fb3f37dafdd64f8a447580097f"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"670b9b77d779933ded0a1f2e611e6f42f2c8f51f","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        except ceilometer.NotImplementedError:"},{"line_number":355,"context_line":"            pass"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        pecan.request.pipeline_storage_conn.set_config_pipeline(pipeline_in)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"class MetaController(rest.RestController):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_62e4570d","line":357,"updated":"2015-02-17 22:03:25.000000000","message":"I think we need to guarantee that there is only 1 pipeline in the database and always override the one that exists.\nWhen PUT is used we should override it entirely and when we use patch we can add Sinks and/or sources.\nDoes it make sense?","commit_id":"5b5d57bc823934fb3f37dafdd64f8a447580097f"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"6c7e9687a1f14081657e303d30484dc108c62271","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        except ceilometer.NotImplementedError:"},{"line_number":355,"context_line":"            pass"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        pecan.request.pipeline_storage_conn.set_config_pipeline(pipeline_in)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"class MetaController(rest.RestController):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_6317b0ee","line":357,"in_reply_to":"da86d52c_62e4570d","updated":"2015-02-19 13:25:21.000000000","message":"Yes that make sense, will propose some updates for that patch.","commit_id":"5b5d57bc823934fb3f37dafdd64f8a447580097f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"28eb9e742fb06e96799b93d725b104d57f3caf91","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    def get_one(self, pipeline_id):"},{"line_number":306,"context_line":"        \"\"\"Unused API, will always return 404.\"\"\""},{"line_number":307,"context_line":"        pecan.abort(404)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    @v2_utils.requires_admin"},{"line_number":310,"context_line":"    @wsme_pecan.wsexpose(Pipeline)"},{"line_number":311,"context_line":"    def get_all(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_4fc7ef12","line":308,"updated":"2015-02-20 13:05:42.000000000","message":"The semantics are a bit confusing for get_one and get_all. If I understand correctly the thing returned on a successful request (to get_all) is a single entity representing an entire Pipeline config (made up of multiple sources and sinks). If that\u0027s the case, isn\u0027t that get one?\n\nAnd if it is get one, why is the URI named pipelines?\n\nI suspect that this is just a difference in use of terms: I think of an entity which is \"the pipeline\" and it does transformations according to what\u0027s in it. That seems aligned with terms like \"pipeline configurations\".\n\nElsewhere there seems to be thinking that a source sink page is a pipeline, but isn\u0027t that a transformation?","commit_id":"ba0f9a663d1be1e7ea1bbeac43542a0955393ffa"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"7e7d6bf8427a9d8b63ef8ff6c684cf08d4d9e940","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    def get_one(self, pipeline_id):"},{"line_number":306,"context_line":"        \"\"\"Unused API, will always return 404.\"\"\""},{"line_number":307,"context_line":"        pecan.abort(404)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    @v2_utils.requires_admin"},{"line_number":310,"context_line":"    @wsme_pecan.wsexpose(Pipeline)"},{"line_number":311,"context_line":"    def get_all(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_abc4bf40","line":308,"in_reply_to":"ba7be1f8_4fc7ef12","updated":"2015-02-21 08:17:57.000000000","message":"Hi Chris, I agree with you that get_one and get_all are confusing now, I\u0027ve started from spec requirements and it looked like we need to have both requests. Now it is clear that we don\u0027t need both of them.\n\nAccording to your last question, let me be sure that I\u0027ve understood it correctly. Do you mean that we do not need here all classes but pipeline?","commit_id":"ba0f9a663d1be1e7ea1bbeac43542a0955393ffa"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"66e1778afea52554fcf571dd789c5dacd3b31f6f","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    def get_one(self, pipeline_id):"},{"line_number":306,"context_line":"        \"\"\"Unused API, will always return 404.\"\"\""},{"line_number":307,"context_line":"        pecan.abort(404)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    @v2_utils.requires_admin"},{"line_number":310,"context_line":"    @wsme_pecan.wsexpose(Pipeline)"},{"line_number":311,"context_line":"    def get_all(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_d3db5eeb","line":308,"in_reply_to":"ba7be1f8_abc4bf40","updated":"2015-02-22 17:04:12.000000000","message":"Sorry, that last statement of mine doesn\u0027t really make sense does it? Where I said \"page\" I meant \"pair\".\n\nWhat I meant was that there seems to be some confusion over what a pipeline is. Is it one of several source-sink pairs or is it all those pairs together. I think of it is as the latter.","commit_id":"ba0f9a663d1be1e7ea1bbeac43542a0955393ffa"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"2877d6ff8ddcf420e74f8edfa7add54de0c6bd7e","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    def get_one(self, pipeline_id):"},{"line_number":306,"context_line":"        \"\"\"Unused API, will always return 404.\"\"\""},{"line_number":307,"context_line":"        pecan.abort(404)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    @v2_utils.requires_admin"},{"line_number":310,"context_line":"    @wsme_pecan.wsexpose(Pipeline)"},{"line_number":311,"context_line":"    def get_all(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_ffe83518","line":308,"in_reply_to":"ba7be1f8_d3db5eeb","updated":"2015-02-27 17:20:48.000000000","message":"My prior understanding of a \"pipeline\" was a single source-sink pair, see:\n\n  https://github.com/openstack/ceilometer/blob/master/ceilometer/pipeline.py#L436\n\nSo overloading the concept to now mean *all* the sources and sinks seems to me like a recipe for confusion.","commit_id":"ba0f9a663d1be1e7ea1bbeac43542a0955393ffa"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"cd2c2c6529d29c9b29db3541af8dce37a2145ac7","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    def get_one(self, pipeline_id):"},{"line_number":306,"context_line":"        \"\"\"Unused API, will always return 404.\"\"\""},{"line_number":307,"context_line":"        pecan.abort(404)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    @v2_utils.requires_admin"},{"line_number":310,"context_line":"    @wsme_pecan.wsexpose(Pipeline)"},{"line_number":311,"context_line":"    def get_all(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_43a599a0","line":308,"in_reply_to":"ba7be1f8_ffe83518","updated":"2015-03-06 13:27:50.000000000","message":"Yes you are right, pipeline here I will change to pipelines, so that is object that is taken from pipeline.yaml and that is consists of all pipelines from config file. So as I wrote we do not need get_one or get_all, just get.","commit_id":"ba0f9a663d1be1e7ea1bbeac43542a0955393ffa"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"28eb9e742fb06e96799b93d725b104d57f3caf91","unresolved":false,"context_lines":[{"line_number":372,"context_line":"    \"\"\"Works on Meta Configuration in the system.\"\"\""},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    pipeline \u003d PipelineController()"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    @v2_utils.requires_admin"},{"line_number":377,"context_line":"    @wsme_pecan.wsexpose(None)"},{"line_number":378,"context_line":"    def get_one(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_6ff3d373","line":375,"updated":"2015-02-20 13:05:42.000000000","message":"These sort of non-operative upper-hiearchy endpoints don\u0027t make me very happy. I understand there is nothing happening at /v2/meta but I don\u0027t think that should mean the response is 404. It might make sense to return a JSON representation of a typed link to pipelines.\n\nMore hypermedia.","commit_id":"ba0f9a663d1be1e7ea1bbeac43542a0955393ffa"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"7e7d6bf8427a9d8b63ef8ff6c684cf08d4d9e940","unresolved":false,"context_lines":[{"line_number":372,"context_line":"    \"\"\"Works on Meta Configuration in the system.\"\"\""},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    pipeline \u003d PipelineController()"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    @v2_utils.requires_admin"},{"line_number":377,"context_line":"    @wsme_pecan.wsexpose(None)"},{"line_number":378,"context_line":"    def get_one(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_ebddd715","line":375,"in_reply_to":"ba7be1f8_6ff3d373","updated":"2015-02-21 08:17:57.000000000","message":"Thank you for comment, will improve.","commit_id":"ba0f9a663d1be1e7ea1bbeac43542a0955393ffa"}],"ceilometer/tests/api/v2/test_configuration_scenarios.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e5fb470858d8fe417ecabd0c857d9a2ee05e36e9","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                     u\u0027unit\u0027: u\u0027%\u0027}},"},{"line_number":51,"context_line":"             u\u0027order\u0027: 1}"},{"line_number":52,"context_line":"        ]"},{"line_number":53,"context_line":"        data \u003d self.get_json(self.PATH, headers\u003dheaders)[0]"},{"line_number":54,"context_line":"        sources \u003d data[\u0027sources\u0027]"},{"line_number":55,"context_line":"        sinks \u003d data[\u0027sinks\u0027]"},{"line_number":56,"context_line":"        self.assertEqual(4, len(sources))"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_df8ef578","line":53,"updated":"2015-02-16 15:53:26.000000000","message":"I\u0027m gathering from this that the response is a list of dicts? Do you have a short sample that you can put in a comment of what a response will look like.\n\nIn general returning top level lists is not a great idea: https://github.com/openstack/api-wg/blob/master/guidelines/representation_structure.rst#collection-resources\n\nPossible that I\u0027ve got what\u0027s going on here wrong though, because the test doesn\u0027t really make it clear.","commit_id":"5b5d57bc823934fb3f37dafdd64f8a447580097f"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"6c7e9687a1f14081657e303d30484dc108c62271","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                     u\u0027unit\u0027: u\u0027%\u0027}},"},{"line_number":51,"context_line":"             u\u0027order\u0027: 1}"},{"line_number":52,"context_line":"        ]"},{"line_number":53,"context_line":"        data \u003d self.get_json(self.PATH, headers\u003dheaders)[0]"},{"line_number":54,"context_line":"        sources \u003d data[\u0027sources\u0027]"},{"line_number":55,"context_line":"        sinks \u003d data[\u0027sinks\u0027]"},{"line_number":56,"context_line":"        self.assertEqual(4, len(sources))"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_23a4d8a4","line":53,"in_reply_to":"da86d52c_df8ef578","updated":"2015-02-19 13:25:21.000000000","message":"Thanks Chris for review, it was my mistake with the  spec requirements for api, now it clear that we store in the database only one pipeline config, so that part of the patch will be improved.","commit_id":"5b5d57bc823934fb3f37dafdd64f8a447580097f"}]}
