)]}'
{"octavia/amphorae/backends/health_daemon/health_daemon.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"49fa6df0bf75fa9547ac66e252fa2d137ec3f1cb","unresolved":false,"context_lines":[{"line_number":41,"context_line":"# ver 1 - Adds UDP listener status when no pool or members are present"},{"line_number":42,"context_line":"# ver 2 - Switch to all listeners in a single combined haproxy config"},{"line_number":43,"context_line":"# ver 3 - Switch stats reporting to deltas"},{"line_number":44,"context_line":"# ver 4 - Added new metric - response time"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"MSG_VER \u003d 4"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"DELTA_METRICS \u003d (\u0027bin\u0027, \u0027bout\u0027, \u0027ereq\u0027, \u0027stot\u0027)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_445e5d45","line":46,"range":{"start_line":44,"start_character":0,"end_line":46,"end_character":11},"updated":"2020-07-24 12:07:38.000000000","message":"The previous commit introduced ver 3, now we\u0027re adding ver 4. Can we only create one version for all those commits? (otherwise version 3 code would be used only in one sha1 in the Octavia repo)","commit_id":"1451e034f86bfe8b55f818be13ba09e0c596b539"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ff1610ceba283ea62e4cd45b98cc0975bfc699b4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"# ver 1 - Adds UDP listener status when no pool or members are present"},{"line_number":42,"context_line":"# ver 2 - Switch to all listeners in a single combined haproxy config"},{"line_number":43,"context_line":"# ver 3 - Switch stats reporting to deltas"},{"line_number":44,"context_line":"# ver 4 - Added new metric - response time"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"MSG_VER \u003d 4"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"DELTA_METRICS \u003d (\u0027bin\u0027, \u0027bout\u0027, \u0027ereq\u0027, \u0027stot\u0027)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_202f50f7","line":46,"range":{"start_line":44,"start_character":0,"end_line":46,"end_character":11},"in_reply_to":"bf51134e_445e5d45","updated":"2020-07-24 18:32:19.000000000","message":"We could try? But there\u0027s no guarantee when this will merge, and technically it is a different change. IMO there\u0027s no reason we have to be stingy with these version numbers, it could go to 99999 and be totally fine.","commit_id":"1451e034f86bfe8b55f818be13ba09e0c596b539"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"49fa6df0bf75fa9547ac66e252fa2d137ec3f1cb","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                    \u0027conns\u0027: listener_stats[\u0027stats\u0027][\u0027scur\u0027],"},{"line_number":256,"context_line":"                    \u0027totconns\u0027: delta_values[\u0027stot\u0027],"},{"line_number":257,"context_line":"                    \u0027ereq\u0027: delta_values[\u0027ereq\u0027],"},{"line_number":258,"context_line":"                    \u0027resptime\u0027: listener_stats[\u0027stats\u0027][\u0027rtime\u0027]"},{"line_number":259,"context_line":"                }"},{"line_number":260,"context_line":"                if pool_status:"},{"line_number":261,"context_line":"                    pool_id \u003d pool_status[\u0027lvs\u0027][\u0027uuid\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_844eb5be","line":258,"range":{"start_line":258,"start_character":32,"end_line":258,"end_character":64},"updated":"2020-07-24 12:07:38.000000000","message":"get_udp_listener_pool_status doesn\u0027t set \u0027rtime\u0027 in the returned dict (and I think we cannot get this value from ipvs/lvs/keepalived)","commit_id":"1451e034f86bfe8b55f818be13ba09e0c596b539"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ff1610ceba283ea62e4cd45b98cc0975bfc699b4","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                    \u0027conns\u0027: listener_stats[\u0027stats\u0027][\u0027scur\u0027],"},{"line_number":256,"context_line":"                    \u0027totconns\u0027: delta_values[\u0027stot\u0027],"},{"line_number":257,"context_line":"                    \u0027ereq\u0027: delta_values[\u0027ereq\u0027],"},{"line_number":258,"context_line":"                    \u0027resptime\u0027: listener_stats[\u0027stats\u0027][\u0027rtime\u0027]"},{"line_number":259,"context_line":"                }"},{"line_number":260,"context_line":"                if pool_status:"},{"line_number":261,"context_line":"                    pool_id \u003d pool_status[\u0027lvs\u0027][\u0027uuid\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_608788d9","line":258,"range":{"start_line":258,"start_character":32,"end_line":258,"end_character":64},"in_reply_to":"bf51134e_844eb5be","updated":"2020-07-24 18:32:19.000000000","message":"I WOULD like to figure out if it\u0027s possible to get this data from health monitors, like HTTP health monitors, though i don\u0027t know how useful it\u0027d be.\nFor now though, yeah, we should maybe set this to just always be None in the meantime? Or just not include it and make sure we\u0027re using .get() with a sane default on the controller side that parses this packet.","commit_id":"1451e034f86bfe8b55f818be13ba09e0c596b539"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ff1610ceba283ea62e4cd45b98cc0975bfc699b4","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                    print(\"rtime!!\", row[\u0027rtime\u0027])"},{"line_number":227,"context_line":"                    listener_id \u003d row[\u0027pxname\u0027]"},{"line_number":228,"context_line":"                    delta_values \u003d calculate_stats_deltas(listener_id, row)"},{"line_number":229,"context_line":"                    if row[\u0027rtime\u0027] \u003d\u003d \u0027\u0027:"},{"line_number":230,"context_line":"                        msg[\u0027listeners\u0027][listener_id] \u003d {"},{"line_number":231,"context_line":"                            \u0027status\u0027: row[\u0027status\u0027],"},{"line_number":232,"context_line":"                            \u0027stats\u0027: {\u0027tx\u0027: delta_values[\u0027bout\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_60d5c8b9","line":229,"updated":"2020-07-24 18:32:19.000000000","message":"Should probably do this with a try/except on whatever error the failed cast raises.","commit_id":"29a2454b7e208f16368bca0c6266ec909dc61e4c"},{"author":{"_account_id":32084,"name":"Anushka Singh","email":"anushka.singh.2511@gmail.com","username":"aannuusshhkkaa"},"change_message_id":"4f4cdfc9a334c1017b620587da8d54a40e3f988b","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                    print(\"rtime!!\", row[\u0027rtime\u0027])"},{"line_number":227,"context_line":"                    listener_id \u003d row[\u0027pxname\u0027]"},{"line_number":228,"context_line":"                    delta_values \u003d calculate_stats_deltas(listener_id, row)"},{"line_number":229,"context_line":"                    if row[\u0027rtime\u0027] \u003d\u003d \u0027\u0027:"},{"line_number":230,"context_line":"                        msg[\u0027listeners\u0027][listener_id] \u003d {"},{"line_number":231,"context_line":"                            \u0027status\u0027: row[\u0027status\u0027],"},{"line_number":232,"context_line":"                            \u0027stats\u0027: {\u0027tx\u0027: delta_values[\u0027bout\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_2c7aa787","line":229,"in_reply_to":"9f560f44_60d5c8b9","updated":"2020-07-27 19:29:51.000000000","message":"Done","commit_id":"29a2454b7e208f16368bca0c6266ec909dc61e4c"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8d4091616caa31102e05e0ea73ec7667ef04c2f7","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                    listener_id \u003d row[\u0027pxname\u0027]"},{"line_number":231,"context_line":"                    delta_values \u003d calculate_stats_deltas(listener_id, row)"},{"line_number":232,"context_line":"                    try:"},{"line_number":233,"context_line":"                        row[\u0027rtime\u0027] \u003d int(row[\u0027rtime\u0027])"},{"line_number":234,"context_line":"                    except ValueError:"},{"line_number":235,"context_line":"                        row[\u0027rtime\u0027] \u003d 0"},{"line_number":236,"context_line":"                    msg[\u0027listeners\u0027][listener_id] \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_a8ec55f4","line":233,"updated":"2020-09-07 22:15:43.000000000","message":"I am curious if this is really the metric you want. It will always be 0 for TCP traffic.","commit_id":"80c8604b65ad88bc96642bcd6b8d1302ab639cad"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"11fe1af7febd3589fe7cf694de7b6d25066fd954","unresolved":true,"context_lines":[{"line_number":230,"context_line":"                    listener_id \u003d row[\u0027pxname\u0027]"},{"line_number":231,"context_line":"                    delta_values \u003d calculate_stats_deltas(listener_id, row)"},{"line_number":232,"context_line":"                    try:"},{"line_number":233,"context_line":"                        row[\u0027rtime\u0027] \u003d int(row[\u0027rtime\u0027])"},{"line_number":234,"context_line":"                    except ValueError:"},{"line_number":235,"context_line":"                        row[\u0027rtime\u0027] \u003d 0"},{"line_number":236,"context_line":"                    msg[\u0027listeners\u0027][listener_id] \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"22192821_a0338e3e","line":233,"in_reply_to":"9f560f44_a8ec55f4","updated":"2021-04-17 16:54:51.000000000","message":"Yeah haproxy doesn\u0027t provide response times for frontends, but only for backends or for servers. And I don\u0027t think we can compute anything for a listener based on those metrics.","commit_id":"80c8604b65ad88bc96642bcd6b8d1302ab639cad"}],"octavia/amphorae/drivers/health/heartbeat_udp.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8d4091616caa31102e05e0ea73ec7667ef04c2f7","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        listener_dict \u003d listener.get(\u0027stats\u0027)"},{"line_number":228,"context_line":"        extras \u003d {}"},{"line_number":229,"context_line":"        if version \u003e\u003d 4:"},{"line_number":230,"context_line":"            extras[\u0027response_time\u0027] \u003d listener_dict.get(\u0027resptime\u0027)"},{"line_number":231,"context_line":"        stats_model \u003d data_models.ListenerStatistics("},{"line_number":232,"context_line":"            listener_id\u003dlistener_id,"},{"line_number":233,"context_line":"            amphora_id\u003damphora_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_48913952","line":230,"range":{"start_line":230,"start_character":52,"end_line":230,"end_character":67},"updated":"2020-09-07 22:15:43.000000000","message":"Couldn\u0027t this end up adding None instead of 0 for UDP stats messages?","commit_id":"80c8604b65ad88bc96642bcd6b8d1302ab639cad"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8d4091616caa31102e05e0ea73ec7667ef04c2f7","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            total_connections\u003dlistener_dict.get(\u0027totconns\u0027),"},{"line_number":238,"context_line":"            request_errors\u003dlistener_dict.get(\u0027ereq\u0027),"},{"line_number":239,"context_line":"            received_time\u003dhealth_message.get(\u0027recv_time\u0027),"},{"line_number":240,"context_line":"            **extras"},{"line_number":241,"context_line":"        )"},{"line_number":242,"context_line":"        LOG.debug(\"Listener %s / Amphora %s stats: %s\","},{"line_number":243,"context_line":"                  listener_id, amphora_id, stats_model.get_stats())"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_e8a00da8","line":240,"updated":"2020-09-07 22:15:43.000000000","message":"We don\u0027t do \"extras\" in the code as it becomes confusing.\nWhy not reduce this to (after the model is created):\nif version \u003e\u003d 4:\n            stats_model.response_time \u003d listener_dict.get(\u0027resptime\u0027)","commit_id":"80c8604b65ad88bc96642bcd6b8d1302ab639cad"}],"octavia/api/root_controller.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8d4091616caa31102e05e0ea73ec7667ef04c2f7","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        self._add_a_version(versions, \u0027v2.19\u0027, \u0027v2\u0027, \u0027SUPPORTED\u0027,"},{"line_number":126,"context_line":"                            \u00272020-05-12T00:00:00Z\u0027, host_url)"},{"line_number":127,"context_line":"        # Add statistic response_time"},{"line_number":128,"context_line":"        self._add_a_version(versions, \u0027v2.20\u0027, \u0027v2\u0027, \u0027CURRENT\u0027,"},{"line_number":129,"context_line":"                            \u00272020-08-17T00:00:00Z\u0027, host_url)"},{"line_number":130,"context_line":"        return {\u0027versions\u0027: versions}"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_6894fd44","line":128,"updated":"2020-09-07 22:15:43.000000000","message":"This needs to be updated on rebase","commit_id":"80c8604b65ad88bc96642bcd6b8d1302ab639cad"}],"octavia/common/stats.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"bbd0b3415607896a38ac8a063a073974c6b011cb","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            statistics.total_connections +\u003d data.total_connections"},{"line_number":66,"context_line":"            statistics.response_time +\u003d data.response_time"},{"line_number":67,"context_line":"            statistics.listeners.append(data)"},{"line_number":68,"context_line":"        statistics.response_time \u003d int("},{"line_number":69,"context_line":"            statistics.response_time / len(lb_db.listeners))"},{"line_number":70,"context_line":"        return statistics"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_608bca1d","line":68,"updated":"2020-07-21 22:32:26.000000000","message":"Don\u0027t do this unless allocated_amphora_count \u003e 0","commit_id":"eadc21b6e42a05db08157c0e3badd02999d8981f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"24e77a93f4370e4c3af165278dd574493ebe0a45","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            statistics.total_connections +\u003d data.total_connections"},{"line_number":66,"context_line":"            statistics.response_time +\u003d data.response_time"},{"line_number":67,"context_line":"            statistics.listeners.append(data)"},{"line_number":68,"context_line":"        statistics.response_time \u003d int("},{"line_number":69,"context_line":"            statistics.response_time / len(lb_db.listeners))"},{"line_number":70,"context_line":"        return statistics"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_c0b0d6e0","line":68,"in_reply_to":"bf51134e_608bca1d","updated":"2020-07-21 22:35:38.000000000","message":"Err, i meant to put this on line 51 above. Similar true here tho.","commit_id":"eadc21b6e42a05db08157c0e3badd02999d8981f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8d4091616caa31102e05e0ea73ec7667ef04c2f7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                statistics.active_connections +\u003d db_l.active_connections"},{"line_number":51,"context_line":"                statistics.response_time +\u003d db_l.response_time"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        # Averaging response times for all amphorae"},{"line_number":54,"context_line":"        if allocated_amphora_count \u003e 0:"},{"line_number":55,"context_line":"            statistics.response_time \u003d int("},{"line_number":56,"context_line":"                statistics.response_time / allocated_amphora_count)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_288045f7","line":53,"updated":"2020-09-07 22:15:43.000000000","message":"Won\u0027t this just dilute the response time value? The secondary amphora will usually have a response time of 0 right? Or a very old number as the metric from haproxy is for the last 1024 requests.","commit_id":"80c8604b65ad88bc96642bcd6b8d1302ab639cad"}],"octavia/db/migration/alembic_migrations/versions/3e9c04c8bc58_add_response_time_metric.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8d4091616caa31102e05e0ea73ec7667ef04c2f7","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# revision identifiers, used by Alembic."},{"line_number":26,"context_line":"revision \u003d \u00273e9c04c8bc58\u0027"},{"line_number":27,"context_line":"down_revision \u003d \u002732e5c35b26a8\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def upgrade():"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_08858107","line":27,"updated":"2020-09-07 22:15:43.000000000","message":"This needs to  be updated on rebase.","commit_id":"80c8604b65ad88bc96642bcd6b8d1302ab639cad"}],"octavia/db/repositories.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"49fa6df0bf75fa9547ac66e252fa2d137ec3f1cb","unresolved":false,"context_lines":[{"line_number":737,"context_line":"                .filter(models.ListenerStatistics.amphora_id \u003d\u003d"},{"line_number":738,"context_line":"                        models.Amphora.id).all())"},{"line_number":739,"context_line":"            amp_stats \u003d []"},{"line_number":740,"context_line":"            for amp in amp_records:"},{"line_number":741,"context_line":"                amp_stat \u003d {consts.LOADBALANCER_ID: amp.load_balancer_id,"},{"line_number":742,"context_line":"                            consts.LISTENER_ID: amp.listener_id,"},{"line_number":743,"context_line":"                            \u0027id\u0027: amp.amphora_id,"},{"line_number":744,"context_line":"                            consts.ACTIVE_CONNECTIONS: amp.active_connections,"},{"line_number":745,"context_line":"                            consts.BYTES_IN: amp.bytes_in,"},{"line_number":746,"context_line":"                            consts.BYTES_OUT: amp.bytes_out,"},{"line_number":747,"context_line":"                            consts.REQUEST_ERRORS: amp.request_errors,"},{"line_number":748,"context_line":"                            consts.TOTAL_CONNECTIONS: amp.total_connections}"},{"line_number":749,"context_line":"                amp_stats.append(amp_stat)"},{"line_number":750,"context_line":"            return amp_stats"},{"line_number":751,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_5f5d8613","line":748,"range":{"start_line":740,"start_character":0,"end_line":748,"end_character":76},"updated":"2020-07-24 12:07:38.000000000","message":"this function needs to be updated too","commit_id":"1451e034f86bfe8b55f818be13ba09e0c596b539"}],"releasenotes/notes/Add-member-response-time-metric-83c4e71889c2c7a5.yaml":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"11fe1af7febd3589fe7cf694de7b6d25066fd954","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added a new metric ``response_time`` to indicate the average response time"},{"line_number":5,"context_line":"    of backend members."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1b366417_af31e549","line":5,"range":{"start_line":5,"start_character":7,"end_line":5,"end_character":22},"updated":"2021-04-17 16:54:51.000000000","message":"it seems the commit tries to implement response time for listeners, and not for pools or members.","commit_id":"80c8604b65ad88bc96642bcd6b8d1302ab639cad"}]}
