)]}'
{"ceilometer/alarm/evaluator/gnocchi.py":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"543b963ca36703f7200240873031318f0117e7d2","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _statistics(self, alarm, start, end):"},{"line_number":79,"context_line":"        \"\"\"Retrieve statistics over the current window.\"\"\""},{"line_number":80,"context_line":"        verb \u003d \u0027get\u0027"},{"line_number":81,"context_line":"        req \u003d {"},{"line_number":82,"context_line":"            \u0027url\u0027: self.gnocchi_url + \"/v1\","},{"line_number":83,"context_line":"            \u0027headers\u0027: self._get_headers(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_2f3548db","line":80,"updated":"2015-03-17 11:59:07.000000000","message":"It\u0027s discussable, but i think naming this variable \"method\" is readable.","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"7bf621c6fb38b5df4318d6d4239a9548cbda73d7","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _statistics(self, alarm, start, end):"},{"line_number":79,"context_line":"        \"\"\"Retrieve statistics over the current window.\"\"\""},{"line_number":80,"context_line":"        verb \u003d \u0027get\u0027"},{"line_number":81,"context_line":"        req \u003d {"},{"line_number":82,"context_line":"            \u0027url\u0027: self.gnocchi_url + \"/v1\","},{"line_number":83,"context_line":"            \u0027headers\u0027: self._get_headers(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_63dab9ea","line":80,"in_reply_to":"9a80dd14_2f3548db","updated":"2015-03-18 15:14:05.000000000","message":"Done","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"0c654c5b8335c08373db308f31ccf0c0139d9bb8","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        \"\"\"Retrieve statistics over the current window.\"\"\""},{"line_number":80,"context_line":"        verb \u003d \u0027get\u0027"},{"line_number":81,"context_line":"        req \u003d {"},{"line_number":82,"context_line":"            \u0027url\u0027: self.gnocchi_url + \"/v1\","},{"line_number":83,"context_line":"            \u0027headers\u0027: self._get_headers(),"},{"line_number":84,"context_line":"            \u0027params\u0027: {"},{"line_number":85,"context_line":"                \u0027aggregation\u0027: alarm.rule[\u0027aggregation_method\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_170cdb93","line":82,"updated":"2015-03-18 14:01:18.000000000","message":"Agree with Fabio\u0027s comment what do you think if version takes somewhere from config? Or I\u0027ve missed something?","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"7bf621c6fb38b5df4318d6d4239a9548cbda73d7","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        \"\"\"Retrieve statistics over the current window.\"\"\""},{"line_number":80,"context_line":"        verb \u003d \u0027get\u0027"},{"line_number":81,"context_line":"        req \u003d {"},{"line_number":82,"context_line":"            \u0027url\u0027: self.gnocchi_url + \"/v1\","},{"line_number":83,"context_line":"            \u0027headers\u0027: self._get_headers(),"},{"line_number":84,"context_line":"            \u0027params\u0027: {"},{"line_number":85,"context_line":"                \u0027aggregation\u0027: alarm.rule[\u0027aggregation_method\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_23d1a1cd","line":82,"in_reply_to":"9a80dd14_170cdb93","updated":"2015-03-18 15:14:05.000000000","message":"See my reponse to fabio.","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"88d2424cd19d50bae66008207f23d95ee4fc2281","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        if alarm.type \u003d\u003d \u0027gnocchi_aggregation_by_resources_threshold\u0027:"},{"line_number":92,"context_line":"            verb \u003d \u0027post\u0027"},{"line_number":93,"context_line":"            req[\u0027url\u0027] +\u003d \"/aggregation/resource/%s/metric/%s/measures\" % ("},{"line_number":94,"context_line":"                alarm.rule[\u0027resource_type\u0027], alarm.rule[\u0027metric\u0027])"},{"line_number":95,"context_line":"            req[\u0027data\u0027] \u003d alarm.rule[\u0027query\u0027]"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_23546ac9","line":93,"updated":"2015-03-17 19:46:43.000000000","message":"Also I don\u0027t sure that \"/measures\" is expected. \nsignarure of AggregationController._lookup is (self, object_type, subtype, key, metric_name, *remainder)\nand get_metric method will think what /measures in this url is start_timestamp.","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"7bf621c6fb38b5df4318d6d4239a9548cbda73d7","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        if alarm.type \u003d\u003d \u0027gnocchi_aggregation_by_resources_threshold\u0027:"},{"line_number":92,"context_line":"            verb \u003d \u0027post\u0027"},{"line_number":93,"context_line":"            req[\u0027url\u0027] +\u003d \"/aggregation/resource/%s/metric/%s/measures\" % ("},{"line_number":94,"context_line":"                alarm.rule[\u0027resource_type\u0027], alarm.rule[\u0027metric\u0027])"},{"line_number":95,"context_line":"            req[\u0027data\u0027] \u003d alarm.rule[\u0027query\u0027]"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_a34d91c6","line":93,"in_reply_to":"9a80dd14_23546ac9","updated":"2015-03-18 15:14:05.000000000","message":"yes, thanks, fixed.","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"543b963ca36703f7200240873031318f0117e7d2","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        elif alarm.type \u003d\u003d \u0027gnocchi_aggregation_by_metrics_threshold\u0027:"},{"line_number":98,"context_line":"            req[\u0027url\u0027] +\u003d \"/aggregation/metric\""},{"line_number":99,"context_line":"            req[\u0027params\u0027][\u0027metric[]\u0027] \u003d alarm.rule[\u0027metrics\u0027]"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        elif alarm.type \u003d\u003d \u0027gnocchi_resources_threshold\u0027:"},{"line_number":102,"context_line":"            req[\u0027url\u0027] +\u003d \"/resource/%s/%s/metric/%s/measures\" % ("}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_cc103a5c","line":99,"updated":"2015-03-17 11:59:07.000000000","message":"Possible \"metric\" instead \"metric[]\"?","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"1d2b669e2c1136679bead794a762ae2ee862f768","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        elif alarm.type \u003d\u003d \u0027gnocchi_aggregation_by_metrics_threshold\u0027:"},{"line_number":98,"context_line":"            req[\u0027url\u0027] +\u003d \"/aggregation/metric\""},{"line_number":99,"context_line":"            req[\u0027params\u0027][\u0027metric[]\u0027] \u003d alarm.rule[\u0027metrics\u0027]"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        elif alarm.type \u003d\u003d \u0027gnocchi_resources_threshold\u0027:"},{"line_number":102,"context_line":"            req[\u0027url\u0027] +\u003d \"/resource/%s/%s/metric/%s/measures\" % ("}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_ef297038","line":99,"in_reply_to":"9a80dd14_cc103a5c","updated":"2015-03-17 12:00:23.000000000","message":"In gnocchi/master we use url param \"metric\" https://github.com/stackforge/gnocchi/blob/master/gnocchi/rest/__init__.py#L869","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"7bf621c6fb38b5df4318d6d4239a9548cbda73d7","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        elif alarm.type \u003d\u003d \u0027gnocchi_aggregation_by_metrics_threshold\u0027:"},{"line_number":98,"context_line":"            req[\u0027url\u0027] +\u003d \"/aggregation/metric\""},{"line_number":99,"context_line":"            req[\u0027params\u0027][\u0027metric[]\u0027] \u003d alarm.rule[\u0027metrics\u0027]"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        elif alarm.type \u003d\u003d \u0027gnocchi_resources_threshold\u0027:"},{"line_number":102,"context_line":"            req[\u0027url\u0027] +\u003d \"/resource/%s/%s/metric/%s/measures\" % ("}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_56e668e9","line":99,"in_reply_to":"9a80dd14_ef297038","updated":"2015-03-18 15:14:05.000000000","message":"This is the python-requests notation to build \"?metric\u003d...\u0026metric\u003d...\"","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b521209ed3aefcdc29406412c785abab5a4461a9","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            return []"},{"line_number":112,"context_line":"        if int(r.status_code / 100) !\u003d 2:"},{"line_number":113,"context_line":"            LOG.exception(_(\u0027alarm stats retrieval failed: %s\u0027) % r.text)"},{"line_number":114,"context_line":"            return []"},{"line_number":115,"context_line":"        else:"},{"line_number":116,"context_line":"            return jsonutils.loads(r.text)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_bf7662a2","line":114,"updated":"2015-03-25 14:42:47.000000000","message":"not related but why does this return a list on error but a dict on success","commit_id":"26da24976cd4eef78a6f7d6bde4dc229c7fcf5c7"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"0d80cce258b6e9f7c961fa6e7004fd6b1228071f","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            return []"},{"line_number":112,"context_line":"        if int(r.status_code / 100) !\u003d 2:"},{"line_number":113,"context_line":"            LOG.exception(_(\u0027alarm stats retrieval failed: %s\u0027) % r.text)"},{"line_number":114,"context_line":"            return []"},{"line_number":115,"context_line":"        else:"},{"line_number":116,"context_line":"            return jsonutils.loads(r.text)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_031b85ca","line":114,"in_reply_to":"1a6ced46_bf7662a2","updated":"2015-03-26 07:28:37.000000000","message":"Because we change the alarm state in that case to \u0027insufficient data\u0027 and the method _sufficient take care of this by checking the number of datapoints returned.","commit_id":"26da24976cd4eef78a6f7d6bde4dc229c7fcf5c7"}],"ceilometer/api/controllers/v2/alarm_rules/gnocchi.py":[{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"2046befba7a5a61128ba827aff645e64dea47c7d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2015 eNovance"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_94c2b732","line":1,"updated":"2015-03-17 16:49:23.000000000","message":"Is this line necessary? I think it can be removed, right?","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"7bf621c6fb38b5df4318d6d4239a9548cbda73d7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2015 eNovance"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_03857d58","line":1,"in_reply_to":"9a80dd14_94c2b732","updated":"2015-03-18 15:14:05.000000000","message":"Removed","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"2046befba7a5a61128ba827aff645e64dea47c7d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        headers \u003d {\u0027Content-Type\u0027: \"application/json\","},{"line_number":71,"context_line":"                   \u0027X-Auth-Token\u0027: ks_client.auth_token}"},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            r \u003d requests.get(\"%s/v1/capabilities\" % gnocchi_url,"},{"line_number":74,"context_line":"                             headers\u003dheaders)"},{"line_number":75,"context_line":"        except requests.ConnectionError as e:"},{"line_number":76,"context_line":"            raise GnocchiUnavailable(e)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_148167fb","line":73,"updated":"2015-03-17 16:49:23.000000000","message":"can we avoid to encode versions in URI? Maybe there should be a config param that tells what version of Gnocchi you want to use and get it from there.","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"7bf621c6fb38b5df4318d6d4239a9548cbda73d7","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        headers \u003d {\u0027Content-Type\u0027: \"application/json\","},{"line_number":71,"context_line":"                   \u0027X-Auth-Token\u0027: ks_client.auth_token}"},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            r \u003d requests.get(\"%s/v1/capabilities\" % gnocchi_url,"},{"line_number":74,"context_line":"                             headers\u003dheaders)"},{"line_number":75,"context_line":"        except requests.ConnectionError as e:"},{"line_number":76,"context_line":"            raise GnocchiUnavailable(e)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_636c7937","line":73,"in_reply_to":"9a80dd14_148167fb","updated":"2015-03-18 15:14:05.000000000","message":"We can do that we don\u0027t have a gnocchi client yet. Without abstraction we can\u0027t have same code for two API version.","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"2046befba7a5a61128ba827aff645e64dea47c7d","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        headers \u003d {\u0027Content-Type\u0027: \"application/json\","},{"line_number":111,"context_line":"                   \u0027X-Auth-Token\u0027: ks_client.auth_token}"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            r \u003d requests.get(\"%s/v1/resource/%s/%s\" % ("},{"line_number":114,"context_line":"                gnocchi_url, rule.resource_type,"},{"line_number":115,"context_line":"                rule.resource_id),"},{"line_number":116,"context_line":"                headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_f4b933cc","line":113,"updated":"2015-03-17 16:49:23.000000000","message":"as above","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"7bf621c6fb38b5df4318d6d4239a9548cbda73d7","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        headers \u003d {\u0027Content-Type\u0027: \"application/json\","},{"line_number":111,"context_line":"                   \u0027X-Auth-Token\u0027: ks_client.auth_token}"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            r \u003d requests.get(\"%s/v1/resource/%s/%s\" % ("},{"line_number":114,"context_line":"                gnocchi_url, rule.resource_type,"},{"line_number":115,"context_line":"                rule.resource_id),"},{"line_number":116,"context_line":"                headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_a3767104","line":113,"in_reply_to":"9a80dd14_f4b933cc","updated":"2015-03-18 15:14:05.000000000","message":"Same","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"2046befba7a5a61128ba827aff645e64dea47c7d","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        # Delegate the query validation to gnocchi"},{"line_number":166,"context_line":"        ks_client \u003d keystone_client.get_client()"},{"line_number":167,"context_line":"        request \u003d {"},{"line_number":168,"context_line":"            \u0027url\u0027: \"%s/v1/aggregation/resource/%s/metric/%s/measures\" % ("},{"line_number":169,"context_line":"                cfg.CONF.alarms.gnocchi_url,"},{"line_number":170,"context_line":"                rule.resource_type,"},{"line_number":171,"context_line":"                rule.metric),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_94ab9774","line":168,"updated":"2015-03-17 16:49:23.000000000","message":"same v1 hardcoding comment","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"7bf621c6fb38b5df4318d6d4239a9548cbda73d7","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        # Delegate the query validation to gnocchi"},{"line_number":166,"context_line":"        ks_client \u003d keystone_client.get_client()"},{"line_number":167,"context_line":"        request \u003d {"},{"line_number":168,"context_line":"            \u0027url\u0027: \"%s/v1/aggregation/resource/%s/metric/%s/measures\" % ("},{"line_number":169,"context_line":"                cfg.CONF.alarms.gnocchi_url,"},{"line_number":170,"context_line":"                rule.resource_type,"},{"line_number":171,"context_line":"                rule.metric),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_0363bd41","line":168,"in_reply_to":"9a80dd14_94ab9774","updated":"2015-03-18 15:14:05.000000000","message":"Same","commit_id":"594ddf761f83cd89350c315278ad33c5014da87e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b521209ed3aefcdc29406412c785abab5a4461a9","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    \"The name of the metric\""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    query \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"},{"line_number":130,"context_line":"    \"The query to filter the merics\""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    resource_type \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"},{"line_number":133,"context_line":"    \"The resource type\""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_1c13040e","line":130,"updated":"2015-03-25 14:42:47.000000000","message":"s/merics/metric/","commit_id":"26da24976cd4eef78a6f7d6bde4dc229c7fcf5c7"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"0d80cce258b6e9f7c961fa6e7004fd6b1228071f","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    \"The name of the metric\""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    query \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"},{"line_number":130,"context_line":"    \"The query to filter the merics\""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    resource_type \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"},{"line_number":133,"context_line":"    \"The resource type\""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_036705b8","line":130,"in_reply_to":"1a6ced46_1c13040e","updated":"2015-03-26 07:28:37.000000000","message":"Done","commit_id":"26da24976cd4eef78a6f7d6bde4dc229c7fcf5c7"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b521209ed3aefcdc29406412c785abab5a4461a9","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        # check the query string is a valid json"},{"line_number":152,"context_line":"        try:"},{"line_number":153,"context_line":"            query \u003d jsonutils.loads(rule.query)"},{"line_number":154,"context_line":"        except ValueError:"},{"line_number":155,"context_line":"            raise wsme.exc.InvalidInput(\u0027rule/query\u0027, rule.query)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_df895e76","line":153,"updated":"2015-03-25 14:42:47.000000000","message":"is query a string because we store it that way? it seems like a lot more complicated to have to ensure we have the right pairing of \u0027 and \"","commit_id":"26da24976cd4eef78a6f7d6bde4dc229c7fcf5c7"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"0d80cce258b6e9f7c961fa6e7004fd6b1228071f","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        # check the query string is a valid json"},{"line_number":152,"context_line":"        try:"},{"line_number":153,"context_line":"            query \u003d jsonutils.loads(rule.query)"},{"line_number":154,"context_line":"        except ValueError:"},{"line_number":155,"context_line":"            raise wsme.exc.InvalidInput(\u0027rule/query\u0027, rule.query)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_232de1fe","line":153,"in_reply_to":"1a6ced46_df895e76","updated":"2015-03-26 07:28:37.000000000","message":"From the ceilometer-api pov, this is a string, this one will be used as json data in a gnocchi post call.\n\nWe don\u0027t want to validate this string in ceilometer API to not duplicate the code with the one in gnocchi (one is written with wsme, the other with volouptus)\n\nSo we store the query as string, check that is a valid json and delegate the real validation to gnocchi. So we don\u0027t care about quote paring, we only manipulate a json dict not the string itself.","commit_id":"26da24976cd4eef78a6f7d6bde4dc229c7fcf5c7"}]}
