)]}'
{"aodh/notifier/zaqar.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c6962e44ea4b4c432eeeac3e83133f8d54da44c4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        endpoint \u003d None"},{"line_number":47,"context_line":"        try:"},{"line_number":48,"context_line":"            ks_client \u003d keystone_client.get_client(self.conf)"},{"line_number":49,"context_line":"            endpoint \u003d ks_client.service_catalog.url_for("},{"line_number":50,"context_line":"                service_type\u003dcfg.CONF.service_types.zaqar,"},{"line_number":51,"context_line":"                endpoint_type\u003dself.conf.service_credentials.os_endpoint_type)"},{"line_number":52,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_fdd51642","line":49,"updated":"2016-01-07 09:16:15.000000000","message":"you can return here.","commit_id":"549c6f26ad995dc11be24341faa14f19c0bfefc6"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c6962e44ea4b4c432eeeac3e83133f8d54da44c4","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                service_type\u003dcfg.CONF.service_types.zaqar,"},{"line_number":51,"context_line":"                endpoint_type\u003dself.conf.service_credentials.os_endpoint_type)"},{"line_number":52,"context_line":"        except Exception:"},{"line_number":53,"context_line":"            LOG.debug(\"Zaqar endpoint not found\")"},{"line_number":54,"context_line":"        return endpoint"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_3de16e2a","line":53,"updated":"2016-01-07 09:16:15.000000000","message":"It would be better to really inform the admin that he is offering zaqar:// and that people are using it but that it does not work. so log.error or .warn at least.","commit_id":"549c6f26ad995dc11be24341faa14f19c0bfefc6"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c6962e44ea4b4c432eeeac3e83133f8d54da44c4","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        }"},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            from zaqarclient.queues import client as zaqar_client"},{"line_number":73,"context_line":"            _zclient \u003d zaqar_client.Client(self._get_endpoint(),"},{"line_number":74,"context_line":"                                           version\u003d1.1, conf\u003dparams)"},{"line_number":75,"context_line":"        except Exception as e:"},{"line_number":76,"context_line":"            LOG.exception(\"Failed to connect to Zaqar service: %s\", e)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_5dfc62b7","line":73,"updated":"2016-01-07 09:16:15.000000000","message":"do we need to create a new client each time, can\u0027t we just create one in __init__ and be done with it?","commit_id":"549c6f26ad995dc11be24341faa14f19c0bfefc6"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c6962e44ea4b4c432eeeac3e83133f8d54da44c4","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            _zclient \u003d zaqar_client.Client(self._get_endpoint(),"},{"line_number":74,"context_line":"                                           version\u003d1.1, conf\u003dparams)"},{"line_number":75,"context_line":"        except Exception as e:"},{"line_number":76,"context_line":"            LOG.exception(\"Failed to connect to Zaqar service: %s\", e)"},{"line_number":77,"context_line":"            raise"},{"line_number":78,"context_line":"        return _zclient"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_dd6052a7","line":76,"updated":"2016-01-07 09:16:15.000000000","message":"don\u0027t use LOG.exception, use LOG.\u003clevel\u003e with exc_info\u003dTrue. But in this case, I am not sure we care about the back trace. Just the original exception is enough.","commit_id":"549c6f26ad995dc11be24341faa14f19c0bfefc6"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c6962e44ea4b4c432eeeac3e83133f8d54da44c4","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                                           version\u003d1.1, conf\u003dparams)"},{"line_number":75,"context_line":"        except Exception as e:"},{"line_number":76,"context_line":"            LOG.exception(\"Failed to connect to Zaqar service: %s\", e)"},{"line_number":77,"context_line":"            raise"},{"line_number":78,"context_line":"        return _zclient"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def notify(self, action, alarm_id, alarm_name, severity, previous,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_5d754261","line":77,"updated":"2016-01-07 09:16:15.000000000","message":"I guess it\u0027s debug code :)","commit_id":"549c6f26ad995dc11be24341faa14f19c0bfefc6"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c6962e44ea4b4c432eeeac3e83133f8d54da44c4","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            queue \u003d self.client.queue(self.queue_name)"},{"line_number":100,"context_line":"            queue.post(message)"},{"line_number":101,"context_line":"        except Exception:"},{"line_number":102,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_7d704672","line":102,"updated":"2016-01-07 09:16:15.000000000","message":"I guess it\u0027s debug code ;)","commit_id":"549c6f26ad995dc11be24341faa14f19c0bfefc6"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"cd0b619143519eadbbbec58775818ad5ac4df587","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                service_type\u003dcfg.CONF.service_types.zaqar,"},{"line_number":51,"context_line":"                endpoint_type\u003dself.conf.service_credentials.os_endpoint_type)"},{"line_number":52,"context_line":"        except Exception:"},{"line_number":53,"context_line":"            LOG.warn(\"Aodh was configured to use zaqar:// action,\""},{"line_number":54,"context_line":"                     \" but Zaqar endpoint could not be found in keystone\""},{"line_number":55,"context_line":"                     \" service catalog.\")"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_f527ad60","line":53,"updated":"2016-01-11 19:11:53.000000000","message":"LW","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"1decbdd72c19ffca0945bac4cd65694e6c4d1ae3","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                endpoint_type\u003dself.conf.service_credentials.os_endpoint_type)"},{"line_number":52,"context_line":"        except Exception:"},{"line_number":53,"context_line":"            LOG.warn(\"Aodh was configured to use zaqar:// action,\""},{"line_number":54,"context_line":"                     \" but Zaqar endpoint could not be found in keystone\""},{"line_number":55,"context_line":"                     \" service catalog.\")"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def get_zaqar_client(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_93813a4d","line":54,"updated":"2016-01-12 16:34:05.000000000","message":"Keystone","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"cd0b619143519eadbbbec58775818ad5ac4df587","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            }"},{"line_number":70,"context_line":"        }"},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            from zaqarclient.queues import client as zaqar_client"},{"line_number":73,"context_line":"            return zaqar_client.Client(self._get_endpoint(),"},{"line_number":74,"context_line":"                                       version\u003d1.1, conf\u003dparams)"},{"line_number":75,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_5500f9aa","line":72,"updated":"2016-01-11 19:11:53.000000000","message":"why do we import this here?","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":6924,"name":"Pradeep Kilambi","email":"pkilambi@redhat.com","username":"pkilambi"},"change_message_id":"5d749436e7a418a8b00a4dbcfa467858096db84a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            }"},{"line_number":70,"context_line":"        }"},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            from zaqarclient.queues import client as zaqar_client"},{"line_number":73,"context_line":"            return zaqar_client.Client(self._get_endpoint(),"},{"line_number":74,"context_line":"                                       version\u003d1.1, conf\u003dparams)"},{"line_number":75,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_9503d141","line":72,"in_reply_to":"fa69d971_5500f9aa","updated":"2016-01-11 19:39:19.000000000","message":"since this is an optional dependency, let it import when the client is initiated otherwise it will fail when stevedore extension is loaded.","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"8b9250fd3f564fb1107cdc9a82d6ba5f75da5d7a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            }"},{"line_number":70,"context_line":"        }"},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            from zaqarclient.queues import client as zaqar_client"},{"line_number":73,"context_line":"            return zaqar_client.Client(self._get_endpoint(),"},{"line_number":74,"context_line":"                                       version\u003d1.1, conf\u003dparams)"},{"line_number":75,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_a2dfb60b","line":72,"in_reply_to":"fa69d971_9503d141","updated":"2016-01-11 20:05:32.000000000","message":"this is loaded even if it\u0027s not used?","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":6924,"name":"Pradeep Kilambi","email":"pkilambi@redhat.com","username":"pkilambi"},"change_message_id":"b9f8f5d37dba8284bbd19787ce497d3362fb87c8","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            }"},{"line_number":70,"context_line":"        }"},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            from zaqarclient.queues import client as zaqar_client"},{"line_number":73,"context_line":"            return zaqar_client.Client(self._get_endpoint(),"},{"line_number":74,"context_line":"                                       version\u003d1.1, conf\u003dparams)"},{"line_number":75,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_71c8aaa8","line":72,"in_reply_to":"fa69d971_a2dfb60b","updated":"2016-01-11 22:05:57.000000000","message":"yeah the tests do.","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"cd0b619143519eadbbbec58775818ad5ac4df587","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            return zaqar_client.Client(self._get_endpoint(),"},{"line_number":74,"context_line":"                                       version\u003d1.1, conf\u003dparams)"},{"line_number":75,"context_line":"        except Exception:"},{"line_number":76,"context_line":"            LOG.error(_(\"Failed to connect to Zaqar service \"), exc_info\u003dTrue)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def notify(self, action, alarm_id, alarm_name, severity, previous,"},{"line_number":79,"context_line":"               current, reason, reason_data, headers\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_d522a953","line":76,"updated":"2016-01-11 19:11:53.000000000","message":"LE","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"cd0b619143519eadbbbec58775818ad5ac4df587","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def notify(self, action, alarm_id, alarm_name, severity, previous,"},{"line_number":79,"context_line":"               current, reason, reason_data, headers\u003dNone):"},{"line_number":80,"context_line":"        LOG.info(_("},{"line_number":81,"context_line":"            \"Notifying alarm %(alarm_name)s %(alarm_id)s of %(severity)s \""},{"line_number":82,"context_line":"            \"priority from %(previous)s to %(current)s with action %(action)s\""},{"line_number":83,"context_line":"            \" because %(reason)s.\") % ({\u0027alarm_name\u0027: alarm_name,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_9521914f","line":80,"updated":"2016-01-11 19:11:53.000000000","message":"LI","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"1decbdd72c19ffca0945bac4cd65694e6c4d1ae3","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                \u0027current\u0027: current, \u0027reason\u0027: reason,"},{"line_number":93,"context_line":"                \u0027reason_data\u0027: reason_data}"},{"line_number":94,"context_line":"        message \u003d dict(body\u003dbody)"},{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            self.queue_name \u003d self.queue_name % alarm_id"},{"line_number":97,"context_line":"            queue \u003d self.client.queue(self.queue_name)"},{"line_number":98,"context_line":"            queue.post(message)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_1318ea1c","line":95,"updated":"2016-01-12 16:34:05.000000000","message":"This try is to wide","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"1665e74422fd2a7dc0849dede95c902e4dd435e5","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                \u0027reason_data\u0027: reason_data}"},{"line_number":94,"context_line":"        message \u003d dict(body\u003dbody)"},{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            self.queue_name \u003d self.queue_name % alarm_id"},{"line_number":97,"context_line":"            queue \u003d self.client.queue(self.queue_name)"},{"line_number":98,"context_line":"            queue.post(message)"},{"line_number":99,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_932e948a","line":96,"updated":"2016-01-11 16:21:48.000000000","message":"This override the self.queue_name, so next notify call does not send the notification to the good queue.\n\nWhat the idea for the consumer part ? One queue by alarm looks weird to me, but I have no idea of the use case ? \n\nWhy not just allow to configure the queue name with the alarm attributes to be able to do thing like \"aodh-%{severity}s-%{current}s\" ?","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"cd0b619143519eadbbbec58775818ad5ac4df587","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                \u0027reason_data\u0027: reason_data}"},{"line_number":94,"context_line":"        message \u003d dict(body\u003dbody)"},{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            self.queue_name \u003d self.queue_name % alarm_id"},{"line_number":97,"context_line":"            queue \u003d self.client.queue(self.queue_name)"},{"line_number":98,"context_line":"            queue.post(message)"},{"line_number":99,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_b57a9522","line":96,"in_reply_to":"fa69d971_3396c8f0","updated":"2016-01-11 19:11:53.000000000","message":"shouldn\u0027t it be by a configurable action then? ie.zaqar://?topic\u003d\u003cok_action_queue\u003e\n\nand then all the zaqar would only need to know about specific action queues and not every single alarm.","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"1decbdd72c19ffca0945bac4cd65694e6c4d1ae3","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                \u0027reason_data\u0027: reason_data}"},{"line_number":94,"context_line":"        message \u003d dict(body\u003dbody)"},{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            self.queue_name \u003d self.queue_name % alarm_id"},{"line_number":97,"context_line":"            queue \u003d self.client.queue(self.queue_name)"},{"line_number":98,"context_line":"            queue.post(message)"},{"line_number":99,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_d3bfb2ce","line":96,"in_reply_to":"fa69d971_50eec7ed","updated":"2016-01-12 16:34:05.000000000","message":"Good idea","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":6924,"name":"Pradeep Kilambi","email":"pkilambi@redhat.com","username":"pkilambi"},"change_message_id":"a80cad3d42a1f4fa19106581a30a8e9a84fde5cc","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                \u0027reason_data\u0027: reason_data}"},{"line_number":94,"context_line":"        message \u003d dict(body\u003dbody)"},{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            self.queue_name \u003d self.queue_name % alarm_id"},{"line_number":97,"context_line":"            queue \u003d self.client.queue(self.queue_name)"},{"line_number":98,"context_line":"            queue.post(message)"},{"line_number":99,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_3396c8f0","line":96,"in_reply_to":"fa69d971_932e948a","updated":"2016-01-11 16:32:49.000000000","message":"So the way it works today in zaqar is, subscriptions are on the queue. So say we want to add an email subscription for user-a@example.com on alarm-a and user-b@example.com on alarm-b, they will need two separate queues. If its a single queue, the notification will be sent to both user a \u0026 b regardless of which alarm has triggered. Hence this model. \n\nI chatted with zaqar folks about this and currently only way to achieve this is with separate queues and they are positive its scalable on their end :)\n\nI\u0027m fine with eventually making the queues configurable when the action is created, but they will still be separate queues. For now based on how zaqar handles this this seemed to make most sense. What do you think?","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":6924,"name":"Pradeep Kilambi","email":"pkilambi@redhat.com","username":"pkilambi"},"change_message_id":"5d749436e7a418a8b00a4dbcfa467858096db84a","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                \u0027reason_data\u0027: reason_data}"},{"line_number":94,"context_line":"        message \u003d dict(body\u003dbody)"},{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            self.queue_name \u003d self.queue_name % alarm_id"},{"line_number":97,"context_line":"            queue \u003d self.client.queue(self.queue_name)"},{"line_number":98,"context_line":"            queue.post(message)"},{"line_number":99,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_50eec7ed","line":96,"in_reply_to":"fa69d971_b57a9522","updated":"2016-01-11 19:39:19.000000000","message":"i\u0027m cool with that. Will add that in.","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"cd0b619143519eadbbbec58775818ad5ac4df587","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            queue \u003d self.client.queue(self.queue_name)"},{"line_number":98,"context_line":"            queue.post(message)"},{"line_number":99,"context_line":"        except Exception:"},{"line_number":100,"context_line":"            LOG.error(_(\"Failed to post message to zaqar queue\"),"},{"line_number":101,"context_line":"                      exc_info\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_f5ffad63","line":100,"updated":"2016-01-11 19:11:53.000000000","message":"LE","commit_id":"0adad58d9d6147fa3d2097ea0fee75dfb6a686ee"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"fa4bd28732a743658a1887e341c28eea3f927a96","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                service_type\u003dcfg.CONF.service_types.zaqar,"},{"line_number":51,"context_line":"                endpoint_type\u003dself.conf.service_credentials.os_endpoint_type)"},{"line_number":52,"context_line":"        except Exception:"},{"line_number":53,"context_line":"            LOG.warn(_LW(\"Aodh was configured to use zaqar:// action,\""},{"line_number":54,"context_line":"                         \" but Zaqar endpoint could not be found in keystone\""},{"line_number":55,"context_line":"                         \" service catalog.\"))"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_73b046de","line":53,"updated":"2016-01-12 16:36:15.000000000","message":"I\u0027d pick error","commit_id":"7edb7fdbc15af69bde5d1d9cb502ab54668aed7e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"fa4bd28732a743658a1887e341c28eea3f927a96","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        message \u003d dict(body\u003dbody)"},{"line_number":96,"context_line":"        options \u003d urlparse.parse_qs(action.query)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            self.queue_name \u003d options.get(\u0027topic\u0027)[-1]"},{"line_number":100,"context_line":"            queue \u003d self.client.queue(self.queue_name)"},{"line_number":101,"context_line":"            queue.post(message)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_33964e4d","line":98,"updated":"2016-01-12 16:36:15.000000000","message":"This try is too wide IMHO","commit_id":"7edb7fdbc15af69bde5d1d9cb502ab54668aed7e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"fa4bd28732a743658a1887e341c28eea3f927a96","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        options \u003d urlparse.parse_qs(action.query)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            self.queue_name \u003d options.get(\u0027topic\u0027)[-1]"},{"line_number":100,"context_line":"            queue \u003d self.client.queue(self.queue_name)"},{"line_number":101,"context_line":"            queue.post(message)"},{"line_number":102,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_93ecdac8","line":99,"updated":"2016-01-12 16:36:15.000000000","message":"no need for self.","commit_id":"7edb7fdbc15af69bde5d1d9cb502ab54668aed7e"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"ee4761cd57f0ffdda4eb3968cccabc4543d77746","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        self.notify_zaqar(action, message)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def notify_zaqar(self, action, message):"},{"line_number":101,"context_line":"        self.queue_info \u003d urlparse.parse_qs(action.query)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        try:"},{"line_number":104,"context_line":"            queue_name \u003d self.queue_info.get(\u0027topic\u0027)[-1]"}],"source_content_type":"text/x-python","patch_set":7,"id":"da6ed579_bcaed42b","line":101,"updated":"2016-01-15 14:00:42.000000000","message":"Why store queue_info in self ?","commit_id":"2c49fcba9fa41ab673befd22de9d3808d9e2b13d"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"ee4761cd57f0ffdda4eb3968cccabc4543d77746","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                # add subscriber to the zaqar queue"},{"line_number":110,"context_line":"                subscription_data \u003d dict(subscriber\u003dsubscriber,"},{"line_number":111,"context_line":"                                         ttl\u003dself.queue_info.get(\u0027ttl\u0027, 3600))"},{"line_number":112,"context_line":"                self.client.subscription(self.queue_name,"},{"line_number":113,"context_line":"                                         **subscription_data)"},{"line_number":114,"context_line":"            # post the message to the queue"},{"line_number":115,"context_line":"            queue.post(message)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da6ed579_7a613cd2","line":112,"updated":"2016-01-15 14:00:42.000000000","message":"self.queue_name doesn\u0027t exists. The test should cover that but it doesn\u0027t.","commit_id":"2c49fcba9fa41ab673befd22de9d3808d9e2b13d"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"38f83694e0348e801c297248ffd4d95ec327acb1","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        queue_info \u003d urlparse.parse_qs(action.query)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        try:"},{"line_number":102,"context_line":"            queue_name \u003d queue_info.get(\u0027topic\u0027)[-1]"},{"line_number":103,"context_line":"            # create a queue in zaqar"},{"line_number":104,"context_line":"            queue \u003d self.client.queue(queue_name)"},{"line_number":105,"context_line":"            subscriber \u003d queue_info.get(\u0027subscriber\u0027, None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_67f2c571","line":102,"updated":"2016-01-18 01:43:47.000000000","message":"Since all the queues will be under the \u0027service\u0027 tenant, so if we don\u0027t name it very well, there maybe a conflict. That said, different use may use same \u0027topic\u0027 and as a result, the notification maybe posted to another user\u0027s queue. So I would suggest using user\u0027s tenant/project id as a prefix.","commit_id":"595701f32b636a95a527581e3bab72c56d66a285"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"8217f95f70b7b6f26751882b56e5464f07075b87","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        queue_info \u003d urlparse.parse_qs(action.query)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        try:"},{"line_number":102,"context_line":"            queue_name \u003d queue_info.get(\u0027topic\u0027)[-1]"},{"line_number":103,"context_line":"            # create a queue in zaqar"},{"line_number":104,"context_line":"            queue \u003d self.client.queue(queue_name)"},{"line_number":105,"context_line":"            subscriber \u003d queue_info.get(\u0027subscriber\u0027, None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_0873cd4e","line":102,"in_reply_to":"da6ed579_67f2c571","updated":"2016-01-18 09:20:51.000000000","message":"Good point. Isn\u0027t there a way to use trust like we do with Heat?","commit_id":"595701f32b636a95a527581e3bab72c56d66a285"},{"author":{"_account_id":6924,"name":"Pradeep Kilambi","email":"pkilambi@redhat.com","username":"pkilambi"},"change_message_id":"98d48cb65471ff52a957755720cee3e2c4a85cbc","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        queue_info \u003d urlparse.parse_qs(action.query)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        try:"},{"line_number":102,"context_line":"            queue_name \u003d queue_info.get(\u0027topic\u0027)[-1]"},{"line_number":103,"context_line":"            # create a queue in zaqar"},{"line_number":104,"context_line":"            queue \u003d self.client.queue(queue_name)"},{"line_number":105,"context_line":"            subscriber \u003d queue_info.get(\u0027subscriber\u0027, None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_ce204a4c","line":102,"in_reply_to":"da6ed579_67f2c571","updated":"2016-01-18 15:20:44.000000000","message":"I think thats a good idea. I\u0027ll add that in.","commit_id":"595701f32b636a95a527581e3bab72c56d66a285"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"06c3ad93aacd61deb9f61ccd8cc7851523ffa21e","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        try:"},{"line_number":102,"context_line":"            queue_name \u003d queue_info.get(\u0027topic\u0027)[-1]"},{"line_number":103,"context_line":"            # create a queue in zaqar"},{"line_number":104,"context_line":"            queue \u003d self.client.queue(queue_name)"},{"line_number":105,"context_line":"            subscriber \u003d queue_info.get(\u0027subscriber\u0027, None)"},{"line_number":106,"context_line":"            if subscriber:"},{"line_number":107,"context_line":"                # add subscriber to the zaqar queue"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba63e191_485fb40e","line":104,"updated":"2016-01-18 20:40:35.000000000","message":"And I would suggest use the \u0027force_create\u003dTrue\u0027 parameter because the queue can be created lazily when posting messages since v1.1. However, subscription needs the queue.","commit_id":"595701f32b636a95a527581e3bab72c56d66a285"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"38f83694e0348e801c297248ffd4d95ec327acb1","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            queue_name \u003d queue_info.get(\u0027topic\u0027)[-1]"},{"line_number":103,"context_line":"            # create a queue in zaqar"},{"line_number":104,"context_line":"            queue \u003d self.client.queue(queue_name)"},{"line_number":105,"context_line":"            subscriber \u003d queue_info.get(\u0027subscriber\u0027, None)"},{"line_number":106,"context_line":"            if subscriber:"},{"line_number":107,"context_line":"                # add subscriber to the zaqar queue"},{"line_number":108,"context_line":"                subscription_data \u003d dict(subscriber\u003dsubscriber,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_c77611d8","line":105,"updated":"2016-01-18 01:43:47.000000000","message":"Based on the mechnasim of URL query string, I think we can add multi subscribers at the same time with the format like:\n\nsubscriber\u003dflwang@catalyst.net.nz\u0026subscriber\u003dhttps://trigger.me\u0026ttl\u003d3600000000\n\nIt would be very useful for the end user, since currently aodh can only support one destination.","commit_id":"595701f32b636a95a527581e3bab72c56d66a285"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"a86ce28be2af0e8cab24e35d7871fcbd1807de97","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            queue_name \u003d queue_info.get(\u0027topic\u0027)[-1]"},{"line_number":103,"context_line":"            # create a queue in zaqar"},{"line_number":104,"context_line":"            queue \u003d self.client.queue(queue_name)"},{"line_number":105,"context_line":"            subscriber \u003d queue_info.get(\u0027subscriber\u0027, None)"},{"line_number":106,"context_line":"            if subscriber:"},{"line_number":107,"context_line":"                # add subscriber to the zaqar queue"},{"line_number":108,"context_line":"                subscription_data \u003d dict(subscriber\u003dsubscriber,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba63e191_24461d24","line":105,"in_reply_to":"ba63e191_6165e743","updated":"2016-01-19 03:06:55.000000000","message":"Cool, thanks Eva.","commit_id":"595701f32b636a95a527581e3bab72c56d66a285"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"8217f95f70b7b6f26751882b56e5464f07075b87","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            queue_name \u003d queue_info.get(\u0027topic\u0027)[-1]"},{"line_number":103,"context_line":"            # create a queue in zaqar"},{"line_number":104,"context_line":"            queue \u003d self.client.queue(queue_name)"},{"line_number":105,"context_line":"            subscriber \u003d queue_info.get(\u0027subscriber\u0027, None)"},{"line_number":106,"context_line":"            if subscriber:"},{"line_number":107,"context_line":"                # add subscriber to the zaqar queue"},{"line_number":108,"context_line":"                subscription_data \u003d dict(subscriber\u003dsubscriber,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_08aaed70","line":105,"in_reply_to":"da6ed579_c77611d8","updated":"2016-01-18 09:20:51.000000000","message":"+1","commit_id":"595701f32b636a95a527581e3bab72c56d66a285"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"2452b74ed79c367c5231db9148c99b347a55097e","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            queue_name \u003d queue_info.get(\u0027topic\u0027)[-1]"},{"line_number":103,"context_line":"            # create a queue in zaqar"},{"line_number":104,"context_line":"            queue \u003d self.client.queue(queue_name)"},{"line_number":105,"context_line":"            subscriber \u003d queue_info.get(\u0027subscriber\u0027, None)"},{"line_number":106,"context_line":"            if subscriber:"},{"line_number":107,"context_line":"                # add subscriber to the zaqar queue"},{"line_number":108,"context_line":"                subscription_data \u003d dict(subscriber\u003dsubscriber,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba63e191_6165e743","line":105,"in_reply_to":"da6ed579_c77611d8","updated":"2016-01-19 02:51:40.000000000","message":"Let me fix the example:\n\nsubscriber\u003dmailto:flwang@catalyst.net.nz\u0026subscriber\u003dhttps://trigger.me\u0026ttl\u003d3600000000","commit_id":"595701f32b636a95a527581e3bab72c56d66a285"},{"author":{"_account_id":6924,"name":"Pradeep Kilambi","email":"pkilambi@redhat.com","username":"pkilambi"},"change_message_id":"98d48cb65471ff52a957755720cee3e2c4a85cbc","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            queue_name \u003d queue_info.get(\u0027topic\u0027)[-1]"},{"line_number":103,"context_line":"            # create a queue in zaqar"},{"line_number":104,"context_line":"            queue \u003d self.client.queue(queue_name)"},{"line_number":105,"context_line":"            subscriber \u003d queue_info.get(\u0027subscriber\u0027, None)"},{"line_number":106,"context_line":"            if subscriber:"},{"line_number":107,"context_line":"                # add subscriber to the zaqar queue"},{"line_number":108,"context_line":"                subscription_data \u003d dict(subscriber\u003dsubscriber,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_2e856606","line":105,"in_reply_to":"da6ed579_c77611d8","updated":"2016-01-18 15:20:44.000000000","message":"Sure, I\u0027ll add that in.","commit_id":"595701f32b636a95a527581e3bab72c56d66a285"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"38f83694e0348e801c297248ffd4d95ec327acb1","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            queue \u003d self.client.queue(queue_name)"},{"line_number":105,"context_line":"            subscriber \u003d queue_info.get(\u0027subscriber\u0027, None)"},{"line_number":106,"context_line":"            if subscriber:"},{"line_number":107,"context_line":"                # add subscriber to the zaqar queue"},{"line_number":108,"context_line":"                subscription_data \u003d dict(subscriber\u003dsubscriber,"},{"line_number":109,"context_line":"                                         ttl\u003dself.queue_info.get(\u0027ttl\u0027, 3600))"},{"line_number":110,"context_line":"                self.client.subscription(queue_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_8780198d","line":107,"updated":"2016-01-18 01:43:47.000000000","message":"I think I understand why this happening, since this is a plugin and you don\u0027t want to change the framework code. Technically, the subscription should be created when creating the alarm instead of notifying, right?","commit_id":"595701f32b636a95a527581e3bab72c56d66a285"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"06c3ad93aacd61deb9f61ccd8cc7851523ffa21e","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            queue \u003d self.client.queue(queue_name)"},{"line_number":105,"context_line":"            subscriber \u003d queue_info.get(\u0027subscriber\u0027, None)"},{"line_number":106,"context_line":"            if subscriber:"},{"line_number":107,"context_line":"                # add subscriber to the zaqar queue"},{"line_number":108,"context_line":"                subscription_data \u003d dict(subscriber\u003dsubscriber,"},{"line_number":109,"context_line":"                                         ttl\u003dself.queue_info.get(\u0027ttl\u0027, 3600))"},{"line_number":110,"context_line":"                self.client.subscription(queue_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba63e191_a8c990ae","line":107,"in_reply_to":"da6ed579_29e000fa","updated":"2016-01-18 20:40:35.000000000","message":"Yes, I see. It\u0027s not a really best practice. But it works fine. BTW, I\u0027m going to implement a \u0027subscriptions\u0027 for queue, so that user can list all the subscriptions of the queue. So it can improve below code a bit. That said, you can get all the subscriptions by calling   queue.subscriptions() and check if the subscriber is in the subscriptions list. This can reduce the HTTP request when there are multi subscribers.","commit_id":"595701f32b636a95a527581e3bab72c56d66a285"},{"author":{"_account_id":6924,"name":"Pradeep Kilambi","email":"pkilambi@redhat.com","username":"pkilambi"},"change_message_id":"98d48cb65471ff52a957755720cee3e2c4a85cbc","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            queue \u003d self.client.queue(queue_name)"},{"line_number":105,"context_line":"            subscriber \u003d queue_info.get(\u0027subscriber\u0027, None)"},{"line_number":106,"context_line":"            if subscriber:"},{"line_number":107,"context_line":"                # add subscriber to the zaqar queue"},{"line_number":108,"context_line":"                subscription_data \u003d dict(subscriber\u003dsubscriber,"},{"line_number":109,"context_line":"                                         ttl\u003dself.queue_info.get(\u0027ttl\u0027, 3600))"},{"line_number":110,"context_line":"                self.client.subscription(queue_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_29e000fa","line":107,"in_reply_to":"da6ed579_8780198d","updated":"2016-01-18 15:20:44.000000000","message":"Yea understand, the reasoning is basically what you said. I see this being a concern if aodh is just publishing and not doing subscriptions. But since we do both, i think either would do it and this was we keep the zaqar logic in the plugin.I prefer to keep it this way for now. We can always revisit later. (/me nervous to pollute alarm creation logic with zaqar api calls).","commit_id":"595701f32b636a95a527581e3bab72c56d66a285"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"62e4e9bd71f0311acd8fee1e9d072ee53b8a4b42","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        try:"},{"line_number":102,"context_line":"            # queue_name is a combination of \u003ctenant-id\u003e-\u003ctopic\u003e"},{"line_number":103,"context_line":"            queue_name \u003d \"%s-%s\" % ("},{"line_number":104,"context_line":"                self.conf.service_credentials.os_tenant_id,"},{"line_number":105,"context_line":"                queue_info.get(\u0027topic\u0027)[-1])"},{"line_number":106,"context_line":"            # create a queue in zaqar"},{"line_number":107,"context_line":"            queue \u003d self.client.queue(queue_name, force_create\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba63e191_ce25e55c","line":104,"updated":"2016-01-19 00:20:32.000000000","message":"Sorry for the confusion, but I think it should be the user\u0027s tenant id not the service tenant id. Am I missing anything?","commit_id":"2f9ea3d554da091d3d44493a34bc8ecd31d26280"},{"author":{"_account_id":6924,"name":"Pradeep Kilambi","email":"pkilambi@redhat.com","username":"pkilambi"},"change_message_id":"1fd8fe3fb9d3361c3477202aa31c86df6332cd49","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        try:"},{"line_number":102,"context_line":"            # queue_name is a combination of \u003ctenant-id\u003e-\u003ctopic\u003e"},{"line_number":103,"context_line":"            queue_name \u003d \"%s-%s\" % ("},{"line_number":104,"context_line":"                self.conf.service_credentials.os_tenant_id,"},{"line_number":105,"context_line":"                queue_info.get(\u0027topic\u0027)[-1])"},{"line_number":106,"context_line":"            # create a queue in zaqar"},{"line_number":107,"context_line":"            queue \u003d self.client.queue(queue_name, force_create\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba63e191_257d9e1c","line":104,"in_reply_to":"ba63e191_b53a35cc","updated":"2016-01-19 14:41:33.000000000","message":"so i dont see a way to access user tenant info here. using service tenant id is not secure here. So I think we should just use alarm-id as prefix here. \n\nFor user scope info, Mehdi suggested we could use keystone trust on top of this to make it more user centric. i\u0027ll look into that as a subsequent change.","commit_id":"2f9ea3d554da091d3d44493a34bc8ecd31d26280"},{"author":{"_account_id":6924,"name":"Pradeep Kilambi","email":"pkilambi@redhat.com","username":"pkilambi"},"change_message_id":"28a4a090f6b67aa8be67f988d5cabdb8ef7e39dd","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        try:"},{"line_number":102,"context_line":"            # queue_name is a combination of \u003ctenant-id\u003e-\u003ctopic\u003e"},{"line_number":103,"context_line":"            queue_name \u003d \"%s-%s\" % ("},{"line_number":104,"context_line":"                self.conf.service_credentials.os_tenant_id,"},{"line_number":105,"context_line":"                queue_info.get(\u0027topic\u0027)[-1])"},{"line_number":106,"context_line":"            # create a queue in zaqar"},{"line_number":107,"context_line":"            queue \u003d self.client.queue(queue_name, force_create\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba63e191_b53a35cc","line":104,"in_reply_to":"ba63e191_ce25e55c","updated":"2016-01-19 04:46:24.000000000","message":"yea i wasnt quite sure where to get hold of the user tenant info here. I\u0027ll look into it, otherwise i guess alarm id would be unique enough as a prefix?","commit_id":"2f9ea3d554da091d3d44493a34bc8ecd31d26280"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"9be6bc8d6c9f0e9bcf7a3c46060ef74a99ae3480","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            # create a queue in zaqar"},{"line_number":107,"context_line":"            queue \u003d self.client.queue(queue_name, force_create\u003dTrue)"},{"line_number":108,"context_line":"            subscriber_list \u003d queue_info.get(\u0027subscriber\u0027, [])"},{"line_number":109,"context_line":"            ttl \u003d self.queue_info.get(\u0027ttl\u0027, [3600])[-1]"},{"line_number":110,"context_line":"            for subscriber in subscriber_list:"},{"line_number":111,"context_line":"                # add subscriber to the zaqar queue"},{"line_number":112,"context_line":"                subscription_data \u003d dict(subscriber\u003dsubscriber,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba63e191_8beef4ea","line":109,"updated":"2016-01-19 06:16:55.000000000","message":"self.queue_info doesn\u0027t exists.","commit_id":"2f9ea3d554da091d3d44493a34bc8ecd31d26280"},{"author":{"_account_id":6924,"name":"Pradeep Kilambi","email":"pkilambi@redhat.com","username":"pkilambi"},"change_message_id":"b36f31d5c9d2bd9f80c84a5c6457485138f86816","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            # create a queue in zaqar"},{"line_number":107,"context_line":"            queue \u003d self.client.queue(queue_name, force_create\u003dTrue)"},{"line_number":108,"context_line":"            subscriber_list \u003d queue_info.get(\u0027subscriber\u0027, [])"},{"line_number":109,"context_line":"            ttl \u003d self.queue_info.get(\u0027ttl\u0027, [3600])[-1]"},{"line_number":110,"context_line":"            for subscriber in subscriber_list:"},{"line_number":111,"context_line":"                # add subscriber to the zaqar queue"},{"line_number":112,"context_line":"                subscription_data \u003d dict(subscriber\u003dsubscriber,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba63e191_4a11c151","line":109,"in_reply_to":"ba63e191_8beef4ea","updated":"2016-01-19 13:17:12.000000000","message":"good catch, should be queue_info here. I\u0027ll mock this stuff as well.","commit_id":"2f9ea3d554da091d3d44493a34bc8ecd31d26280"}],"aodh/tests/unit/test_notifier.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"ee4761cd57f0ffdda4eb3968cccabc4543d77746","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                return_value\u003dclient):"},{"line_number":272,"context_line":"            self.service.notify_alarm({},"},{"line_number":273,"context_line":"                                      self._notification(action))"},{"line_number":274,"context_line":"            self.assertTrue(mylog.info.called)"},{"line_number":275,"context_line":"            self.assertEqual(\"foobar\","},{"line_number":276,"context_line":"                             self.service.notifiers[\u0027zaqar\u0027].obj."},{"line_number":277,"context_line":"                             queue_info[\u0027topic\u0027][-1])"}],"source_content_type":"text/x-python","patch_set":7,"id":"da6ed579_da706874","line":274,"updated":"2016-01-15 14:00:42.000000000","message":"Tests must assert on mocked client calls, not on the internal structure of the class.","commit_id":"2c49fcba9fa41ab673befd22de9d3808d9e2b13d"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"9be6bc8d6c9f0e9bcf7a3c46060ef74a99ae3480","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                                 \u0027reason\u0027: \u0027what ?\u0027,"},{"line_number":273,"context_line":"                                 \u0027current\u0027: \u0027ALARM\u0027,"},{"line_number":274,"context_line":"                                 \u0027alarm_id\u0027: \u0027foobar\u0027}}"},{"line_number":275,"context_line":"        with mock.patch(\u0027aodh.notifier.zaqar.ZaqarAlarmNotifier.notify_zaqar\u0027,"},{"line_number":276,"context_line":"                        notify):"},{"line_number":277,"context_line":"            self.service.notify_alarm({},"},{"line_number":278,"context_line":"                                      self._notification(action))"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba63e191_4b31dca1","line":275,"updated":"2016-01-19 06:16:55.000000000","message":"We should mock zaqarclient.queues.client.Client to be sure we cover the whole code.","commit_id":"2f9ea3d554da091d3d44493a34bc8ecd31d26280"}]}
