)]}'
{"bin/ceilometer-test-event.py":[{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"a57457d603096fa6ce5a9e287d93892e8992ff4a","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        out.write(\"Dropped notification: %s\\n\" %"},{"line_number":81,"context_line":"                  notification[\u0027message_id\u0027])"},{"line_number":82,"context_line":"        continue"},{"line_number":83,"context_line":"    out.write(\"Event: %s at %s\\n\" % (event.event_name, event.generated))"},{"line_number":84,"context_line":"    for trait in event.traits:"},{"line_number":85,"context_line":"        dtype \u003d TYPES[trait.dtype]"},{"line_number":86,"context_line":"        out.write(\"    Trait: name: %s, type: %s, value: %s\\n\" % ("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F7iI%3D","line":83,"updated":"2013-08-27 22:30:08.000000000","message":"We\u0027re going to be changing event.event_name to event.event_type (assuming migration gets sorted out): https://review.openstack.org/#/c/41316/, https://review.openstack.org/#/c/42407/, which brings up a question - how do we know to update this script, and any other similar script, for that matter? Would it be posible to use __repr__ or __str__ here instead?","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"591a27d721494548ead3dc2afde0e91c9cf72630","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        out.write(\"Dropped notification: %s\\n\" %"},{"line_number":81,"context_line":"                  notification[\u0027message_id\u0027])"},{"line_number":82,"context_line":"        continue"},{"line_number":83,"context_line":"    out.write(\"Event: %s at %s\\n\" % (event.event_name, event.generated))"},{"line_number":84,"context_line":"    for trait in event.traits:"},{"line_number":85,"context_line":"        dtype \u003d TYPES[trait.dtype]"},{"line_number":86,"context_line":"        out.write(\"    Trait: name: %s, type: %s, value: %s\\n\" % ("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F4Xw%3D","line":83,"in_reply_to":"AAAASn%2F%2F6io%3D","updated":"2013-08-28 13:44:26.000000000","message":"Maybe I\u0027m paranoid, but I think this is too easy to break since it depends too much on the inner workings of models.Event. Times like these when a compiler is your best friend. I will try to remember to update this when my branch goes in :)","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"e93f8cbd84e89549ddf281340654ca1d16211fe3","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        out.write(\"Dropped notification: %s\\n\" %"},{"line_number":81,"context_line":"                  notification[\u0027message_id\u0027])"},{"line_number":82,"context_line":"        continue"},{"line_number":83,"context_line":"    out.write(\"Event: %s at %s\\n\" % (event.event_name, event.generated))"},{"line_number":84,"context_line":"    for trait in event.traits:"},{"line_number":85,"context_line":"        dtype \u003d TYPES[trait.dtype]"},{"line_number":86,"context_line":"        out.write(\"    Trait: name: %s, type: %s, value: %s\\n\" % ("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F6io%3D","line":83,"in_reply_to":"AAAASn%2F%2F7iI%3D","updated":"2013-08-28 01:29:44.000000000","message":"About the scripts? Good question.  This is mostly just a tool for checking your event_definitions.yaml, so not so critical. Myself, I grep scripts when refactoring. \nAs for writing out the info: In displaying the event, I wanted to avoid duplicating the trait list, which could be lengthy, and is shown below.","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"a57457d603096fa6ce5a9e287d93892e8992ff4a","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    out.write(\"Event: %s at %s\\n\" % (event.event_name, event.generated))"},{"line_number":84,"context_line":"    for trait in event.traits:"},{"line_number":85,"context_line":"        dtype \u003d TYPES[trait.dtype]"},{"line_number":86,"context_line":"        out.write(\"    Trait: name: %s, type: %s, value: %s\\n\" % ("},{"line_number":87,"context_line":"            trait.name, dtype, trait.value))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F7iM%3D","line":86,"updated":"2013-08-27 22:30:08.000000000","message":"Same as above, with traits","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"e93f8cbd84e89549ddf281340654ca1d16211fe3","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    out.write(\"Event: %s at %s\\n\" % (event.event_name, event.generated))"},{"line_number":84,"context_line":"    for trait in event.traits:"},{"line_number":85,"context_line":"        dtype \u003d TYPES[trait.dtype]"},{"line_number":86,"context_line":"        out.write(\"    Trait: name: %s, type: %s, value: %s\\n\" % ("},{"line_number":87,"context_line":"            trait.name, dtype, trait.value))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F6iY%3D","line":86,"in_reply_to":"AAAASn%2F%2F7iM%3D","updated":"2013-08-28 01:29:44.000000000","message":"The traits are displayed like this so I can display the type name instead of the numeric id.","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"b635c3a791e5732354240f425f0fefe1b658f8a8","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":18,"context_line":"# under the License."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"\"\"\"Command line tool help you debug your event definitions."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Feed it a list of test notifications in json format, and it will show"},{"line_number":23,"context_line":"you what events will be generated."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F96wQ%3D","line":20,"updated":"2013-12-04 14:21:44.000000000","message":"Command line tool to help...? :p","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"}],"ceilometer/collector/service.py":[{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"3b20e351c664f1904d65d79230a7a8f6023b9d22","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    def _message_to_event(self, body):"},{"line_number":202,"context_line":"        \"\"\"Convert message to Ceilometer Event."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        NOTE: this is currently based on the Nova notification format."},{"line_number":205,"context_line":"        We will need to make this driver-based to support other formats."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        NOTE: the rpc layer currently rips out the notification"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAARn%2F%2F8uo%3D","line":204,"updated":"2013-08-19 20:25:29.000000000","message":"You can remove this note with this patch.","commit_id":"2938db481260527c29767b33eaf5867b5bb0c0c9"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"bb26e25bfb712d0875d0da8f9f700a1afe9a28dd","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    def _message_to_event(self, body):"},{"line_number":202,"context_line":"        \"\"\"Convert message to Ceilometer Event."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        NOTE: this is currently based on the Nova notification format."},{"line_number":205,"context_line":"        We will need to make this driver-based to support other formats."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        NOTE: the rpc layer currently rips out the notification"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAARn%2F%2F8tc%3D","line":204,"in_reply_to":"AAAARn%2F%2F8uo%3D","updated":"2013-08-19 20:35:39.000000000","message":"Actually, should this be moved to the default traits on converter.EventDefinition?","commit_id":"2938db481260527c29767b33eaf5867b5bb0c0c9"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"6f478fdd43288a45828b1d033b895d860e4f9f42","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                    dispatcher.obj.record_events(event)"},{"line_number":214,"context_line":"                except Exception:"},{"line_number":215,"context_line":"                    LOG.exception(\u0027Error while saving events with\u0027"},{"line_number":216,"context_line":"                                  \u0027 dispatcher %s\u0027,"},{"line_number":217,"context_line":"                                  dispatcher)"},{"line_number":218,"context_line":"                    exc_info \u003d sys.exc_info()"},{"line_number":219,"context_line":"            # Don\u0027t ack the message if any of the dispatchers fail"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FwiQ%3D","line":216,"updated":"2013-08-29 23:09:26.000000000","message":"If this is the new message involved, we should make sure our pot file cover these msgid, and it is better to use _(\" to enable globalization.","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"bb287b8233d42ad7827c962edeb9f2cee524c218","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                    dispatcher.obj.record_events(event)"},{"line_number":214,"context_line":"                except Exception:"},{"line_number":215,"context_line":"                    LOG.exception(\u0027Error while saving events with\u0027"},{"line_number":216,"context_line":"                                  \u0027 dispatcher %s\u0027,"},{"line_number":217,"context_line":"                                  dispatcher)"},{"line_number":218,"context_line":"                    exc_info \u003d sys.exc_info()"},{"line_number":219,"context_line":"            # Don\u0027t ack the message if any of the dispatchers fail"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FvsA%3D","line":216,"in_reply_to":"AAAASn%2F%2FwiQ%3D","updated":"2013-08-30 16:27:23.000000000","message":"Probably a good idea, but this isn\u0027t added by my code. (if you look at the diff, the this line is already there on line 245 prior to my patch. I just added the \u0027if\u0027 statement.)","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"}],"ceilometer/event/converter.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"aa031c6e589317acd921d7188e284851f792ca9e","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    @staticmethod"},{"line_number":94,"context_line":"    def _convert_value(trait_type, value):"},{"line_number":95,"context_line":"        #perhaps this should be on the models.Trait class ? (mdragon)"},{"line_number":96,"context_line":"        if trait_type is models.Trait.INT_TYPE:"},{"line_number":97,"context_line":"            return int(value)"},{"line_number":98,"context_line":"        if trait_type is models.Trait.FLOAT_TYPE:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAARn%2F%2F8xY%3D","line":95,"updated":"2013-08-19 20:14:21.000000000","message":"# Note(mdragon): Perhaps this should be ... class?","commit_id":"2938db481260527c29767b33eaf5867b5bb0c0c9"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"bb26e25bfb712d0875d0da8f9f700a1afe9a28dd","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        message_id\u003ddict(type\u003d\u0027text\u0027, fields\u003d\u0027message_id\u0027),"},{"line_number":118,"context_line":"        service\u003ddict(type\u003d\u0027text\u0027, fields\u003d\u0027publisher_id\u0027),"},{"line_number":119,"context_line":"        request_id\u003ddict(type\u003d\u0027text\u0027, fields\u003d\u0027_context_request_id\u0027),"},{"line_number":120,"context_line":"        tenant_id\u003ddict(type\u003d\u0027text\u0027, fields\u003d\u0027_context_tenant\u0027),"},{"line_number":121,"context_line":"    )"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def __init__(self, definition_cfg):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAARn%2F%2F8s8%3D","line":120,"updated":"2013-08-19 20:35:39.000000000","message":"Glance does not have request_id or tenant on the notification. Should these fields be excluded from the defaults until Glance is using oslo notifier? I haven\u0027t had a chance to look at the other services, they could also be using their own notifiers...","commit_id":"2938db481260527c29767b33eaf5867b5bb0c0c9"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"7b6dcb5fe1568308e26dfe7d761c3b16c47df9c2","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        message_id\u003ddict(type\u003d\u0027text\u0027, fields\u003d\u0027message_id\u0027),"},{"line_number":118,"context_line":"        service\u003ddict(type\u003d\u0027text\u0027, fields\u003d\u0027publisher_id\u0027),"},{"line_number":119,"context_line":"        request_id\u003ddict(type\u003d\u0027text\u0027, fields\u003d\u0027_context_request_id\u0027),"},{"line_number":120,"context_line":"        tenant_id\u003ddict(type\u003d\u0027text\u0027, fields\u003d\u0027_context_tenant\u0027),"},{"line_number":121,"context_line":"    )"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def __init__(self, definition_cfg):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAARn%2F%2F8nQ%3D","line":120,"in_reply_to":"AAAARn%2F%2F8s8%3D","updated":"2013-08-19 21:05:19.000000000","message":"It won\u0027t error if the fields aren\u0027t present, if a notification doesn\u0027t have the appropriate field, the event simply won\u0027t have that trait. The default just means that *if* a notification has one of those fields, add it to the event as a trait. (message_id, publisher_id, priority and timestamp are the only really guaranteed ones)","commit_id":"2938db481260527c29767b33eaf5867b5bb0c0c9"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"aa031c6e589317acd921d7188e284851f792ca9e","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                    equivalent to 1 item list."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"                    Examples:"},{"line_number":232,"context_line":"                    *\t[\u0027compute.instance.exists\u0027] will only match"},{"line_number":233,"context_line":"                            compute.intance.exists notifications"},{"line_number":234,"context_line":"                    *   \"compute.instance.exists\"   Same as above."},{"line_number":235,"context_line":"                    *   [\"image.create\", \"image.delete\"]  will match"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAARn%2F%2F8xk%3D","line":232,"updated":"2013-08-19 20:14:21.000000000","message":"tab?","commit_id":"2938db481260527c29767b33eaf5867b5bb0c0c9"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"7b6dcb5fe1568308e26dfe7d761c3b16c47df9c2","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                    equivalent to 1 item list."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"                    Examples:"},{"line_number":232,"context_line":"                    *\t[\u0027compute.instance.exists\u0027] will only match"},{"line_number":233,"context_line":"                            compute.intance.exists notifications"},{"line_number":234,"context_line":"                    *   \"compute.instance.exists\"   Same as above."},{"line_number":235,"context_line":"                    *   [\"image.create\", \"image.delete\"]  will match"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAARn%2F%2F8nM%3D","line":232,"in_reply_to":"AAAARn%2F%2F8xk%3D","updated":"2013-08-19 21:05:19.000000000","message":"whups.  will fix..","commit_id":"2938db481260527c29767b33eaf5867b5bb0c0c9"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"a57457d603096fa6ce5a9e287d93892e8992ff4a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"               default\u003d\"event_definitions.yaml\","},{"line_number":35,"context_line":"               help\u003d\"Configuration file for event definitions\""},{"line_number":36,"context_line":"               ),"},{"line_number":37,"context_line":"    cfg.BoolOpt(\u0027allow_dropping_of_notifications\u0027,"},{"line_number":38,"context_line":"                default\u003dFalse,"},{"line_number":39,"context_line":"                help\u003d\u0027Drop notifications if no event definition matches. \u0027"},{"line_number":40,"context_line":"                \u0027(Otherwise, we convert them with just the default traits)\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F7eQ%3D","line":37,"updated":"2013-08-27 22:30:08.000000000","message":"clunky - maybe \u0027drop_unknown_notifications\u0027?","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"591a27d721494548ead3dc2afde0e91c9cf72630","unresolved":false,"context_lines":[{"line_number":34,"context_line":"               default\u003d\"event_definitions.yaml\","},{"line_number":35,"context_line":"               help\u003d\"Configuration file for event definitions\""},{"line_number":36,"context_line":"               ),"},{"line_number":37,"context_line":"    cfg.BoolOpt(\u0027allow_dropping_of_notifications\u0027,"},{"line_number":38,"context_line":"                default\u003dFalse,"},{"line_number":39,"context_line":"                help\u003d\u0027Drop notifications if no event definition matches. \u0027"},{"line_number":40,"context_line":"                \u0027(Otherwise, we convert them with just the default traits)\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F4ZA%3D","line":37,"updated":"2013-08-28 13:44:26.000000000","message":"ok, good plan","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"e93f8cbd84e89549ddf281340654ca1d16211fe3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"               default\u003d\"event_definitions.yaml\","},{"line_number":35,"context_line":"               help\u003d\"Configuration file for event definitions\""},{"line_number":36,"context_line":"               ),"},{"line_number":37,"context_line":"    cfg.BoolOpt(\u0027allow_dropping_of_notifications\u0027,"},{"line_number":38,"context_line":"                default\u003dFalse,"},{"line_number":39,"context_line":"                help\u003d\u0027Drop notifications if no event definition matches. \u0027"},{"line_number":40,"context_line":"                \u0027(Otherwise, we convert them with just the default traits)\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F6j4%3D","line":37,"in_reply_to":"AAAASn%2F%2F7eQ%3D","updated":"2013-08-28 01:29:44.000000000","message":"The flag name is a bit verbose on purpose: If you set it to True, you *could* loose some notification data, which may be what you want if you want to ignore some unused notifications, but I wanted the flag name to be *really* clear about this.","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"6f478fdd43288a45828b1d033b895d860e4f9f42","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                except KeyError:"},{"line_number":76,"context_line":"                    raise EventDefinitionException("},{"line_number":77,"context_line":"                        \u0027Plugin specified, but no plugin name supplied for \u0027"},{"line_number":78,"context_line":"                        \u0027trait %s\u0027 % name, self.cfg)"},{"line_number":79,"context_line":"                plugin_params \u003d plugin_cfg.get(\u0027parameters\u0027)"},{"line_number":80,"context_line":"                if plugin_params is None:"},{"line_number":81,"context_line":"                    plugin_params \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FwiM%3D","line":78,"updated":"2013-08-29 23:09:26.000000000","message":"If this is the new message involved, we should make sure our pot file cover these msgid, and it is better to use _(\" to enable globalization.","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"a57457d603096fa6ce5a9e287d93892e8992ff4a","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            raise EventDefinitionException("},{"line_number":109,"context_line":"                \"Parse error in JSONPath specification \u0027%s\u0027 for %s: %s\" % ("},{"line_number":110,"context_line":"                fields, name, e), self.cfg)"},{"line_number":111,"context_line":"        self.trait_type \u003d getattr(models.Trait, \u0027%s_TYPE\u0027 % type_name.upper(),"},{"line_number":112,"context_line":"                                  None)"},{"line_number":113,"context_line":"        if self.trait_type is None:"},{"line_number":114,"context_line":"            raise EventDefinitionException("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F7Zc%3D","line":111,"updated":"2013-08-27 22:30:08.000000000","message":"This is confusing - are you trying to figure out the integer value associated with the type name? Maybe a method in the db model to do this would be more clear.","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"e93f8cbd84e89549ddf281340654ca1d16211fe3","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            raise EventDefinitionException("},{"line_number":109,"context_line":"                \"Parse error in JSONPath specification \u0027%s\u0027 for %s: %s\" % ("},{"line_number":110,"context_line":"                fields, name, e), self.cfg)"},{"line_number":111,"context_line":"        self.trait_type \u003d getattr(models.Trait, \u0027%s_TYPE\u0027 % type_name.upper(),"},{"line_number":112,"context_line":"                                  None)"},{"line_number":113,"context_line":"        if self.trait_type is None:"},{"line_number":114,"context_line":"            raise EventDefinitionException("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F6jo%3D","line":111,"in_reply_to":"AAAASn%2F%2F7Zc%3D","updated":"2013-08-28 01:29:44.000000000","message":"Yup, determining the type id by name. And yes, putting this as a classmethod on the Trait model class is probably not a bad idea.","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"a57457d603096fa6ce5a9e287d93892e8992ff4a","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @staticmethod"},{"line_number":119,"context_line":"    def _convert_value(trait_type, value):"},{"line_number":120,"context_line":"        # NOTE(mdragon): perhaps this should be on the models.Trait"},{"line_number":121,"context_line":"        #                class?"},{"line_number":122,"context_line":"        if trait_type is models.Trait.INT_TYPE:"},{"line_number":123,"context_line":"            return int(value)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F7fw%3D","line":120,"updated":"2013-08-27 22:30:08.000000000","message":"agree!","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"8ffe7a2c9547806c803ef8c1189f83fcd8bfc601","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                          \"payload.image_meta.\u0027org.openstack__1__architecture\u0027\""},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"                    The syntax used for the field specification is a variant"},{"line_number":312,"context_line":"                    of JSONPath, and is fairly flexable."},{"line_number":313,"context_line":"                    (see: https://github.com/kennknowles/python-jsonpath-rw"},{"line_number":314,"context_line":"                    for more info)  Specifications can be written to match"},{"line_number":315,"context_line":"                    multiple possible fields, the value for the trait will"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2Fy8Q%3D","line":312,"updated":"2013-08-29 14:25:19.000000000","message":"Not to be lacking in contributions here save for a trivial spelling correction, but here goes: flexible*","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"a57457d603096fa6ce5a9e287d93892e8992ff4a","unresolved":false,"context_lines":[{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        if edef is None:"},{"line_number":356,"context_line":"            # If allow_dropping_of_notifications is False, this should"},{"line_number":357,"context_line":"            # never happen. (mdragon)"},{"line_number":358,"context_line":"            LOG.debug(\u0027Dropping Notification %s (uuid:%s)\u0027 %"},{"line_number":359,"context_line":"                     (event_type, message_id))"},{"line_number":360,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F7WI%3D","line":357,"updated":"2013-08-27 22:30:08.000000000","message":"log an error if allow_drops is flase?","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"e93f8cbd84e89549ddf281340654ca1d16211fe3","unresolved":false,"context_lines":[{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        if edef is None:"},{"line_number":356,"context_line":"            # If allow_dropping_of_notifications is False, this should"},{"line_number":357,"context_line":"            # never happen. (mdragon)"},{"line_number":358,"context_line":"            LOG.debug(\u0027Dropping Notification %s (uuid:%s)\u0027 %"},{"line_number":359,"context_line":"                     (event_type, message_id))"},{"line_number":360,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2F6jM%3D","line":357,"in_reply_to":"AAAASn%2F%2F7WI%3D","updated":"2013-08-28 01:29:44.000000000","message":"Probably should. It will log, but it should be an error level if allow_dropping_of_notifications if False.","commit_id":"343f5c438a422cd2779990edd3f557a0959a3779"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"1ec6ec48c6112683ee97776483f9f47bd18a051c","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from ceilometer.openstack.common import log"},{"line_number":28,"context_line":"from ceilometer.openstack.common import timeutils"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from ceilometer.storage import models"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BS1A%3D","line":29,"updated":"2013-11-28 01:24:13.000000000","message":"no space needed here","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"6c1831458967da259dc21a15aa808e5441e82c41","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from ceilometer.openstack.common import log"},{"line_number":28,"context_line":"from ceilometer.openstack.common import timeutils"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from ceilometer.storage import models"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9%2B9c%3D","line":29,"in_reply_to":"AAAATn%2F%2BS1A%3D","updated":"2013-12-03 19:50:46.000000000","message":"Done","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"1ec6ec48c6112683ee97776483f9f47bd18a051c","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                try:"},{"line_number":74,"context_line":"                    plugin_name \u003d plugin_cfg[\u0027name\u0027]"},{"line_number":75,"context_line":"                except KeyError:"},{"line_number":76,"context_line":"                    raise EventDefinitionException("},{"line_number":77,"context_line":"                        \u0027Plugin specified, but no plugin name supplied for \u0027"},{"line_number":78,"context_line":"                        \u0027trait %s\u0027 % name, self.cfg)"},{"line_number":79,"context_line":"                plugin_params \u003d plugin_cfg.get(\u0027parameters\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BSxs%3D","line":76,"updated":"2013-11-28 01:24:13.000000000","message":"use _() for translation of text","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"6c1831458967da259dc21a15aa808e5441e82c41","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                try:"},{"line_number":74,"context_line":"                    plugin_name \u003d plugin_cfg[\u0027name\u0027]"},{"line_number":75,"context_line":"                except KeyError:"},{"line_number":76,"context_line":"                    raise EventDefinitionException("},{"line_number":77,"context_line":"                        \u0027Plugin specified, but no plugin name supplied for \u0027"},{"line_number":78,"context_line":"                        \u0027trait %s\u0027 % name, self.cfg)"},{"line_number":79,"context_line":"                plugin_params \u003d plugin_cfg.get(\u0027parameters\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9%2B6g%3D","line":76,"in_reply_to":"AAAATn%2F%2BSxs%3D","updated":"2013-12-03 19:50:46.000000000","message":"Done","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"1ec6ec48c6112683ee97776483f9f47bd18a051c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                plugin_ext \u003d plugin_manager[plugin_name]"},{"line_number":84,"context_line":"            except KeyError:"},{"line_number":85,"context_line":"                raise EventDefinitionException("},{"line_number":86,"context_line":"                    \u0027No plugin named %s available for \u0027"},{"line_number":87,"context_line":"                    \u0027trait %s\u0027 % (plugin_name, name), self.cfg)"},{"line_number":88,"context_line":"            plugin_class \u003d plugin_ext.plugin"},{"line_number":89,"context_line":"            self.plugin \u003d plugin_class(**plugin_params)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BRmw%3D","line":86,"updated":"2013-11-28 01:24:13.000000000","message":"use _() for translation of text","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"6c1831458967da259dc21a15aa808e5441e82c41","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                plugin_ext \u003d plugin_manager[plugin_name]"},{"line_number":84,"context_line":"            except KeyError:"},{"line_number":85,"context_line":"                raise EventDefinitionException("},{"line_number":86,"context_line":"                    \u0027No plugin named %s available for \u0027"},{"line_number":87,"context_line":"                    \u0027trait %s\u0027 % (plugin_name, name), self.cfg)"},{"line_number":88,"context_line":"            plugin_class \u003d plugin_ext.plugin"},{"line_number":89,"context_line":"            self.plugin \u003d plugin_class(**plugin_params)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9%2B6c%3D","line":86,"in_reply_to":"AAAATn%2F%2BRmw%3D","updated":"2013-12-03 19:50:46.000000000","message":"Done","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"1ec6ec48c6112683ee97776483f9f47bd18a051c","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        if \u0027fields\u0027 not in trait_cfg:"},{"line_number":94,"context_line":"            raise EventDefinitionException("},{"line_number":95,"context_line":"                \"Required field in trait definition not specified: \u0027fields\u0027\","},{"line_number":96,"context_line":"                self.cfg)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        fields \u003d trait_cfg[\u0027fields\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BRm0%3D","line":95,"updated":"2013-11-28 01:24:13.000000000","message":"use _() for translation of text, see others below","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"6c1831458967da259dc21a15aa808e5441e82c41","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        if \u0027fields\u0027 not in trait_cfg:"},{"line_number":94,"context_line":"            raise EventDefinitionException("},{"line_number":95,"context_line":"                \"Required field in trait definition not specified: \u0027fields\u0027\","},{"line_number":96,"context_line":"                self.cfg)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        fields \u003d trait_cfg[\u0027fields\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9%2B6Y%3D","line":95,"in_reply_to":"AAAATn%2F%2BRm0%3D","updated":"2013-12-03 19:50:46.000000000","message":"Done","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"1ec6ec48c6112683ee97776483f9f47bd18a051c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                self.cfg)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _get_path(self, match):"},{"line_number":118,"context_line":"        if match.context is not None:"},{"line_number":119,"context_line":"            for path_element in self._get_path(match.context):"},{"line_number":120,"context_line":"                yield path_element"},{"line_number":121,"context_line":"            yield str(match.path)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BRl4%3D","line":118,"updated":"2013-11-28 01:24:13.000000000","message":"can\u0027t it just be: if match.context? if it is none it will evaluate to false","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"1ec6ec48c6112683ee97776483f9f47bd18a051c","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def to_trait(self, notification_body):"},{"line_number":124,"context_line":"        values \u003d [match for match in self.fields.find(notification_body)"},{"line_number":125,"context_line":"                  if match.value is not None]"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        if self.plugin is not None:"},{"line_number":128,"context_line":"            value_map \u003d [(\u0027.\u0027.join(self._get_path(match)), match.value) for"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BRlk%3D","line":125,"updated":"2013-11-28 01:24:13.000000000","message":"if match.value?","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"6c1831458967da259dc21a15aa808e5441e82c41","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def to_trait(self, notification_body):"},{"line_number":124,"context_line":"        values \u003d [match for match in self.fields.find(notification_body)"},{"line_number":125,"context_line":"                  if match.value is not None]"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        if self.plugin is not None:"},{"line_number":128,"context_line":"            value_map \u003d [(\u0027.\u0027.join(self._get_path(match)), match.value) for"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9%2B80%3D","line":125,"in_reply_to":"AAAATn%2F%2BRlk%3D","updated":"2013-12-03 19:50:46.000000000","message":"No. There are legitimate values here that may evaluate to False. (such as 0 ) The value needs to be checked against None explicitly.","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"1ec6ec48c6112683ee97776483f9f47bd18a051c","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        with open(config_file) as cf:"},{"line_number":370,"context_line":"            config \u003d cf.read()"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        events_config \u003d yaml.safe_load(config)"},{"line_number":373,"context_line":"    else:"},{"line_number":374,"context_line":"        LOG.debug(\"No Event Definitions configuration file found!\""},{"line_number":375,"context_line":"                  \" Using default config.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BRks%3D","line":372,"updated":"2013-11-28 01:24:13.000000000","message":"Will not handle yaml syntax issues? At least update the pydocs to explain what exceptions could be raised here","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"6c1831458967da259dc21a15aa808e5441e82c41","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        with open(config_file) as cf:"},{"line_number":370,"context_line":"            config \u003d cf.read()"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        events_config \u003d yaml.safe_load(config)"},{"line_number":373,"context_line":"    else:"},{"line_number":374,"context_line":"        LOG.debug(\"No Event Definitions configuration file found!\""},{"line_number":375,"context_line":"                  \" Using default config.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9%2B8U%3D","line":372,"in_reply_to":"AAAATn%2F%2BRks%3D","updated":"2013-12-03 19:50:46.000000000","message":"This is the same as loading the pipeline.yaml","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"c2d24636aee6af954fb5adc27687ebe872bdcb27","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            self.fields \u003d jsonpath_rw.parse(fields)"},{"line_number":108,"context_line":"        except Exception as e:"},{"line_number":109,"context_line":"            raise EventDefinitionException("},{"line_number":110,"context_line":"                \"Parse error in JSONPath specification \u0027%s\u0027 for %s: %s\" % ("},{"line_number":111,"context_line":"                fields, name, e), self.cfg)"},{"line_number":112,"context_line":"        self.trait_type \u003d models.Trait.get_type_by_name(type_name)"},{"line_number":113,"context_line":"        if self.trait_type is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9%2BJE%3D","line":110,"updated":"2013-12-03 22:03:43.000000000","message":"_()","commit_id":"f251c63ac09943aa45919564239b6da6d4fc52b6"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"5c7afae0941f940bb533e5892f02fa5fdb4fe0f8","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            self.fields \u003d jsonpath_rw.parse(fields)"},{"line_number":108,"context_line":"        except Exception as e:"},{"line_number":109,"context_line":"            raise EventDefinitionException("},{"line_number":110,"context_line":"                \"Parse error in JSONPath specification \u0027%s\u0027 for %s: %s\" % ("},{"line_number":111,"context_line":"                fields, name, e), self.cfg)"},{"line_number":112,"context_line":"        self.trait_type \u003d models.Trait.get_type_by_name(type_name)"},{"line_number":113,"context_line":"        if self.trait_type is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F99Yo%3D","line":110,"in_reply_to":"AAAATn%2F9%2BJE%3D","updated":"2013-12-04 00:29:55.000000000","message":"Done. (* several)","commit_id":"f251c63ac09943aa45919564239b6da6d4fc52b6"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"c2d24636aee6af954fb5adc27687ebe872bdcb27","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.trait_type \u003d models.Trait.get_type_by_name(type_name)"},{"line_number":113,"context_line":"        if self.trait_type is None:"},{"line_number":114,"context_line":"            raise EventDefinitionException("},{"line_number":115,"context_line":"                \"Invalid trait type \u0027%s\u0027 for trait %s\" % (type_name, name),"},{"line_number":116,"context_line":"                self.cfg)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def _get_path(self, match):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9%2BI0%3D","line":115,"updated":"2013-12-03 22:03:43.000000000","message":"_()","commit_id":"f251c63ac09943aa45919564239b6da6d4fc52b6"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"c2d24636aee6af954fb5adc27687ebe872bdcb27","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            traits \u003d definition_cfg[\u0027traits\u0027]"},{"line_number":165,"context_line":"        except KeyError as err:"},{"line_number":166,"context_line":"            raise EventDefinitionException("},{"line_number":167,"context_line":"                \"Required field %s not specified\" % err.args[0], self.cfg)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        if isinstance(event_type, six.string_types):"},{"line_number":170,"context_line":"            event_type \u003d [event_type]"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9%2BIs%3D","line":167,"updated":"2013-12-03 22:03:43.000000000","message":"_()","commit_id":"f251c63ac09943aa45919564239b6da6d4fc52b6"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"c2d24636aee6af954fb5adc27687ebe872bdcb27","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                break"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        if edef is None:"},{"line_number":344,"context_line":"            msg \u003d \u0027Dropping Notification %s (uuid:%s)\u0027 % (event_type,"},{"line_number":345,"context_line":"                                                          message_id)"},{"line_number":346,"context_line":"            if cfg.CONF.allow_dropping_of_notifications:"},{"line_number":347,"context_line":"                LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9%2BIY%3D","line":344,"updated":"2013-12-03 22:03:43.000000000","message":"_()","commit_id":"f251c63ac09943aa45919564239b6da6d4fc52b6"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"c2d24636aee6af954fb5adc27687ebe872bdcb27","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        with open(config_file) as cf:"},{"line_number":371,"context_line":"            config \u003d cf.read()"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        events_config \u003d yaml.safe_load(config)"},{"line_number":374,"context_line":"    else:"},{"line_number":375,"context_line":"        LOG.debug(\"No Event Definitions configuration file found!\""},{"line_number":376,"context_line":"                  \" Using default config.\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9%2BDY%3D","line":373,"updated":"2013-12-03 22:03:43.000000000","message":"still think you should add more info in case the yaml file is not well formatted and you get exception here, maybe just change the log above from debug to info as this might be a common error if yaml file is editable.","commit_id":"f251c63ac09943aa45919564239b6da6d4fc52b6"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"5c7afae0941f940bb533e5892f02fa5fdb4fe0f8","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        with open(config_file) as cf:"},{"line_number":371,"context_line":"            config \u003d cf.read()"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        events_config \u003d yaml.safe_load(config)"},{"line_number":374,"context_line":"    else:"},{"line_number":375,"context_line":"        LOG.debug(\"No Event Definitions configuration file found!\""},{"line_number":376,"context_line":"                  \" Using default config.\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F99Ys%3D","line":373,"in_reply_to":"AAAATn%2F9%2BDY%3D","updated":"2013-12-04 00:29:55.000000000","message":"I\u0027ll add some more informative error messages.","commit_id":"f251c63ac09943aa45919564239b6da6d4fc52b6"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"c2d24636aee6af954fb5adc27687ebe872bdcb27","unresolved":false,"context_lines":[{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        events_config \u003d yaml.safe_load(config)"},{"line_number":374,"context_line":"    else:"},{"line_number":375,"context_line":"        LOG.debug(\"No Event Definitions configuration file found!\""},{"line_number":376,"context_line":"                  \" Using default config.\")"},{"line_number":377,"context_line":"        events_config \u003d []"},{"line_number":378,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9%2BIQ%3D","line":375,"updated":"2013-12-03 22:03:43.000000000","message":"_()","commit_id":"f251c63ac09943aa45919564239b6da6d4fc52b6"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"c2d24636aee6af954fb5adc27687ebe872bdcb27","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                  \" Using default config.\")"},{"line_number":377,"context_line":"        events_config \u003d []"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    LOG.info(\"Event Definitions: %s\", events_config)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    allow_drop \u003d cfg.CONF.allow_dropping_of_notifications"},{"line_number":382,"context_line":"    return NotificationEventsConverter(events_config,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9%2BIM%3D","line":379,"updated":"2013-12-03 22:03:43.000000000","message":"_()","commit_id":"f251c63ac09943aa45919564239b6da6d4fc52b6"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"cfg.CONF.register_opts(OPTS)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F90zg%3D","line":43,"updated":"2013-12-05 15:58:00.000000000","message":"should we add to an \u0027event\u0027 group? specifically, \u0027allow_dropping_of_notifications\u0027 opt conceptually overlaps with notifications in general while this option is event specific.","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"cfg.CONF.register_opts(OPTS)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F9z%2Bc%3D","line":43,"in_reply_to":"AAAATn%2F90zg%3D","updated":"2013-12-05 17:23:10.000000000","message":"Hmm... I\u0027m ambivalent on that... I wasn\u0027t going to add a new config group for just 1 or 2 options,  but if you think we need it, I can.","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"5bfde6d64b05c046583e056d27f53385cdec52a6","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"cfg.CONF.register_opts(OPTS)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F9zrw%3D","line":43,"in_reply_to":"AAAATn%2F9z%2Bc%3D","updated":"2013-12-05 17:40:59.000000000","message":"i\u0027d lean more to creating an \u0027event\u0027 group to easier show the purpose of the option... that said, not a blocker for me so if anyone has strong opinions for keeping it in default, that works for me as well.","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                    By default the value will be the first such field."},{"line_number":308,"context_line":"                    (plugins can alter that, if they wish)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"                    This configuration value is nomally a string, for"},{"line_number":311,"context_line":"                    convenience, it can be specified as a list of"},{"line_number":312,"context_line":"                    specifications, which will be OR\u0027ed together (a union"},{"line_number":313,"context_line":"                    query in jsonpath terms)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F90qE%3D","line":310,"updated":"2013-12-05 15:58:00.000000000","message":"s/nomally/normally/","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                    By default the value will be the first such field."},{"line_number":308,"context_line":"                    (plugins can alter that, if they wish)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"                    This configuration value is nomally a string, for"},{"line_number":311,"context_line":"                    convenience, it can be specified as a list of"},{"line_number":312,"context_line":"                    specifications, which will be OR\u0027ed together (a union"},{"line_number":313,"context_line":"                    query in jsonpath terms)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F9z9s%3D","line":310,"in_reply_to":"AAAATn%2F90qE%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"1eec1a10a73c1b42e97bc26ddb07de3f804f2324","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"cfg.CONF.register_opts(OPTS)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9jx4%3D","line":43,"updated":"2013-12-10 14:51:26.000000000","message":"Seems like putting these config options in the DEFAULT section isn\u0027t necessarily the neatest approach.\n\nHow about encapsulating in an \u0027event\u0027 config section, i.e. changing the above code slightly to:\n\n +OPTS \u003d [\n +    cfg.StrOpt(\u0027definitions_cfg_file\u0027,\n +               default\u003d\"event_definitions.yaml\",\n +               help\u003d\"Configuration file for event definitions\"\n +               ),\n +    cfg.BoolOpt(\u0027drop_unmatched_notifications\u0027,\n +                default\u003dFalse,\n +                help\u003d\u0027Drop notifications if no event definition matches. \u0027\n +                \u0027(Otherwise, we convert them with just the default traits)\u0027),\n +\n +]\n +\n +cfg.CONF.register_opts(OPTS, group\u003d\u0027event\u0027)\n\n(Just a thought ...)","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ccadb9f0a2a348aa8fead56ee16fc51446759fa7","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"cfg.CONF.register_opts(OPTS)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hlw%3D","line":43,"in_reply_to":"AAAATn%2F9hoc%3D","updated":"2013-12-10 16:35:55.000000000","message":"+1","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"885e1c33cc167126aa886dda36a6cb94c2cd0424","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"cfg.CONF.register_opts(OPTS)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hg8%3D","line":43,"in_reply_to":"AAAATn%2F9hoc%3D","updated":"2013-12-10 16:06:41.000000000","message":"Ok, I can do that.","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"7fc1d2cea1fe639dd794ab9b8edd16098778dbb3","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"cfg.CONF.register_opts(OPTS)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hoc%3D","line":43,"in_reply_to":"AAAATn%2F9jx4%3D","updated":"2013-12-10 15:45:52.000000000","message":"eglynn, where were you when i asked this on last patch :)\n\ndragondm, i guess since there\u0027s two of us, there\u0027s a preference to having opts in it\u0027s own group (unless you have a reason not to)... plus i like the new, shorter opt names provided by Ceilometer\u0027s (official?) Namer of Things.","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ccadb9f0a2a348aa8fead56ee16fc51446759fa7","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class EventDefinitionException(Exception):"},{"line_number":49,"context_line":"    def __init__(self, message, definition_cfg):"},{"line_number":50,"context_line":"        self.msg \u003d message"},{"line_number":51,"context_line":"        self.definition_cfg \u003d definition_cfg"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def __str__(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hlc%3D","line":50,"updated":"2013-12-10 16:35:55.000000000","message":"Minor, but I\u0027d do something like super().__init__(message)","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"f86c19aae09a936f64012f948bfe5e83f62b43a0","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class EventDefinitionException(Exception):"},{"line_number":49,"context_line":"    def __init__(self, message, definition_cfg):"},{"line_number":50,"context_line":"        self.msg \u003d message"},{"line_number":51,"context_line":"        self.definition_cfg \u003d definition_cfg"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def __str__(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hKs%3D","line":50,"in_reply_to":"AAAATn%2F9hlc%3D","updated":"2013-12-10 17:29:47.000000000","message":"I can do that.","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ccadb9f0a2a348aa8fead56ee16fc51446759fa7","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.definition_cfg \u003d definition_cfg"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def __str__(self):"},{"line_number":54,"context_line":"        return \u0027%s %s: %s\u0027 % (self.__class__.__name__,"},{"line_number":55,"context_line":"                              self.definition_cfg, self.msg)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hlY%3D","line":54,"updated":"2013-12-10 16:35:55.000000000","message":"and compose with super()","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"f86c19aae09a936f64012f948bfe5e83f62b43a0","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.definition_cfg \u003d definition_cfg"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def __str__(self):"},{"line_number":54,"context_line":"        return \u0027%s %s: %s\u0027 % (self.__class__.__name__,"},{"line_number":55,"context_line":"                              self.definition_cfg, self.msg)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hKM%3D","line":54,"in_reply_to":"AAAATn%2F9hlY%3D","updated":"2013-12-10 17:29:47.000000000","message":"I\u0027m not really sure how you\u0027d compose this, it\u0027s pretty much a straight override.","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ccadb9f0a2a348aa8fead56ee16fc51446759fa7","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class TraitDefinition(object):"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def __init__(self, name, trait_cfg, plugin_manager):"},{"line_number":61,"context_line":"        self.cfg \u003d trait_cfg"},{"line_number":62,"context_line":"        self.name \u003d name"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hc0%3D","line":60,"updated":"2013-12-10 16:35:55.000000000","message":"I think it would be better to not rely on a \"complicated\" data structure here, but rather on explicit parameter. Handling the configuration and getting the value should not be the matter of this class.\n\nPassing directly the list of plugins might be a good idea too then.","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"f86c19aae09a936f64012f948bfe5e83f62b43a0","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class TraitDefinition(object):"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def __init__(self, name, trait_cfg, plugin_manager):"},{"line_number":61,"context_line":"        self.cfg \u003d trait_cfg"},{"line_number":62,"context_line":"        self.name \u003d name"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hJQ%3D","line":60,"in_reply_to":"AAAATn%2F9hc0%3D","updated":"2013-12-10 17:29:47.000000000","message":"I don\u0027t really understand the objection here. Handling the configuration of the trait definition is the purpose of this class. And the plugin manager encapsulates the list of available plugins, that\u0027s what stevedore provides those for. \nSo, I\u0027m somewhat confused here.","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ccadb9f0a2a348aa8fead56ee16fc51446759fa7","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        fields \u003d trait_cfg[\u0027fields\u0027]"},{"line_number":100,"context_line":"        if not isinstance(fields, six.string_types):"},{"line_number":101,"context_line":"            # if not a string, we assume a list (mdragon)"},{"line_number":102,"context_line":"            if len(fields) \u003d\u003d 1:"},{"line_number":103,"context_line":"                fields \u003d fields[0]"},{"line_number":104,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hcM%3D","line":101,"updated":"2013-12-10 16:35:55.000000000","message":"it\u0027s rather NOTE(mdragon) I think, otherwise it looks weird if somebody doesn\u0027t know you? :)","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"f86c19aae09a936f64012f948bfe5e83f62b43a0","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        fields \u003d trait_cfg[\u0027fields\u0027]"},{"line_number":100,"context_line":"        if not isinstance(fields, six.string_types):"},{"line_number":101,"context_line":"            # if not a string, we assume a list (mdragon)"},{"line_number":102,"context_line":"            if len(fields) \u003d\u003d 1:"},{"line_number":103,"context_line":"                fields \u003d fields[0]"},{"line_number":104,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hJE%3D","line":101,"in_reply_to":"AAAATn%2F9hcM%3D","updated":"2013-12-10 17:29:47.000000000","message":"Done","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ccadb9f0a2a348aa8fead56ee16fc51446759fa7","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        return False"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def match_type(self, event_type):"},{"line_number":206,"context_line":"        if (self.included_type(event_type)"},{"line_number":207,"context_line":"                and not self.excluded_type(event_type)):"},{"line_number":208,"context_line":"            return True"},{"line_number":209,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hbw%3D","line":206,"updated":"2013-12-10 16:35:55.000000000","message":"return self.included_type(event_type) and not self.excluded_type(event_type)","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"f86c19aae09a936f64012f948bfe5e83f62b43a0","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        return False"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def match_type(self, event_type):"},{"line_number":206,"context_line":"        if (self.included_type(event_type)"},{"line_number":207,"context_line":"                and not self.excluded_type(event_type)):"},{"line_number":208,"context_line":"            return True"},{"line_number":209,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hHM%3D","line":206,"in_reply_to":"AAAATn%2F9hbw%3D","updated":"2013-12-10 17:29:47.000000000","message":"Done","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ccadb9f0a2a348aa8fead56ee16fc51446759fa7","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    @property"},{"line_number":212,"context_line":"    def is_catchall(self):"},{"line_number":213,"context_line":"        if \u0027*\u0027 in self._included_types and not self._excluded_types:"},{"line_number":214,"context_line":"            return True"},{"line_number":215,"context_line":"        return False"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hfc%3D","line":213,"updated":"2013-12-10 16:35:55.000000000","message":"return \u0027*\u0027 in self._included_types and not self._excluded_types\n\nactually :)","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"f86c19aae09a936f64012f948bfe5e83f62b43a0","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    @property"},{"line_number":212,"context_line":"    def is_catchall(self):"},{"line_number":213,"context_line":"        if \u0027*\u0027 in self._included_types and not self._excluded_types:"},{"line_number":214,"context_line":"            return True"},{"line_number":215,"context_line":"        return False"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9hHI%3D","line":213,"in_reply_to":"AAAATn%2F9hfc%3D","updated":"2013-12-10 17:29:47.000000000","message":"Done","commit_id":"09039e941ed1b20f80b8ebbdc83813c2f2ecf3be"}],"ceilometer/event/trait_plugins.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":24,"context_line":"       Trait values."},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    __metaclass__ \u003d abc.ABCMeta"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self, **kw):"},{"line_number":30,"context_line":"        \"\"\"Setup the trait plugin."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F91GY%3D","line":27,"updated":"2013-12-05 15:58:00.000000000","message":"drop this and define it as decorator:\n@six.add_metaclass(abc.ABCMeta)\n\nsee: https://github.com/openstack/ceilometer/blob/master/ceilometer/plugin.py#L41","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":24,"context_line":"       Trait values."},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    __metaclass__ \u003d abc.ABCMeta"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self, **kw):"},{"line_number":30,"context_line":"        \"\"\"Setup the trait plugin."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F90CM%3D","line":27,"in_reply_to":"AAAATn%2F91GY%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        empty). If this method returns None, the trait *will not* be added to"},{"line_number":50,"context_line":"        the event. Any other value returned by this method will be used as"},{"line_number":51,"context_line":"        the value for the trait. Values returned will be coerced to the"},{"line_number":52,"context_line":"        ppropriate type for the trait."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param match_list: A list (may be empty if no matches) of *tuples*."},{"line_number":55,"context_line":"                          Each tuple is (field_path, value) where field_path"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F91No%3D","line":52,"updated":"2013-12-05 15:58:00.000000000","message":"s/ppropriate/appropriate/","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        empty). If this method returns None, the trait *will not* be added to"},{"line_number":50,"context_line":"        the event. Any other value returned by this method will be used as"},{"line_number":51,"context_line":"        the value for the trait. Values returned will be coerced to the"},{"line_number":52,"context_line":"        ppropriate type for the trait."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param match_list: A list (may be empty if no matches) of *tuples*."},{"line_number":55,"context_line":"                          Each tuple is (field_path, value) where field_path"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F90CE%3D","line":52,"in_reply_to":"AAAATn%2F91No%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def trait_value(self, match_list):"},{"line_number":109,"context_line":"        if not match_list:"},{"line_number":110,"context_line":"            return None"},{"line_number":111,"context_line":"        value \u003d str(match_list[0][1])"},{"line_number":112,"context_line":"        if self.max_split is not None:"},{"line_number":113,"context_line":"            values \u003d value.split(self.separator, self.max_split)"},{"line_number":114,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F91Ks%3D","line":111,"updated":"2013-12-05 15:58:00.000000000","message":"why does this only act on the first tuple in list and ignore everything else?","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"5bfde6d64b05c046583e056d27f53385cdec52a6","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def trait_value(self, match_list):"},{"line_number":109,"context_line":"        if not match_list:"},{"line_number":110,"context_line":"            return None"},{"line_number":111,"context_line":"        value \u003d str(match_list[0][1])"},{"line_number":112,"context_line":"        if self.max_split is not None:"},{"line_number":113,"context_line":"            values \u003d value.split(self.separator, self.max_split)"},{"line_number":114,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F9zq8%3D","line":111,"in_reply_to":"AAAATn%2F90C8%3D","updated":"2013-12-05 17:40:59.000000000","message":"so if match_list\u003d [(\u0027payload.foobar\u0027,\u0027test\u0027), (\u0027payload.thing.bar\u0027,12), (\u0027payload.thing.boing\u0027,13)]\n\nit will only act against \u0027test\u0027 value? the other tuples are ignored?","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def trait_value(self, match_list):"},{"line_number":109,"context_line":"        if not match_list:"},{"line_number":110,"context_line":"            return None"},{"line_number":111,"context_line":"        value \u003d str(match_list[0][1])"},{"line_number":112,"context_line":"        if self.max_split is not None:"},{"line_number":113,"context_line":"            values \u003d value.split(self.separator, self.max_split)"},{"line_number":114,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F90C8%3D","line":111,"in_reply_to":"AAAATn%2F91Ks%3D","updated":"2013-12-05 17:23:10.000000000","message":"This follows the default behavior for trait matches without a plugin. The default is to grab the first existing value, if you specify multiple fields. This plugin does the same, but then does additional processing (i.e. a string.split() ) on that value.  \n\nIf you look in the docstring for trait_value in the baseclass for the plugins, there is an example of a plugin that just emulates the default behavior.","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"fd685ef04d2639601bd8eaa00d6576200f7b2acb","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def trait_value(self, match_list):"},{"line_number":109,"context_line":"        if not match_list:"},{"line_number":110,"context_line":"            return None"},{"line_number":111,"context_line":"        value \u003d str(match_list[0][1])"},{"line_number":112,"context_line":"        if self.max_split is not None:"},{"line_number":113,"context_line":"            values \u003d value.split(self.separator, self.max_split)"},{"line_number":114,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F9y90%3D","line":111,"in_reply_to":"AAAATn%2F9zq8%3D","updated":"2013-12-05 20:38:30.000000000","message":"Yup.","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"}],"ceilometer/storage/models.py":[{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"b635c3a791e5732354240f425f0fefe1b658f8a8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    def __repr__(self):"},{"line_number":100,"context_line":"        return \"\u003cTrait: %s %d %s\u003e\" % (self.name, self.dtype, self.value)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @classmethod"},{"line_number":103,"context_line":"    def get_type_by_name(cls, type_name):"},{"line_number":104,"context_line":"        return getattr(cls, \u0027%s_TYPE\u0027 % type_name.upper(), None)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F96vU%3D","line":102,"updated":"2013-12-04 14:21:44.000000000","message":"Hm, this seems to clash with the API specification and the event storage layer branch. In the api spec, types are specified as t_text, t_datetime, etc. I\u0027d vote for consistency, if possible. It might be weird to have the operator specify a trait type one way, while a user of the api is specifying them another. Just a thought!\n\nhttps://review.openstack.org/#/c/57304/12/ceilometer/storage/models.py","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"25a1bc8b56ce30055e3c8cb8249114aab2851536","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    def __repr__(self):"},{"line_number":100,"context_line":"        return \"\u003cTrait: %s %d %s\u003e\" % (self.name, self.dtype, self.value)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @classmethod"},{"line_number":103,"context_line":"    def get_type_by_name(cls, type_name):"},{"line_number":104,"context_line":"        return getattr(cls, \u0027%s_TYPE\u0027 % type_name.upper(), None)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F9524%3D","line":102,"in_reply_to":"AAAATn%2F95%2Fc%3D","updated":"2013-12-04 17:15:15.000000000","message":"Yah, that sounds good.","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"f871496e0e02ff46373908c4c89110fd45039ab4","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    def __repr__(self):"},{"line_number":100,"context_line":"        return \"\u003cTrait: %s %d %s\u003e\" % (self.name, self.dtype, self.value)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @classmethod"},{"line_number":103,"context_line":"    def get_type_by_name(cls, type_name):"},{"line_number":104,"context_line":"        return getattr(cls, \u0027%s_TYPE\u0027 % type_name.upper(), None)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F95%2Fc%3D","line":102,"in_reply_to":"AAAATn%2F96B4%3D","updated":"2013-12-04 16:44:59.000000000","message":"It\u0027s actually coming from the EventFilter class: https://review.openstack.org/#/c/57304/12/ceilometer/storage/__init__.py\n\nI\u0027ve been basing everything off of those names. Maybe I\u0027ll refactor that after all of these branches land. What do you guys think? I\u0027m ok with pushing this in and then cleaning up the names later...","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"b6e35267a5770a61ca26940bd7d0f801c52111af","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    def __repr__(self):"},{"line_number":100,"context_line":"        return \"\u003cTrait: %s %d %s\u003e\" % (self.name, self.dtype, self.value)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @classmethod"},{"line_number":103,"context_line":"    def get_type_by_name(cls, type_name):"},{"line_number":104,"context_line":"        return getattr(cls, \u0027%s_TYPE\u0027 % type_name.upper(), None)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F96B4%3D","line":102,"in_reply_to":"AAAATn%2F96DI%3D","updated":"2013-12-04 16:36:43.000000000","message":"Probably just what made sense at the time, since the SQLAlchemy implementation (the only one in master right now) had that mask for its column names. I prefer the simpler \u0027datetime\u0027, \u0027int\u0027, etc. myself.","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"5375fee232ee43f3ef382638dbed728fe65c182a","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    def __repr__(self):"},{"line_number":100,"context_line":"        return \"\u003cTrait: %s %d %s\u003e\" % (self.name, self.dtype, self.value)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @classmethod"},{"line_number":103,"context_line":"    def get_type_by_name(cls, type_name):"},{"line_number":104,"context_line":"        return getattr(cls, \u0027%s_TYPE\u0027 % type_name.upper(), None)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F96DI%3D","line":102,"in_reply_to":"AAAATn%2F96vU%3D","updated":"2013-12-04 16:34:00.000000000","message":"Hmmm... I agree consistency would be nice here, but what exactly does that extra \u0027t_\u0027 get us anyway?  I.e. why isn\u0027t it just \u0027text\u0027, \u0027datetime\u0027, etc in the api?","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"}],"ceilometer/tests/event/test_converter.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def assertIsValidEvent(self, event, notification):"},{"line_number":43,"context_line":"        self.assertIsNot("},{"line_number":44,"context_line":"            None, event,"},{"line_number":45,"context_line":"            \"Notification Dropped when not expected to be dropped:\""},{"line_number":46,"context_line":"            \" %s\" % str(notification))"},{"line_number":47,"context_line":"        self.assertIsInstance(event, models.Event)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F90dk%3D","line":45,"updated":"2013-12-05 15:58:00.000000000","message":"s/Notification Dropped when not expected to be dropped:/Notification dropped unexpectedly:/","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def assertIsValidEvent(self, event, notification):"},{"line_number":43,"context_line":"        self.assertIsNot("},{"line_number":44,"context_line":"            None, event,"},{"line_number":45,"context_line":"            \"Notification Dropped when not expected to be dropped:\""},{"line_number":46,"context_line":"            \" %s\" % str(notification))"},{"line_number":47,"context_line":"        self.assertIsInstance(event, models.Event)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F9z68%3D","line":45,"in_reply_to":"AAAATn%2F90dk%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            self.assertEqual(trait.dtype, dtype)"},{"line_number":65,"context_line":"            if dtype \u003d\u003d models.Trait.INT_TYPE:"},{"line_number":66,"context_line":"                self.assertIsInstance(trait.value, int)"},{"line_number":67,"context_line":"            if dtype \u003d\u003d models.Trait.FLOAT_TYPE:"},{"line_number":68,"context_line":"                self.assertIsInstance(trait.value, float)"},{"line_number":69,"context_line":"            if dtype \u003d\u003d models.Trait.DATETIME_TYPE:"},{"line_number":70,"context_line":"                self.assertIsInstance(trait.value, datetime.datetime)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F90bc%3D","line":67,"updated":"2013-12-05 15:58:00.000000000","message":"elif... also for if statements below","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            self.assertEqual(trait.dtype, dtype)"},{"line_number":65,"context_line":"            if dtype \u003d\u003d models.Trait.INT_TYPE:"},{"line_number":66,"context_line":"                self.assertIsInstance(trait.value, int)"},{"line_number":67,"context_line":"            if dtype \u003d\u003d models.Trait.FLOAT_TYPE:"},{"line_number":68,"context_line":"                self.assertIsInstance(trait.value, float)"},{"line_number":69,"context_line":"            if dtype \u003d\u003d models.Trait.DATETIME_TYPE:"},{"line_number":70,"context_line":"                self.assertIsInstance(trait.value, datetime.datetime)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F9z60%3D","line":67,"in_reply_to":"AAAATn%2F90bc%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        self.fake_plugin_mgr \u003d {}"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    def test_converter_missing_keys(self):"},{"line_number":628,"context_line":"        # test a malkformed notification"},{"line_number":629,"context_line":"        now \u003d timeutils.utcnow()"},{"line_number":630,"context_line":"        timeutils.set_time_override(now)"},{"line_number":631,"context_line":"        c \u003d converter.NotificationEventsConverter("}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F90Zw%3D","line":628,"updated":"2013-12-05 15:58:00.000000000","message":"s/malkformed/malformed/","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        self.fake_plugin_mgr \u003d {}"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    def test_converter_missing_keys(self):"},{"line_number":628,"context_line":"        # test a malkformed notification"},{"line_number":629,"context_line":"        now \u003d timeutils.utcnow()"},{"line_number":630,"context_line":"        timeutils.set_time_override(now)"},{"line_number":631,"context_line":"        c \u003d converter.NotificationEventsConverter("}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F9z6g%3D","line":628,"in_reply_to":"AAAATn%2F90Zw%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"}],"doc/source/events.rst":[{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"182a4c1a478fc71bccc4ee25a58725f827270e85","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"In general, Events let you know when something has changed about an"},{"line_number":32,"context_line":"object in an OpenStack system, such as the resize of an instance, or creation"},{"line_number":33,"context_line":"of a image."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"While Samples an be relatively cheap (small),"},{"line_number":36,"context_line":"disposable (loosing an individual sample datapoint won\u0027t matter much),"}],"source_content_type":"text/x-rst","patch_set":11,"id":"AAAATn%2F%2BXVg%3D","line":33,"updated":"2013-11-26 22:13:09.000000000","message":"s/a/an","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"6c1831458967da259dc21a15aa808e5441e82c41","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"In general, Events let you know when something has changed about an"},{"line_number":32,"context_line":"object in an OpenStack system, such as the resize of an instance, or creation"},{"line_number":33,"context_line":"of a image."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"While Samples an be relatively cheap (small),"},{"line_number":36,"context_line":"disposable (loosing an individual sample datapoint won\u0027t matter much),"}],"source_content_type":"text/x-rst","patch_set":11,"id":"AAAATn%2F9%2B1g%3D","line":33,"in_reply_to":"AAAATn%2F%2BXVg%3D","updated":"2013-12-03 19:50:46.000000000","message":"Done","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"182a4c1a478fc71bccc4ee25a58725f827270e85","unresolved":false,"context_lines":[{"line_number":70,"context_line":"data someone might need, and let the consumer filter out what they are not"},{"line_number":71,"context_line":"interested in. In order to make processing simpler and more efficient,"},{"line_number":72,"context_line":"the notifications are stored and processed within Ceilometer as Events."},{"line_number":73,"context_line":"The notification payload, which can be an arbitraryly complex JSON data"},{"line_number":74,"context_line":"structure, is converted to a flat set of key-value pairs known as Traits."},{"line_number":75,"context_line":"This conversion is specified by a config file, so that only the specific"},{"line_number":76,"context_line":"fields within the notification that are actually needed for processing the"}],"source_content_type":"text/x-rst","patch_set":11,"id":"AAAATn%2F%2BXUQ%3D","line":73,"updated":"2013-11-26 22:13:09.000000000","message":"s/arbitraryly/arbitrarily","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"6c1831458967da259dc21a15aa808e5441e82c41","unresolved":false,"context_lines":[{"line_number":70,"context_line":"data someone might need, and let the consumer filter out what they are not"},{"line_number":71,"context_line":"interested in. In order to make processing simpler and more efficient,"},{"line_number":72,"context_line":"the notifications are stored and processed within Ceilometer as Events."},{"line_number":73,"context_line":"The notification payload, which can be an arbitraryly complex JSON data"},{"line_number":74,"context_line":"structure, is converted to a flat set of key-value pairs known as Traits."},{"line_number":75,"context_line":"This conversion is specified by a config file, so that only the specific"},{"line_number":76,"context_line":"fields within the notification that are actually needed for processing the"}],"source_content_type":"text/x-rst","patch_set":11,"id":"AAAATn%2F9%2B1c%3D","line":73,"in_reply_to":"AAAATn%2F%2BXUQ%3D","updated":"2013-12-03 19:50:46.000000000","message":"Done","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"182a4c1a478fc71bccc4ee25a58725f827270e85","unresolved":false,"context_lines":[{"line_number":84,"context_line":"----------------------------------"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"In order to make it easier to allow users to extract what they need,"},{"line_number":87,"context_line":"the conversion fron Notifications to Events is driven from a"},{"line_number":88,"context_line":"configuration file. (Specified by the flag event_definitions_cfg_file_ in"},{"line_number":89,"context_line":"ceilometer.conf)"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"AAAATn%2F%2BXUA%3D","line":87,"updated":"2013-11-26 22:13:09.000000000","message":"s/fron/from\n\nand\n\nmaybe \"driven by a configuration file...\"?","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"6c1831458967da259dc21a15aa808e5441e82c41","unresolved":false,"context_lines":[{"line_number":84,"context_line":"----------------------------------"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"In order to make it easier to allow users to extract what they need,"},{"line_number":87,"context_line":"the conversion fron Notifications to Events is driven from a"},{"line_number":88,"context_line":"configuration file. (Specified by the flag event_definitions_cfg_file_ in"},{"line_number":89,"context_line":"ceilometer.conf)"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"AAAATn%2F9%2B1Y%3D","line":87,"in_reply_to":"AAAATn%2F%2BXUA%3D","updated":"2013-12-03 19:50:46.000000000","message":"Done","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"182a4c1a478fc71bccc4ee25a58725f827270e85","unresolved":false,"context_lines":[{"line_number":86,"context_line":"In order to make it easier to allow users to extract what they need,"},{"line_number":87,"context_line":"the conversion fron Notifications to Events is driven from a"},{"line_number":88,"context_line":"configuration file. (Specified by the flag event_definitions_cfg_file_ in"},{"line_number":89,"context_line":"ceilometer.conf)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"This includes descriptions of how to map fields in the notification body"},{"line_number":92,"context_line":"to Traits, and optional plugins for doing any programmatic translations"}],"source_content_type":"text/x-rst","patch_set":11,"id":"AAAATn%2F%2BXTk%3D","line":89,"updated":"2013-11-26 22:13:09.000000000","message":"Might need to move that period here and lowercase \u0027specified\u0027.","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"6c1831458967da259dc21a15aa808e5441e82c41","unresolved":false,"context_lines":[{"line_number":86,"context_line":"In order to make it easier to allow users to extract what they need,"},{"line_number":87,"context_line":"the conversion fron Notifications to Events is driven from a"},{"line_number":88,"context_line":"configuration file. (Specified by the flag event_definitions_cfg_file_ in"},{"line_number":89,"context_line":"ceilometer.conf)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"This includes descriptions of how to map fields in the notification body"},{"line_number":92,"context_line":"to Traits, and optional plugins for doing any programmatic translations"}],"source_content_type":"text/x-rst","patch_set":11,"id":"AAAATn%2F9%2B1U%3D","line":89,"in_reply_to":"AAAATn%2F%2BXTk%3D","updated":"2013-12-03 19:50:46.000000000","message":"Done","commit_id":"f9c78bbf765bf0d4e5c0acce3a74eb0bce4eb15c"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":32,"context_line":"object in an OpenStack system, such as the resize of an instance, or creation"},{"line_number":33,"context_line":"of an image."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"While Samples an be relatively cheap (small),"},{"line_number":36,"context_line":"disposable (loosing an individual sample datapoint won\u0027t matter much),"},{"line_number":37,"context_line":"and fast, Events are larger, more informative, and should be handled more"},{"line_number":38,"context_line":"consistantly (you do not want to loose one)."}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F904g%3D","line":35,"updated":"2013-12-05 15:58:00.000000000","message":"s/an/can/","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":32,"context_line":"object in an OpenStack system, such as the resize of an instance, or creation"},{"line_number":33,"context_line":"of an image."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"While Samples an be relatively cheap (small),"},{"line_number":36,"context_line":"disposable (loosing an individual sample datapoint won\u0027t matter much),"},{"line_number":37,"context_line":"and fast, Events are larger, more informative, and should be handled more"},{"line_number":38,"context_line":"consistantly (you do not want to loose one)."}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F9z5I%3D","line":35,"in_reply_to":"AAAATn%2F904g%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":33,"context_line":"of an image."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"While Samples an be relatively cheap (small),"},{"line_number":36,"context_line":"disposable (loosing an individual sample datapoint won\u0027t matter much),"},{"line_number":37,"context_line":"and fast, Events are larger, more informative, and should be handled more"},{"line_number":38,"context_line":"consistantly (you do not want to loose one)."},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F903w%3D","line":36,"updated":"2013-12-05 15:58:00.000000000","message":"s/loosing/losing/","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":33,"context_line":"of an image."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"While Samples an be relatively cheap (small),"},{"line_number":36,"context_line":"disposable (loosing an individual sample datapoint won\u0027t matter much),"},{"line_number":37,"context_line":"and fast, Events are larger, more informative, and should be handled more"},{"line_number":38,"context_line":"consistantly (you do not want to loose one)."},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F9z5E%3D","line":36,"in_reply_to":"AAAATn%2F903w%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":35,"context_line":"While Samples an be relatively cheap (small),"},{"line_number":36,"context_line":"disposable (loosing an individual sample datapoint won\u0027t matter much),"},{"line_number":37,"context_line":"and fast, Events are larger, more informative, and should be handled more"},{"line_number":38,"context_line":"consistantly (you do not want to loose one)."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Event Structure"},{"line_number":41,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F902c%3D","line":38,"updated":"2013-12-05 15:58:00.000000000","message":"s/consistantly/consistently/ and s/loose/lose/","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":35,"context_line":"While Samples an be relatively cheap (small),"},{"line_number":36,"context_line":"disposable (loosing an individual sample datapoint won\u0027t matter much),"},{"line_number":37,"context_line":"and fast, Events are larger, more informative, and should be handled more"},{"line_number":38,"context_line":"consistantly (you do not want to loose one)."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Event Structure"},{"line_number":41,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F9z48%3D","line":38,"in_reply_to":"AAAATn%2F902c%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":77,"context_line":"event will have to be stored as Traits."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Note that the Event format is meant for efficient processing and querying,"},{"line_number":80,"context_line":"there are other means availble for archiving notifications (i.e. for audit"},{"line_number":81,"context_line":"purposes, etc), possibly to different datastores."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Converting Notifications to Events"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F901U%3D","line":80,"updated":"2013-12-05 15:58:00.000000000","message":"s/availble/available/","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":77,"context_line":"event will have to be stored as Traits."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Note that the Event format is meant for efficient processing and querying,"},{"line_number":80,"context_line":"there are other means availble for archiving notifications (i.e. for audit"},{"line_number":81,"context_line":"purposes, etc), possibly to different datastores."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Converting Notifications to Events"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F9z44%3D","line":80,"in_reply_to":"AAAATn%2F901U%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":92,"context_line":"to Traits, and optional plugins for doing any programmatic translations"},{"line_number":93,"context_line":"(splitting a string, forcing case, etc.)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"The mapping of notification to events is defined per event_type, which"},{"line_number":96,"context_line":"can be wildcarded. Traits are added to events if the corresponding fields"},{"line_number":97,"context_line":"in the notification exist and are non-null. (As a special case, an empty"},{"line_number":98,"context_line":"string is considered null for non-text traits. This is due to some openstack"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F90yk%3D","line":95,"updated":"2013-12-05 15:58:00.000000000","message":"s/notification/notifications/","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":92,"context_line":"to Traits, and optional plugins for doing any programmatic translations"},{"line_number":93,"context_line":"(splitting a string, forcing case, etc.)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"The mapping of notification to events is defined per event_type, which"},{"line_number":96,"context_line":"can be wildcarded. Traits are added to events if the corresponding fields"},{"line_number":97,"context_line":"in the notification exist and are non-null. (As a special case, an empty"},{"line_number":98,"context_line":"string is considered null for non-text traits. This is due to some openstack"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F9z4k%3D","line":95,"in_reply_to":"AAAATn%2F90yk%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":131,"context_line":"is scanned in *reverse* order (last definition in the file to the first),"},{"line_number":132,"context_line":"to find a definition which matches the notification\u0027s event_type.  That"},{"line_number":133,"context_line":"definition will be used to generate the Event. The reverse ordering is done"},{"line_number":134,"context_line":"because it is common to want the have a more general wildcarded definition"},{"line_number":135,"context_line":"(such as \"compute.instance.*\" ) with a set of traits common to all of those"},{"line_number":136,"context_line":"events, with a few more specific event definitions (like"},{"line_number":137,"context_line":"\"compute.instance.exists\") afterward that have all of the above traits, plus"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F90v4%3D","line":134,"updated":"2013-12-05 15:58:00.000000000","message":"s/to want the/to want to/","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":131,"context_line":"is scanned in *reverse* order (last definition in the file to the first),"},{"line_number":132,"context_line":"to find a definition which matches the notification\u0027s event_type.  That"},{"line_number":133,"context_line":"definition will be used to generate the Event. The reverse ordering is done"},{"line_number":134,"context_line":"because it is common to want the have a more general wildcarded definition"},{"line_number":135,"context_line":"(such as \"compute.instance.*\" ) with a set of traits common to all of those"},{"line_number":136,"context_line":"events, with a few more specific event definitions (like"},{"line_number":137,"context_line":"\"compute.instance.exists\") afterward that have all of the above traits, plus"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F9z34%3D","line":134,"in_reply_to":"AAAATn%2F90v4%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Each event definition is a mapping with two keys (both required):"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"event_type"},{"line_number":148,"context_line":"    This is a list (or a string, which will be taken as a 1 element"},{"line_number":149,"context_line":"    list) of event_types this definition will handle. These can be"},{"line_number":150,"context_line":"    wildcarded with unix shell glob syntax. An exclusion listing"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F90vY%3D","line":147,"updated":"2013-12-05 15:58:00.000000000","message":"should we pluralise event_type if we\u0027re expecting/accepting a list (similar to how we define \u0027meters\u0027 and \u0027resources\u0027 in pipeline.yaml? if we fix this here, lets fix it in .yaml example...(and anywhere else)\n\nedit: i just noticed event_type is used in a lot of places. if the work to switch to event_types is not worth it, feel free to counter.","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Each event definition is a mapping with two keys (both required):"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"event_type"},{"line_number":148,"context_line":"    This is a list (or a string, which will be taken as a 1 element"},{"line_number":149,"context_line":"    list) of event_types this definition will handle. These can be"},{"line_number":150,"context_line":"    wildcarded with unix shell glob syntax. An exclusion listing"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F9z18%3D","line":147,"in_reply_to":"AAAATn%2F90vY%3D","updated":"2013-12-05 17:23:10.000000000","message":"I went back and forth a bit on this. It *can* be a list, or it can be a single string.  As it turns out, because the the types can be wildcarded, the single string is actually the more common case, so I went with the singular. \n(And yes, it\u0027s referenced *everywhere*. :-\u003e )","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"5bfde6d64b05c046583e056d27f53385cdec52a6","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Each event definition is a mapping with two keys (both required):"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"event_type"},{"line_number":148,"context_line":"    This is a list (or a string, which will be taken as a 1 element"},{"line_number":149,"context_line":"    list) of event_types this definition will handle. These can be"},{"line_number":150,"context_line":"    wildcarded with unix shell glob syntax. An exclusion listing"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F9zrc%3D","line":147,"in_reply_to":"AAAATn%2F9z18%3D","updated":"2013-12-05 17:40:59.000000000","message":"cool. not a blocker for me.","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    multiple possible fields, the value for the trait will be derived"},{"line_number":171,"context_line":"    from the matching fields that exist and have a non-null values in"},{"line_number":172,"context_line":"    the notification. By default the value will be the first such field."},{"line_number":173,"context_line":"    (plugins can alter that, if they wish). This is nomally a string,"},{"line_number":174,"context_line":"    but, for convenience, it can be specified as a list of"},{"line_number":175,"context_line":"    specifications, which will match the fields for all of them. (See"},{"line_number":176,"context_line":"    `Field Path Specifications`_ for more info on this syntax.)"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F90uw%3D","line":173,"updated":"2013-12-05 15:58:00.000000000","message":"s/nomally/normally/","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    multiple possible fields, the value for the trait will be derived"},{"line_number":171,"context_line":"    from the matching fields that exist and have a non-null values in"},{"line_number":172,"context_line":"    the notification. By default the value will be the first such field."},{"line_number":173,"context_line":"    (plugins can alter that, if they wish). This is nomally a string,"},{"line_number":174,"context_line":"    but, for convenience, it can be specified as a list of"},{"line_number":175,"context_line":"    specifications, which will match the fields for all of them. (See"},{"line_number":176,"context_line":"    `Field Path Specifications`_ for more info on this syntax.)"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F9z1M%3D","line":173,"in_reply_to":"AAAATn%2F90uw%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    `Field Path Specifications`_ for more info on this syntax.)"},{"line_number":177,"context_line":"plugin"},{"line_number":178,"context_line":"    (optional) This is a mapping (For convenience, this value can also"},{"line_number":179,"context_line":"    be specified as a string, which is interpreted as a the name of a"},{"line_number":180,"context_line":"    plugin, to be loaded with no parameters) with the following keys"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    name"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F90uo%3D","line":179,"updated":"2013-12-05 15:58:00.000000000","message":"s/as a the/as the/","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    `Field Path Specifications`_ for more info on this syntax.)"},{"line_number":177,"context_line":"plugin"},{"line_number":178,"context_line":"    (optional) This is a mapping (For convenience, this value can also"},{"line_number":179,"context_line":"    be specified as a string, which is interpreted as a the name of a"},{"line_number":180,"context_line":"    plugin, to be loaded with no parameters) with the following keys"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    name"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F9z0k%3D","line":179,"in_reply_to":"AAAATn%2F90uo%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d2e6a379a392dcc7fef9841bc29ac52ca07ba396","unresolved":false,"context_lines":[{"line_number":177,"context_line":"plugin"},{"line_number":178,"context_line":"    (optional) This is a mapping (For convenience, this value can also"},{"line_number":179,"context_line":"    be specified as a string, which is interpreted as a the name of a"},{"line_number":180,"context_line":"    plugin, to be loaded with no parameters) with the following keys"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    name"},{"line_number":183,"context_line":"        (string) name of a plugin to load"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F90uA%3D","line":180,"updated":"2013-12-05 15:58:00.000000000","message":"no comma after plugin","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":236,"name":"Monsyne Dragon","email":"mdragon@rackspace.com","username":"mdragon"},"change_message_id":"3a100b10e73dcec96227a9084fadd3ca7854a242","unresolved":false,"context_lines":[{"line_number":177,"context_line":"plugin"},{"line_number":178,"context_line":"    (optional) This is a mapping (For convenience, this value can also"},{"line_number":179,"context_line":"    be specified as a string, which is interpreted as a the name of a"},{"line_number":180,"context_line":"    plugin, to be loaded with no parameters) with the following keys"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    name"},{"line_number":183,"context_line":"        (string) name of a plugin to load"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAATn%2F9z0g%3D","line":180,"in_reply_to":"AAAATn%2F90uA%3D","updated":"2013-12-05 17:23:10.000000000","message":"Done","commit_id":"336245f0d4fbd495ce7e0bec68d1dffc5e860ad1"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"3335c08f8c0043f568bb8825b054956887540457","unresolved":false,"context_lines":[{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Events are primarily created via the notifications system in OpenStack."},{"line_number":64,"context_line":"OpenStack systems, such as Nova, Glance, Neutron, etc. will emit"},{"line_number":65,"context_line":"notifications in a JSON format to message queue when some notable action is"},{"line_number":66,"context_line":"taken by that system. Ceilometer will consume such notifications from the"},{"line_number":67,"context_line":"message queue, and process them."}],"source_content_type":"text/x-rst","patch_set":15,"id":"AAAATn%2F9c2k%3D","line":64,"updated":"2013-12-11 12:09:44.000000000","message":"s/OpenStack systems/OpenStack services/","commit_id":"03ce87b30025d5a871f0ae6d1f19d965378ba16b"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"3335c08f8c0043f568bb8825b054956887540457","unresolved":false,"context_lines":[{"line_number":105,"context_line":"changed by setting the flag drop_unmatched_notifications_ in the"},{"line_number":106,"context_line":"ceilometer.conf file. If this is set to True, then any notifications"},{"line_number":107,"context_line":"that don\u0027t have events defined for them in the file will be dropped."},{"line_number":108,"context_line":"This can be what you want, the notification system is quite chatty by design"},{"line_number":109,"context_line":"(notifications philosophy is \"tell us everything, we\u0027ll ignore what we don\u0027t"},{"line_number":110,"context_line":"need\"), so you may want to ignore the noisier ones if you don\u0027t use them."},{"line_number":111,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"AAAATn%2F9c1o%3D","line":108,"updated":"2013-12-11 12:09:44.000000000","message":"s/This can be what you want/This may be what you want/","commit_id":"03ce87b30025d5a871f0ae6d1f19d965378ba16b"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"3335c08f8c0043f568bb8825b054956887540457","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    specifications, which will match the fields for all of them. (See"},{"line_number":176,"context_line":"    `Field Path Specifications`_ for more info on this syntax.)"},{"line_number":177,"context_line":"plugin"},{"line_number":178,"context_line":"    (optional) This is a mapping (For convenience, this value can also"},{"line_number":179,"context_line":"    be specified as a string, which is interpreted as the name of a"},{"line_number":180,"context_line":"    plugin to be loaded with no parameters) with the following keys"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"AAAATn%2F9c1E%3D","line":178,"updated":"2013-12-11 12:09:44.000000000","message":"s/For convenience/for convenience/","commit_id":"03ce87b30025d5a871f0ae6d1f19d965378ba16b"}]}
