)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d9120ffea9b01eca144d85b047b3cf6cbffcd954","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add new healthcheck plugin NeutronAgentsHealthcheck"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add new oslo_middleware healthcheck plugin NeutronAgentsHealthcheck."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I350575d2f67ac81687a1352b712be34fe31b8bc0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3f65232a_22244b0d","line":10,"updated":"2020-10-23 11:14:55.000000000","message":"Any link to RFE/bp?","commit_id":"ba32614d80d9aca25e84a90936e1bd25371f4efd"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"e8cbc4fb79172b4f87af25764b1a7391f8a2caf0","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add new healthcheck plugin NeutronAgentsHealthcheck"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add new oslo_middleware healthcheck plugin NeutronAgentsHealthcheck."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I350575d2f67ac81687a1352b712be34fe31b8bc0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3f65232a_8aa28699","line":10,"in_reply_to":"3f65232a_22244b0d","updated":"2020-10-26 07:54:52.000000000","message":"This is/was a near hit community goal and I can find only this etherpad now:\nhttps://etherpad.opendev.org/p/community-goals","commit_id":"ba32614d80d9aca25e84a90936e1bd25371f4efd"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"55c04c178179a869817bb4924264da137fcb8b54","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add new oslo_middleware healthcheck plugin NeutronAgentsHealthcheck."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I350575d2f67ac81687a1352b712be34fe31b8bc0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3f65232a_9162ae3d","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":6},"updated":"2020-10-27 07:40:03.000000000","message":"Is there a LP bug or spec for this change?","commit_id":"102340dc62b163ba80258d880fb4cd1aa3bf2e5d"}],"neutron/api/healthchecks/agents_health.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"418ca60a2c317dac6a9a61e60b1239d791267560","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def healthcheck(self, server_port):"},{"line_number":35,"context_line":"        LOG.debug(\u0027AAAAA server_port\u003d%s\u0027, server_port)"},{"line_number":36,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_50ea94d7","line":35,"range":{"start_line":35,"start_character":19,"end_line":35,"end_character":24},"updated":"2020-05-29 19:49:00.000000000","message":"I don\u0027t understand what AAAAA signifies ?","commit_id":"65d5ddde22c04835253a4768ca323f820f8aa6ab"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"418ca60a2c317dac6a9a61e60b1239d791267560","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            return pluginbase.HealthcheckResult("},{"line_number":66,"context_line":"                available\u003dFalse,"},{"line_number":67,"context_line":"                reason\u003d\"Not all neutron agents are up, \""},{"line_number":68,"context_line":"                       \"%s in DOWN state from %s\" % (len(down_agents),"},{"line_number":69,"context_line":"                                                     len(agents_state)),"},{"line_number":70,"context_line":"                details\u003dresults"},{"line_number":71,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_70a9987a","line":68,"updated":"2020-05-29 19:49:00.000000000","message":"Can\u0027t this be len(results) then you don\u0027t need L58.","commit_id":"65d5ddde22c04835253a4768ca323f820f8aa6ab"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"a0ec3a93162ae9e4c5e4404e7fbd2a4a81c10836","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        try:"},{"line_number":38,"context_line":"            agents \u003d agent_obj.Agent.get_objects(ctx)"},{"line_number":39,"context_line":"        except db_exc.DBError:"},{"line_number":40,"context_line":"            LOG.warning(\u0027Cannot fetch agents info!\u0027)"},{"line_number":41,"context_line":"            return pluginbase.HealthcheckResult("},{"line_number":42,"context_line":"                available\u003dFalse,"},{"line_number":43,"context_line":"                reason\u003d\u0027Cannot fetch agents information from DB!\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_8948375c","line":40,"range":{"start_line":40,"start_character":45,"end_line":40,"end_character":49},"updated":"2020-06-04 07:44:39.000000000","message":"`information` as below?","commit_id":"2cbca5c1f3cca12c8e8b6d735b207ce0bc33ca4d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"e4105c9027ffcf0ee503aa83334768d1ab2f1565","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        try:"},{"line_number":38,"context_line":"            agents \u003d agent_obj.Agent.get_objects(ctx)"},{"line_number":39,"context_line":"        except db_exc.DBError:"},{"line_number":40,"context_line":"            LOG.warning(\u0027Cannot fetch agents info!\u0027)"},{"line_number":41,"context_line":"            return pluginbase.HealthcheckResult("},{"line_number":42,"context_line":"                available\u003dFalse,"},{"line_number":43,"context_line":"                reason\u003d\u0027Cannot fetch agents information from DB!\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_04b35399","line":40,"range":{"start_line":40,"start_character":45,"end_line":40,"end_character":49},"in_reply_to":"ff570b3c_8948375c","updated":"2020-06-05 11:41:55.000000000","message":"Thanks, done","commit_id":"2cbca5c1f3cca12c8e8b6d735b207ce0bc33ca4d"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"a0ec3a93162ae9e4c5e4404e7fbd2a4a81c10836","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                if not agent.admin_state_up:"},{"line_number":62,"context_line":"                    results[agent.host].append("},{"line_number":63,"context_line":"                        {agent.binary: agent.admin_state_up})"},{"line_number":64,"context_line":"            return pluginbase.HealthcheckResult("},{"line_number":65,"context_line":"                available\u003dFalse,"},{"line_number":66,"context_line":"                reason\u003d\"Some agents are DOWN, \""},{"line_number":67,"context_line":"                       \"%s in DOWN state from %s\" % (len(down_agents),"},{"line_number":68,"context_line":"                                                     len(agents_state)),"},{"line_number":69,"context_line":"                details\u003dresults"},{"line_number":70,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_c99cefc1","line":70,"range":{"start_line":64,"start_character":0,"end_line":70,"end_character":13},"updated":"2020-06-04 07:44:39.000000000","message":"Nit: This could be moved outside if-else clause.\nIn if-else you can construct kwargs dict with keys `available`, `reason`, `details` and return everything at once at the end.","commit_id":"2cbca5c1f3cca12c8e8b6d735b207ce0bc33ca4d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"e4105c9027ffcf0ee503aa83334768d1ab2f1565","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                if not agent.admin_state_up:"},{"line_number":62,"context_line":"                    results[agent.host].append("},{"line_number":63,"context_line":"                        {agent.binary: agent.admin_state_up})"},{"line_number":64,"context_line":"            return pluginbase.HealthcheckResult("},{"line_number":65,"context_line":"                available\u003dFalse,"},{"line_number":66,"context_line":"                reason\u003d\"Some agents are DOWN, \""},{"line_number":67,"context_line":"                       \"%s in DOWN state from %s\" % (len(down_agents),"},{"line_number":68,"context_line":"                                                     len(agents_state)),"},{"line_number":69,"context_line":"                details\u003dresults"},{"line_number":70,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_44a9cb21","line":70,"range":{"start_line":64,"start_character":0,"end_line":70,"end_character":13},"in_reply_to":"ff570b3c_c99cefc1","updated":"2020-06-05 11:41:55.000000000","message":"good idea, done","commit_id":"2cbca5c1f3cca12c8e8b6d735b207ce0bc33ca4d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ac6717f46d10dfeec5bcfaf16c7c605495283279","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        if all(agents_state):"},{"line_number":48,"context_line":"            results \u003d defaultdict(int)"},{"line_number":49,"context_line":"            for agent in agents:"},{"line_number":50,"context_line":"                results[agent.host] +\u003d 1"},{"line_number":51,"context_line":"            resp \u003d {"},{"line_number":52,"context_line":"                \u0027available\u0027: True,"},{"line_number":53,"context_line":"                \u0027reason\u0027: \u0027All neutron agents are UP, total: %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_e8113806","line":50,"updated":"2020-06-22 10:07:20.000000000","message":"nit: just to unify the information provided. Why don\u0027t you do something like in L61-64 for both branches (agents ok, not ok).\n\nresults \u003d defaultdict(list)\nfor agent in agents:\n  results[agent.host].append({agent.binary: agent.admin_state_up})\n\nAnd \"results\" will be returned always independently of the result (ok or not).","commit_id":"a511df4ecef0f12a63dfd39a9765b5ae2e38e034"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ac6717f46d10dfeec5bcfaf16c7c605495283279","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                        {agent.binary: agent.admin_state_up})"},{"line_number":65,"context_line":"            resp \u003d {"},{"line_number":66,"context_line":"                \u0027available\u0027: False,"},{"line_number":67,"context_line":"                \u0027reason\u0027: \u0027Some agents are DOWN, %s in DOWN state from %s\u0027"},{"line_number":68,"context_line":"                          % (len(down_agents), len(agents_state)),"},{"line_number":69,"context_line":"                \u0027details\u0027: results"},{"line_number":70,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_c838b4a1","line":67,"updated":"2020-06-22 10:07:20.000000000","message":"nitty nit: maybe \n\"%s out of %s agents in DOWN state\"\n\nI\u0027m not English native speaker so this suggestion could be wrong.","commit_id":"a511df4ecef0f12a63dfd39a9765b5ae2e38e034"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5eba795b2da7555f17d09e33b76d8d7cf863b748","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            LOG.warning(\u0027Cannot fetch agents information from DB!\u0027)"},{"line_number":41,"context_line":"            return pluginbase.HealthcheckResult("},{"line_number":42,"context_line":"                available\u003dFalse,"},{"line_number":43,"context_line":"                reason\u003d\u0027Cannot fetch agents information from DB!\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        agents_state \u003d [agent.admin_state_up for agent in agents]"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_df18ca82","line":43,"range":{"start_line":43,"start_character":24,"end_line":43,"end_character":64},"updated":"2020-07-28 10:22:59.000000000","message":"this string can be extracted to the e.g. \"message\" varible and reused in 2 places.","commit_id":"6dc87f63679ebbbff617a29cb788e4fa73d3825a"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"771350879b2d1629108d11650ad9e908e6e10884","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            LOG.warning(\u0027Cannot fetch agents information from DB!\u0027)"},{"line_number":41,"context_line":"            return pluginbase.HealthcheckResult("},{"line_number":42,"context_line":"                available\u003dFalse,"},{"line_number":43,"context_line":"                reason\u003d\u0027Cannot fetch agents information from DB!\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        agents_state \u003d [agent.admin_state_up for agent in agents]"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_b3aed895","line":43,"range":{"start_line":43,"start_character":24,"end_line":43,"end_character":64},"in_reply_to":"9f560f44_df18ca82","updated":"2020-07-29 13:22:24.000000000","message":"Done","commit_id":"6dc87f63679ebbbff617a29cb788e4fa73d3825a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d9120ffea9b01eca144d85b047b3cf6cbffcd954","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                available\u003dFalse,"},{"line_number":44,"context_line":"                reason\u003dmsg)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        agents_state \u003d [agent.admin_state_up for agent in agents]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        if all(agents_state):"},{"line_number":49,"context_line":"            results \u003d defaultdict(int)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f65232a_8276ff05","line":46,"range":{"start_line":46,"start_character":24,"end_line":46,"end_character":64},"updated":"2020-10-23 11:14:55.000000000","message":"admin_state_up might be set to False intentionally ( maintenance). Should we instead check for for alive/down?","commit_id":"ba32614d80d9aca25e84a90936e1bd25371f4efd"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"e8cbc4fb79172b4f87af25764b1a7391f8a2caf0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                available\u003dFalse,"},{"line_number":44,"context_line":"                reason\u003dmsg)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        agents_state \u003d [agent.admin_state_up for agent in agents]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        if all(agents_state):"},{"line_number":49,"context_line":"            results \u003d defaultdict(int)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f65232a_aaa9427c","line":46,"range":{"start_line":46,"start_character":24,"end_line":46,"end_character":64},"in_reply_to":"3f65232a_8276ff05","updated":"2020-10-26 07:54:52.000000000","message":"Yeah, I can check with active","commit_id":"ba32614d80d9aca25e84a90936e1bd25371f4efd"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"536470d9132eb17770168adf2cee803ea5b2dd02","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                available\u003dFalse,"},{"line_number":44,"context_line":"                reason\u003dmsg)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        agents_state \u003d [agent.admin_state_up for agent in agents]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        if all(agents_state):"},{"line_number":49,"context_line":"            results \u003d defaultdict(int)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f65232a_22c1d22f","line":46,"range":{"start_line":46,"start_character":24,"end_line":46,"end_character":64},"in_reply_to":"3f65232a_8276ff05","updated":"2020-10-26 18:03:54.000000000","message":"aliveness is a counted property, please check","commit_id":"ba32614d80d9aca25e84a90936e1bd25371f4efd"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"55c04c178179a869817bb4924264da137fcb8b54","unresolved":false,"context_lines":[{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class NeutronAgentsHealthcheck(pluginbase.HealthcheckBaseExtension):"},{"line_number":28,"context_line":"    \"\"\"Neutron Agents healthcheck oslo_middleware plugin."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    This plugin checks neutron agents, and if all agent\u0027s admin_state is True"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f65232a_b111aaaf","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":30},"updated":"2020-10-27 07:40:03.000000000","message":"Looks like this is partially the functions of \"neutron agent-list\" or \"openstack network agent list\". But there are something that IMO is not easily to accomplish. This plugin may need the neutron.conf to get information about the database connection, while the commands just needs RC.\nSo can this middleware be called remotely? Or how to use such plugin? There will have a new API for this? If there is new API, why not directly user agents APIs.","commit_id":"102340dc62b163ba80258d880fb4cd1aa3bf2e5d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f21ac3edf12be13477bebd288270966037a5c77a","unresolved":false,"context_lines":[{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class NeutronAgentsHealthcheck(pluginbase.HealthcheckBaseExtension):"},{"line_number":28,"context_line":"    \"\"\"Neutron Agents healthcheck oslo_middleware plugin."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    This plugin checks neutron agents, and if all agent\u0027s admin_state is True"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f621f24_535ea4e6","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":30},"in_reply_to":"3f65232a_b111aaaf","updated":"2020-10-28 05:38:33.000000000","message":"For the basics of healthcheck plugins:\nhttps://docs.openstack.org/oslo.middleware/latest/reference/healthcheck_plugins.html","commit_id":"102340dc62b163ba80258d880fb4cd1aa3bf2e5d"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"d1021da502eef30cf10bb50e3dae006f0207e8fa","unresolved":false,"context_lines":[{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class NeutronAgentsHealthcheck(pluginbase.HealthcheckBaseExtension):"},{"line_number":28,"context_line":"    \"\"\"Neutron Agents healthcheck oslo_middleware plugin."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    This plugin checks neutron agents, and if all agent\u0027s admin_state is True"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f65232a_2656ff5d","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":30},"in_reply_to":"3f65232a_b111aaaf","updated":"2020-10-27 10:25:05.000000000","message":"I know I\u0027m late to this review, but I mostly agree with Liu here. Why duplicate parts of the agent API? If somebody wants to check agent health we already have everything for it on the API.\n\nTo me the parts that makes sense is a low-cost (very fast) check of:\n\n* did auth work?\n* is the db connection alive or was a trivial db operation successful?\n* is the mq connection alive or was a trivial mq operation successful?\n\nAlso how would the current patch work for an agentless plugin?","commit_id":"102340dc62b163ba80258d880fb4cd1aa3bf2e5d"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"a1c90904207216db69fac6b6dab14754c3d0689b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        try:"},{"line_number":39,"context_line":"            agents \u003d agent_obj.Agent.get_objects(ctx)"},{"line_number":40,"context_line":"        except db_exc.DBError:"},{"line_number":41,"context_line":"            msg \u003d \u0027Cannot fetch agents information from DB!\u0027"},{"line_number":42,"context_line":"            LOG.warning(msg)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f65232a_923aa995","line":39,"updated":"2020-10-27 14:45:14.000000000","message":"In addition, the OVN ML2 driver doesn\u0027t store agents in the DB. Basically, OVN doesn\u0027t use RPC and the agent api looked pretty tied to that, so it overrides the ML2 get_agent() etc. calls and essentially proxies those into lookups in OVSDB, and merges the results with whatever other drivers would return.\n\nIt can certainly be argued that this is an unfortunate hack, but regardless, pulling agents directly from the db won\u0027t currently get any ovn agents.","commit_id":"102340dc62b163ba80258d880fb4cd1aa3bf2e5d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"13c47e98bfa3f09ad47402352f716a96b63d60bf","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                available\u003dFalse,"},{"line_number":45,"context_line":"                reason\u003dmsg)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        agents_alive \u003d ["},{"line_number":48,"context_line":"            not agent_utils.is_agent_down(agent.heartbeat_timestamp)"},{"line_number":49,"context_line":"            for agent in agents]"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f65232a_f61f986d","line":47,"range":{"start_line":47,"start_character":7,"end_line":47,"end_character":20},"updated":"2020-10-27 05:39:34.000000000","message":"Can just count dead_agents here once (no need #62-65)","commit_id":"102340dc62b163ba80258d880fb4cd1aa3bf2e5d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"13c47e98bfa3f09ad47402352f716a96b63d60bf","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                \u0027details\u0027: results"},{"line_number":60,"context_line":"            }"},{"line_number":61,"context_line":"        else:"},{"line_number":62,"context_line":"            dead_agents \u003d ["},{"line_number":63,"context_line":"                agent_utils.is_agent_down(agent.heartbeat_timestamp) for"},{"line_number":64,"context_line":"                agent in agents if agent_utils.is_agent_down("},{"line_number":65,"context_line":"                    agent.heartbeat_timestamp)]"},{"line_number":66,"context_line":"            results \u003d defaultdict(list)"},{"line_number":67,"context_line":"            for agent in agents:"},{"line_number":68,"context_line":"                if agent_utils.is_agent_down(agent.heartbeat_timestamp):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f65232a_362ab08f","line":65,"range":{"start_line":62,"start_character":12,"end_line":65,"end_character":47},"updated":"2020-10-27 05:39:34.000000000","message":"this looks weird and unused","commit_id":"102340dc62b163ba80258d880fb4cd1aa3bf2e5d"}],"releasenotes/notes/agents-healthcheck-plugin-bb016d751859c272.yaml":[{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"a3b7187c57d1d26bf77cd94ea992b03232c118a8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ff570b3c_dc1101b2","line":9,"updated":"2020-06-09 13:32:59.000000000","message":"Does admin_state_up really reflect agent health? I thought it was for the operator to set the agent administratively up or down with the API:\nneutron agent-update $AGENT_ID --admin_state_up False\n\nShould the healthcheck look for the agent aliveness instead?\nneutron agent-list --alive False","commit_id":"dd186504b6ed42ec04ab24bf52cc4c2bbb54145d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5eba795b2da7555f17d09e33b76d8d7cf863b748","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add oslo_middleware healthcheck plugin to check neutron agents healthiness:"},{"line_number":5,"context_line":"    ``NeutronAgentsHealthcheck``. This plugin gives back Ok result if all agents\u0027"},{"line_number":6,"context_line":"    ``admin_state`` is ``True``, otherwise returns the number of failing agents,"},{"line_number":7,"context_line":"    and a dict with the failing agents on given hosts in case ``detailed\u003dTrue``"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9f560f44_123d19bb","line":4,"range":{"start_line":4,"start_character":52,"end_line":4,"end_character":59},"updated":"2020-07-28 10:22:59.000000000","message":"nit: Neutron","commit_id":"6dc87f63679ebbbff617a29cb788e4fa73d3825a"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"771350879b2d1629108d11650ad9e908e6e10884","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add oslo_middleware healthcheck plugin to check neutron agents healthiness:"},{"line_number":5,"context_line":"    ``NeutronAgentsHealthcheck``. This plugin gives back Ok result if all agents\u0027"},{"line_number":6,"context_line":"    ``admin_state`` is ``True``, otherwise returns the number of failing agents,"},{"line_number":7,"context_line":"    and a dict with the failing agents on given hosts in case ``detailed\u003dTrue``"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9f560f44_13950441","line":4,"range":{"start_line":4,"start_character":52,"end_line":4,"end_character":59},"in_reply_to":"9f560f44_123d19bb","updated":"2020-07-29 13:22:24.000000000","message":"Done","commit_id":"6dc87f63679ebbbff617a29cb788e4fa73d3825a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5eba795b2da7555f17d09e33b76d8d7cf863b748","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add oslo_middleware healthcheck plugin to check neutron agents healthiness:"},{"line_number":5,"context_line":"    ``NeutronAgentsHealthcheck``. This plugin gives back Ok result if all agents\u0027"},{"line_number":6,"context_line":"    ``admin_state`` is ``True``, otherwise returns the number of failing agents,"},{"line_number":7,"context_line":"    and a dict with the failing agents on given hosts in case ``detailed\u003dTrue``"},{"line_number":8,"context_line":"    in the ``app:healthcheck`` section in ``api-paste.ini``."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9f560f44_d274419c","line":5,"range":{"start_line":5,"start_character":57,"end_line":5,"end_character":59},"updated":"2020-07-28 10:22:59.000000000","message":"nit: I think that this should be in `` ``","commit_id":"6dc87f63679ebbbff617a29cb788e4fa73d3825a"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"771350879b2d1629108d11650ad9e908e6e10884","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add oslo_middleware healthcheck plugin to check neutron agents healthiness:"},{"line_number":5,"context_line":"    ``NeutronAgentsHealthcheck``. This plugin gives back Ok result if all agents\u0027"},{"line_number":6,"context_line":"    ``admin_state`` is ``True``, otherwise returns the number of failing agents,"},{"line_number":7,"context_line":"    and a dict with the failing agents on given hosts in case ``detailed\u003dTrue``"},{"line_number":8,"context_line":"    in the ``app:healthcheck`` section in ``api-paste.ini``."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9f560f44_f38fb02b","line":5,"range":{"start_line":5,"start_character":57,"end_line":5,"end_character":59},"in_reply_to":"9f560f44_d274419c","updated":"2020-07-29 13:22:24.000000000","message":"Done","commit_id":"6dc87f63679ebbbff617a29cb788e4fa73d3825a"}]}
