)]}'
{"ceilometer/compute/notifications.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ceec2d334debcc841ec0154c276fc02f20c7d9ad","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @staticmethod"},{"line_number":57,"context_line":"    def get_event_types():"},{"line_number":58,"context_line":"        return [\u0027scheduler.run_instance.end\u0027]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def process_notification(self, message):"},{"line_number":61,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FaUU%3D","line":58,"updated":"2013-05-10 14:28:31.000000000","message":"Splitting hairs here, but would the scheduler.run_instance.scheduled notification be marginally more appropriate to consume here (in the sense that this notification is emitted when the scheduling decision is made, as opposed to when the scheduler run_instance logic is complete).","commit_id":"adfc96a5698330999e7cd6120c17cf6ae8529c15"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"dfe3bbfee54f37f8ae1b537b822bee29d75ed9c5","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @staticmethod"},{"line_number":57,"context_line":"    def get_event_types():"},{"line_number":58,"context_line":"        return [\u0027scheduler.run_instance.end\u0027]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def process_notification(self, message):"},{"line_number":61,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FaRI%3D","line":58,"in_reply_to":"AAAAOn%2F%2FaUU%3D","updated":"2013-05-10 14:41:36.000000000","message":"I hesitated actually.\n\nMy arguments for .end:\n-  we always used .end events to be sure nothing bad arrives and we really meters things that happened, not thing that saw an error just after (which could happen between .scheduled and .end)\n- IIRC .scheduled is only emitted by the filter scheduler","commit_id":"adfc96a5698330999e7cd6120c17cf6ae8529c15"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c0839d27318e0d11259995bf15a2176c5da015a6","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                    message[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027host\u0027],"},{"line_number":77,"context_line":"                    \u0027weight\u0027:"},{"line_number":78,"context_line":"                    message[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027weight\u0027],"},{"line_number":79,"context_line":"                    \u0027request_spec\u0027: message[\u0027payload\u0027][\u0027request_spec\u0027]"},{"line_number":80,"context_line":"                }),"},{"line_number":81,"context_line":"        ]"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FaEc%3D","line":79,"updated":"2013-05-10 16:10:35.000000000","message":"i\u0027ve seen notification_to_metadata and metadata_keys used a lot to handle this. should we be using this here for consistency?","commit_id":"adfc96a5698330999e7cd6120c17cf6ae8529c15"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d43e43cda450406a6141f6b81b435edbf50911b8","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                    message[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027host\u0027],"},{"line_number":77,"context_line":"                    \u0027weight\u0027:"},{"line_number":78,"context_line":"                    message[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027weight\u0027],"},{"line_number":79,"context_line":"                    \u0027request_spec\u0027: message[\u0027payload\u0027][\u0027request_spec\u0027]"},{"line_number":80,"context_line":"                }),"},{"line_number":81,"context_line":"        ]"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FXnY%3D","line":79,"in_reply_to":"AAAAOn%2F%2FaEc%3D","updated":"2013-05-13 12:52:16.000000000","message":"Yeah, you\u0027re right.","commit_id":"adfc96a5698330999e7cd6120c17cf6ae8529c15"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"cd7d723df4b3f1f82c1d06d2311e7f473dbb743b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def notification_to_metadata(self, event):"},{"line_number":63,"context_line":"        metadata \u003d super(InstanceScheduled,"},{"line_number":64,"context_line":"                         self).notification_to_metadata(event)"},{"line_number":65,"context_line":"        metadata[\u0027weighted_host\u0027] \u003d event[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027host\u0027]"},{"line_number":66,"context_line":"        metadata[\u0027weight\u0027] \u003d event[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027weight\u0027]"},{"line_number":67,"context_line":"        return metadata"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOn%2F%2FWqo%3D","line":65,"updated":"2013-05-13 20:33:04.000000000","message":"Is it going to be confusing to have the metadata in the sample named similar to the payload key, but containing a different value?","commit_id":"9ec7ab5cfccc36bb54a7051516ec62f8d3713e14"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"f76792010f4aafef2a91e95fc1f0c3b20212d0d9","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def notification_to_metadata(self, event):"},{"line_number":63,"context_line":"        metadata \u003d super(InstanceScheduled,"},{"line_number":64,"context_line":"                         self).notification_to_metadata(event)"},{"line_number":65,"context_line":"        metadata[\u0027weighted_host\u0027] \u003d event[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027host\u0027]"},{"line_number":66,"context_line":"        metadata[\u0027weight\u0027] \u003d event[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027weight\u0027]"},{"line_number":67,"context_line":"        return metadata"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F%2BKg%3D","line":65,"in_reply_to":"AAAAO3%2F%2F8bM%3D","updated":"2013-05-17 14:32:19.000000000","message":"I don\u0027t mind moving it up one level, but I\u0027m worried that using the same name, \"weighted_host\", to mean different things in different places may be confusing. Maybe I\u0027m overly concerned.","commit_id":"9ec7ab5cfccc36bb54a7051516ec62f8d3713e14"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"9ad87f5b5a2536af3bccad95911b77d71891be52","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def notification_to_metadata(self, event):"},{"line_number":63,"context_line":"        metadata \u003d super(InstanceScheduled,"},{"line_number":64,"context_line":"                         self).notification_to_metadata(event)"},{"line_number":65,"context_line":"        metadata[\u0027weighted_host\u0027] \u003d event[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027host\u0027]"},{"line_number":66,"context_line":"        metadata[\u0027weight\u0027] \u003d event[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027weight\u0027]"},{"line_number":67,"context_line":"        return metadata"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F%2BXQ%3D","line":65,"in_reply_to":"AAAAO3%2F%2F8bM%3D","updated":"2013-05-17 13:25:53.000000000","message":"out of curiousity, why can\u0027t we metadata query if we use \u0027host\u0027 instead of \u0027weighted_host\u0027?","commit_id":"9ec7ab5cfccc36bb54a7051516ec62f8d3713e14"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ddafb94eb9b431fd26581ae73f4659fbbd2b34c2","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def notification_to_metadata(self, event):"},{"line_number":63,"context_line":"        metadata \u003d super(InstanceScheduled,"},{"line_number":64,"context_line":"                         self).notification_to_metadata(event)"},{"line_number":65,"context_line":"        metadata[\u0027weighted_host\u0027] \u003d event[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027host\u0027]"},{"line_number":66,"context_line":"        metadata[\u0027weight\u0027] \u003d event[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027weight\u0027]"},{"line_number":67,"context_line":"        return metadata"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAO3%2F%2F8bM%3D","line":65,"in_reply_to":"AAAAOn%2F%2FWqo%3D","updated":"2013-05-16 15:25:28.000000000","message":"But it\u0027s mandatory if we want to do metadata querying via the API.","commit_id":"9ec7ab5cfccc36bb54a7051516ec62f8d3713e14"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"c7fdd5d60c4b2e3cd3796bd9dc5ae47a457de379","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        ]"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class _Base(ComputeNotificationBase):"},{"line_number":88,"context_line":"    \"\"\"Convert compute.instance.* notifications into Counters"},{"line_number":89,"context_line":"    \"\"\""},{"line_number":90,"context_line":"    metadata_keys \u003d instance.INSTANCE_PROPERTIES"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOn%2F%2FWP0%3D","line":87,"updated":"2013-05-14 01:11:15.000000000","message":"how about rename this base class?","commit_id":"9ec7ab5cfccc36bb54a7051516ec62f8d3713e14"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ddafb94eb9b431fd26581ae73f4659fbbd2b34c2","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        ]"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class _Base(ComputeNotificationBase):"},{"line_number":88,"context_line":"    \"\"\"Convert compute.instance.* notifications into Counters"},{"line_number":89,"context_line":"    \"\"\""},{"line_number":90,"context_line":"    metadata_keys \u003d instance.INSTANCE_PROPERTIES"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAO3%2F%2F8bI%3D","line":87,"in_reply_to":"AAAAOn%2F%2FWP0%3D","updated":"2013-05-16 15:25:28.000000000","message":"Done","commit_id":"9ec7ab5cfccc36bb54a7051516ec62f8d3713e14"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"8924ecd138cf1be28a08593a3ba83a024174e92a","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def notification_to_metadata(self, event):"},{"line_number":63,"context_line":"        metadata \u003d super(InstanceScheduled,"},{"line_number":64,"context_line":"                         self).notification_to_metadata(event)"},{"line_number":65,"context_line":"        metadata[\u0027weighted_host\u0027] \u003d event[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027host\u0027]"},{"line_number":66,"context_line":"        metadata[\u0027weight\u0027] \u003d event[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027weight\u0027]"},{"line_number":67,"context_line":"        return metadata"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2BJg%3D","line":65,"updated":"2013-05-17 14:37:39.000000000","message":"How about if we standardize on the way we flatten nested dictionaries to use recursive_keypairs from ceilometer/publisher/meter.py?","commit_id":"bb332cd8b38f0fabc285b34199b7a0d02fb731a1"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"98a7fe8a12c66033fddd2250569205f775849b6b","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @staticmethod"},{"line_number":60,"context_line":"    def get_event_types():"},{"line_number":61,"context_line":"        return [\u0027scheduler.run_instance.end\u0027]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def notification_to_metadata(self, event):"},{"line_number":64,"context_line":"        metadata \u003d super(InstanceScheduled,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2F9uc%3D","line":61,"updated":"2013-05-17 16:33:38.000000000","message":"I think you want scheduler.run_instance.scheduled which is generated 1 per instance and will have the right host/weight stuff in it. scheduler.run_instance_end is generated when all the instances have been allocated.","commit_id":"795a57fa25c20a3278c19b98afcea33bc1c86796"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"4cb73afae935bb1629d88d51e309dfaf0190282c","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @staticmethod"},{"line_number":60,"context_line":"    def get_event_types():"},{"line_number":61,"context_line":"        return [\u0027scheduler.run_instance.end\u0027]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def notification_to_metadata(self, event):"},{"line_number":64,"context_line":"        metadata \u003d super(InstanceScheduled,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2F3yY%3D","line":61,"in_reply_to":"AAAAPH%2F%2F9uc%3D","updated":"2013-05-21 09:20:53.000000000","message":"Good point, I didn\u0027t notice you could schedule multiple instance at once. Changed.","commit_id":"795a57fa25c20a3278c19b98afcea33bc1c86796"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"59e3be12061a6936b4dbc1adb3d28b1dd32b1acb","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def get_event_types():"},{"line_number":61,"context_line":"        return [\u0027scheduler.run_instance.scheduled\u0027]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def notification_to_metadata(self, event):"},{"line_number":64,"context_line":"        metadata \u003d super(InstanceScheduled,"},{"line_number":65,"context_line":"                         self).notification_to_metadata(event)"},{"line_number":66,"context_line":"        metadata[\u0027weighted_host\u0027] \u003d event[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F3K0%3D","line":63,"updated":"2013-05-21 14:03:44.000000000","message":"this function can be dropped since because of switch to use recursive_keypairs","commit_id":"ddc37e6e9abd018405beea72576e759297318879"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"bfa98e60a380da83b13f671ba0f2f141a456e94d","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def get_event_types():"},{"line_number":61,"context_line":"        return [\u0027scheduler.run_instance.scheduled\u0027]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def notification_to_metadata(self, event):"},{"line_number":64,"context_line":"        metadata \u003d super(InstanceScheduled,"},{"line_number":65,"context_line":"                         self).notification_to_metadata(event)"},{"line_number":66,"context_line":"        metadata[\u0027weighted_host\u0027] \u003d event[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FyoY%3D","line":63,"in_reply_to":"AAAAPH%2F%2F3K0%3D","updated":"2013-05-22 22:40:15.000000000","message":"I\u0027m OK with going through all of the notification handlers and replacing their metadata functions with one that uses recursive_keypairs, and I think we can do that in a separate change.","commit_id":"ddc37e6e9abd018405beea72576e759297318879"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b2ca898d8784f78f98fa69c53672967550fc9e16","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def get_event_types():"},{"line_number":61,"context_line":"        return [\u0027scheduler.run_instance.scheduled\u0027]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def notification_to_metadata(self, event):"},{"line_number":64,"context_line":"        metadata \u003d super(InstanceScheduled,"},{"line_number":65,"context_line":"                         self).notification_to_metadata(event)"},{"line_number":66,"context_line":"        metadata[\u0027weighted_host\u0027] \u003d event[\u0027payload\u0027][\u0027weighted_host\u0027][\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FyRQ%3D","line":63,"in_reply_to":"AAAAPH%2F%2FyoY%3D","updated":"2013-05-23 02:37:34.000000000","message":"works for me.","commit_id":"ddc37e6e9abd018405beea72576e759297318879"}],"tests/compute/test_notifications.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ceec2d334debcc841ec0154c276fc02f20c7d9ad","unresolved":false,"context_lines":[{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        counters \u003d ic.process_notification(INSTANCE_SCHEDULED)"},{"line_number":566,"context_line":"        self.assertEqual(len(counters), 1)"},{"line_number":567,"context_line":"        names \u003d [c.name for c in counters]"},{"line_number":568,"context_line":"        self.assertEqual(names, [\u0027instance.scheduled\u0027])"},{"line_number":569,"context_line":"        rid \u003d [c.resource_id for c in counters]"},{"line_number":570,"context_line":"        self.assertEqual(rid, [\u0027fake-uuid1-1\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FaT8%3D","line":567,"updated":"2013-05-10 14:28:31.000000000","message":"Do we need the list comprehension, given that the counters list has been asserted to have length 1?","commit_id":"adfc96a5698330999e7cd6120c17cf6ae8529c15"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"dfe3bbfee54f37f8ae1b537b822bee29d75ed9c5","unresolved":false,"context_lines":[{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        counters \u003d ic.process_notification(INSTANCE_SCHEDULED)"},{"line_number":566,"context_line":"        self.assertEqual(len(counters), 1)"},{"line_number":567,"context_line":"        names \u003d [c.name for c in counters]"},{"line_number":568,"context_line":"        self.assertEqual(names, [\u0027instance.scheduled\u0027])"},{"line_number":569,"context_line":"        rid \u003d [c.resource_id for c in counters]"},{"line_number":570,"context_line":"        self.assertEqual(rid, [\u0027fake-uuid1-1\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FaRA%3D","line":567,"in_reply_to":"AAAAOn%2F%2FaT8%3D","updated":"2013-05-10 14:41:36.000000000","message":"We will when we\u0027ll return a second counter ;)","commit_id":"adfc96a5698330999e7cd6120c17cf6ae8529c15"}]}
