)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"5af72a445aa48b8edaf3012d43a5eb2bd6fd2e1e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add the \u0027generated\u0027 keyword to the filter."},{"line_number":10,"context_line":"I just update the impl_sqlalchemy in the path of"},{"line_number":11,"context_line":"\u0027ceilometer/event/storage/\u0027."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Related-Bug: 1514349"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da85f559_ebf53acb","line":11,"updated":"2015-11-13 08:30:49.000000000","message":"remove this sentence","commit_id":"7bdcda341ddd63dc51e0bbd8668e7534dec5a69d"}],"ceilometer/api/controllers/v2/events.py":[{"author":{"_account_id":18137,"name":"Xia Linjuan","email":"ljxiash@cn.ibm.com","username":"xialinjuan"},"change_message_id":"d4c13e833ee18442c3747dd160c57c504ee5d17d","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        \u0027message_id\u0027: None,"},{"line_number":179,"context_line":"        \u0027start_timestamp\u0027: None,"},{"line_number":180,"context_line":"        \u0027end_timestamp\u0027: None,"},{"line_number":181,"context_line":"        \u0027generated\u0027: None"},{"line_number":182,"context_line":"    }"},{"line_number":183,"context_line":"    filters \u003d _build_rbac_query_filters()"},{"line_number":184,"context_line":"    traits_filter \u003d filters[\u0027t_filter\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_5bfc74b7","line":181,"updated":"2015-11-12 18:23:48.000000000","message":"Can it be \"generated_timestamp\" or \"generated_time\"?","commit_id":"f84d138239cb789199b1d63b9b0179cb9f7b8ca4"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"b539d3f033515d39dc8a1c5fbe8f376a78eb18e8","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                raise base.ClientSideError(error)"},{"line_number":202,"context_line":"            if i.field \u003d\u003d \u0027generated\u0027:"},{"line_number":203,"context_line":"                evt_model_filter[\u0027start_timestamp\u0027] \u003d i.value"},{"line_number":204,"context_line":"                evt_model_filter[\u0027end_timestamp\u0027] \u003d i.value"},{"line_number":205,"context_line":"                continue"},{"line_number":206,"context_line":"            evt_model_filter[i.field] \u003d i.value"},{"line_number":207,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_b1fd3a3d","line":204,"updated":"2015-11-23 09:02:16.000000000","message":"I\u0027m not familiar with hbase storage, but seems it doesn\u0027t handle \u003c\u003d,\u003e\u003d, but \u003c,\u003e, so maybe you need to raise NotImplementedError for hbase backend or try to fix it if you can\n\nAnd you should hack mongodb as well, see https://github.com/openstack/ceilometer/blob/3c5d95433253b7407e1fa4f2c90c62e2ddbb28f1/ceilometer/storage/mongo/utils.py#L68","commit_id":"3926a9ec0f6b30fa1dfdc0f7d8eb25429a1c5ea0"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"281f2f357655270a5680cc692ceb84e2e8c92c8e","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                     {\u0027operator\u0027: i.op, \u0027supported\u0027: base.operation_kind})"},{"line_number":193,"context_line":"            raise base.ClientSideError(error)"},{"line_number":194,"context_line":"        if i.field \u003d\u003d \u0027generated\u0027:"},{"line_number":195,"context_line":"            convert_dict \u003d {\u0027eq\u0027: \u0027generated\u0027,"},{"line_number":196,"context_line":"                            \u0027le\u0027: \u0027end_timestamp\u0027,"},{"line_number":197,"context_line":"                            \u0027ge\u0027: \u0027start_timestamp\u0027}"},{"line_number":198,"context_line":"            if i.op in convert_dict:"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a8ffd7b_a892c6f4","line":195,"updated":"2015-12-01 06:55:36.000000000","message":"this still add a \"generated\" attribute to EventFilter, and need to handle a \"generated\" filter in storage layer, why don\u0027t:\nif i.field \u003d\u003d \u0027generated\u0027 and i.op \u003d\u003d \u0027eq\u0027:\n    evt_model_filter[\u0027start_timestamp\u0027] \u003d evt_model_filter[\u0027end_timestamp\u0027] \u003d i.value\n\nadditionally, maybe it is better to support more operators of start/end timestamp, like sample filter[1], but this is out of the scope of this patch, maybe in another patch.\n\n[1] https://github.com/openstack/ceilometer/blob/master/ceilometer/api/controllers/v2/utils.py#L230-L237","commit_id":"717fb0b6cbe8bca40caf6cf7ad10c2d38239f290"},{"author":{"_account_id":16701,"name":"zhanghanqun","email":"klercc37@gmail.com","username":"heha"},"change_message_id":"e741f7150b8f1a70cf9a071f6324d54b1e8d9046","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                     {\u0027operator\u0027: i.op, \u0027supported\u0027: base.operation_kind})"},{"line_number":193,"context_line":"            raise base.ClientSideError(error)"},{"line_number":194,"context_line":"        if i.field \u003d\u003d \u0027generated\u0027:"},{"line_number":195,"context_line":"            convert_dict \u003d {\u0027eq\u0027: \u0027generated\u0027,"},{"line_number":196,"context_line":"                            \u0027le\u0027: \u0027end_timestamp\u0027,"},{"line_number":197,"context_line":"                            \u0027ge\u0027: \u0027start_timestamp\u0027}"},{"line_number":198,"context_line":"            if i.op in convert_dict:"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a8ffd7b_dc9ed106","line":195,"in_reply_to":"9a8ffd7b_a892c6f4","updated":"2015-12-01 14:33:12.000000000","message":"I\u0027m not familliar with hbase and mongodb.So I have had some tests.I found the hbase and mongodb don\u0027t support \"\u003e\u003d\" and \"\u003c\u003d\", but \"\u003e\" and \"\u003c\".","commit_id":"717fb0b6cbe8bca40caf6cf7ad10c2d38239f290"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"34663bcc362a5c28179632b2b14a17b7785ba625","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                     {\u0027operator\u0027: i.op, \u0027supported\u0027: base.operation_kind})"},{"line_number":194,"context_line":"            raise base.ClientSideError(error)"},{"line_number":195,"context_line":"        if i.field \u003d\u003d \u0027generated\u0027 and i.op !\u003d \u0027eq\u0027:"},{"line_number":196,"context_line":"            if i.op in (\u0027lt\u0027, \u0027le\u0027):"},{"line_number":197,"context_line":"                evt_model_filter[\u0027end_timestamp\u0027] \u003d i.value"},{"line_number":198,"context_line":"            elif i.op in (\u0027gt\u0027, \u0027ge\u0027):"},{"line_number":199,"context_line":"                evt_model_filter[\u0027start_timestamp\u0027] \u003d i.value"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a740942_96b05e8d","line":196,"updated":"2015-12-03 21:09:51.000000000","message":"we shouldn\u0027t include le and ge if they aren\u0027t actually supported","commit_id":"a67bafb344e7c2c4cd6fd650abde7f0ce74dd6e9"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"f02d63ac0d20e998317e7b6d410a4a57004ee5bb","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            raise base.ClientSideError(error)"},{"line_number":195,"context_line":"        if i.field \u003d\u003d \u0027generated\u0027 and i.op !\u003d \u0027eq\u0027:"},{"line_number":196,"context_line":"            #TODO(heha): we just need the generated."},{"line_number":197,"context_line":"            #I\u0027ll absorb start_timestamp and end_timestamp into generated,"},{"line_number":198,"context_line":"            #and support lt and gt in the next patch."},{"line_number":199,"context_line":"            if i.op \u003d\u003d \u0027le\u0027:"},{"line_number":200,"context_line":"                evt_model_filter[\u0027end_timestamp\u0027] \u003d i.value"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a740942_1249d031","line":197,"updated":"2015-12-04 01:31:46.000000000","message":"I guess the pep8 job will fail, because it is need a blank between \"#\" and the content.","commit_id":"63ba3066d98abed5b8e3d25c41a38b088b901597"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"f02d63ac0d20e998317e7b6d410a4a57004ee5bb","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                evt_model_filter[\u0027start_timestamp\u0027] \u003d i.value"},{"line_number":203,"context_line":"            else:"},{"line_number":204,"context_line":"                error \u003d (_(\u0027operator %(operator)s is not supported.\u0027) %"},{"line_number":205,"context_line":"                         {\u0027operator\u0027: i.op})"},{"line_number":206,"context_line":"                raise base.ClientSideError(error)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        elif i.field in evt_model_filter:"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a740942_1538dad2","line":205,"updated":"2015-12-04 01:31:46.000000000","message":"you should also remind the supported operators: le, ge","commit_id":"63ba3066d98abed5b8e3d25c41a38b088b901597"}],"ceilometer/event/storage/impl_sqlalchemy.py":[{"author":{"_account_id":18137,"name":"Xia Linjuan","email":"ljxiash@cn.ibm.com","username":"xialinjuan"},"change_message_id":"d4c13e833ee18442c3747dd160c57c504ee5d17d","unresolved":false,"context_lines":[{"line_number":233,"context_line":"                    models.Event.generated \u003c\u003d event_filter.end_timestamp)"},{"line_number":234,"context_line":"            if event_filter.generated:"},{"line_number":235,"context_line":"                event_filter_conditions.append("},{"line_number":236,"context_line":"                    models.Event.generated \u003d\u003d event_filter.generated)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"            trait_subq \u003d None"},{"line_number":239,"context_line":"            # Build trait filter"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_db8aa41a","line":236,"updated":"2015-11-12 18:23:48.000000000","message":"Acturally I think it is fine without generated filter. We can combine start_timestamp and end_timestamp together to get the exact ones we want. This way is easy to accept.","commit_id":"f84d138239cb789199b1d63b9b0179cb9f7b8ca4"}],"ceilometer/storage/__init__.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"34663bcc362a5c28179632b2b14a17b7785ba625","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    :param start_timestamp: UTC start datetime (mandatory)"},{"line_number":208,"context_line":"    :param end_timestamp: UTC end datetime (mandatory)"},{"line_number":209,"context_line":"    :param generated: UTC generated time"},{"line_number":210,"context_line":"    :param event_type: the name of the event. None for all."},{"line_number":211,"context_line":"    :param message_id: the message_id of the event. None for all."},{"line_number":212,"context_line":"    :param admin_proj: the project_id of admin role. None if non-admin user."}],"source_content_type":"text/x-python","patch_set":23,"id":"7a740942_b6c79a44","line":209,"updated":"2015-12-03 21:09:51.000000000","message":"i\u0027m not sure we need generated, start_timestamp, AND end_timestamp. i think it might make sense to absorb start|end_timestamp into just generated. what do you think?\nwe can maybe add this as a separate patch.","commit_id":"a67bafb344e7c2c4cd6fd650abde7f0ce74dd6e9"},{"author":{"_account_id":16701,"name":"zhanghanqun","email":"klercc37@gmail.com","username":"heha"},"change_message_id":"81cd5a90b5ef32586d0e436b960550fc0801fb80","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    :param start_timestamp: UTC start datetime (mandatory)"},{"line_number":208,"context_line":"    :param end_timestamp: UTC end datetime (mandatory)"},{"line_number":209,"context_line":"    :param generated: UTC generated time"},{"line_number":210,"context_line":"    :param event_type: the name of the event. None for all."},{"line_number":211,"context_line":"    :param message_id: the message_id of the event. None for all."},{"line_number":212,"context_line":"    :param admin_proj: the project_id of admin role. None if non-admin user."}],"source_content_type":"text/x-python","patch_set":23,"id":"7a740942_3c31480c","line":209,"in_reply_to":"7a740942_b6c79a44","updated":"2015-12-03 23:20:41.000000000","message":"I agree with you. So I\u0027ll only make it support the \"eq\" operator in this patch.","commit_id":"a67bafb344e7c2c4cd6fd650abde7f0ce74dd6e9"}],"ceilometer/tests/functional/api/v2/test_event_scenarios.py":[{"author":{"_account_id":18137,"name":"Xia Linjuan","email":"ljxiash@cn.ibm.com","username":"xialinjuan"},"change_message_id":"10936f949559ef0475b1ed594d29d8d90bf48027","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        self.assertEqual(1, len(data))"},{"line_number":114,"context_line":"        self.assertEqual(\"trait_B\", data[0][\u0027name\u0027])"},{"line_number":115,"context_line":"        self.assertEqual(\"1\", data[0][\u0027value\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        path \u003d (self.PATH % \"Foo\") + \"/trait_D\""},{"line_number":118,"context_line":"        data \u003d self.get_json(path, headers\u003dHEADERS)"},{"line_number":119,"context_line":"        self.assertEqual(1, len(data))"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_e8a9a225","line":116,"updated":"2015-11-22 18:35:22.000000000","message":"I think it needs test for \"trait_C\" here, what do you think of it?","commit_id":"3926a9ec0f6b30fa1dfdc0f7d8eb25429a1c5ea0"}],"run-functional-tests.sh":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"34663bcc362a5c28179632b2b14a17b7785ba625","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash -x"},{"line_number":2,"context_line":"set -e"},{"line_number":3,"context_line":"# Use a mongodb backend by default"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-sh","patch_set":23,"id":"7a740942_1679cefc","line":1,"updated":"2015-12-03 21:09:51.000000000","message":"what changed here?","commit_id":"a67bafb344e7c2c4cd6fd650abde7f0ce74dd6e9"}]}
