)]}'
{".vscode/settings.json":[{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"be318c467e4fac8e02812899712ec94971244351","unresolved":true,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"python.testing.unittestArgs\": ["},{"line_number":3,"context_line":"        \"-v\","},{"line_number":4,"context_line":"        \"-s\","}],"source_content_type":"application/json","patch_set":1,"id":"a4d74880_1707a532","line":1,"updated":"2025-09-22 07:41:21.000000000","message":"You may want to remove this file.","commit_id":"17bcef8f8d437657ca8a6d22ade0e41f09f41223"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"9c13ba3d8e49b71d27b179de2ac7f34eda90a00b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"python.testing.unittestArgs\": ["},{"line_number":3,"context_line":"        \"-v\","},{"line_number":4,"context_line":"        \"-s\","}],"source_content_type":"application/json","patch_set":1,"id":"ac871f13_861a4e69","line":1,"in_reply_to":"a4d74880_1707a532","updated":"2025-09-22 09:37:18.000000000","message":"Done","commit_id":"17bcef8f8d437657ca8a6d22ade0e41f09f41223"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"be318c467e4fac8e02812899712ec94971244351","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"576c61fc_2d15bf3c","updated":"2025-09-22 07:41:21.000000000","message":"Thank you Juan!\n\nI have a tiny nit, which should end up updating the .gitignore file.","commit_id":"17bcef8f8d437657ca8a6d22ade0e41f09f41223"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"a3499369e8b379e748087a040c792cae167f8921","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"30a7e48e_598d8d7d","updated":"2025-09-18 14:13:22.000000000","message":"recheck","commit_id":"17bcef8f8d437657ca8a6d22ade0e41f09f41223"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"174d576ae18f4817860eeb8883f0f5b285d783b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c1d258e3_d1b2aca8","updated":"2025-09-18 12:03:40.000000000","message":"recheck","commit_id":"17bcef8f8d437657ca8a6d22ade0e41f09f41223"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"a66e6757281d387d91e56396d0b502b9c46072ed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7b040529_f054ce55","updated":"2025-09-22 11:42:17.000000000","message":"thank you!","commit_id":"60fbb9bdf6b7a4fc963893824dddfca7d6a07ccf"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"42724721712972ee1cfba840f46789872ebc3f9c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"bfdbf2cc_d61cf021","updated":"2025-10-09 13:38:12.000000000","message":"I rebased so that I can get an accurate image when I test automated building in CI","commit_id":"3a82d42efd54a200fb1a08f42444ae6b8e20db55"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"505d35ba3e9744bd7f4a2b599a06c9993ddde618","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0ac3d50d_19fee5b5","updated":"2025-10-13 20:47:33.000000000","message":"Rebased to get CI working for telemetry-operator. \n\nhttps://github.com/openstack-k8s-operators/telemetry-operator/pull/720","commit_id":"f246c30c31d9bb91c71e4761841053e182a65817"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"022a0882edfaafce3a1d8d10b8b6a3c1bb3bfd9f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1c7e9c8a_703e2fd9","updated":"2025-10-15 06:53:06.000000000","message":"The diff between patch set 4 and 5 shows, the comment was addressed.\nIt still looks good to me.","commit_id":"b061e7ea462c01b7c02d7c27efbee6c0afc325b1"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"4e9f54b7aa5229059e663d01c9567eab8aa4acad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"2f2ce870_b0c204cc","updated":"2025-10-30 07:52:03.000000000","message":"@mattc@stackhpc.com @pierre@stackhpc.com can you please take a look. It is the last one of these for us","commit_id":"fc810b9dbd62f6433bc1b8f4691130c97a26cbf6"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"3b21bd7aaab909340a4be16e5f0239f606b9d65f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d9359c53_e291f29d","updated":"2025-10-28 10:04:06.000000000","message":"Matt could you please take a look?","commit_id":"fc810b9dbd62f6433bc1b8f4691130c97a26cbf6"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"f6e0c89dc89477fd832f66ea788214340675a144","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"b4be121b_fc782c9b","updated":"2025-11-13 08:34:25.000000000","message":"I am still good with this; if there\u0027s anything else, we could easily do a follow-up patch.","commit_id":"24197d2cf84bf8b38b0a922bb0949b737d8d5326"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"d432da14f815efde6c5a0f7243e4ea8eb799595c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"5d4da6a3_56f381b2","updated":"2025-11-17 06:29:41.000000000","message":"Thank you!","commit_id":"24197d2cf84bf8b38b0a922bb0949b737d8d5326"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"bebdf6cd1000d03dabc7515fa20484b79d22e0cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2f54dbaf_546a7ba8","updated":"2025-11-14 09:24:16.000000000","message":"Thank you, \n@rafael@apache.org, would you do the honor now?","commit_id":"24197d2cf84bf8b38b0a922bb0949b737d8d5326"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"92dce06bcfbe00ea86dfa69f51b7395f96056a88","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"6e5a5e11_d37da324","updated":"2025-11-12 07:03:19.000000000","message":"recheck cover","commit_id":"24197d2cf84bf8b38b0a922bb0949b737d8d5326"}],"cloudkitty/storage/v2/loki/__init__.py":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"3051ad5cf6e8759c1bfade5300c105fa3ffac582","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        help\u003d\u0027The http Content-Type that will be used to send info to Loki. \u0027"},{"line_number":55,"context_line":"             \u0027Currently only application/json is supported.\u0027,"},{"line_number":56,"context_line":"        default\u003d\u0027application/json\u0027),"},{"line_number":57,"context_line":"    cfg.IntOpt("},{"line_number":58,"context_line":"        \u0027shard_days\u0027,"},{"line_number":59,"context_line":"        help\u003d\u0027The amount of days to shard the Loki HTTP requests when \u0027"},{"line_number":60,"context_line":"             \u0027retrieving data. Defaults to 7 days. Maximum is 30 days.\u0027,"},{"line_number":61,"context_line":"        default\u003d7),"},{"line_number":62,"context_line":"    cfg.BoolOpt("},{"line_number":63,"context_line":"        \u0027insecure\u0027,"},{"line_number":64,"context_line":"        help\u003d\u0027Set to true to allow insecure HTTPS connections to Loki\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"016bc358_b4216055","line":61,"range":{"start_line":57,"start_character":0,"end_line":61,"end_character":19},"updated":"2025-10-13 14:47:40.000000000","message":"Please use min/max oslo.config parameters to bound the integer values:\nhttps://docs.openstack.org/oslo.config/latest/reference/api/oslo_config.html#oslo_config.cfg.IntOpt","commit_id":"3a82d42efd54a200fb1a08f42444ae6b8e20db55"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"73fcfa354d8c400c7d20d8f57b86da7af6c59f18","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        help\u003d\u0027The http Content-Type that will be used to send info to Loki. \u0027"},{"line_number":55,"context_line":"             \u0027Currently only application/json is supported.\u0027,"},{"line_number":56,"context_line":"        default\u003d\u0027application/json\u0027),"},{"line_number":57,"context_line":"    cfg.IntOpt("},{"line_number":58,"context_line":"        \u0027shard_days\u0027,"},{"line_number":59,"context_line":"        help\u003d\u0027The amount of days to shard the Loki HTTP requests when \u0027"},{"line_number":60,"context_line":"             \u0027retrieving data. Defaults to 7 days. Maximum is 30 days.\u0027,"},{"line_number":61,"context_line":"        default\u003d7),"},{"line_number":62,"context_line":"    cfg.BoolOpt("},{"line_number":63,"context_line":"        \u0027insecure\u0027,"},{"line_number":64,"context_line":"        help\u003d\u0027Set to true to allow insecure HTTPS connections to Loki\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"67fdecc3_d07cc2e6","line":61,"range":{"start_line":57,"start_character":0,"end_line":61,"end_character":19},"in_reply_to":"016bc358_b4216055","updated":"2025-10-14 07:26:38.000000000","message":"Yep, this slipped my mind, thank you very much.","commit_id":"3a82d42efd54a200fb1a08f42444ae6b8e20db55"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"32739f6dbab1d62914224726816dbacf5922fc11","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        default\u003d\u0027application/json\u0027),"},{"line_number":57,"context_line":"    cfg.IntOpt("},{"line_number":58,"context_line":"        \u0027shard_days\u0027,"},{"line_number":59,"context_line":"        help\u003d\u0027The amount of days to shard the Loki HTTP requests when \u0027"},{"line_number":60,"context_line":"             \u0027retrieving data. Defaults to 7 days. Maximum is 30 days.\u0027,"},{"line_number":61,"context_line":"        default\u003d7,"},{"line_number":62,"context_line":"        min\u003d1,"},{"line_number":63,"context_line":"        max\u003d30),"}],"source_content_type":"text/x-python","patch_set":5,"id":"6e039d0a_333fb901","line":60,"range":{"start_line":59,"start_character":7,"end_line":60,"end_character":72},"updated":"2025-10-15 07:11:49.000000000","message":"Looking at the code, this seems to be used more or less as a pagination system/structure. Is that it? \n\nSorry my limited knowledge, but I do not completely understand what this explanation \"explains\"","commit_id":"b061e7ea462c01b7c02d7c27efbee6c0afc325b1"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"d9e1fdb23838ee31bebc80a1fb04587a4404b33c","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        default\u003d\u0027application/json\u0027),"},{"line_number":57,"context_line":"    cfg.IntOpt("},{"line_number":58,"context_line":"        \u0027shard_days\u0027,"},{"line_number":59,"context_line":"        help\u003d\u0027The amount of days to shard the Loki HTTP requests when \u0027"},{"line_number":60,"context_line":"             \u0027retrieving data. Defaults to 7 days. Maximum is 30 days.\u0027,"},{"line_number":61,"context_line":"        default\u003d7,"},{"line_number":62,"context_line":"        min\u003d1,"},{"line_number":63,"context_line":"        max\u003d30),"}],"source_content_type":"text/x-python","patch_set":5,"id":"ab4a4f81_6debf58a","line":60,"range":{"start_line":59,"start_character":7,"end_line":60,"end_character":72},"in_reply_to":"0e4799ae_ec9c1dd5","updated":"2025-10-15 07:51:43.000000000","message":"I see. So, what if instead of using this \"sharding\" explanation, we make it clear that this is for paging the response, and grouping the response date in timeframes. \n\nIt is not a paging itself, as you do not define the number of elements in the response, but rather you filter by the timestmap when the entries appear.","commit_id":"b061e7ea462c01b7c02d7c27efbee6c0afc325b1"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"7ef34e0dea30c661a9b986e656f217e45242281c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        default\u003d\u0027application/json\u0027),"},{"line_number":57,"context_line":"    cfg.IntOpt("},{"line_number":58,"context_line":"        \u0027shard_days\u0027,"},{"line_number":59,"context_line":"        help\u003d\u0027The amount of days to shard the Loki HTTP requests when \u0027"},{"line_number":60,"context_line":"             \u0027retrieving data. Defaults to 7 days. Maximum is 30 days.\u0027,"},{"line_number":61,"context_line":"        default\u003d7,"},{"line_number":62,"context_line":"        min\u003d1,"},{"line_number":63,"context_line":"        max\u003d30),"}],"source_content_type":"text/x-python","patch_set":5,"id":"a5564a10_f5dc6b76","line":60,"range":{"start_line":59,"start_character":7,"end_line":60,"end_character":72},"in_reply_to":"29b68b28_9c140bcb","updated":"2025-10-15 14:28:51.000000000","message":"Done","commit_id":"b061e7ea462c01b7c02d7c27efbee6c0afc325b1"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"b6699d54e77cec556281910a8d935b6250773a7b","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        default\u003d\u0027application/json\u0027),"},{"line_number":57,"context_line":"    cfg.IntOpt("},{"line_number":58,"context_line":"        \u0027shard_days\u0027,"},{"line_number":59,"context_line":"        help\u003d\u0027The amount of days to shard the Loki HTTP requests when \u0027"},{"line_number":60,"context_line":"             \u0027retrieving data. Defaults to 7 days. Maximum is 30 days.\u0027,"},{"line_number":61,"context_line":"        default\u003d7,"},{"line_number":62,"context_line":"        min\u003d1,"},{"line_number":63,"context_line":"        max\u003d30),"}],"source_content_type":"text/x-python","patch_set":5,"id":"0e4799ae_ec9c1dd5","line":60,"range":{"start_line":59,"start_character":7,"end_line":60,"end_character":72},"in_reply_to":"6e039d0a_333fb901","updated":"2025-10-15 07:46:58.000000000","message":"Yes, that\u0027s exactly what it\u0027s doing. Loki is also used for log storage and if you\u0027re tied to very prescriptive environments, you can not search for logs for more than ... days. (which makes sense, for performance reasons; large deployments often deal with several TB of data per day).\nThis patch allows to split out requests in such restricted environments, so that at the and, we have a view over a month of data.","commit_id":"b061e7ea462c01b7c02d7c27efbee6c0afc325b1"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"a092c77a72f4fc25678fc86400cebdae1f568f90","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        default\u003d\u0027application/json\u0027),"},{"line_number":57,"context_line":"    cfg.IntOpt("},{"line_number":58,"context_line":"        \u0027shard_days\u0027,"},{"line_number":59,"context_line":"        help\u003d\u0027The amount of days to shard the Loki HTTP requests when \u0027"},{"line_number":60,"context_line":"             \u0027retrieving data. Defaults to 7 days. Maximum is 30 days.\u0027,"},{"line_number":61,"context_line":"        default\u003d7,"},{"line_number":62,"context_line":"        min\u003d1,"},{"line_number":63,"context_line":"        max\u003d30),"}],"source_content_type":"text/x-python","patch_set":5,"id":"29b68b28_9c140bcb","line":60,"range":{"start_line":59,"start_character":7,"end_line":60,"end_character":72},"in_reply_to":"ab4a4f81_6debf58a","updated":"2025-10-15 09:06:26.000000000","message":"You are right that the explanation was too succint to be understandable. I have written a slightly larger explanation that IMHO, explains much better what that parameter does.","commit_id":"b061e7ea462c01b7c02d7c27efbee6c0afc325b1"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"32739f6dbab1d62914224726816dbacf5922fc11","unresolved":true,"context_lines":[{"line_number":140,"context_line":"                # In case that we have non-json compliant log lines in Loki"},{"line_number":141,"context_line":"                LOG.error(f\"Failed to decode log line: {log[\u0027values\u0027][0][1]}, \""},{"line_number":142,"context_line":"                          f\"ignoring.\")"},{"line_number":143,"context_line":"                continue"},{"line_number":144,"context_line":"            start \u003d tzutils.dt_from_iso(labels[\u0027start\u0027])"},{"line_number":145,"context_line":"            end \u003d tzutils.dt_from_iso(labels[\u0027end\u0027])"},{"line_number":146,"context_line":"            key \u003d (start, end)"}],"source_content_type":"text/x-python","patch_set":5,"id":"45c881d1_e6fa678e","line":143,"range":{"start_line":143,"start_character":16,"end_line":143,"end_character":24},"updated":"2025-10-15 07:11:49.000000000","message":"If there is an error you continue. This will make the timestamp being processed to be inconsistent or incomplete. Is that the desired behavior?\n\nCurrently, when Cloudkitty is processing, and if there is an error during the processing, the timestamp is not considered as processed, and therefore, we will retry in the next processing cycle.","commit_id":"b061e7ea462c01b7c02d7c27efbee6c0afc325b1"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"2de24560fa9226cf6d6e7d5f781b1d270c139c08","unresolved":true,"context_lines":[{"line_number":140,"context_line":"                # In case that we have non-json compliant log lines in Loki"},{"line_number":141,"context_line":"                LOG.error(f\"Failed to decode log line: {log[\u0027values\u0027][0][1]}, \""},{"line_number":142,"context_line":"                          f\"ignoring.\")"},{"line_number":143,"context_line":"                continue"},{"line_number":144,"context_line":"            start \u003d tzutils.dt_from_iso(labels[\u0027start\u0027])"},{"line_number":145,"context_line":"            end \u003d tzutils.dt_from_iso(labels[\u0027end\u0027])"},{"line_number":146,"context_line":"            key \u003d (start, end)"}],"source_content_type":"text/x-python","patch_set":5,"id":"d9e5a8c7_37524c73","line":143,"range":{"start_line":143,"start_character":16,"end_line":143,"end_character":24},"in_reply_to":"0c07affa_f6b136f4","updated":"2025-10-15 14:47:18.000000000","message":"Im so sorry Rafael, but I am unable to see how that error might happen, maybe there is something that I have not realized. \n\nThe _build_dataframes method is called when the user wants to retrieve information from aggregating timeframes already stored in Loki (cloudkitty dataframes get, cloudkitty summary get). In this particular case, this solves the issue I highlighted in my previous comment. If the case you exposed happens (a bad connection between Loki and a proxy) and we get HTML instead of json, the user will receive bad or no data, but we will not be erroring out thanks to this, which I dont think is bad behaviour. We could discuss if this behaviour is wanted or not.\n\nHowever, I am confused when you talk about the processor. As far as I can see, the processor never retrieves any data from Loki and therefore, this method is never called during a processing cycle.\n\nWould it be possible if you give me an extra pointer so I can understand how and when the processor is retrieving Loki data for processing?","commit_id":"b061e7ea462c01b7c02d7c27efbee6c0afc325b1"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"fc0e86c2a6c6b05792862c69f9bdf33b021fb6f8","unresolved":true,"context_lines":[{"line_number":140,"context_line":"                # In case that we have non-json compliant log lines in Loki"},{"line_number":141,"context_line":"                LOG.error(f\"Failed to decode log line: {log[\u0027values\u0027][0][1]}, \""},{"line_number":142,"context_line":"                          f\"ignoring.\")"},{"line_number":143,"context_line":"                continue"},{"line_number":144,"context_line":"            start \u003d tzutils.dt_from_iso(labels[\u0027start\u0027])"},{"line_number":145,"context_line":"            end \u003d tzutils.dt_from_iso(labels[\u0027end\u0027])"},{"line_number":146,"context_line":"            key \u003d (start, end)"}],"source_content_type":"text/x-python","patch_set":5,"id":"a774e2ea_10d2601e","line":143,"range":{"start_line":143,"start_character":16,"end_line":143,"end_character":24},"in_reply_to":"45c881d1_e6fa678e","updated":"2025-10-15 08:51:53.000000000","message":"This _build_dataframes method is only called on query, not on processing. So, what we are intending to do here is to ignore if a line that we retrieved from Loki is non-compliant json, as Loki will accept whatever you want to put inside, with no restrictions.\n\nSo, if someone besides CloudKitty Processor is tampering with the Loki API and they manually introduce a non-json compliant line, every query that contains that line would always fail if this fix was not present. With this fix, we just ignore that line and we continue processing all the others, giving the user the ratings even whith that manually tampered line.\n\nThis should never happen because the only responsible of storing things in the cloudkitty Loki stream should be CloudKitty Processor, which will always generate good json, but it is not bad to avoid the API to fail just for one or two \"rogue\" lines that \"should\" not be there.","commit_id":"b061e7ea462c01b7c02d7c27efbee6c0afc325b1"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"7ef34e0dea30c661a9b986e656f217e45242281c","unresolved":true,"context_lines":[{"line_number":140,"context_line":"                # In case that we have non-json compliant log lines in Loki"},{"line_number":141,"context_line":"                LOG.error(f\"Failed to decode log line: {log[\u0027values\u0027][0][1]}, \""},{"line_number":142,"context_line":"                          f\"ignoring.\")"},{"line_number":143,"context_line":"                continue"},{"line_number":144,"context_line":"            start \u003d tzutils.dt_from_iso(labels[\u0027start\u0027])"},{"line_number":145,"context_line":"            end \u003d tzutils.dt_from_iso(labels[\u0027end\u0027])"},{"line_number":146,"context_line":"            key \u003d (start, end)"}],"source_content_type":"text/x-python","patch_set":5,"id":"0c07affa_f6b136f4","line":143,"range":{"start_line":143,"start_character":16,"end_line":143,"end_character":24},"in_reply_to":"a774e2ea_10d2601e","updated":"2025-10-15 14:28:51.000000000","message":"I see, but this method is used to retrieve data for the processing. Therefore, if, for instance, there is an issue in a proxy on top of Loki, the proxy might respond an HTTP response with HTML, and CloudKitty would just ignore the timeframe. \n\nThis is something that does not happen today. If there is some issue in-between CloudKitty and the storage backend, the timeframe is not considered as processed, and it is retried in the next run.","commit_id":"b061e7ea462c01b7c02d7c27efbee6c0afc325b1"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"91be7f4dd63dab5e48c64dc96494f0c178b11a9d","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                # In case that we have non-json compliant log lines in Loki"},{"line_number":141,"context_line":"                LOG.error(f\"Failed to decode log line: {log[\u0027values\u0027][0][1]}, \""},{"line_number":142,"context_line":"                          f\"ignoring.\")"},{"line_number":143,"context_line":"                continue"},{"line_number":144,"context_line":"            start \u003d tzutils.dt_from_iso(labels[\u0027start\u0027])"},{"line_number":145,"context_line":"            end \u003d tzutils.dt_from_iso(labels[\u0027end\u0027])"},{"line_number":146,"context_line":"            key \u003d (start, end)"}],"source_content_type":"text/x-python","patch_set":5,"id":"b8f0dcb4_ccee46cd","line":143,"range":{"start_line":143,"start_character":16,"end_line":143,"end_character":24},"in_reply_to":"b36f707c_62f7ef88","updated":"2025-10-16 09:03:02.000000000","message":"Np, thank you for your review Rafael!","commit_id":"b061e7ea462c01b7c02d7c27efbee6c0afc325b1"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"b47926fdff5048c9f419c40f4e91b3497c031536","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                # In case that we have non-json compliant log lines in Loki"},{"line_number":141,"context_line":"                LOG.error(f\"Failed to decode log line: {log[\u0027values\u0027][0][1]}, \""},{"line_number":142,"context_line":"                          f\"ignoring.\")"},{"line_number":143,"context_line":"                continue"},{"line_number":144,"context_line":"            start \u003d tzutils.dt_from_iso(labels[\u0027start\u0027])"},{"line_number":145,"context_line":"            end \u003d tzutils.dt_from_iso(labels[\u0027end\u0027])"},{"line_number":146,"context_line":"            key \u003d (start, end)"}],"source_content_type":"text/x-python","patch_set":5,"id":"b36f707c_62f7ef88","line":143,"range":{"start_line":143,"start_character":16,"end_line":143,"end_character":24},"in_reply_to":"d9e5a8c7_37524c73","updated":"2025-10-15 17:24:23.000000000","message":"My bad, I was reading it the wrong way. You are right!","commit_id":"b061e7ea462c01b7c02d7c27efbee6c0afc325b1"}],"cloudkitty/storage/v2/loki/client.py":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"fa84d92c2c3d892fb126636e6b5fa53ee34bc002","unresolved":true,"context_lines":[{"line_number":39,"context_line":"        }"},{"line_number":40,"context_line":"        self._buffer_size \u003d buffer_size"},{"line_number":41,"context_line":"        self._points \u003d []"},{"line_number":42,"context_line":"        self._shard_days \u003d shard_days if 0 \u003c shard_days \u003c\u003d 30 else 7"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        self._cert \u003d cert"},{"line_number":45,"context_line":"        self._verify \u003d verify"}],"source_content_type":"text/x-python","patch_set":6,"id":"25977988_fef68896","line":42,"updated":"2025-11-10 14:24:58.000000000","message":"Now that integer range is enforced at the configuration level, you could just assign directly without checking values.","commit_id":"fc810b9dbd62f6433bc1b8f4691130c97a26cbf6"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"a3f30b34499c7f82291e8e2a46d2f4baaf0d835e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        }"},{"line_number":40,"context_line":"        self._buffer_size \u003d buffer_size"},{"line_number":41,"context_line":"        self._points \u003d []"},{"line_number":42,"context_line":"        self._shard_days \u003d shard_days if 0 \u003c shard_days \u003c\u003d 30 else 7"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        self._cert \u003d cert"},{"line_number":45,"context_line":"        self._verify \u003d verify"}],"source_content_type":"text/x-python","patch_set":6,"id":"4431ffe3_c106781d","line":42,"in_reply_to":"25977988_fef68896","updated":"2025-11-10 14:34:57.000000000","message":"Yeah, thats true, fixed.","commit_id":"fc810b9dbd62f6433bc1b8f4691130c97a26cbf6"}]}
