)]}'
{"doc/source/rest.j2":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"9a90d43b55aa1ae546fe9b02ed7ce59d28333a78","unresolved":false,"context_lines":[{"line_number":466,"context_line":""},{"line_number":467,"context_line":"{{ scenarios[\u0027search-value-in-metrics-by-granularity\u0027][\u0027doc\u0027] }}"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"And it is possible to search for values in metrics by search filter, "},{"line_number":470,"context_line":"but currently only simple binary operators are supported."},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"{{ scenarios[\u0027search-value-in-metrics-by-search-filter\u0027][\u0027doc\u0027] }}"}],"source_content_type":"text/x-jinja2","patch_set":1,"id":"3a71b18c_3ed0a6f7","line":469,"updated":"2016-12-07 15:08:53.000000000","message":"whitespace","commit_id":"8f7b800ee89daa0707480c8d0bd38e98e4f57da8"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"9a90d43b55aa1ae546fe9b02ed7ce59d28333a78","unresolved":false,"context_lines":[{"line_number":467,"context_line":"{{ scenarios[\u0027search-value-in-metrics-by-granularity\u0027][\u0027doc\u0027] }}"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"And it is possible to search for values in metrics by search filter, "},{"line_number":470,"context_line":"but currently only simple binary operators are supported."},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"{{ scenarios[\u0027search-value-in-metrics-by-search-filter\u0027][\u0027doc\u0027] }}"},{"line_number":473,"context_line":""}],"source_content_type":"text/x-jinja2","patch_set":1,"id":"3a71b18c_31dc5774","line":470,"range":{"start_line":470,"start_character":0,"end_line":470,"end_character":57},"updated":"2016-12-07 15:08:53.000000000","message":"what other operators would be allowed?","commit_id":"8f7b800ee89daa0707480c8d0bd38e98e4f57da8"}],"doc/source/rest.yaml":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"9a90d43b55aa1ae546fe9b02ed7ce59d28333a78","unresolved":false,"context_lines":[{"line_number":258,"context_line":"  request: |"},{"line_number":259,"context_line":"    POST /v1/search/metric?metric_id\u003d{{ scenarios[\u0027create-metric-a\u0027][\u0027response\u0027].json[\u0027id\u0027] }}\u0026granularity\u003d1second\u0026granularity\u003d1800s\u0026filter\u003d\u003d%2012 HTTP/1.1"},{"line_number":260,"context_line":"    Content-Type: application/json"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    "},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"- name: get-measures"},{"line_number":265,"context_line":"  request: GET /v1/metric/{{ scenarios[\u0027create-metric\u0027][\u0027response\u0027].json[\u0027id\u0027] }}/measures HTTP/1.1"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3a71b18c_5ef48286","line":262,"range":{"start_line":261,"start_character":0,"end_line":262,"end_character":4},"updated":"2016-12-07 15:08:53.000000000","message":"extra spacing/lines","commit_id":"8f7b800ee89daa0707480c8d0bd38e98e4f57da8"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"822d4ddc6c26492758ea5369ec39a11d4ea1d16c","unresolved":false,"context_lines":[{"line_number":258,"context_line":"  request: |"},{"line_number":259,"context_line":"    POST /v1/search/metric?metric_id\u003d{{ scenarios[\u0027create-metric-a\u0027][\u0027response\u0027].json[\u0027id\u0027] }}\u0026granularity\u003d1second\u0026granularity\u003d1800s\u0026filter\u003d\u003d%2012 HTTP/1.1"},{"line_number":260,"context_line":"    Content-Type: application/json"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    "},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"- name: get-measures"},{"line_number":265,"context_line":"  request: GET /v1/metric/{{ scenarios[\u0027create-metric\u0027][\u0027response\u0027].json[\u0027id\u0027] }}/measures HTTP/1.1"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3a71b18c_45258d08","line":262,"range":{"start_line":261,"start_character":0,"end_line":262,"end_character":4},"in_reply_to":"3a71b18c_0ac9e4ac","updated":"2016-12-07 16:22:38.000000000","message":"Yes it\u0027s ok indeed, if you have no data to push it\u0027s the correct format.","commit_id":"8f7b800ee89daa0707480c8d0bd38e98e4f57da8"},{"author":{"_account_id":22514,"name":"fengchaoyang","email":"fengchaoyang@unitedstack.com","username":"fengchaoyang"},"change_message_id":"3c60853b7b0dc3c0900ff08502399e669d8d3250","unresolved":false,"context_lines":[{"line_number":258,"context_line":"  request: |"},{"line_number":259,"context_line":"    POST /v1/search/metric?metric_id\u003d{{ scenarios[\u0027create-metric-a\u0027][\u0027response\u0027].json[\u0027id\u0027] }}\u0026granularity\u003d1second\u0026granularity\u003d1800s\u0026filter\u003d\u003d%2012 HTTP/1.1"},{"line_number":260,"context_line":"    Content-Type: application/json"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    "},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"- name: get-measures"},{"line_number":265,"context_line":"  request: GET /v1/metric/{{ scenarios[\u0027create-metric\u0027][\u0027response\u0027].json[\u0027id\u0027] }}/measures HTTP/1.1"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3a71b18c_0ac9e4ac","line":262,"range":{"start_line":261,"start_character":0,"end_line":262,"end_character":4},"in_reply_to":"3a71b18c_5ef48286","updated":"2016-12-07 16:04:17.000000000","message":"Hello gordon, because POST requests need to send data, and this API request does not require the transfer parameters, no matter how I change, there is no way to pass \"gate-gnocchi-docs-ubuntu-xenial\" test, could you give me some advice?","commit_id":"8f7b800ee89daa0707480c8d0bd38e98e4f57da8"}],"gnocchi/rest/__init__.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"822d4ddc6c26492758ea5369ec39a11d4ea1d16c","unresolved":false,"context_lines":[{"line_number":1373,"context_line":"        if pecan.request.body:"},{"line_number":1374,"context_line":"            query \u003d deserialize_and_validate(self.MetricSearchSchema)"},{"line_number":1375,"context_line":"        elif filter is not None:"},{"line_number":1376,"context_line":"            query \u003d self.parse_and_validate_qs_filter(filter)"},{"line_number":1377,"context_line":"        else:"},{"line_number":1378,"context_line":"            abort(400, \"No query specified in body\")"},{"line_number":1379,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_059e3507","line":1376,"updated":"2016-12-07 16:22:38.000000000","message":"what about changing the MetricSearchSchema so it can be either a dict (like currently) or just a string.\n\nIf it\u0027s just a string, it would be the filter.\n\nThat would make sure that this is not a POST with no body, which is weird.\n\nWDYT guys?","commit_id":"8f7b800ee89daa0707480c8d0bd38e98e4f57da8"},{"author":{"_account_id":22514,"name":"fengchaoyang","email":"fengchaoyang@unitedstack.com","username":"fengchaoyang"},"change_message_id":"b0e9b46e79f3a92a775c54ace5323d1427d68006","unresolved":false,"context_lines":[{"line_number":1373,"context_line":"        if pecan.request.body:"},{"line_number":1374,"context_line":"            query \u003d deserialize_and_validate(self.MetricSearchSchema)"},{"line_number":1375,"context_line":"        elif filter is not None:"},{"line_number":1376,"context_line":"            query \u003d self.parse_and_validate_qs_filter(filter)"},{"line_number":1377,"context_line":"        else:"},{"line_number":1378,"context_line":"            abort(400, \"No query specified in body\")"},{"line_number":1379,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_0e9c7868","line":1376,"in_reply_to":"3a71b18c_059e3507","updated":"2016-12-08 08:29:49.000000000","message":"Yes, I agree with you about \"a POST with no body, which is weird\", So when body is empty, we should not send a POST request,we should add a GET method for filter, what do you think?","commit_id":"8f7b800ee89daa0707480c8d0bd38e98e4f57da8"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ccd3a5126be347676531c43ec9b4d7269956cd1c","unresolved":false,"context_lines":[{"line_number":1373,"context_line":"        if pecan.request.body:"},{"line_number":1374,"context_line":"            query \u003d deserialize_and_validate(self.MetricSearchSchema)"},{"line_number":1375,"context_line":"        elif filter is not None:"},{"line_number":1376,"context_line":"            query \u003d self.parse_and_validate_qs_filter(filter)"},{"line_number":1377,"context_line":"        else:"},{"line_number":1378,"context_line":"            abort(400, \"No query specified in body\")"},{"line_number":1379,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_a4355cf8","line":1376,"in_reply_to":"3a71b18c_0e9c7868","updated":"2016-12-08 11:43:02.000000000","message":"So that\u0027s another possibility. But I don\u0027t think putting a whole string in the query argument is the best idea. There\u0027s a size limit and I know it won\u0027t be reach with that kind of string, but just for the spirit of it, I\u0027m only partially comfortable with that.\n\nI\u0027m not *that* opiniated though so I\u0027d love hearing from other such as cdent, I\u0027ll ask him :p","commit_id":"8f7b800ee89daa0707480c8d0bd38e98e4f57da8"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"6a58eac60ea39393947ef54271fb099f75ce21b0","unresolved":false,"context_lines":[{"line_number":1373,"context_line":"        if pecan.request.body:"},{"line_number":1374,"context_line":"            query \u003d deserialize_and_validate(self.MetricSearchSchema)"},{"line_number":1375,"context_line":"        elif filter is not None:"},{"line_number":1376,"context_line":"            query \u003d self.parse_and_validate_qs_filter(filter)"},{"line_number":1377,"context_line":"        else:"},{"line_number":1378,"context_line":"            abort(400, \"No query specified in body\")"},{"line_number":1379,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_91cb3d1e","line":1376,"in_reply_to":"3a71b18c_a4355cf8","updated":"2016-12-08 12:24:12.000000000","message":"I\u0027m not entirely clear what I\u0027m supposed to be lending an opinion on here.\n\nstrictly speaking if you have no body and the operation is not doing a server-side change in state, then GET is the right method.\n\nBut a precedent has already been set in this case to use POST for the search, and have the complex query in the body, with other parameters in the query string.\n\nOfficially if you are sending a POST with an empty body you are still supposed to send a content-type header and if the body is empty, then application/json is no longer the right content type.\n\nUnless there is some specific reason to not allow GET on /v1/search/metric I think it would make sense to have two similar but related handlers:\n\n* one accepts POST, and expects the filer in the body\n* the other accepts GET, the expects the filter in the query string\n\nthat preserves backwards compatibility while enabling a more \"bookmarkable\" search interface.\n\nWith regard to URL length limits they are most often up around 8192 bytes for most common servers. I wouldn\u0027t let that be a concern here though: If people need/want to make queries that won\u0027t fit that can always use POST.","commit_id":"8f7b800ee89daa0707480c8d0bd38e98e4f57da8"}],"gnocchi/tests/gabbi/gabbits/search-metric.yaml":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"9a90d43b55aa1ae546fe9b02ed7ce59d28333a78","unresolved":false,"context_lines":[{"line_number":89,"context_line":"      POST: /v1/search/metric?metric_id\u003d$RESPONSE[\u0027$[0].id\u0027]\u0026filter\u003d\u003d%2012"},{"line_number":90,"context_line":"      request_headers:"},{"line_number":91,"context_line":"        content-type: application/json"},{"line_number":92,"context_line":"      status: 200"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    - name: get metric id for search three"},{"line_number":95,"context_line":"      GET: /v1/metric"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3a71b18c_9ea61a52","line":92,"updated":"2016-12-07 15:08:53.000000000","message":"maybe actually validate response?","commit_id":"8f7b800ee89daa0707480c8d0bd38e98e4f57da8"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"9a90d43b55aa1ae546fe9b02ed7ce59d28333a78","unresolved":false,"context_lines":[{"line_number":95,"context_line":"      GET: /v1/metric"},{"line_number":96,"context_line":"      status: 200"},{"line_number":97,"context_line":"      response_json_paths:"},{"line_number":98,"context_line":"          $[0].archive_policy.name: high"},{"line_number":99,"context_line":"    - name: search with multiple correct granularities"},{"line_number":100,"context_line":"      POST: /v1/search/metric?metric_id\u003d$RESPONSE[\u0027$[0].id\u0027]\u0026granularity\u003d1second\u0026granularity\u003d2s"},{"line_number":101,"context_line":"      request_headers:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3a71b18c_bebaf66f","line":98,"updated":"2016-12-07 15:08:53.000000000","message":"and a space between calls.","commit_id":"8f7b800ee89daa0707480c8d0bd38e98e4f57da8"}]}
