)]}'
{"doc/source/configuration/metering-agent.rst":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d8846cfd1ff4a5afd2480fdaf3bd1fc9968c1c9e","unresolved":false,"context_lines":[{"line_number":129,"context_line":"  .. code-block:: json"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"     {\"resource_id\": \"router-f0f745d9a59c47fdbbdd187d718f9e41-label-00c714f1"},{"line_number":132,"context_line":"-49c8-462c-8f5d-f05f21e035c7\","},{"line_number":133,"context_line":"      \"tenant_id\": \"f0f745d9a59c47fdbbdd187d718f9e41\","},{"line_number":134,"context_line":"      \"first_update\": 1591058790,"},{"line_number":135,"context_line":"      \"bytes\": 0,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf51134e_992685b7","line":132,"updated":"2020-06-15 18:45:54.000000000","message":"docs: Block quote ends without a blank line; unexpected unindent.","commit_id":"4b30c83f6472ecc27ede195a73d374fb1921b183"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f28b042bd45a0546b88ab6182ff55126311f5cc9","unresolved":false,"context_lines":[{"line_number":20,"context_line":"   is ``neutron.services.metering.drivers.noop``, which means, we do not"},{"line_number":21,"context_line":"   execute anything in the networking host. The only driver implemented so far"},{"line_number":22,"context_line":"   is ``neutron.services.metering.drivers.iptables.iptables_driver.IptablesMeteringDriver``."},{"line_number":23,"context_line":"   Therefore, only ``iptables`` is support so far;"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"*  ``measure_interval``: the interval used to gather the bytes and packets"},{"line_number":26,"context_line":"   information from the network plane. The default value is ``30`` seconds;"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_522f6aa6","line":23,"range":{"start_line":23,"start_character":35,"end_line":23,"end_character":42},"updated":"2020-07-22 15:51:18.000000000","message":"is supported","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"33b345bb0189615a35b7bb31caa341385520cb86","unresolved":false,"context_lines":[{"line_number":20,"context_line":"   is ``neutron.services.metering.drivers.noop``, which means, we do not"},{"line_number":21,"context_line":"   execute anything in the networking host. The only driver implemented so far"},{"line_number":22,"context_line":"   is ``neutron.services.metering.drivers.iptables.iptables_driver.IptablesMeteringDriver``."},{"line_number":23,"context_line":"   Therefore, only ``iptables`` is support so far;"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"*  ``measure_interval``: the interval used to gather the bytes and packets"},{"line_number":26,"context_line":"   information from the network plane. The default value is ``30`` seconds;"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_34cba2a5","line":23,"range":{"start_line":23,"start_character":35,"end_line":23,"end_character":42},"in_reply_to":"bf51134e_522f6aa6","updated":"2020-07-23 20:47:13.000000000","message":"Done","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f28b042bd45a0546b88ab6182ff55126311f5cc9","unresolved":false,"context_lines":[{"line_number":22,"context_line":"   is ``neutron.services.metering.drivers.iptables.iptables_driver.IptablesMeteringDriver``."},{"line_number":23,"context_line":"   Therefore, only ``iptables`` is support so far;"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"*  ``measure_interval``: the interval used to gather the bytes and packets"},{"line_number":26,"context_line":"   information from the network plane. The default value is ``30`` seconds;"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"*  ``report_interval``: the interval used to generated the report (message)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_321bd680","line":25,"range":{"start_line":25,"start_character":37,"end_line":25,"end_character":38},"updated":"2020-07-22 15:51:18.000000000","message":"(in seconds)","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"33b345bb0189615a35b7bb31caa341385520cb86","unresolved":false,"context_lines":[{"line_number":22,"context_line":"   is ``neutron.services.metering.drivers.iptables.iptables_driver.IptablesMeteringDriver``."},{"line_number":23,"context_line":"   Therefore, only ``iptables`` is support so far;"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"*  ``measure_interval``: the interval used to gather the bytes and packets"},{"line_number":26,"context_line":"   information from the network plane. The default value is ``30`` seconds;"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"*  ``report_interval``: the interval used to generated the report (message)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_54bf36fb","line":25,"range":{"start_line":25,"start_character":37,"end_line":25,"end_character":38},"in_reply_to":"bf51134e_321bd680","updated":"2020-07-23 20:47:13.000000000","message":"Done","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f28b042bd45a0546b88ab6182ff55126311f5cc9","unresolved":false,"context_lines":[{"line_number":25,"context_line":"*  ``measure_interval``: the interval used to gather the bytes and packets"},{"line_number":26,"context_line":"   information from the network plane. The default value is ``30`` seconds;"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"*  ``report_interval``: the interval used to generated the report (message)"},{"line_number":29,"context_line":"   of the data that is gathered. The default value is ``300`` seconds."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"*  ``granular_traffic_data``: Defines if the metering agent driver should"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_72154e49","line":28,"range":{"start_line":28,"start_character":36,"end_line":28,"end_character":37},"updated":"2020-07-22 15:51:18.000000000","message":"(in seconds)","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"33b345bb0189615a35b7bb31caa341385520cb86","unresolved":false,"context_lines":[{"line_number":25,"context_line":"*  ``measure_interval``: the interval used to gather the bytes and packets"},{"line_number":26,"context_line":"   information from the network plane. The default value is ``30`` seconds;"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"*  ``report_interval``: the interval used to generated the report (message)"},{"line_number":29,"context_line":"   of the data that is gathered. The default value is ``300`` seconds."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"*  ``granular_traffic_data``: Defines if the metering agent driver should"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_f435aaa9","line":28,"range":{"start_line":28,"start_character":36,"end_line":28,"end_character":37},"in_reply_to":"bf51134e_72154e49","updated":"2020-07-23 20:47:13.000000000","message":"Done","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f28b042bd45a0546b88ab6182ff55126311f5cc9","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"  .. code-block:: json"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"     {\"pkts\": \"\u003cthe number of packets that matched the rules of the labels\u003e\","},{"line_number":46,"context_line":"      \"bytes\": \"\u003cthe number of bytes that matched the rules of the labels\u003e\","},{"line_number":47,"context_line":"      \"time\": \"\u003cseconds between the first data collection and the last one\u003e\","},{"line_number":48,"context_line":"      \"first_update\": \"timeutils.utcnow_ts() of the first collection\","}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_151b1c73","line":45,"range":{"start_line":45,"start_character":5,"end_line":45,"end_character":6},"updated":"2020-07-22 15:51:18.000000000","message":"I think this JSON could be better formatted.","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"33b345bb0189615a35b7bb31caa341385520cb86","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"  .. code-block:: json"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"     {\"pkts\": \"\u003cthe number of packets that matched the rules of the labels\u003e\","},{"line_number":46,"context_line":"      \"bytes\": \"\u003cthe number of bytes that matched the rules of the labels\u003e\","},{"line_number":47,"context_line":"      \"time\": \"\u003cseconds between the first data collection and the last one\u003e\","},{"line_number":48,"context_line":"      \"first_update\": \"timeutils.utcnow_ts() of the first collection\","}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_b40172b2","line":45,"range":{"start_line":45,"start_character":5,"end_line":45,"end_character":6},"in_reply_to":"bf51134e_151b1c73","updated":"2020-07-23 20:47:13.000000000","message":"Done","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f28b042bd45a0546b88ab6182ff55126311f5cc9","unresolved":false,"context_lines":[{"line_number":70,"context_line":"The granular (``granular_traffic_data \u003d True``) traffic messages allow"},{"line_number":71,"context_line":"operators to obtain granular information for shared metering labels."},{"line_number":72,"context_line":"Therefore, a single label, when configured as ``shared\u003dTrue`` and applied in"},{"line_number":73,"context_line":"all tenant/routers of the environment, it will generated data in a granular"},{"line_number":74,"context_line":"fashion."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"It (the metering agent) will account the traffic counter data in the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_15495c5f","line":73,"range":{"start_line":73,"start_character":47,"end_line":73,"end_character":56},"updated":"2020-07-22 15:51:18.000000000","message":"generate","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"33b345bb0189615a35b7bb31caa341385520cb86","unresolved":false,"context_lines":[{"line_number":70,"context_line":"The granular (``granular_traffic_data \u003d True``) traffic messages allow"},{"line_number":71,"context_line":"operators to obtain granular information for shared metering labels."},{"line_number":72,"context_line":"Therefore, a single label, when configured as ``shared\u003dTrue`` and applied in"},{"line_number":73,"context_line":"all tenant/routers of the environment, it will generated data in a granular"},{"line_number":74,"context_line":"fashion."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"It (the metering agent) will account the traffic counter data in the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_3459e2fd","line":73,"range":{"start_line":73,"start_character":47,"end_line":73,"end_character":56},"in_reply_to":"bf51134e_15495c5f","updated":"2020-07-23 20:47:13.000000000","message":"Done","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f28b042bd45a0546b88ab6182ff55126311f5cc9","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"  .. code-block:: json"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"     {\"resource_id\": \"router-f0f745d9a59c47fdbbdd187d718f9e41-label-00c714f1-49c8-462c-8f5d-f05f21e035c7\","},{"line_number":132,"context_line":"      \"tenant_id\": \"f0f745d9a59c47fdbbdd187d718f9e41\","},{"line_number":133,"context_line":"      \"first_update\": 1591058790,"},{"line_number":134,"context_line":"      \"bytes\": 0,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_75425811","line":131,"range":{"start_line":131,"start_character":4,"end_line":131,"end_character":6},"updated":"2020-07-22 15:51:18.000000000","message":"The same as the other JSON","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"33b345bb0189615a35b7bb31caa341385520cb86","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"  .. code-block:: json"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"     {\"resource_id\": \"router-f0f745d9a59c47fdbbdd187d718f9e41-label-00c714f1-49c8-462c-8f5d-f05f21e035c7\","},{"line_number":132,"context_line":"      \"tenant_id\": \"f0f745d9a59c47fdbbdd187d718f9e41\","},{"line_number":133,"context_line":"      \"first_update\": 1591058790,"},{"line_number":134,"context_line":"      \"bytes\": 0,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_54f296e4","line":131,"range":{"start_line":131,"start_character":4,"end_line":131,"end_character":6},"in_reply_to":"bf51134e_75425811","updated":"2020-07-23 20:47:13.000000000","message":"Done","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f28b042bd45a0546b88ab6182ff55126311f5cc9","unresolved":false,"context_lines":[{"line_number":142,"context_line":"      }"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"The ``resource_id`` is a unique identified for the \"resource\" being"},{"line_number":145,"context_line":"monitored. Here we consider a resource to be any of of the granularities"},{"line_number":146,"context_line":"that we handle."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Sample of metering_agent.ini"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_b56cf09d","line":145,"range":{"start_line":145,"start_character":52,"end_line":145,"end_character":54},"updated":"2020-07-22 15:51:18.000000000","message":"duplicated \u0027of\u0027","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"33b345bb0189615a35b7bb31caa341385520cb86","unresolved":false,"context_lines":[{"line_number":142,"context_line":"      }"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"The ``resource_id`` is a unique identified for the \"resource\" being"},{"line_number":145,"context_line":"monitored. Here we consider a resource to be any of of the granularities"},{"line_number":146,"context_line":"that we handle."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Sample of metering_agent.ini"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_74723a7e","line":145,"range":{"start_line":145,"start_character":52,"end_line":145,"end_character":54},"in_reply_to":"bf51134e_b56cf09d","updated":"2020-07-23 20:47:13.000000000","message":"Done","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"133a3f8fbe125c1f72da06b17c3300e037958fdb","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"The ``tenant_id`` is only consistent when labels are not shared. Otherwise,"},{"line_number":64,"context_line":"they will contain the project id of the last router of the last tenant"},{"line_number":65,"context_line":"processed when the agent is started up. In other others, it is better not"},{"line_number":66,"context_line":"use it when dealing with shared labels."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"All of the messages generated in this configuration mode are sent to the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_f002c16e","line":65,"range":{"start_line":65,"start_character":40,"end_line":65,"end_character":55},"updated":"2020-08-03 08:39:51.000000000","message":"is that correct? Shouldn\u0027t be \"in other words\"?","commit_id":"de2831e5f245ec4c3b9ee153a952ecb068422f0b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"f7612f46a239f297fed1789cc09a34bd0eb93cb4","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"The ``tenant_id`` is only consistent when labels are not shared. Otherwise,"},{"line_number":64,"context_line":"they will contain the project id of the last router of the last tenant"},{"line_number":65,"context_line":"processed when the agent is started up. In other others, it is better not"},{"line_number":66,"context_line":"use it when dealing with shared labels."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"All of the messages generated in this configuration mode are sent to the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_4233da62","line":65,"range":{"start_line":65,"start_character":40,"end_line":65,"end_character":55},"in_reply_to":"9f560f44_f002c16e","updated":"2020-08-03 21:05:56.000000000","message":"Done","commit_id":"de2831e5f245ec4c3b9ee153a952ecb068422f0b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"133a3f8fbe125c1f72da06b17c3300e037958fdb","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* ``router`` -- all of the traffic counter for all labels that are assigned to"},{"line_number":88,"context_line":"  the router."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* ``tenant`` -- all of the traffic counters for all labels of all routers that"},{"line_number":91,"context_line":"  a tenant has."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* ``router-label`` -- all of the traffic counters for a router and the given"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_d02cdd03","line":90,"range":{"start_line":90,"start_character":4,"end_line":90,"end_character":10},"updated":"2020-08-03 08:39:51.000000000","message":"I wonder if it wouldn\u0027t be maybe better to use \"project\" instead of \"tenant\" as we basically moved out from \"tenant\" to \"project\" in many (all) other places.","commit_id":"de2831e5f245ec4c3b9ee153a952ecb068422f0b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"796759926687c7e4ec78f4e94bd21b7af37daea5","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* ``router`` -- all of the traffic counter for all labels that are assigned to"},{"line_number":88,"context_line":"  the router."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* ``tenant`` -- all of the traffic counters for all labels of all routers that"},{"line_number":91,"context_line":"  a tenant has."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* ``router-label`` -- all of the traffic counters for a router and the given"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_bb04864b","line":90,"range":{"start_line":90,"start_character":4,"end_line":90,"end_character":10},"in_reply_to":"9f560f44_221186ad","updated":"2020-08-05 09:16:02.000000000","message":"Although this is still an ongoing effort inside the community, new code should refer to \"project\" instead of \"tenant\".\n\nSince https://bugs.launchpad.net/neutron/+bug/1503428 and https://openstack.nimeyo.com/67622/openstack-dev-neutron-rename-tenant-to-project-discussion, we started this unfinished migration.","commit_id":"de2831e5f245ec4c3b9ee153a952ecb068422f0b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"a3ca9a3e4b600f81e4484acfb75ac1aaf4c06f49","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* ``router`` -- all of the traffic counter for all labels that are assigned to"},{"line_number":88,"context_line":"  the router."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* ``tenant`` -- all of the traffic counters for all labels of all routers that"},{"line_number":91,"context_line":"  a tenant has."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* ``router-label`` -- all of the traffic counters for a router and the given"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_189933c3","line":90,"range":{"start_line":90,"start_character":4,"end_line":90,"end_character":10},"in_reply_to":"9f560f44_bb04864b","updated":"2020-08-05 13:50:55.000000000","message":"Done","commit_id":"de2831e5f245ec4c3b9ee153a952ecb068422f0b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"f7612f46a239f297fed1789cc09a34bd0eb93cb4","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* ``router`` -- all of the traffic counter for all labels that are assigned to"},{"line_number":88,"context_line":"  the router."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* ``tenant`` -- all of the traffic counters for all labels of all routers that"},{"line_number":91,"context_line":"  a tenant has."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* ``router-label`` -- all of the traffic counters for a router and the given"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_221186ad","line":90,"range":{"start_line":90,"start_character":4,"end_line":90,"end_character":10},"in_reply_to":"9f560f44_d02cdd03","updated":"2020-08-03 21:05:56.000000000","message":"Good question. I am not sure what is best. I only used tenant, because inside, in the code, we address it as tenant.\nI can change though, if you guys think that `project` would be better.","commit_id":"de2831e5f245ec4c3b9ee153a952ecb068422f0b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"133a3f8fbe125c1f72da06b17c3300e037958fdb","unresolved":false,"context_lines":[{"line_number":93,"context_line":"* ``router-label`` -- all of the traffic counters for a router and the given"},{"line_number":94,"context_line":"  label."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"* ``tenant-label`` -- all of the traffic counters for all routers of a tenant"},{"line_number":97,"context_line":"  that have a given label."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Each granularity presented here is sent to the message bus with different"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_b031695d","line":96,"range":{"start_line":96,"start_character":4,"end_line":96,"end_character":10},"updated":"2020-08-03 08:39:51.000000000","message":"same here","commit_id":"de2831e5f245ec4c3b9ee153a952ecb068422f0b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"f7612f46a239f297fed1789cc09a34bd0eb93cb4","unresolved":false,"context_lines":[{"line_number":93,"context_line":"* ``router-label`` -- all of the traffic counters for a router and the given"},{"line_number":94,"context_line":"  label."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"* ``tenant-label`` -- all of the traffic counters for all routers of a tenant"},{"line_number":97,"context_line":"  that have a given label."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Each granularity presented here is sent to the message bus with different"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_6226de17","line":96,"range":{"start_line":96,"start_character":4,"end_line":96,"end_character":10},"in_reply_to":"9f560f44_b031695d","updated":"2020-08-03 21:05:56.000000000","message":"Same as before.","commit_id":"de2831e5f245ec4c3b9ee153a952ecb068422f0b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14f5cffcc31d8e072b1ddd425baabe2408159e39","unresolved":false,"context_lines":[{"line_number":60,"context_line":"On the other hand, the ``time`` represents the difference between those two"},{"line_number":61,"context_line":"timestamp."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"The ``tenant_id`` is only consistent when labels are not shared. Otherwise,"},{"line_number":64,"context_line":"they will contain the project id of the last router of the last project"},{"line_number":65,"context_line":"processed when the agent is started up. In other words, it is better not"},{"line_number":66,"context_line":"use it when dealing with shared labels."}],"source_content_type":"text/x-rst","patch_set":7,"id":"9f560f44_ac6fe98f","line":63,"range":{"start_line":63,"start_character":6,"end_line":63,"end_character":15},"updated":"2020-08-27 10:47:20.000000000","message":"project_id","commit_id":"ea549afca0d6db3c2571ae90631cd1e4877ad018"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"8264c043cf3eafc492de4dc5bcdec0c983dcde99","unresolved":false,"context_lines":[{"line_number":60,"context_line":"On the other hand, the ``time`` represents the difference between those two"},{"line_number":61,"context_line":"timestamp."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"The ``tenant_id`` is only consistent when labels are not shared. Otherwise,"},{"line_number":64,"context_line":"they will contain the project id of the last router of the last project"},{"line_number":65,"context_line":"processed when the agent is started up. In other words, it is better not"},{"line_number":66,"context_line":"use it when dealing with shared labels."}],"source_content_type":"text/x-rst","patch_set":7,"id":"9f560f44_eceba1a0","line":63,"range":{"start_line":63,"start_character":6,"end_line":63,"end_character":15},"in_reply_to":"9f560f44_ac6fe98f","updated":"2020-08-27 12:08:42.000000000","message":"I cannot change this one. It was like this before. Therefore, I maintained it for backward compatibility. I am just documenting it here for clarity because people (the ones I see using it) normally are not aware of these behaviors.","commit_id":"ea549afca0d6db3c2571ae90631cd1e4877ad018"}],"neutron/conf/services/metering_agent.py":[{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f28b042bd45a0546b88ab6182ff55126311f5cc9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def register_metering_agent_opts(conf\u003dcfg.CONF):"},{"line_number":39,"context_line":"    conf.register_opts(metering_agent_opts)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_15015cb0","line":38,"updated":"2020-07-22 15:51:18.000000000","message":"This change impacts in this patch?","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"33b345bb0189615a35b7bb31caa341385520cb86","unresolved":false,"context_lines":[{"line_number":35,"context_line":"]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def register_metering_agent_opts(conf\u003dcfg.CONF):"},{"line_number":39,"context_line":"    conf.register_opts(metering_agent_opts)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_f42c8a4b","line":38,"in_reply_to":"bf51134e_15015cb0","updated":"2020-07-23 20:47:13.000000000","message":"I just changed, because there is an import that uses the name \"cfg\". Therefore, at first sight, it might be a bit confusing. That is why I renamed the parameter to conf. Would you like me to revert that?","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"133a3f8fbe125c1f72da06b17c3300e037958fdb","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                       \"traffic data in a granular fashion, instead of \""},{"line_number":32,"context_line":"                       \"grouping all of the traffic data for all tenants and \""},{"line_number":33,"context_line":"                       \"routers where the labels were assigned to. The default\""},{"line_number":34,"context_line":"                       \" value is `False` for backward compatibility.\")),"},{"line_number":35,"context_line":"]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_b01a09c9","line":34,"range":{"start_line":34,"start_character":24,"end_line":34,"end_character":25},"updated":"2020-08-03 08:39:51.000000000","message":"nitty nit: general convention is to left such space at the end of the above line, not at the beginning of the line.","commit_id":"de2831e5f245ec4c3b9ee153a952ecb068422f0b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"f7612f46a239f297fed1789cc09a34bd0eb93cb4","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                       \"traffic data in a granular fashion, instead of \""},{"line_number":32,"context_line":"                       \"grouping all of the traffic data for all tenants and \""},{"line_number":33,"context_line":"                       \"routers where the labels were assigned to. The default\""},{"line_number":34,"context_line":"                       \" value is `False` for backward compatibility.\")),"},{"line_number":35,"context_line":"]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_a21c76c1","line":34,"range":{"start_line":34,"start_character":24,"end_line":34,"end_character":25},"in_reply_to":"9f560f44_b01a09c9","updated":"2020-08-03 21:05:56.000000000","message":"Done","commit_id":"de2831e5f245ec4c3b9ee153a952ecb068422f0b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14f5cffcc31d8e072b1ddd425baabe2408159e39","unresolved":false,"context_lines":[{"line_number":36,"context_line":"]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def register_metering_agent_opts(conf\u003dcfg.CONF):"},{"line_number":40,"context_line":"    conf.register_opts(metering_agent_opts)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_4c060dd0","line":39,"range":{"start_line":39,"start_character":33,"end_line":39,"end_character":37},"updated":"2020-08-27 10:47:20.000000000","message":"unrelated","commit_id":"ea549afca0d6db3c2571ae90631cd1e4877ad018"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"8264c043cf3eafc492de4dc5bcdec0c983dcde99","unresolved":false,"context_lines":[{"line_number":36,"context_line":"]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def register_metering_agent_opts(conf\u003dcfg.CONF):"},{"line_number":40,"context_line":"    conf.register_opts(metering_agent_opts)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_cc569d5c","line":39,"range":{"start_line":39,"start_character":33,"end_line":39,"end_character":37},"in_reply_to":"9f560f44_4c060dd0","updated":"2020-08-27 12:08:42.000000000","message":"Done","commit_id":"ea549afca0d6db3c2571ae90631cd1e4877ad018"}],"neutron/services/metering/agents/metering_agent.py":[{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f28b042bd45a0546b88ab6182ff55126311f5cc9","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def set_tenant_id_for_granular_traffic_data(self, data, key):"},{"line_number":135,"context_line":"        if \"label-\" in key:"},{"line_number":136,"context_line":"            actual_label_id \u003d key.split(\"label-\")[1]"},{"line_number":137,"context_line":"            is_label_shared \u003d self.metering_labels[actual_label_id][\u0027shared\u0027]"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"            data[\u0027label_id\u0027] \u003d actual_label_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_d801db3b","line":136,"updated":"2020-07-22 15:51:18.000000000","message":"I think here you could use something like:\n\nother_ids, actual_label_id \u003d key.split(\"label-\")","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"33b345bb0189615a35b7bb31caa341385520cb86","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def set_tenant_id_for_granular_traffic_data(self, data, key):"},{"line_number":135,"context_line":"        if \"label-\" in key:"},{"line_number":136,"context_line":"            actual_label_id \u003d key.split(\"label-\")[1]"},{"line_number":137,"context_line":"            is_label_shared \u003d self.metering_labels[actual_label_id][\u0027shared\u0027]"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"            data[\u0027label_id\u0027] \u003d actual_label_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_34d0c2c9","line":136,"in_reply_to":"bf51134e_d801db3b","updated":"2020-07-23 20:47:13.000000000","message":"Done","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f28b042bd45a0546b88ab6182ff55126311f5cc9","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            data[\u0027label_shared\u0027] \u003d is_label_shared"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"            if is_label_shared:"},{"line_number":144,"context_line":"                self.configure_tenant_id_shared_labels(data, key)"},{"line_number":145,"context_line":"            else:"},{"line_number":146,"context_line":"                data[\u0027tenant_id\u0027] \u003d self.label_tenant_id.get(key)"},{"line_number":147,"context_line":"        elif \"tenant-\" in key:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_78a08f43","line":144,"updated":"2020-07-22 15:51:18.000000000","message":"then you could pass the other_ids[:-1] here instead of the key","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"33b345bb0189615a35b7bb31caa341385520cb86","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            data[\u0027label_shared\u0027] \u003d is_label_shared"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"            if is_label_shared:"},{"line_number":144,"context_line":"                self.configure_tenant_id_shared_labels(data, key)"},{"line_number":145,"context_line":"            else:"},{"line_number":146,"context_line":"                data[\u0027tenant_id\u0027] \u003d self.label_tenant_id.get(key)"},{"line_number":147,"context_line":"        elif \"tenant-\" in key:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_f4c5aa0b","line":144,"in_reply_to":"bf51134e_78a08f43","updated":"2020-07-23 20:47:13.000000000","message":"Done","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f28b042bd45a0546b88ab6182ff55126311f5cc9","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def configure_tenant_id_shared_labels(self, data, key):"},{"line_number":157,"context_line":"        if \"tenant-\" in key:"},{"line_number":158,"context_line":"            tenant_id_with_label \u003d key.split(\"tenant-\")[1]"},{"line_number":159,"context_line":"            tenant_id \u003d tenant_id_with_label.split(\"-label\")[0]"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"            data[\u0027tenant_id\u0027] \u003d tenant_id"},{"line_number":162,"context_line":"        elif \"router-\" in key:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_b8586757","line":159,"updated":"2020-07-22 15:51:18.000000000","message":"now you can remove this line","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"33b345bb0189615a35b7bb31caa341385520cb86","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def configure_tenant_id_shared_labels(self, data, key):"},{"line_number":157,"context_line":"        if \"tenant-\" in key:"},{"line_number":158,"context_line":"            tenant_id_with_label \u003d key.split(\"tenant-\")[1]"},{"line_number":159,"context_line":"            tenant_id \u003d tenant_id_with_label.split(\"-label\")[0]"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"            data[\u0027tenant_id\u0027] \u003d tenant_id"},{"line_number":162,"context_line":"        elif \"router-\" in key:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_9449ceb8","line":159,"in_reply_to":"bf51134e_b8586757","updated":"2020-07-23 20:47:13.000000000","message":"Done","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f28b042bd45a0546b88ab6182ff55126311f5cc9","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            data[\u0027tenant_id\u0027] \u003d tenant_id"},{"line_number":162,"context_line":"        elif \"router-\" in key:"},{"line_number":163,"context_line":"            router_id_with_label \u003d key.split(\"router-\")[1]"},{"line_number":164,"context_line":"            router_id \u003d router_id_with_label.split(\"-label\")[0]"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"            data[\u0027router_id\u0027] \u003d router_id"},{"line_number":167,"context_line":"            self.configure_tenant_id_based_on_router(data, router_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_18587354","line":164,"updated":"2020-07-22 15:51:18.000000000","message":"and you can also remove this line","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"33b345bb0189615a35b7bb31caa341385520cb86","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            data[\u0027tenant_id\u0027] \u003d tenant_id"},{"line_number":162,"context_line":"        elif \"router-\" in key:"},{"line_number":163,"context_line":"            router_id_with_label \u003d key.split(\"router-\")[1]"},{"line_number":164,"context_line":"            router_id \u003d router_id_with_label.split(\"-label\")[0]"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"            data[\u0027router_id\u0027] \u003d router_id"},{"line_number":167,"context_line":"            self.configure_tenant_id_based_on_router(data, router_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_b44e92be","line":164,"in_reply_to":"bf51134e_18587354","updated":"2020-07-23 20:47:13.000000000","message":"Done","commit_id":"200d3e1134f8cb31215a9ed274dbd32051ffbe35"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14f5cffcc31d8e072b1ddd425baabe2408159e39","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            raise SystemExit(_(\u0027A metering driver must be specified\u0027))"},{"line_number":89,"context_line":"        self.metering_driver \u003d driverutils.load_metering_driver(self,"},{"line_number":90,"context_line":"                                                                self.conf)"},{"line_number":91,"context_line":"        self.metering_driver.granular_traffic_data \u003d \\"},{"line_number":92,"context_line":"            self.conf.granular_traffic_data"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _metering_notification(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_ec13a1ff","line":91,"updated":"2020-08-27 10:47:20.000000000","message":"This should be done here: https://review.opendev.org/#/c/735605/7/neutron/services/metering/drivers/abstract_driver.py@22","commit_id":"ea549afca0d6db3c2571ae90631cd1e4877ad018"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"8264c043cf3eafc492de4dc5bcdec0c983dcde99","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            raise SystemExit(_(\u0027A metering driver must be specified\u0027))"},{"line_number":89,"context_line":"        self.metering_driver \u003d driverutils.load_metering_driver(self,"},{"line_number":90,"context_line":"                                                                self.conf)"},{"line_number":91,"context_line":"        self.metering_driver.granular_traffic_data \u003d \\"},{"line_number":92,"context_line":"            self.conf.granular_traffic_data"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _metering_notification(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_0cfb7546","line":91,"in_reply_to":"9f560f44_ec13a1ff","updated":"2020-08-27 12:08:42.000000000","message":"Done","commit_id":"ea549afca0d6db3c2571ae90631cd1e4877ad018"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"77f7b6b98ee3a16b4bcfd4a270d7e32bcd5be5cd","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from neutron.conf.services import metering_agent"},{"line_number":35,"context_line":"from neutron import manager"},{"line_number":36,"context_line":"from neutron import service as neutron_service"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"from neutron.services.metering.drivers import abstract_driver as driver"},{"line_number":39,"context_line":"from neutron.services.metering.drivers import utils as driverutils"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9f560f44_67d703c1","line":37,"updated":"2020-09-08 13:23:05.000000000","message":"nit: this new line seems unnecessary","commit_id":"bd1467b47c3c55f098722fca79a12dfc57ea6e18"}],"neutron/services/metering/drivers/abstract_driver.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e87ea0dd602d7d6e085a730a59e9a4bffd2aea0e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        self.conf \u003d conf or cfg.CONF"},{"line_number":25,"context_line":"        self.plugin \u003d plugin"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"        self.granular_traffic_data \u003d conf.granular_traffic_data"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @abc.abstractmethod"},{"line_number":30,"context_line":"    def update_routers(self, context, routers):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_fc9aaf5f","line":27,"range":{"start_line":27,"start_character":37,"end_line":27,"end_character":41},"updated":"2020-09-04 09:36:38.000000000","message":"shouldn\u0027t this be self.conf ?","commit_id":"662f72b4c5deeae89154353c51b1451271903fa1"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"782b71d769531afb760c99050710b62658618a25","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        self.conf \u003d conf or cfg.CONF"},{"line_number":25,"context_line":"        self.plugin \u003d plugin"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"        self.granular_traffic_data \u003d conf.granular_traffic_data"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @abc.abstractmethod"},{"line_number":30,"context_line":"    def update_routers(self, context, routers):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_477028db","line":27,"range":{"start_line":27,"start_character":37,"end_line":27,"end_character":41},"in_reply_to":"9f560f44_fc9aaf5f","updated":"2020-09-04 12:21:19.000000000","message":"yes, it should. \nGood catch.","commit_id":"662f72b4c5deeae89154353c51b1451271903fa1"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e87ea0dd602d7d6e085a730a59e9a4bffd2aea0e","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @staticmethod"},{"line_number":58,"context_line":"    def get_router_traffic_counter_key(router_id):"},{"line_number":59,"context_line":"        return \"router-%s\" % router_id"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @staticmethod"},{"line_number":62,"context_line":"    def get_project_traffic_counter_key(tenant_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_3c9c275a","line":59,"range":{"start_line":59,"start_character":16,"end_line":59,"end_character":23},"updated":"2020-09-04 09:36:38.000000000","message":"IMHO this string (and other below for label and project) is used in many places. Maybe You can define it as constant e.g. in this file and reuse in other places?","commit_id":"662f72b4c5deeae89154353c51b1451271903fa1"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"782b71d769531afb760c99050710b62658618a25","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @staticmethod"},{"line_number":58,"context_line":"    def get_router_traffic_counter_key(router_id):"},{"line_number":59,"context_line":"        return \"router-%s\" % router_id"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @staticmethod"},{"line_number":62,"context_line":"    def get_project_traffic_counter_key(tenant_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_02729ead","line":59,"range":{"start_line":59,"start_character":16,"end_line":59,"end_character":23},"in_reply_to":"9f560f44_3c9c275a","updated":"2020-09-04 12:21:19.000000000","message":"Done","commit_id":"662f72b4c5deeae89154353c51b1451271903fa1"}],"neutron/services/metering/drivers/iptables/iptables_driver.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"796759926687c7e4ec78f4e94bd21b7af37daea5","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class IptablesMeteringDriver(abstract_driver.MeteringAbstractDriver):"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __init__(self, plugin, conf):"},{"line_number":125,"context_line":"        self.plugin \u003d plugin"},{"line_number":126,"context_line":"        self.conf \u003d conf or cfg.CONF"},{"line_number":127,"context_line":"        self.routers \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_7b32ee5f","line":124,"updated":"2020-08-05 09:16:02.000000000","message":"This method does not call [1]. You need to call super __init__.\n\n[1]https://review.opendev.org/#/c/735605/5/neutron/services/metering/drivers/abstract_driver.py@22","commit_id":"45a3eb66ca80a9dcd0c4cddf7cb6eed868f4eda1"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"a3ca9a3e4b600f81e4484acfb75ac1aaf4c06f49","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class IptablesMeteringDriver(abstract_driver.MeteringAbstractDriver):"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __init__(self, plugin, conf):"},{"line_number":125,"context_line":"        self.plugin \u003d plugin"},{"line_number":126,"context_line":"        self.conf \u003d conf or cfg.CONF"},{"line_number":127,"context_line":"        self.routers \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_18cdb365","line":124,"in_reply_to":"9f560f44_7b32ee5f","updated":"2020-08-05 13:50:55.000000000","message":"Done","commit_id":"45a3eb66ca80a9dcd0c4cddf7cb6eed868f4eda1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"796759926687c7e4ec78f4e94bd21b7af37daea5","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        traffic_counters \u003d {}"},{"line_number":428,"context_line":"        routers_to_reconfigure \u003d set()"},{"line_number":429,"context_line":"        for router in routers:"},{"line_number":430,"context_line":"            if self.granular_traffic_data:"},{"line_number":431,"context_line":"                self.retrieve_and_account_granular_traffic_counters("},{"line_number":432,"context_line":"                    router, routers_to_reconfigure, traffic_counters)"},{"line_number":433,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_fb1efeb8","line":430,"updated":"2020-08-05 09:16:02.000000000","message":"You are not testing this method and therefore the value of self.granular_traffic_data","commit_id":"45a3eb66ca80a9dcd0c4cddf7cb6eed868f4eda1"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"a3ca9a3e4b600f81e4484acfb75ac1aaf4c06f49","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        traffic_counters \u003d {}"},{"line_number":428,"context_line":"        routers_to_reconfigure \u003d set()"},{"line_number":429,"context_line":"        for router in routers:"},{"line_number":430,"context_line":"            if self.granular_traffic_data:"},{"line_number":431,"context_line":"                self.retrieve_and_account_granular_traffic_counters("},{"line_number":432,"context_line":"                    router, routers_to_reconfigure, traffic_counters)"},{"line_number":433,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_9bd37d60","line":430,"in_reply_to":"9f560f44_fb1efeb8","updated":"2020-08-05 13:50:55.000000000","message":"I am actually testing this method. By this here, I mean `get_traffic_counters`. The tests are in `neutron/tests/unit/services/metering/drivers/test_iptables.py`.\n\nDo you want to see some other tests?","commit_id":"45a3eb66ca80a9dcd0c4cddf7cb6eed868f4eda1"}]}
