)]}'
{"monasca_notification/common/repositories/mysql/mysql_repo.py":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"4de0dd947b74f7ece4f14f3816b3fa561ccb772d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    def get_alarm_current_state(self, alarm_id):"},{"line_number":77,"context_line":"        try:"},{"line_number":78,"context_line":"            if self._mysql is None:"},{"line_number":79,"context_line":"                self._connect_to_mysql()"},{"line_number":80,"context_line":"            cur \u003d self._mysql.cursor()"},{"line_number":81,"context_line":"            cur.execute(self._find_alarm_state_sql, alarm_id)"},{"line_number":82,"context_line":"            row \u003d cur.fetchone()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_d5d8caf1","line":79,"range":{"start_line":79,"start_character":16,"end_line":79,"end_character":20},"updated":"2016-05-05 05:33:51.000000000","message":"Why not initialize the connection in the constructor?","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"b93c08dab438aa6674ca63820c5b97d304183284","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    def get_alarm_current_state(self, alarm_id):"},{"line_number":77,"context_line":"        try:"},{"line_number":78,"context_line":"            if self._mysql is None:"},{"line_number":79,"context_line":"                self._connect_to_mysql()"},{"line_number":80,"context_line":"            cur \u003d self._mysql.cursor()"},{"line_number":81,"context_line":"            cur.execute(self._find_alarm_state_sql, alarm_id)"},{"line_number":82,"context_line":"            row \u003d cur.fetchone()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_81de02d8","line":79,"range":{"start_line":79,"start_character":16,"end_line":79,"end_character":20},"in_reply_to":"1a122d0e_d5d8caf1","updated":"2016-05-05 14:26:46.000000000","message":"Good point i will switch this model of connecting at this point in all repo classes","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"a4946a9f5be00c583ef88e5f9d50abc28482f4ca","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    def get_alarm_current_state(self, alarm_id):"},{"line_number":77,"context_line":"        try:"},{"line_number":78,"context_line":"            if self._mysql is None:"},{"line_number":79,"context_line":"                self._connect_to_mysql()"},{"line_number":80,"context_line":"            cur \u003d self._mysql.cursor()"},{"line_number":81,"context_line":"            cur.execute(self._find_alarm_state_sql, alarm_id)"},{"line_number":82,"context_line":"            row \u003d cur.fetchone()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_dc873d10","line":79,"range":{"start_line":79,"start_character":16,"end_line":79,"end_character":20},"in_reply_to":"1a122d0e_d5d8caf1","updated":"2016-05-05 14:38:03.000000000","message":"We don\u0027t initialize in the constructor so that we can deal with disconnects.  We can connect initially in the constructor but we\u0027re still going to need this piece here.","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"6273ed2585bdb2e51b9caad3d2a84651571d9adc","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    def get_alarm_current_state(self, alarm_id):"},{"line_number":77,"context_line":"        try:"},{"line_number":78,"context_line":"            if self._mysql is None:"},{"line_number":79,"context_line":"                self._connect_to_mysql()"},{"line_number":80,"context_line":"            cur \u003d self._mysql.cursor()"},{"line_number":81,"context_line":"            cur.execute(self._find_alarm_state_sql, alarm_id)"},{"line_number":82,"context_line":"            row \u003d cur.fetchone()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_30e77513","line":79,"range":{"start_line":79,"start_character":16,"end_line":79,"end_character":20},"in_reply_to":"1a122d0e_dc873d10","updated":"2016-05-05 14:41:53.000000000","message":"sounds good","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"}],"monasca_notification/common/repositories/orm/orm_repo.py":[{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"196460debfed9f20e6397bb772c67336894a7b70","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        aa \u003d models.create_alarm_action_model(metadata).alias(\u0027aa\u0027)"},{"line_number":32,"context_line":"        nm \u003d models.create_notification_method_model(metadata).alias(\u0027nm\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        self._orm_query \u003d select([nm.c.name, nm.c.type, nm.c.address, nm.c.periodic_interval])\\"},{"line_number":35,"context_line":"            .select_from(aa.join(nm, aa.c.action_id \u003d\u003d nm.c.id))\\"},{"line_number":36,"context_line":"            .where("},{"line_number":37,"context_line":"                and_(aa.c.alarm_definition_id \u003d\u003d bindparam(\u0027alarm_definition_id\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_b531ce5b","line":34,"range":{"start_line":34,"start_character":75,"end_line":34,"end_character":92},"updated":"2016-05-05 04:41:44.000000000","message":"I guess here it was proposed to use just \u0027interval\u0027, right ?","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"4de0dd947b74f7ece4f14f3816b3fa561ccb772d","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        aa \u003d models.create_alarm_action_model(metadata).alias(\u0027aa\u0027)"},{"line_number":32,"context_line":"        nm \u003d models.create_notification_method_model(metadata).alias(\u0027nm\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        self._orm_query \u003d select([nm.c.name, nm.c.type, nm.c.address, nm.c.periodic_interval])\\"},{"line_number":35,"context_line":"            .select_from(aa.join(nm, aa.c.action_id \u003d\u003d nm.c.id))\\"},{"line_number":36,"context_line":"            .where("},{"line_number":37,"context_line":"                and_(aa.c.alarm_definition_id \u003d\u003d bindparam(\u0027alarm_definition_id\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_357e5eaf","line":34,"range":{"start_line":34,"start_character":75,"end_line":34,"end_character":92},"in_reply_to":"1a122d0e_b531ce5b","updated":"2016-05-05 05:33:51.000000000","message":"Actually, we\u0027re going to use \"period\". An interval is just a distance between two points. A period is a cycle that repeats itself.","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"748479ee926a225c3827601cf8e677e40d80693f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                return [(row[1].lower(), row[0], row[2], row[3]) for row in notifications]"},{"line_number":51,"context_line":"        except DatabaseError as e:"},{"line_number":52,"context_line":"            log.exception(\"Couldn\u0027t fetch alarms actions %s\", e)"},{"line_number":53,"context_line":"            raise exc.DatabaseException(e)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_dc2bbd31","line":53,"range":{"start_line":53,"start_character":22,"end_line":53,"end_character":39},"updated":"2016-05-05 14:35:24.000000000","message":"need to add getting the alarm state to this class as well.","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"}],"monasca_notification/main.py":[{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"b93c08dab438aa6674ca63820c5b97d304183284","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":"# (C) Copyright 2014-2016 Hewlett Packard Enterprise Development Company LP"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_1c537517","line":1,"range":{"start_line":1,"start_character":11,"end_line":1,"end_character":14},"updated":"2016-05-05 14:26:46.000000000","message":"take out","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"a4946a9f5be00c583ef88e5f9d50abc28482f4ca","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":"# (C) Copyright 2014-2016 Hewlett Packard Enterprise Development Company LP"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_fcb039de","line":1,"range":{"start_line":1,"start_character":11,"end_line":1,"end_character":14},"in_reply_to":"1a122d0e_1c537517","updated":"2016-05-05 14:38:03.000000000","message":"Why take it out?","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"4de0dd947b74f7ece4f14f3816b3fa561ccb772d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    processors.append(multiprocessing.Process("},{"line_number":109,"context_line":"        target\u003dstart_process, args\u003d(RetryEngine, config)))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    if 1 in config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":112,"context_line":"        processors.append(multiprocessing.Process("},{"line_number":113,"context_line":"            target\u003dstart_process, args\u003d(PeriodicEngine, config, 1)))"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_15524235","line":111,"range":{"start_line":111,"start_character":9,"end_line":111,"end_character":11},"updated":"2016-05-05 05:33:51.000000000","message":"Should we encode this as seconds instead of minutes to allow for the possibility of sub-one minute periods","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"b93c08dab438aa6674ca63820c5b97d304183284","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    processors.append(multiprocessing.Process("},{"line_number":109,"context_line":"        target\u003dstart_process, args\u003d(RetryEngine, config)))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    if 1 in config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":112,"context_line":"        processors.append(multiprocessing.Process("},{"line_number":113,"context_line":"            target\u003dstart_process, args\u003d(PeriodicEngine, config, 1)))"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_fc20399c","line":111,"range":{"start_line":111,"start_character":9,"end_line":111,"end_character":11},"in_reply_to":"1a122d0e_15524235","updated":"2016-05-05 14:26:46.000000000","message":"We could but at the moment we don not support anything but at minute intervals of 0 and 1 which is what we implemented on the API side. So it wont gain you anything here. Unless you think it makes more sense to have it seconds in the config although our API is supporting it in minutes in my review. Let me know if you think that is the wrong direction.","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"748479ee926a225c3827601cf8e677e40d80693f","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    processors.append(multiprocessing.Process("},{"line_number":109,"context_line":"        target\u003dstart_process, args\u003d(RetryEngine, config)))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    if 1 in config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":112,"context_line":"        processors.append(multiprocessing.Process("},{"line_number":113,"context_line":"            target\u003dstart_process, args\u003d(PeriodicEngine, config, 1)))"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_50167149","line":111,"range":{"start_line":111,"start_character":9,"end_line":111,"end_character":11},"in_reply_to":"1a122d0e_fc20399c","updated":"2016-05-05 14:35:24.000000000","message":"Talked with Roland on this going to change this to seconds here and in the different repos","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"de8b5b5b75cb577c21f21c0396714c64ae5ad56f","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    processors.append(multiprocessing.Process("},{"line_number":108,"context_line":"        target\u003dstart_process, args\u003d(RetryEngine, config)))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    if 60 in config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":111,"context_line":"        processors.append(multiprocessing.Process("},{"line_number":112,"context_line":"            target\u003dstart_process, args\u003d(PeriodicEngine, config, 60)))"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_3a65c1b4","line":110,"range":{"start_line":110,"start_character":7,"end_line":110,"end_character":9},"updated":"2016-05-20 02:24:51.000000000","message":"Shouldn\u0027t this just iterate over all the periods that are defined in the config file?","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"80b1faa1048bc097ee46d7bc2043501d464b566f","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    processors.append(multiprocessing.Process("},{"line_number":108,"context_line":"        target\u003dstart_process, args\u003d(RetryEngine, config)))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    if 60 in config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":111,"context_line":"        processors.append(multiprocessing.Process("},{"line_number":112,"context_line":"            target\u003dstart_process, args\u003d(PeriodicEngine, config, 60)))"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_557696a4","line":110,"range":{"start_line":110,"start_character":7,"end_line":110,"end_character":9},"in_reply_to":"bab6814e_3a65c1b4","updated":"2016-05-20 02:39:09.000000000","message":"That\u0027s the plan I just haven\u0027t put up a new patch set yet.","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"}],"monasca_notification/notification.py":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"de8b5b5b75cb577c21f21c0396714c64ae5ad56f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"             ntype - The notification type"},{"line_number":52,"context_line":"             name - Name used in sending"},{"line_number":53,"context_line":"             address - where to send the notification"},{"line_number":54,"context_line":"             period - period of sending the notification"},{"line_number":55,"context_line":"             retry_count - number of times we\u0027ve tried to send"},{"line_number":56,"context_line":"             alarm - info that caused the notification"},{"line_number":57,"context_line":"             notifications that come after this one to remain uncommitted."}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_3ac14155","line":54,"range":{"start_line":54,"start_character":20,"end_line":54,"end_character":21},"updated":"2016-05-20 02:24:51.000000000","message":"period in seconds for re-sending the notification","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"}],"monasca_notification/notification_engine.py":[{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"b1e87b8f70356e485641fc3de2e1b63fabcf2965","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            log.warn(topic)"},{"line_number":51,"context_line":"            log.warn(self._config[\u0027kafka\u0027][\u0027periodic\u0027])"},{"line_number":52,"context_line":"            if topic in self._config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":53,"context_line":"                notification.periodic_interval *\u003d 60"},{"line_number":54,"context_line":"                self._producer.publish(self._config[\u0027kafka\u0027][\u0027periodic\u0027][topic],"},{"line_number":55,"context_line":"                                       [notification.to_json()])"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_8f2ff2f4","line":53,"range":{"start_line":53,"start_character":16,"end_line":53,"end_character":28},"updated":"2016-04-29 21:45:45.000000000","message":"If we set the timestamp here we can avoid an if statement in the periodic engine.","commit_id":"53aa6cc924e7575a37400d5398af186de67cc274"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"82394bb6f488f0504c51110924381d8bab5578cc","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        for notification in notifications:"},{"line_number":50,"context_line":"            topic \u003d notification.periodic_interval"},{"line_number":51,"context_line":"            if topic in self._config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":52,"context_line":"                notification.periodic_interval *\u003d 60"},{"line_number":53,"context_line":"                notification.notification_timestamp \u003d time.time()"},{"line_number":54,"context_line":"                self._producer.publish(self._config[\u0027kafka\u0027][\u0027periodic\u0027][topic],"},{"line_number":55,"context_line":"                                       [notification.to_json()])"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_39b4fed2","line":52,"range":{"start_line":52,"start_character":29,"end_line":52,"end_character":46},"updated":"2016-05-02 23:12:48.000000000","message":"Originally this was using the retry_interval field in the notification object.  I think I like that better than changing the existing data in the periodic_interval field.","commit_id":"b53724c85256ef9d2f0a7867abcf1980e3fa2f2d"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"b8a6d622ffee6e9917c551049832c4de9ca00a18","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        for notification in notifications:"},{"line_number":50,"context_line":"            topic \u003d notification.periodic_interval"},{"line_number":51,"context_line":"            if topic in self._config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":52,"context_line":"                notification.periodic_interval *\u003d 60"},{"line_number":53,"context_line":"                notification.notification_timestamp \u003d time.time()"},{"line_number":54,"context_line":"                self._producer.publish(self._config[\u0027kafka\u0027][\u0027periodic\u0027][topic],"},{"line_number":55,"context_line":"                                       [notification.to_json()])"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_c14dfec5","line":52,"range":{"start_line":52,"start_character":29,"end_line":52,"end_character":46},"in_reply_to":"1a122d0e_39b4fed2","updated":"2016-05-03 15:40:26.000000000","message":"from this point forward it shouldnt matter as we only use it on our waits. I could add a periodic_interval_seconds field defaulted to none that gets set here so the notification object stays in tact. What are your thoughts I am indifferent to be honest.","commit_id":"b53724c85256ef9d2f0a7867abcf1980e3fa2f2d"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"c5ab5e940a590370cbed3443c8b4d23476b3cf22","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        for notification in notifications:"},{"line_number":50,"context_line":"            topic \u003d notification.periodic_interval"},{"line_number":51,"context_line":"            if topic in self._config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":52,"context_line":"                notification.periodic_interval *\u003d 60"},{"line_number":53,"context_line":"                notification.notification_timestamp \u003d time.time()"},{"line_number":54,"context_line":"                self._producer.publish(self._config[\u0027kafka\u0027][\u0027periodic\u0027][topic],"},{"line_number":55,"context_line":"                                       [notification.to_json()])"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_cf5405cc","line":52,"range":{"start_line":52,"start_character":29,"end_line":52,"end_character":46},"in_reply_to":"1a122d0e_c14dfec5","updated":"2016-05-03 16:08:16.000000000","message":"I agree it shouldn\u0027t matter from here on I just don\u0027t like multipurposing fields when we have a reasonable one already available.\n\nI\u0027d use retry_interval because I think it expresses what we mean fairly well.","commit_id":"b53724c85256ef9d2f0a7867abcf1980e3fa2f2d"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"4184b35aefa9a08c9bb2e6ed5ff4710533e57bf6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        for notification in notifications:"},{"line_number":50,"context_line":"            topic \u003d notification.periodic_interval"},{"line_number":51,"context_line":"            if topic in self._config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":52,"context_line":"                notification.periodic_interval *\u003d 60"},{"line_number":53,"context_line":"                notification.notification_timestamp \u003d time.time()"},{"line_number":54,"context_line":"                self._producer.publish(self._config[\u0027kafka\u0027][\u0027periodic\u0027][topic],"},{"line_number":55,"context_line":"                                       [notification.to_json()])"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_cfda4517","line":52,"range":{"start_line":52,"start_character":29,"end_line":52,"end_character":46},"in_reply_to":"1a122d0e_cf5405cc","updated":"2016-05-03 16:12:47.000000000","message":"i dont like retry_interval in the use case of notification it means something failed and we are trying again. In this case we are just resending every configured amount of time. Different meanings in the same file.","commit_id":"b53724c85256ef9d2f0a7867abcf1980e3fa2f2d"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"4de0dd947b74f7ece4f14f3816b3fa561ccb772d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            if topic in self._config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":52,"context_line":"                notification.notification_timestamp \u003d time.time()"},{"line_number":53,"context_line":"                self._producer.publish(self._config[\u0027kafka\u0027][\u0027periodic\u0027][topic],"},{"line_number":54,"context_line":"                                       [notification.to_json()])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def run(self):"},{"line_number":57,"context_line":"        finished_count \u003d self._statsd.get_counter(name\u003d\u0027alarms_finished_count\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_d8659fe1","line":54,"range":{"start_line":54,"start_character":40,"end_line":54,"end_character":52},"updated":"2016-05-05 05:33:51.000000000","message":"would it be a good idea to add a try/except block for potential exceptions around to_json, so that the notification is ignored and the iteration overall all notifications continues?","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"0b1287bd80736742f650f353f586dd71c910dc0a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            if topic in self._config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":52,"context_line":"                notification.notification_timestamp \u003d time.time()"},{"line_number":53,"context_line":"                self._producer.publish(self._config[\u0027kafka\u0027][\u0027periodic\u0027][topic],"},{"line_number":54,"context_line":"                                       [notification.to_json()])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def run(self):"},{"line_number":57,"context_line":"        finished_count \u003d self._statsd.get_counter(name\u003d\u0027alarms_finished_count\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_50b79120","line":54,"range":{"start_line":54,"start_character":40,"end_line":54,"end_character":52},"in_reply_to":"1a122d0e_bced2127","updated":"2016-05-05 14:39:40.000000000","message":"looking into this more the notification we are calling on is already a constructed object and the to json is a class method we are calling on that juist outputs the object. If anything we would run into errors prior to this at the point of constructing the object not at this point","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"b93c08dab438aa6674ca63820c5b97d304183284","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            if topic in self._config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":52,"context_line":"                notification.notification_timestamp \u003d time.time()"},{"line_number":53,"context_line":"                self._producer.publish(self._config[\u0027kafka\u0027][\u0027periodic\u0027][topic],"},{"line_number":54,"context_line":"                                       [notification.to_json()])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def run(self):"},{"line_number":57,"context_line":"        finished_count \u003d self._statsd.get_counter(name\u003d\u0027alarms_finished_count\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_bced2127","line":54,"range":{"start_line":54,"start_character":40,"end_line":54,"end_character":52},"in_reply_to":"1a122d0e_d8659fe1","updated":"2016-05-05 14:26:46.000000000","message":"in what use case would you see that happening? I would be happy to add it. even though we have been doing to.josn without try catch for a while below and havent run into anything.","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"de8b5b5b75cb577c21f21c0396714c64ae5ad56f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def _add_periodic_notifications(self, notifications):"},{"line_number":49,"context_line":"        for notification in notifications:"},{"line_number":50,"context_line":"            topic \u003d notification.periodic_topic"},{"line_number":51,"context_line":"            if topic in self._config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":52,"context_line":"                notification.notification_timestamp \u003d time.time()"},{"line_number":53,"context_line":"                self._producer.publish(self._config[\u0027kafka\u0027][\u0027periodic\u0027][topic],"},{"line_number":54,"context_line":"                                       [notification.to_json()])"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_3ac301ef","line":51,"range":{"start_line":51,"start_character":15,"end_line":51,"end_character":20},"updated":"2016-05-20 02:24:51.000000000","message":"Do you want to add a log.error statement if the topic isn\u0027t found? Theoretically, the API and Notification Engine are in-sync wrt to the supported topics with the API returning an error if the period that is supplied isn\u0027t supported. Therefore, if it isn\u0027t found at this point, I think this would be considered an error.","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"de8b5b5b75cb577c21f21c0396714c64ae5ad56f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            if topic in self._config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":52,"context_line":"                notification.notification_timestamp \u003d time.time()"},{"line_number":53,"context_line":"                self._producer.publish(self._config[\u0027kafka\u0027][\u0027periodic\u0027][topic],"},{"line_number":54,"context_line":"                                       [notification.to_json()])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def run(self):"},{"line_number":57,"context_line":"        finished_count \u003d self._statsd.get_counter(name\u003d\u0027alarms_finished_count\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_fa7cd9b6","line":54,"range":{"start_line":54,"start_character":40,"end_line":54,"end_character":52},"updated":"2016-05-20 02:24:51.000000000","message":"Are there any exceptions that need to be caught and possibly logged, such as unable to publish to Kafka or unable to convert to json.","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"80b1faa1048bc097ee46d7bc2043501d464b566f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            if topic in self._config[\u0027kafka\u0027][\u0027periodic\u0027]:"},{"line_number":52,"context_line":"                notification.notification_timestamp \u003d time.time()"},{"line_number":53,"context_line":"                self._producer.publish(self._config[\u0027kafka\u0027][\u0027periodic\u0027][topic],"},{"line_number":54,"context_line":"                                       [notification.to_json()])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def run(self):"},{"line_number":57,"context_line":"        finished_count \u003d self._statsd.get_counter(name\u003d\u0027alarms_finished_count\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_d5fba6bf","line":54,"range":{"start_line":54,"start_character":40,"end_line":54,"end_character":52},"in_reply_to":"bab6814e_fa7cd9b6","updated":"2016-05-20 02:39:09.000000000","message":"We already trap in the producer if we fail to publish.  Trapping a to_json failure is easy, and I\u0027m pretty sure you asked about that before, but I was trying to come up with a pythony way to make it work in the multiple places we use the method right now without a lot of extra boilerplate.","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"}],"monasca_notification/periodic_engine.py":[{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"b1e87b8f70356e485641fc3de2e1b63fabcf2965","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                                        notification_data[\u0027raw_alarm\u0027])"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"            if not self._alarm_ok(notification.alarm_id):"},{"line_number":75,"context_line":"                if notification_data[\u0027notification_timestamp\u0027] is None:"},{"line_number":76,"context_line":"                    wait_duration \u003d periodic_interval"},{"line_number":77,"context_line":"                else:"},{"line_number":78,"context_line":"                    wait_duration \u003d periodic_interval - ("}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_2f417ea9","line":75,"range":{"start_line":75,"start_character":19,"end_line":75,"end_character":36},"updated":"2016-04-29 21:45:45.000000000","message":"Let\u0027s set the timestamp when we first add the notification to the periodic topic so we only have one path here.","commit_id":"53aa6cc924e7575a37400d5398af186de67cc274"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"82394bb6f488f0504c51110924381d8bab5578cc","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self._producer \u003d KafkaProducer(config[\u0027kafka\u0027][\u0027url\u0027])"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self._notifier \u003d NotificationProcessor(config[\u0027notification_types\u0027])"},{"line_number":48,"context_line":"        if \u0027database\u0027 in config and \u0027repo_driver\u0027 in config[\u0027database\u0027]:"},{"line_number":49,"context_line":"            self._db_repo \u003d simport.load(config[\u0027database\u0027][\u0027repo_driver\u0027])(config)"},{"line_number":50,"context_line":"        else:"},{"line_number":51,"context_line":"            self._db_repo \u003d simport.load(\u0027monasca_notification.common.repositories.mysql.mysql_repo:MysqlRepo\u0027)(config)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_79b2f607","line":48,"range":{"start_line":48,"start_character":12,"end_line":48,"end_character":20},"updated":"2016-05-02 23:12:48.000000000","message":"We\u0027re using this same logic in two places now.  Should we bump it up to a common function that just returns a new db_repo object?","commit_id":"b53724c85256ef9d2f0a7867abcf1980e3fa2f2d"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"b8a6d622ffee6e9917c551049832c4de9ca00a18","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self._producer \u003d KafkaProducer(config[\u0027kafka\u0027][\u0027url\u0027])"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self._notifier \u003d NotificationProcessor(config[\u0027notification_types\u0027])"},{"line_number":48,"context_line":"        if \u0027database\u0027 in config and \u0027repo_driver\u0027 in config[\u0027database\u0027]:"},{"line_number":49,"context_line":"            self._db_repo \u003d simport.load(config[\u0027database\u0027][\u0027repo_driver\u0027])(config)"},{"line_number":50,"context_line":"        else:"},{"line_number":51,"context_line":"            self._db_repo \u003d simport.load(\u0027monasca_notification.common.repositories.mysql.mysql_repo:MysqlRepo\u0027)(config)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_a1a4424b","line":48,"range":{"start_line":48,"start_character":12,"end_line":48,"end_character":20},"in_reply_to":"1a122d0e_79b2f607","updated":"2016-05-03 15:40:26.000000000","message":"we could but it is a pretty small amount code. I mean we could set the db_repo at the main entry to the code and pass that throughout so we only have one connection to mysql instead of multiple. What do you think?","commit_id":"b53724c85256ef9d2f0a7867abcf1980e3fa2f2d"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"c5ab5e940a590370cbed3443c8b4d23476b3cf22","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self._producer \u003d KafkaProducer(config[\u0027kafka\u0027][\u0027url\u0027])"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self._notifier \u003d NotificationProcessor(config[\u0027notification_types\u0027])"},{"line_number":48,"context_line":"        if \u0027database\u0027 in config and \u0027repo_driver\u0027 in config[\u0027database\u0027]:"},{"line_number":49,"context_line":"            self._db_repo \u003d simport.load(config[\u0027database\u0027][\u0027repo_driver\u0027])(config)"},{"line_number":50,"context_line":"        else:"},{"line_number":51,"context_line":"            self._db_repo \u003d simport.load(\u0027monasca_notification.common.repositories.mysql.mysql_repo:MysqlRepo\u0027)(config)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_cf0245b4","line":48,"range":{"start_line":48,"start_character":12,"end_line":48,"end_character":20},"in_reply_to":"1a122d0e_a1a4424b","updated":"2016-05-03 16:08:16.000000000","message":"It is small code but if we ever change the config file now we have to modify multiple places.\n\nI don\u0027t believe we can create the DB at a higher level and then pass it down as the piece in the alarm processor and the piece here are running in different processes.  I think a utility function to construct the proper object is the easiest.  I\u0027d put it under the common section we already have available.","commit_id":"b53724c85256ef9d2f0a7867abcf1980e3fa2f2d"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"4184b35aefa9a08c9bb2e6ed5ff4710533e57bf6","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self._producer \u003d KafkaProducer(config[\u0027kafka\u0027][\u0027url\u0027])"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self._notifier \u003d NotificationProcessor(config[\u0027notification_types\u0027])"},{"line_number":48,"context_line":"        if \u0027database\u0027 in config and \u0027repo_driver\u0027 in config[\u0027database\u0027]:"},{"line_number":49,"context_line":"            self._db_repo \u003d simport.load(config[\u0027database\u0027][\u0027repo_driver\u0027])(config)"},{"line_number":50,"context_line":"        else:"},{"line_number":51,"context_line":"            self._db_repo \u003d simport.load(\u0027monasca_notification.common.repositories.mysql.mysql_repo:MysqlRepo\u0027)(config)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_0f039d77","line":48,"range":{"start_line":48,"start_character":12,"end_line":48,"end_character":20},"in_reply_to":"1a122d0e_cf0245b4","updated":"2016-05-03 16:12:47.000000000","message":"fine with me","commit_id":"b53724c85256ef9d2f0a7867abcf1980e3fa2f2d"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"82394bb6f488f0504c51110924381d8bab5578cc","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def _keep_sending(self, alarm_id, original_state):"},{"line_number":54,"context_line":"        # Go to DB and check alarm state"},{"line_number":55,"context_line":"        current_state \u003d self._db_repo.get_alarm_current_state(alarm_id)"},{"line_number":56,"context_line":"        # Alarm was deleted"},{"line_number":57,"context_line":"        if current_state is None:"},{"line_number":58,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_19d66227","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":21},"updated":"2016-05-02 23:12:48.000000000","message":"The alarm processor implements a simple retry when accessing the database to deal with situations where the connection to the DB has timed out.  We\u0027ll want to do the same thing here to avoid restarting the entire notification system when the DB connection goes away.","commit_id":"b53724c85256ef9d2f0a7867abcf1980e3fa2f2d"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"b8a6d622ffee6e9917c551049832c4de9ca00a18","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def _keep_sending(self, alarm_id, original_state):"},{"line_number":54,"context_line":"        # Go to DB and check alarm state"},{"line_number":55,"context_line":"        current_state \u003d self._db_repo.get_alarm_current_state(alarm_id)"},{"line_number":56,"context_line":"        # Alarm was deleted"},{"line_number":57,"context_line":"        if current_state is None:"},{"line_number":58,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_817666d6","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":21},"in_reply_to":"1a122d0e_19d66227","updated":"2016-05-03 15:40:26.000000000","message":"great catch will add in. Lets decide on the other comments first and will go forward with making the change.","commit_id":"b53724c85256ef9d2f0a7867abcf1980e3fa2f2d"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"de8b5b5b75cb577c21f21c0396714c64ae5ad56f","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        for raw_notification in self._consumer:"},{"line_number":68,"context_line":"            partition \u003d raw_notification[0]"},{"line_number":69,"context_line":"            offset \u003d raw_notification[1].offset"},{"line_number":70,"context_line":"            message \u003d raw_notification[1].message.value"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            notification_data \u003d json.loads(message)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_5a1a457e","line":70,"range":{"start_line":70,"start_character":12,"end_line":70,"end_character":19},"updated":"2016-05-20 02:24:51.000000000","message":"Maybe at some point we should consider created a utility function to do the above three lines in a one-liner.","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"80b1faa1048bc097ee46d7bc2043501d464b566f","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        for raw_notification in self._consumer:"},{"line_number":68,"context_line":"            partition \u003d raw_notification[0]"},{"line_number":69,"context_line":"            offset \u003d raw_notification[1].offset"},{"line_number":70,"context_line":"            message \u003d raw_notification[1].message.value"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            notification_data \u003d json.loads(message)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_1519ae22","line":70,"range":{"start_line":70,"start_character":12,"end_line":70,"end_character":19},"in_reply_to":"bab6814e_5a1a457e","updated":"2016-05-20 02:39:09.000000000","message":"What I really want to do here is change our kafka interface.  There\u0027s no longer any need to express partition and offset at this level so the consumer iterator can simply return the message.value.","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"de8b5b5b75cb577c21f21c0396714c64ae5ad56f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            offset \u003d raw_notification[1].offset"},{"line_number":70,"context_line":"            message \u003d raw_notification[1].message.value"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            notification_data \u003d json.loads(message)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"            ntype \u003d notification_data[\u0027type\u0027]"},{"line_number":75,"context_line":"            name \u003d notification_data[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_ba0b7129","line":72,"updated":"2016-05-20 02:24:51.000000000","message":"Is there a possibility of an exception occurring that should be at least logged?","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"80b1faa1048bc097ee46d7bc2043501d464b566f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            offset \u003d raw_notification[1].offset"},{"line_number":70,"context_line":"            message \u003d raw_notification[1].message.value"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            notification_data \u003d json.loads(message)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"            ntype \u003d notification_data[\u0027type\u0027]"},{"line_number":75,"context_line":"            name \u003d notification_data[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_d5d0c621","line":72,"in_reply_to":"bab6814e_ba0b7129","updated":"2016-05-20 02:39:09.000000000","message":"I suppose there is a chance of corruption here and the possibility of someone else putting data on our topic.  I\u0027d really like a nice way to be able to do this, similar to your comment on to_json earlier, that doesn\u0027t just sprinkle try/catch statements all over.","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"93801647b5b35b2d99376a2733affc485db6ae4d","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            offset \u003d raw_notification[1].offset"},{"line_number":70,"context_line":"            message \u003d raw_notification[1].message.value"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            notification_data \u003d json.loads(message)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"            ntype \u003d notification_data[\u0027type\u0027]"},{"line_number":75,"context_line":"            name \u003d notification_data[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_9558fe8b","line":72,"in_reply_to":"bab6814e_d5d0c621","updated":"2016-05-20 02:46:21.000000000","message":"Any change we make here we\u0027ll also need to make to the retry_engine but I\u0027ve some ideas I think will work.","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"}],"monasca_notification/processors/alarm_processor.py":[{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"b1e87b8f70356e485641fc3de2e1b63fabcf2965","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        if not alarm[\u0027actionsEnabled\u0027]:"},{"line_number":73,"context_line":"            log.debug(\u0027Actions are disabled for this alarm.\u0027)"},{"line_number":74,"context_line":"            # return False"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        alarm_age \u003d time.time() - alarm[\u0027timestamp\u0027] / 1000"},{"line_number":77,"context_line":"        if (self._alarm_ttl is not None) and (alarm_age \u003e self._alarm_ttl):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_8f7d32e9","line":74,"range":{"start_line":74,"start_character":14,"end_line":74,"end_character":20},"updated":"2016-04-29 21:45:45.000000000","message":"What is this piece for?","commit_id":"53aa6cc924e7575a37400d5398af186de67cc274"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"0ed4c1a4cde0f9d81ec27c4b2e919b65c13e69b6","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        if not alarm[\u0027actionsEnabled\u0027]:"},{"line_number":73,"context_line":"            log.debug(\u0027Actions are disabled for this alarm.\u0027)"},{"line_number":74,"context_line":"            # return False"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        alarm_age \u003d time.time() - alarm[\u0027timestamp\u0027] / 1000"},{"line_number":77,"context_line":"        if (self._alarm_ttl is not None) and (alarm_age \u003e self._alarm_ttl):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_8f99b221","line":74,"range":{"start_line":74,"start_character":14,"end_line":74,"end_character":20},"in_reply_to":"1a122d0e_8f7d32e9","updated":"2016-04-29 21:52:13.000000000","message":"testing i meant to not check in","commit_id":"53aa6cc924e7575a37400d5398af186de67cc274"}],"notification.yaml":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"4de0dd947b74f7ece4f14f3816b3fa561ccb772d","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    notification_topic: alarm-notifications"},{"line_number":6,"context_line":"    notification_retry_topic: retry-notifications"},{"line_number":7,"context_line":"    periodic:"},{"line_number":8,"context_line":"        1: 1-minute-notifications"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    max_offset_lag: 600  # In seconds, undefined for none"},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1a122d0e_38bbf310","line":8,"range":{"start_line":8,"start_character":13,"end_line":8,"end_character":19},"updated":"2016-05-05 05:33:51.000000000","message":"still think seconds would be better to future-proof the design","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"b93c08dab438aa6674ca63820c5b97d304183284","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    notification_topic: alarm-notifications"},{"line_number":6,"context_line":"    notification_retry_topic: retry-notifications"},{"line_number":7,"context_line":"    periodic:"},{"line_number":8,"context_line":"        1: 1-minute-notifications"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    max_offset_lag: 600  # In seconds, undefined for none"},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1a122d0e_fc5839fb","line":8,"range":{"start_line":8,"start_character":13,"end_line":8,"end_character":19},"in_reply_to":"1a122d0e_38bbf310","updated":"2016-05-05 14:26:46.000000000","message":"would have to change the api to ever handle it in seconds to make sense of getting second resolution of sending this. Again would be happy to change it is you think it makes more sense in this config but would conflict with what we have in our API change of it in minutes.","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"748479ee926a225c3827601cf8e677e40d80693f","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    notification_topic: alarm-notifications"},{"line_number":6,"context_line":"    notification_retry_topic: retry-notifications"},{"line_number":7,"context_line":"    periodic:"},{"line_number":8,"context_line":"        1: 1-minute-notifications"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    max_offset_lag: 600  # In seconds, undefined for none"},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1a122d0e_1037d9e3","line":8,"range":{"start_line":8,"start_character":13,"end_line":8,"end_character":19},"in_reply_to":"1a122d0e_fc5839fb","updated":"2016-05-05 14:35:24.000000000","message":"Talked with Roland on this going to change this to seconds here and in the different repos","commit_id":"ffc2ea537c520c7d42492952631b2062e42abfdf"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"de8b5b5b75cb577c21f21c0396714c64ae5ad56f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    alarm_topic: alarm-state-transitions"},{"line_number":5,"context_line":"    notification_topic: alarm-notifications"},{"line_number":6,"context_line":"    notification_retry_topic: retry-notifications"},{"line_number":7,"context_line":"    periodic:"},{"line_number":8,"context_line":"        60: 60-seconds-notifications"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    max_offset_lag: 600  # In seconds, undefined for none"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"bab6814e_ba53716a","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":12},"updated":"2016-05-20 02:24:51.000000000","message":"So that this isn\u0027t confused, you might want to call this some a little more specific, like \"periodic_notification_topics\". It is a little long, but very clear, and aligns a little more closely with the topic names above.","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"80b1faa1048bc097ee46d7bc2043501d464b566f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    alarm_topic: alarm-state-transitions"},{"line_number":5,"context_line":"    notification_topic: alarm-notifications"},{"line_number":6,"context_line":"    notification_retry_topic: retry-notifications"},{"line_number":7,"context_line":"    periodic:"},{"line_number":8,"context_line":"        60: 60-seconds-notifications"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    max_offset_lag: 600  # In seconds, undefined for none"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"bab6814e_9580fef8","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":12},"in_reply_to":"bab6814e_ba53716a","updated":"2016-05-20 02:39:09.000000000","message":"I was planning on a new format for this file that simplified the topic/processor connection and got rid of the zookeeper paths entirely since I don\u0027t think there\u0027s any value in exposing them to the user.","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"de8b5b5b75cb577c21f21c0396714c64ae5ad56f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    url: 192.168.10.4:2181  # or comma seperated list of multiple hosts"},{"line_number":70,"context_line":"    notification_path: /notification/alarms"},{"line_number":71,"context_line":"    notification_retry_path: /notification/retry"},{"line_number":72,"context_line":"    periodic_path:"},{"line_number":73,"context_line":"        60: /notification/60_seconds"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"logging: # Used in logging.dictConfig"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"bab6814e_dadd95e1","line":72,"range":{"start_line":72,"start_character":4,"end_line":72,"end_character":17},"updated":"2016-05-20 02:24:51.000000000","message":"Similar comment to up above, but something like \"periodic_notification_paths\", seems a little more descriptive.","commit_id":"79189ca811c27a241f357e02771604e2182b2b26"}]}
