)]}'
{"doc/source/user/guides/stats.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Statistics reporting"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"`openstacksdk` offers possibility to report statistics about individual API"},{"line_number":6,"context_line":"requests/responses in different formats. `Statsd` allows reporting of the"},{"line_number":7,"context_line":"response times in the statsd format. `InfluxDB` allows a more \u0027event\u0027-oriented"},{"line_number":8,"context_line":"reporting of the same data. `Prometheus` reporting is a bit different and"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_78e56937","line":5,"range":{"start_line":5,"start_character":55,"end_line":5,"end_character":60},"updated":"2019-07-17 09:01:28.000000000","message":"nit: needs double-checking, but IIRC \"statistics on\"","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"`openstacksdk` offers possibility to report statistics about individual API"},{"line_number":6,"context_line":"requests/responses in different formats. `Statsd` allows reporting of the"},{"line_number":7,"context_line":"response times in the statsd format. `InfluxDB` allows a more \u0027event\u0027-oriented"},{"line_number":8,"context_line":"reporting of the same data. `Prometheus` reporting is a bit different and"},{"line_number":9,"context_line":"requires the application using SDK to take care of the metrics exporting, while"},{"line_number":10,"context_line":"`openstacksdk` prepares the metrics themselves."}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_98e06528","line":7,"range":{"start_line":7,"start_character":62,"end_line":7,"end_character":69},"updated":"2019-07-17 09:01:28.000000000","message":"nit: why quotes around \"event\"?","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":7,"context_line":"response times in the statsd format. `InfluxDB` allows a more \u0027event\u0027-oriented"},{"line_number":8,"context_line":"reporting of the same data. `Prometheus` reporting is a bit different and"},{"line_number":9,"context_line":"requires the application using SDK to take care of the metrics exporting, while"},{"line_number":10,"context_line":"`openstacksdk` prepares the metrics themselves."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Due to the nature of the `statsd` protocol lots of tools consuming the metrics"},{"line_number":13,"context_line":"do the data aggregation and processing in the configurable time frame (mean"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_b89a01b6","line":10,"range":{"start_line":10,"start_character":36,"end_line":10,"end_character":46},"updated":"2019-07-17 09:01:28.000000000","message":"nit: \"themselves\" seems out of order here, I\u0027d remove it","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Simple Usage"},{"line_number":23,"context_line":"------------"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"For operators who wants to receive statsd metrics a following configuration"},{"line_number":26,"context_line":"should be add to the config file (clouds.yaml):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":".. code-block:: yaml"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_18f555ed","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":27},"updated":"2019-07-17 09:01:28.000000000","message":"nit: \"To receive ...\"","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":23,"context_line":"------------"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"For operators who wants to receive statsd metrics a following configuration"},{"line_number":26,"context_line":"should be add to the config file (clouds.yaml):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":".. code-block:: yaml"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_b8df6167","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":10},"updated":"2019-07-17 09:01:28.000000000","message":"nit: s/should be//","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":52,"context_line":"   clouds:"},{"line_number":53,"context_line":"     .."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Metrics would be reported only when corresponding client libraries ("},{"line_number":56,"context_line":"`statsd` for \u0027statsd\u0027 reporting, `influxdb` for influxdb reporting"},{"line_number":57,"context_line":"correspondingly). When those libraries are not available reporting will be"},{"line_number":58,"context_line":"silently ignored."}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_f83f1984","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":13},"updated":"2019-07-17 09:01:28.000000000","message":"nit: will","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"34adfb20ee73a4c3945f441376ed24c4cd0b271f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"Simple Usage"},{"line_number":24,"context_line":"------------"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"For operators who want to receive metrics a following configuration"},{"line_number":27,"context_line":"should be add to the config file (clouds.yaml):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. code-block:: yaml"}],"source_content_type":"text/x-rst","patch_set":20,"id":"7faddb67_92bf72a9","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":25},"updated":"2019-08-26 12:23:39.000000000","message":"nit: I\u0027d still shorten to \"To receive... add ...\"","commit_id":"d644069632caf8b923a6902945c65d11e051fdba"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"34adfb20ee73a4c3945f441376ed24c4cd0b271f","unresolved":false,"context_lines":[{"line_number":24,"context_line":"------------"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"For operators who want to receive metrics a following configuration"},{"line_number":27,"context_line":"should be add to the config file (clouds.yaml):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. code-block:: yaml"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"7faddb67_f2e346d7","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":13},"updated":"2019-08-26 12:23:39.000000000","message":"\"should be add\" is incorrect either way. Leave only \"add\" if you accept my suggestion above, otherwise remove \"be\".","commit_id":"d644069632caf8b923a6902945c65d11e051fdba"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"34adfb20ee73a4c3945f441376ed24c4cd0b271f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"   clouds:"},{"line_number":55,"context_line":"     .."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Metrics will reported only when corresponding client libraries ("},{"line_number":58,"context_line":"`statsd` for \u0027statsd\u0027 reporting, `influxdb` for influxdb reporting"},{"line_number":59,"context_line":"correspondingly). When those libraries are not available reporting will be"},{"line_number":60,"context_line":"silently ignored."}],"source_content_type":"text/x-rst","patch_set":20,"id":"7faddb67_52081a90","line":57,"range":{"start_line":57,"start_character":8,"end_line":57,"end_character":12},"updated":"2019-08-26 12:23:39.000000000","message":"nit: will be","commit_id":"d644069632caf8b923a6902945c65d11e051fdba"}],"openstack/config/cloud_region.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def get_influxdb_client(self):"},{"line_number":990,"context_line":"        if not influxdb:"},{"line_number":991,"context_line":"            return None"},{"line_number":992,"context_line":"        influx_args \u003d {}"},{"line_number":993,"context_line":"        if \u0027host\u0027 in self._influxdb_config:"},{"line_number":994,"context_line":"            influx_args[\u0027host\u0027] \u003d self._influxdb_config[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_b876816f","line":991,"updated":"2019-07-17 09:01:28.000000000","message":"What if we move this to the bottom of the function and issue a warning if influx_args is set but influxdb is None?","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"db4bad264f024d64a57dddb080a1193dbae62c26","unresolved":false,"context_lines":[{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def get_influxdb_client(self):"},{"line_number":990,"context_line":"        if not influxdb:"},{"line_number":991,"context_line":"            return None"},{"line_number":992,"context_line":"        influx_args \u003d {}"},{"line_number":993,"context_line":"        if \u0027host\u0027 in self._influxdb_config:"},{"line_number":994,"context_line":"            influx_args[\u0027host\u0027] \u003d self._influxdb_config[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_bfad9632","line":991,"in_reply_to":"7faddb67_b876816f","updated":"2019-07-24 17:30:16.000000000","message":"Done","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"34adfb20ee73a4c3945f441376ed24c4cd0b271f","unresolved":false,"context_lines":[{"line_number":1004,"context_line":""},{"line_number":1005,"context_line":"    def get_influxdb_client(self):"},{"line_number":1006,"context_line":"        influx_args \u003d {}"},{"line_number":1007,"context_line":"        if self._influxdb_config:"},{"line_number":1008,"context_line":"            use_udp \u003d bool(self._influxdb_config.get(\u0027use_udp\u0027, False))"},{"line_number":1009,"context_line":"            port \u003d self._influxdb_config.get(\u0027port\u0027)"},{"line_number":1010,"context_line":"            if use_udp:"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_b23b8e37","line":1007,"range":{"start_line":1007,"start_character":0,"end_line":1007,"end_character":33},"updated":"2019-08-26 12:23:39.000000000","message":"nit:\n\n if not self._influxdb_config:\n     return","commit_id":"d644069632caf8b923a6902945c65d11e051fdba"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"34adfb20ee73a4c3945f441376ed24c4cd0b271f","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"                    return influxdb.InfluxDBClient(**influx_args)"},{"line_number":1023,"context_line":"                except Exception:"},{"line_number":1024,"context_line":"                    self.log.warning(\u0027Cannot establish connection to InfluxDB\u0027)"},{"line_number":1025,"context_line":"                    return None"},{"line_number":1026,"context_line":"            else:"},{"line_number":1027,"context_line":"                return self.log.warning(\u0027InfluxDB configuration is present, \u0027"},{"line_number":1028,"context_line":"                                        \u0027but no client library is found.\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_72f0b692","line":1025,"range":{"start_line":1025,"start_character":21,"end_line":1025,"end_character":31},"updated":"2019-08-26 12:23:39.000000000","message":"nit: redundant","commit_id":"d644069632caf8b923a6902945c65d11e051fdba"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"34adfb20ee73a4c3945f441376ed24c4cd0b271f","unresolved":false,"context_lines":[{"line_number":1024,"context_line":"                    self.log.warning(\u0027Cannot establish connection to InfluxDB\u0027)"},{"line_number":1025,"context_line":"                    return None"},{"line_number":1026,"context_line":"            else:"},{"line_number":1027,"context_line":"                return self.log.warning(\u0027InfluxDB configuration is present, \u0027"},{"line_number":1028,"context_line":"                                        \u0027but no client library is found.\u0027)"},{"line_number":1029,"context_line":"        else:"},{"line_number":1030,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_f231065b","line":1027,"range":{"start_line":1027,"start_character":16,"end_line":1027,"end_character":23},"updated":"2019-08-26 12:23:39.000000000","message":"nit: I don\u0027t think warning() returns anything, but if it does, you probably don\u0027t want to return it","commit_id":"d644069632caf8b923a6902945c65d11e051fdba"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"34adfb20ee73a4c3945f441376ed24c4cd0b271f","unresolved":false,"context_lines":[{"line_number":1025,"context_line":"                    return None"},{"line_number":1026,"context_line":"            else:"},{"line_number":1027,"context_line":"                return self.log.warning(\u0027InfluxDB configuration is present, \u0027"},{"line_number":1028,"context_line":"                                        \u0027but no client library is found.\u0027)"},{"line_number":1029,"context_line":"        else:"},{"line_number":1030,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_3211deb0","line":1028,"range":{"start_line":1028,"start_character":45,"end_line":1028,"end_character":71},"updated":"2019-08-26 12:23:39.000000000","message":"This doesn\u0027t seem right. This branch is reached if influx_args is empty, which means that the configuration is not present.","commit_id":"d644069632caf8b923a6902945c65d11e051fdba"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4b81a8a70e9cbde1018968917b156447f22f5405","unresolved":false,"context_lines":[{"line_number":1026,"context_line":"        else:"},{"line_number":1027,"context_line":"            self.log.warning(\u0027InfluxDB configuration is present, \u0027"},{"line_number":1028,"context_line":"                             \u0027but no client library is found.\u0027)"},{"line_number":1029,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":21,"id":"7faddb67_eb2f81a4","line":1029,"updated":"2019-08-30 08:11:58.000000000","message":"nit: redundant","commit_id":"da45a449dc047e25a295069991b42f1e431e0f3c"}],"openstack/config/loader.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                 app_name\u003dNone, app_version\u003dNone,"},{"line_number":143,"context_line":"                 load_yaml_config\u003dTrue, load_envvars\u003dTrue,"},{"line_number":144,"context_line":"                 statsd_host\u003dNone, statsd_port\u003dNone,"},{"line_number":145,"context_line":"                 statsd_prefix\u003dNone, influxdb_config\u003ddict()):"},{"line_number":146,"context_line":"        self.log \u003d _log.setup_logging(\u0027openstack.config\u0027)"},{"line_number":147,"context_line":"        self._session_constructor \u003d session_constructor"},{"line_number":148,"context_line":"        self._app_name \u003d app_name"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_380851d8","line":145,"range":{"start_line":145,"start_character":53,"end_line":145,"end_character":59},"updated":"2019-07-17 09:01:28.000000000","message":"nit: it\u0027s recommended to avoid having mutable objects in default arguments","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"db4bad264f024d64a57dddb080a1193dbae62c26","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                 app_name\u003dNone, app_version\u003dNone,"},{"line_number":143,"context_line":"                 load_yaml_config\u003dTrue, load_envvars\u003dTrue,"},{"line_number":144,"context_line":"                 statsd_host\u003dNone, statsd_port\u003dNone,"},{"line_number":145,"context_line":"                 statsd_prefix\u003dNone, influxdb_config\u003ddict()):"},{"line_number":146,"context_line":"        self.log \u003d _log.setup_logging(\u0027openstack.config\u0027)"},{"line_number":147,"context_line":"        self._session_constructor \u003d session_constructor"},{"line_number":148,"context_line":"        self._app_name \u003d app_name"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_5faa6219","line":145,"range":{"start_line":145,"start_character":53,"end_line":145,"end_character":59},"in_reply_to":"7faddb67_380851d8","updated":"2019-07-24 17:30:16.000000000","message":"Done","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":288,"context_line":""},{"line_number":289,"context_line":"            influxdb_cfg \u003d metrics_config.get(\u0027influxdb\u0027, {})"},{"line_number":290,"context_line":"            # Parse InfluxDB configuration"},{"line_number":291,"context_line":"            if influxdb_config:"},{"line_number":292,"context_line":"                influxdb_cfg.update(influxdb_config)"},{"line_number":293,"context_line":"            if influxdb_cfg:"},{"line_number":294,"context_line":"                config \u003d {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_f80dd9e7","line":291,"updated":"2019-07-17 09:01:28.000000000","message":"... and because of this you can default influxdb_config to None","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"db4bad264f024d64a57dddb080a1193dbae62c26","unresolved":false,"context_lines":[{"line_number":288,"context_line":""},{"line_number":289,"context_line":"            influxdb_cfg \u003d metrics_config.get(\u0027influxdb\u0027, {})"},{"line_number":290,"context_line":"            # Parse InfluxDB configuration"},{"line_number":291,"context_line":"            if influxdb_config:"},{"line_number":292,"context_line":"                influxdb_cfg.update(influxdb_config)"},{"line_number":293,"context_line":"            if influxdb_cfg:"},{"line_number":294,"context_line":"                config \u003d {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_7fa71e51","line":291,"in_reply_to":"7faddb67_f80dd9e7","updated":"2019-07-24 17:30:16.000000000","message":"Done","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                    if isinstance(use_udp, str):"},{"line_number":300,"context_line":"                        use_udp \u003d use_udp.lower() in (\u0027true\u0027, \u0027yes\u0027, \u00271\u0027)"},{"line_number":301,"context_line":"                    elif not isinstance(use_udp, bool):"},{"line_number":302,"context_line":"                        use_udp \u003d False"},{"line_number":303,"context_line":"                    config[\u0027use_udp\u0027] \u003d use_udp"},{"line_number":304,"context_line":"                if \u0027port\u0027 in influxdb_cfg:"},{"line_number":305,"context_line":"                    config[\u0027port\u0027] \u003d influxdb_cfg[\u0027port\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_58342d93","line":302,"updated":"2019-07-17 09:01:28.000000000","message":"nit: raise an exception or at least log something when use_udp is of wrong type?","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"db4bad264f024d64a57dddb080a1193dbae62c26","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                    if isinstance(use_udp, str):"},{"line_number":300,"context_line":"                        use_udp \u003d use_udp.lower() in (\u0027true\u0027, \u0027yes\u0027, \u00271\u0027)"},{"line_number":301,"context_line":"                    elif not isinstance(use_udp, bool):"},{"line_number":302,"context_line":"                        use_udp \u003d False"},{"line_number":303,"context_line":"                    config[\u0027use_udp\u0027] \u003d use_udp"},{"line_number":304,"context_line":"                if \u0027port\u0027 in influxdb_cfg:"},{"line_number":305,"context_line":"                    config[\u0027port\u0027] \u003d influxdb_cfg[\u0027port\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_1f62aa17","line":302,"in_reply_to":"7faddb67_58342d93","updated":"2019-07-24 17:30:16.000000000","message":"Done","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":301,"context_line":"                    elif not isinstance(use_udp, bool):"},{"line_number":302,"context_line":"                        use_udp \u003d False"},{"line_number":303,"context_line":"                    config[\u0027use_udp\u0027] \u003d use_udp"},{"line_number":304,"context_line":"                if \u0027port\u0027 in influxdb_cfg:"},{"line_number":305,"context_line":"                    config[\u0027port\u0027] \u003d influxdb_cfg[\u0027port\u0027]"},{"line_number":306,"context_line":"                if \u0027username\u0027 in influxdb_cfg:"},{"line_number":307,"context_line":"                    config[\u0027username\u0027] \u003d influxdb_cfg[\u0027username\u0027]"},{"line_number":308,"context_line":"                if \u0027password\u0027 in influxdb_cfg:"},{"line_number":309,"context_line":"                    config[\u0027password\u0027] \u003d influxdb_cfg[\u0027password\u0027]"},{"line_number":310,"context_line":"                if \u0027database\u0027 in influxdb_cfg:"},{"line_number":311,"context_line":"                    config[\u0027database\u0027] \u003d influxdb_cfg[\u0027database\u0027]"},{"line_number":312,"context_line":"                if \u0027measurement\u0027 in influxdb_cfg:"},{"line_number":313,"context_line":"                    # Measurement name (prefix)"},{"line_number":314,"context_line":"                    config[\u0027measurement\u0027] \u003d influxdb_cfg[\u0027measurement\u0027]"},{"line_number":315,"context_line":"                self._influxdb_config \u003d config"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        if load_envvars:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_b824415f","line":314,"range":{"start_line":304,"start_character":0,"end_line":314,"end_character":71},"updated":"2019-07-17 09:01:28.000000000","message":"nit: use a loop for less copy-paste\n\n for key in (\u0027port\u0027, \u0027username\u0027, ...):\n     if key in influxdb_cfg:\n         config[key] \u003d influxdb_cfg[key]","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"db4bad264f024d64a57dddb080a1193dbae62c26","unresolved":false,"context_lines":[{"line_number":301,"context_line":"                    elif not isinstance(use_udp, bool):"},{"line_number":302,"context_line":"                        use_udp \u003d False"},{"line_number":303,"context_line":"                    config[\u0027use_udp\u0027] \u003d use_udp"},{"line_number":304,"context_line":"                if \u0027port\u0027 in influxdb_cfg:"},{"line_number":305,"context_line":"                    config[\u0027port\u0027] \u003d influxdb_cfg[\u0027port\u0027]"},{"line_number":306,"context_line":"                if \u0027username\u0027 in influxdb_cfg:"},{"line_number":307,"context_line":"                    config[\u0027username\u0027] \u003d influxdb_cfg[\u0027username\u0027]"},{"line_number":308,"context_line":"                if \u0027password\u0027 in influxdb_cfg:"},{"line_number":309,"context_line":"                    config[\u0027password\u0027] \u003d influxdb_cfg[\u0027password\u0027]"},{"line_number":310,"context_line":"                if \u0027database\u0027 in influxdb_cfg:"},{"line_number":311,"context_line":"                    config[\u0027database\u0027] \u003d influxdb_cfg[\u0027database\u0027]"},{"line_number":312,"context_line":"                if \u0027measurement\u0027 in influxdb_cfg:"},{"line_number":313,"context_line":"                    # Measurement name (prefix)"},{"line_number":314,"context_line":"                    config[\u0027measurement\u0027] \u003d influxdb_cfg[\u0027measurement\u0027]"},{"line_number":315,"context_line":"                self._influxdb_config \u003d config"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        if load_envvars:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_3f676628","line":314,"range":{"start_line":304,"start_character":0,"end_line":314,"end_character":71},"in_reply_to":"7faddb67_b824415f","updated":"2019-07-24 17:30:16.000000000","message":"Done","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"}],"openstack/object_store/v1/_proxy.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"34adfb20ee73a4c3945f441376ed24c4cd0b271f","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                ))"},{"line_number":60,"context_line":"        ]"},{"line_number":61,"context_line":"        # Strip leading version piece so that"},{"line_number":62,"context_line":"        # GET /v2.0/networks"},{"line_number":63,"context_line":"        # returns [\u0027networks\u0027]"},{"line_number":64,"context_line":"        if (url_parts[0]"},{"line_number":65,"context_line":"                and url_parts[0][0] \u003d\u003d \u0027v\u0027"},{"line_number":66,"context_line":"                and url_parts[0][1] and url_parts[0][1].isdigit()):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_5216daa9","line":63,"range":{"start_line":62,"start_character":0,"end_line":63,"end_character":30},"updated":"2019-08-26 12:23:39.000000000","message":"nit: don\u0027t refer to networks in the swift proxy?\n\nActually, does swift even have a leading version?","commit_id":"d644069632caf8b923a6902945c65d11e051fdba"}],"openstack/proxy.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    if url_path.endswith(\u0027.json\u0027):"},{"line_number":57,"context_line":"        url_path \u003d url_path[:-len(\u0027.json\u0027)]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    # Split url into parts and exclude potential project_id in some urls"},{"line_number":60,"context_line":"    url_parts \u003d [x for x in url_path.split(\u0027/\u0027) if x !\u003d project_id]"},{"line_number":61,"context_line":"    if url_parts[-1] \u003d\u003d \u0027detail\u0027:"},{"line_number":62,"context_line":"        # Special case detail calls"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_d81fbd05","line":59,"updated":"2019-07-17 09:01:28.000000000","message":"I wonder if we should handle Swift with its AUTH_{project_id}","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"db4bad264f024d64a57dddb080a1193dbae62c26","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    if url_path.endswith(\u0027.json\u0027):"},{"line_number":57,"context_line":"        url_path \u003d url_path[:-len(\u0027.json\u0027)]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    # Split url into parts and exclude potential project_id in some urls"},{"line_number":60,"context_line":"    url_parts \u003d [x for x in url_path.split(\u0027/\u0027) if x !\u003d project_id]"},{"line_number":61,"context_line":"    if url_parts[-1] \u003d\u003d \u0027detail\u0027:"},{"line_number":62,"context_line":"        # Special case detail calls"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_a2c49993","line":59,"in_reply_to":"7faddb67_d81fbd05","updated":"2019-07-24 17:30:16.000000000","message":"Done","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                and url_parts[0][1] and url_parts[0][1].isdigit()):"},{"line_number":73,"context_line":"            url_parts \u003d url_parts[1:]"},{"line_number":74,"context_line":"        name_parts \u003d []"},{"line_number":75,"context_line":"        if (url_parts[0] \u003d\u003d \u0027stacks\u0027 and len(url_parts) \u003e 2"},{"line_number":76,"context_line":"                and not url_parts[2] in [\u0027preview\u0027, \u0027resources\u0027]):"},{"line_number":77,"context_line":"            # orchestrate introduce having stack name and id part of the URL"},{"line_number":78,"context_line":"            # (/stacks/name/id/everything_else), so if on third position we"},{"line_number":79,"context_line":"            # have not a known part - discard it, not to brake further logic"},{"line_number":80,"context_line":"            del url_parts[2]"},{"line_number":81,"context_line":"        if (len(url_parts) \u003d\u003d 3 and url_parts[0] \u003d\u003d \u0027software_deployments\u0027 and"},{"line_number":82,"context_line":"                url_parts[1] \u003d\u003d \u0027metadata\u0027):"},{"line_number":83,"context_line":"            # Another nice example of totally different URL naming scheme,"},{"line_number":84,"context_line":"            # which we need to repair /software_deployment/metadata/server_id -"},{"line_number":85,"context_line":"            # just replace server_id with metadata to keep further logic"},{"line_number":86,"context_line":"            url_parts[2] \u003d \u0027metadata\u0027"},{"line_number":87,"context_line":"        # Pull out every other URL portion - so that"},{"line_number":88,"context_line":"        # GET /servers/{id}/os-security-groups"},{"line_number":89,"context_line":"        # returns [\u0027server\u0027, \u0027os-security-groups\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_f8b4f9f3","line":86,"range":{"start_line":75,"start_character":0,"end_line":86,"end_character":37},"updated":"2019-07-17 09:01:28.000000000","message":"This has to be somehow generalize, we cannot seriously hardcode all services here (e.g. ironic has some complex URLs). Maybe move this to each proxy?","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"db4bad264f024d64a57dddb080a1193dbae62c26","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                and url_parts[0][1] and url_parts[0][1].isdigit()):"},{"line_number":73,"context_line":"            url_parts \u003d url_parts[1:]"},{"line_number":74,"context_line":"        name_parts \u003d []"},{"line_number":75,"context_line":"        if (url_parts[0] \u003d\u003d \u0027stacks\u0027 and len(url_parts) \u003e 2"},{"line_number":76,"context_line":"                and not url_parts[2] in [\u0027preview\u0027, \u0027resources\u0027]):"},{"line_number":77,"context_line":"            # orchestrate introduce having stack name and id part of the URL"},{"line_number":78,"context_line":"            # (/stacks/name/id/everything_else), so if on third position we"},{"line_number":79,"context_line":"            # have not a known part - discard it, not to brake further logic"},{"line_number":80,"context_line":"            del url_parts[2]"},{"line_number":81,"context_line":"        if (len(url_parts) \u003d\u003d 3 and url_parts[0] \u003d\u003d \u0027software_deployments\u0027 and"},{"line_number":82,"context_line":"                url_parts[1] \u003d\u003d \u0027metadata\u0027):"},{"line_number":83,"context_line":"            # Another nice example of totally different URL naming scheme,"},{"line_number":84,"context_line":"            # which we need to repair /software_deployment/metadata/server_id -"},{"line_number":85,"context_line":"            # just replace server_id with metadata to keep further logic"},{"line_number":86,"context_line":"            url_parts[2] \u003d \u0027metadata\u0027"},{"line_number":87,"context_line":"        # Pull out every other URL portion - so that"},{"line_number":88,"context_line":"        # GET /servers/{id}/os-security-groups"},{"line_number":89,"context_line":"        # returns [\u0027server\u0027, \u0027os-security-groups\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_3f50c632","line":86,"range":{"start_line":75,"start_character":0,"end_line":86,"end_character":37},"in_reply_to":"7faddb67_f8b4f9f3","updated":"2019-07-24 17:30:16.000000000","message":"I was myself also doubting about that. Anyway - done now","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        # returns [\u0027server\u0027, \u0027os-security-groups\u0027]"},{"line_number":90,"context_line":"        for idx in range(0, len(url_parts)):"},{"line_number":91,"context_line":"            if not idx % 2 and url_parts[idx]:"},{"line_number":92,"context_line":"                # If we are on first segment and it end with \u0027s\u0027"},{"line_number":93,"context_line":"                # stip this \u0027s\u0027 to differentiate LIST and GET_BY_ID"},{"line_number":94,"context_line":"                if (len(url_parts) \u003e idx + 1 and"},{"line_number":95,"context_line":"                        url_parts[idx][-1] \u003d\u003d \u0027s\u0027):"},{"line_number":96,"context_line":"                    name_parts.append(url_parts[idx][:-1])"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_78c80973","line":93,"range":{"start_line":92,"start_character":0,"end_line":93,"end_character":67},"updated":"2019-07-17 09:01:28.000000000","message":"This won\u0027t work with chassis :(","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"db4bad264f024d64a57dddb080a1193dbae62c26","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        # returns [\u0027server\u0027, \u0027os-security-groups\u0027]"},{"line_number":90,"context_line":"        for idx in range(0, len(url_parts)):"},{"line_number":91,"context_line":"            if not idx % 2 and url_parts[idx]:"},{"line_number":92,"context_line":"                # If we are on first segment and it end with \u0027s\u0027"},{"line_number":93,"context_line":"                # stip this \u0027s\u0027 to differentiate LIST and GET_BY_ID"},{"line_number":94,"context_line":"                if (len(url_parts) \u003e idx + 1 and"},{"line_number":95,"context_line":"                        url_parts[idx][-1] \u003d\u003d \u0027s\u0027):"},{"line_number":96,"context_line":"                    name_parts.append(url_parts[idx][:-1])"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_1f4b8a87","line":93,"range":{"start_line":92,"start_character":0,"end_line":93,"end_character":67},"in_reply_to":"7faddb67_78c80973","updated":"2019-07-24 17:30:16.000000000","message":"Done","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"17d6b7320deeef8da0c356cabc03b0a160151437","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            self._influxdb_client.write_points(data)"},{"line_number":234,"context_line":"        except Exception as e:"},{"line_number":235,"context_line":"            self.log.warn(\u0027Error writing statistics to InfluxDB: %s\u0027, e)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def _version_matches(self, version):"},{"line_number":238,"context_line":"        api_version \u003d self.get_api_major_version()"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_18ad559a","line":235,"range":{"start_line":235,"start_character":17,"end_line":235,"end_character":25},"updated":"2019-07-17 09:01:28.000000000","message":"I suggest log.exception, so that we can useful traceback in the logs.","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"db4bad264f024d64a57dddb080a1193dbae62c26","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            self._influxdb_client.write_points(data)"},{"line_number":234,"context_line":"        except Exception as e:"},{"line_number":235,"context_line":"            self.log.warn(\u0027Error writing statistics to InfluxDB: %s\u0027, e)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def _version_matches(self, version):"},{"line_number":238,"context_line":"        api_version \u003d self.get_api_major_version()"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_bf7276e2","line":235,"range":{"start_line":235,"start_character":17,"end_line":235,"end_character":25},"in_reply_to":"7faddb67_18ad559a","updated":"2019-07-24 17:30:16.000000000","message":"Done","commit_id":"ab17184d803e259f9c8c432ed5c6c780a99d1ded"}]}
