)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"315d97b2257ed49fc32cb3e172e81d047313eea1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ae0e720c_829a302d","updated":"2026-01-14 21:11:43.000000000","message":"I wonder if @callum.dickinson.nz@gmail.com wants to take a look? I saw you interested in the Octavia poller and I think it\u0027d be useful for somebody with knowledge of Gnocchi to have a look, since this is modifying the gnocchi_resources.yaml as well.","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"486d32d74b5bde4ff9ec5d49dd4d21dd192c7732","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"628a8e7b_b6ca4111","updated":"2026-01-14 21:05:44.000000000","message":"Just a tiny thing. What do you think about not hardcoding the fake zone and fake recordset counts in the tests to make it a little easier to add additional ones in the future?","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":36393,"name":"Callum Dickinson","email":"callum.dickinson@catalystcloud.nz","username":"Callum027","status":"Catalyst Cloud"},"change_message_id":"a4205e9118f5e460c638c9a0b75f42ce1de3a6a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"972308f1_5e2d51d4","in_reply_to":"ae0e720c_829a302d","updated":"2026-01-14 21:16:33.000000000","message":"We don\u0027t have Designate deployed on our cloud yet so I can\u0027t comment too much on the pollster itself, but I\u0027d be happy to look at the Gnocchi bits :)","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"a41c424e5c10e3ccd02f3a34f11eaf6d3d416df9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"65fa4cde_a0fdeb4a","updated":"2026-01-16 12:47:19.000000000","message":"I have a few questions. Nothing major, I am trying to understand the code more.","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":36393,"name":"Callum Dickinson","email":"callum.dickinson@catalystcloud.nz","username":"Callum027","status":"Catalyst Cloud"},"change_message_id":"0919cad8fc74ecbaf964ad361ae817a93cd401e8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"34bebabd_dd4218f6","updated":"2026-01-15 09:48:20.000000000","message":"I\u0027ll give it another quick once in DevStack at work tomorrow morning, but as far as the Gnocchi integration goes everything looks good to me!","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"c69142f2fb83f4650748230bb39455996a0659fa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4d83ef35_f148c5d0","updated":"2026-01-16 09:17:56.000000000","message":"Looks good to me","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":36393,"name":"Callum Dickinson","email":"callum.dickinson@catalystcloud.nz","username":"Callum027","status":"Catalyst Cloud"},"change_message_id":"f14da1c33efb74dc6ded1393bde726cb42dcdc61","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e9d3854c_dac7c5a7","in_reply_to":"34bebabd_dd4218f6","updated":"2026-01-16 02:08:56.000000000","message":"DNS zone metrics are published to Gnocchi after Ceilometer polls it, and then marked as ended in Gnocchi after deletion.\n\nhttps://paste.openstack.org/show/bpkfYP71XvagpXcv2xU2/","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"4a59ebac24262140be089786247424ddd27a4dc7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ecd0803f_f1d49cde","updated":"2026-01-19 13:23:11.000000000","message":"I think all the comments regarding the code were resolved and the consensus seems to be that the change itself looks good (it looks good to me as well). If there are further discussions related to DNS and ceilometer code in general, they can happen outside of gerrit as well.","commit_id":"b1f3eeac2c42ed24dee0841f17ad1fa1d56b3b20"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"c96775a54f1907cc02fe6368cac823d665286fd9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"70fcb565_c8049e03","updated":"2026-01-19 14:13:54.000000000","message":"thank you","commit_id":"b1f3eeac2c42ed24dee0841f17ad1fa1d56b3b20"}],"ceilometer/dns/designate.py":[{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"a41c424e5c10e3ccd02f3a34f11eaf6d3d416df9","unresolved":true,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"class ZoneSerialPollster(_BaseZonePollster):"},{"line_number":140,"context_line":"    \"\"\"Pollster for Designate DNS zone serial number.\"\"\""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":143,"context_line":"        for zone in resources or []:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f34ec8d_3f20d898","line":140,"range":{"start_line":140,"start_character":39,"end_line":140,"end_character":52},"updated":"2026-01-16 12:47:19.000000000","message":"The DNS zone serial number is like a version number, IINM. It is used to verify that the information is up-to-date, and changes when the records in the zone are changed.\nDoes this value start at zero? Does it always increment?\nIMHO, that sounds like a counter rather than a gauge. Am I understanding the sample types correctly?","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"cb922e0c3aada715b34ae68d314f4195cf863e58","unresolved":true,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"class ZoneSerialPollster(_BaseZonePollster):"},{"line_number":140,"context_line":"    \"\"\"Pollster for Designate DNS zone serial number.\"\"\""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":143,"context_line":"        for zone in resources or []:"}],"source_content_type":"text/x-python","patch_set":4,"id":"47974718_52c30071","line":140,"range":{"start_line":140,"start_character":39,"end_line":140,"end_character":52},"in_reply_to":"9f34ec8d_3f20d898","updated":"2026-01-16 15:59:00.000000000","message":"This is a very good question. Even if you have made some valid points, I still believe this should keep being a Gauge, mainly because it represents a point-in-time state, not a rate of change. Also, every time you query the metric you want to query the current value, not the delta between the now value and the previous value.","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"}],"ceilometer/dns/discovery.py":[{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"a41c424e5c10e3ccd02f3a34f11eaf6d3d416df9","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __init__(self, conf):"},{"line_number":24,"context_line":"        super().__init__(conf)"},{"line_number":25,"context_line":"        self.designate_cli \u003d designate_client.Client(conf)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":28,"context_line":"        \"\"\"Discover DNS zone resources to monitor.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"822a3c06_45f1fbd5","line":25,"range":{"start_line":25,"start_character":13,"end_line":25,"end_character":26},"updated":"2026-01-16 12:47:19.000000000","message":"Why is this called designate_cli? Should it be called designate_client or simply just client?","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":36393,"name":"Callum Dickinson","email":"callum.dickinson@catalystcloud.nz","username":"Callum027","status":"Catalyst Cloud"},"change_message_id":"f53633e819dd91ff971dbbaa8d2713ec88e164d0","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __init__(self, conf):"},{"line_number":24,"context_line":"        super().__init__(conf)"},{"line_number":25,"context_line":"        self.designate_cli \u003d designate_client.Client(conf)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":28,"context_line":"        \"\"\"Discover DNS zone resources to monitor.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"c7f4e09b_ed54bc0c","line":25,"range":{"start_line":25,"start_character":13,"end_line":25,"end_character":26},"in_reply_to":"16f5f982_08b78abf","updated":"2026-01-16 17:35:37.000000000","message":"_cli is the variable suffix other client objects have in Ceilometer. I can\u0027t give any context as to why, _client seems more appropriate to me.","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"cb922e0c3aada715b34ae68d314f4195cf863e58","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __init__(self, conf):"},{"line_number":24,"context_line":"        super().__init__(conf)"},{"line_number":25,"context_line":"        self.designate_cli \u003d designate_client.Client(conf)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":28,"context_line":"        \"\"\"Discover DNS zone resources to monitor.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"16f5f982_08b78abf","line":25,"range":{"start_line":25,"start_character":13,"end_line":25,"end_character":26},"in_reply_to":"822a3c06_45f1fbd5","updated":"2026-01-16 15:59:00.000000000","message":"Yeah, good point, patch incoming.","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"684fc25cf70ab657a889fc2183e14859c0fa061b","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __init__(self, conf):"},{"line_number":24,"context_line":"        super().__init__(conf)"},{"line_number":25,"context_line":"        self.designate_cli \u003d designate_client.Client(conf)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":28,"context_line":"        \"\"\"Discover DNS zone resources to monitor.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"6b659470_6659cb5f","line":25,"range":{"start_line":25,"start_character":13,"end_line":25,"end_character":26},"in_reply_to":"c7f4e09b_ed54bc0c","updated":"2026-01-16 21:18:11.000000000","message":"The usage of _cli or _client is absolutely inconsistent around Ceilometer. More places use _client than _cli, though, so I still think we should follow that.","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"}],"ceilometer/gnocchi_client.py":[{"author":{"_account_id":36393,"name":"Callum Dickinson","email":"callum.dickinson@catalystcloud.nz","username":"Callum027","status":"Catalyst Cloud"},"change_message_id":"98b614c3092f27ff1614b6d73d023649d63c1868","unresolved":true,"context_lines":[{"line_number":271,"context_line":"                       \"max_length\": 255, \"required\": False},"},{"line_number":272,"context_line":"             \"zone_type\": {\"type\": \"string\", \"min_length\": 0,"},{"line_number":273,"context_line":"                           \"max_length\": 255, \"required\": False},"},{"line_number":274,"context_line":"             \"status\": {\"type\": \"string\", \"min_length\": 0,"},{"line_number":275,"context_line":"                        \"max_length\": 255, \"required\": False},"},{"line_number":276,"context_line":"             \"pool_id\": {\"type\": \"string\", \"min_length\": 0,"},{"line_number":277,"context_line":"                         \"max_length\": 255, \"required\": False}"}],"source_content_type":"text/x-python","patch_set":3,"id":"c751720c_31070edb","line":274,"updated":"2026-01-15 08:09:43.000000000","message":"Don\u0027t publish `status` as a resource attribute, as a highly variable value it should be (and already is) a metric.","commit_id":"9b03e2403a9bfa0dc669c9005d9334e0f5e59793"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"0a3ffc89ad0c0cf2cb05c6156b8b7c370b6504fe","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                       \"max_length\": 255, \"required\": False},"},{"line_number":272,"context_line":"             \"zone_type\": {\"type\": \"string\", \"min_length\": 0,"},{"line_number":273,"context_line":"                           \"max_length\": 255, \"required\": False},"},{"line_number":274,"context_line":"             \"status\": {\"type\": \"string\", \"min_length\": 0,"},{"line_number":275,"context_line":"                        \"max_length\": 255, \"required\": False},"},{"line_number":276,"context_line":"             \"pool_id\": {\"type\": \"string\", \"min_length\": 0,"},{"line_number":277,"context_line":"                         \"max_length\": 255, \"required\": False}"}],"source_content_type":"text/x-python","patch_set":3,"id":"6931c1ad_cf21ef00","line":274,"in_reply_to":"c751720c_31070edb","updated":"2026-01-15 09:23:21.000000000","message":"Done","commit_id":"9b03e2403a9bfa0dc669c9005d9334e0f5e59793"}],"ceilometer/opts.py":[{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"88a2be4f60a2308902be16f5a428f3d2b48829c4","unresolved":true,"context_lines":[{"line_number":106,"context_line":"                         ceilometer.nova_client.SERVICE_OPTS,"},{"line_number":107,"context_line":"                         ceilometer.objectstore.rgw.SERVICE_OPTS,"},{"line_number":108,"context_line":"                         ceilometer.objectstore.swift.SERVICE_OPTS,"},{"line_number":109,"context_line":"                         ceilometer.designate_client.SERVICE_OPTS,"},{"line_number":110,"context_line":"                         ceilometer.octavia_client.SERVICE_OPTS,"},{"line_number":111,"context_line":"                         ceilometer.volume.discovery.SERVICE_OPTS,))"},{"line_number":112,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":2,"id":"96ed7759_66297081","line":109,"updated":"2026-01-14 21:50:58.000000000","message":"The rest appear to be in alphabetical order. This should be on line 104, unless the ordering is important for some other non-obvious-to-me reason","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"9c8527506bd33634489c6c6047f8d9826086e00b","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                         ceilometer.nova_client.SERVICE_OPTS,"},{"line_number":107,"context_line":"                         ceilometer.objectstore.rgw.SERVICE_OPTS,"},{"line_number":108,"context_line":"                         ceilometer.objectstore.swift.SERVICE_OPTS,"},{"line_number":109,"context_line":"                         ceilometer.designate_client.SERVICE_OPTS,"},{"line_number":110,"context_line":"                         ceilometer.octavia_client.SERVICE_OPTS,"},{"line_number":111,"context_line":"                         ceilometer.volume.discovery.SERVICE_OPTS,))"},{"line_number":112,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":2,"id":"f4cf6462_7cd254d1","line":109,"in_reply_to":"96ed7759_66297081","updated":"2026-01-15 08:34:24.000000000","message":"Absolutely!","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"}],"ceilometer/publisher/data/gnocchi_resources.yaml":[{"author":{"_account_id":36393,"name":"Callum Dickinson","email":"callum.dickinson@catalystcloud.nz","username":"Callum027","status":"Catalyst Cloud"},"change_message_id":"c9cc49b3db6c76809c20c614093fdff04680a23c","unresolved":true,"context_lines":[{"line_number":314,"context_line":"    event_attributes:"},{"line_number":315,"context_line":"      id: resource_id"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  - resource_type: dns_zone"},{"line_number":318,"context_line":"    metrics:"},{"line_number":319,"context_line":"      dns.zone.status:"},{"line_number":320,"context_line":"      dns.zone.recordsets:"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"124d6863_f22f74d2","line":317,"updated":"2026-01-14 23:00:54.000000000","message":"The `dns_zone` resource type needs to be added to `ceilometer/gnocchi_client.py`.","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":36393,"name":"Callum Dickinson","email":"callum.dickinson@catalystcloud.nz","username":"Callum027","status":"Catalyst Cloud"},"change_message_id":"98b614c3092f27ff1614b6d73d023649d63c1868","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    event_attributes:"},{"line_number":315,"context_line":"      id: resource_id"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  - resource_type: dns_zone"},{"line_number":318,"context_line":"    metrics:"},{"line_number":319,"context_line":"      dns.zone.status:"},{"line_number":320,"context_line":"      dns.zone.recordsets:"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"ac287427_4c491564","line":317,"in_reply_to":"124d6863_f22f74d2","updated":"2026-01-15 08:09:43.000000000","message":"Resolved","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"9c8527506bd33634489c6c6047f8d9826086e00b","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    event_attributes:"},{"line_number":315,"context_line":"      id: resource_id"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  - resource_type: dns_zone"},{"line_number":318,"context_line":"    metrics:"},{"line_number":319,"context_line":"      dns.zone.status:"},{"line_number":320,"context_line":"      dns.zone.recordsets:"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f8382cc_57115546","line":317,"in_reply_to":"124d6863_f22f74d2","updated":"2026-01-15 08:34:24.000000000","message":"Thank you! This time I used Gnocchi for testing everything to try to get it right. It worked (apparently) perfectly on my devstack environment with Gnocchi without this, but it is true that it must exist.","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"ff0bb7516497d34be16cdf89407b38eaf5b4debf","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    event_attributes:"},{"line_number":315,"context_line":"      id: resource_id"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  - resource_type: dns_zone"},{"line_number":318,"context_line":"    metrics:"},{"line_number":319,"context_line":"      dns.zone.status:"},{"line_number":320,"context_line":"      dns.zone.recordsets:"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"8a5bc6fc_1a3b5a33","line":317,"in_reply_to":"7f8382cc_57115546","updated":"2026-01-15 09:14:04.000000000","message":"@callum.dickinson.nz@gmail.com Maybe you can provide me guidance on this. I have implemented your suggestions, but when I test this in my devstack environment, I dont see any difference in the metrics I look at when using \"openstack metrics\" command on gnocchi-stored metrics vs when I dont have gnocchi_client changes.\n\nThis is obviouly because I am a great ignorant on how gnocchi works, but could you provide me with some kind of indication on the difference having dns_zone added to gnocchi_client.py vs not having it? That way I can always verify that I have added all gnocchi resources correctly on these kind of PRs that add new metrics.","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":36393,"name":"Callum Dickinson","email":"callum.dickinson@catalystcloud.nz","username":"Callum027","status":"Catalyst Cloud"},"change_message_id":"d03774b486860acb396a249424e1f45f8b1b3b9e","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    event_attributes:"},{"line_number":315,"context_line":"      id: resource_id"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  - resource_type: dns_zone"},{"line_number":318,"context_line":"    metrics:"},{"line_number":319,"context_line":"      dns.zone.status:"},{"line_number":320,"context_line":"      dns.zone.recordsets:"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"0e0edc2b_296c634d","line":317,"in_reply_to":"8a5bc6fc_1a3b5a33","updated":"2026-01-15 09:51:34.000000000","message":"On the contrary, I\u0027m not sure how this could have worked without `dns_zone` being added to `gnocchi_client.py`, since that definition is where `ceilometer-upgrade` looks to create th resource types in Gnocchi itself.\n\nI can say that as far as this changeset goes, everything is now in place for the `dns_zone` resource type to be added in Gnocchi with the correct attributes.","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":36393,"name":"Callum Dickinson","email":"callum.dickinson@catalystcloud.nz","username":"Callum027","status":"Catalyst Cloud"},"change_message_id":"c9cc49b3db6c76809c20c614093fdff04680a23c","unresolved":true,"context_lines":[{"line_number":328,"context_line":"      pool_id: resource_metadata.pool_id"},{"line_number":329,"context_line":"    event_delete: dns.zone.delete"},{"line_number":330,"context_line":"    event_attributes:"},{"line_number":331,"context_line":"      id: resource_id"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"d3e82197_37e78d22","line":331,"range":{"start_line":331,"start_character":6,"end_line":331,"end_character":21},"updated":"2026-01-14 23:00:54.000000000","message":"It looks like `event_resources.yaml` already contains some handling for Designate notifications, but nothing for DNS zones.\n\nI started up a DevStack to get a look at the format of the [Designate notifications](https://paste.openstack.org/show/bYFULUZ3CMj0MlOz2Df5/), and it looks like this should cover everything:\n\n```yaml\n- event_type: [\u0027dns.zone.create\u0027, \u0027dns.zone.update\u0027, \u0027dns.zone.delete\u0027]\n  traits: \u0026dns_zone_traits\n    resource_id:\n      fields: payload.id\n    project_id:\n      fields: payload.tenant_id\n    name:\n      fields: payload.name\n    description:\n      fields: payload.description\n    action:\n      fields: payload.action\n    attributes:\n      fields: payload.attributes\n    created_at:\n      type: datetime\n      fields: payload.created_at\n    delayed_notify:\n      fields: payload.delay_notify\n    email:\n      fields: payload.email\n    expire:\n      fields: payload.expire\n    increment_serial:\n      fields: payload.increment_serial\n    masters:\n      fields: payload.masters\n    minimum:\n      fields: payload.minimum\n    parent_zone_id:\n      fields: payload.parent_zone_id\n    pool_id:\n      fields: payload.pool_id\n    refresh:\n      fields: payload.refresh\n    retry:\n      fields: payload.retry\n    serial:\n      fields: payload.serial\n    shard:\n      fields: payload.shard\n    shared:\n      fields: payload.shared\n    status:\n      fields: payload.status\n    trasferred_at:\n      type: datetime\n      fields: payload.transferred_at\n    ttl:\n      fields: payload.ttl\n    type:\n      fields: payload.type\n    updated_at:\n      type: datetime\n      fields: payload.updated_at\n    version:\n      fields: payload.version\n- event_type: dns.zone.exists\n  traits:\n    \u003c\u003c: *dns_zone_traits\n    audit_period_beginning:\n      type: datetime\n      fields: payload.audit_period_beginning\n    audit_period_ending:\n      type: datetime\n      fields: payload.audit_period_ending\n```","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"9c8527506bd33634489c6c6047f8d9826086e00b","unresolved":false,"context_lines":[{"line_number":328,"context_line":"      pool_id: resource_metadata.pool_id"},{"line_number":329,"context_line":"    event_delete: dns.zone.delete"},{"line_number":330,"context_line":"    event_attributes:"},{"line_number":331,"context_line":"      id: resource_id"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"55e47f76_55f2f380","line":331,"range":{"start_line":331,"start_character":6,"end_line":331,"end_character":21},"in_reply_to":"d3e82197_37e78d22","updated":"2026-01-15 08:34:24.000000000","message":"Done","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":36393,"name":"Callum Dickinson","email":"callum.dickinson@catalystcloud.nz","username":"Callum027","status":"Catalyst Cloud"},"change_message_id":"98b614c3092f27ff1614b6d73d023649d63c1868","unresolved":false,"context_lines":[{"line_number":328,"context_line":"      pool_id: resource_metadata.pool_id"},{"line_number":329,"context_line":"    event_delete: dns.zone.delete"},{"line_number":330,"context_line":"    event_attributes:"},{"line_number":331,"context_line":"      id: resource_id"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"d805c3f0_d83dce68","line":331,"range":{"start_line":331,"start_character":6,"end_line":331,"end_character":21},"in_reply_to":"d3e82197_37e78d22","updated":"2026-01-15 08:09:43.000000000","message":"Resolved","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":36393,"name":"Callum Dickinson","email":"callum.dickinson@catalystcloud.nz","username":"Callum027","status":"Catalyst Cloud"},"change_message_id":"98b614c3092f27ff1614b6d73d023649d63c1868","unresolved":true,"context_lines":[{"line_number":324,"context_line":"      zone_name: resource_metadata.name"},{"line_number":325,"context_line":"      email: resource_metadata.email"},{"line_number":326,"context_line":"      zone_type: resource_metadata.type"},{"line_number":327,"context_line":"      status: resource_metadata.status"},{"line_number":328,"context_line":"      pool_id: resource_metadata.pool_id"},{"line_number":329,"context_line":"    event_delete: dns.zone.delete"},{"line_number":330,"context_line":"    event_attributes:"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7053fcc2_f01338d2","line":327,"updated":"2026-01-15 08:09:43.000000000","message":"Don\u0027t publish `status` as a resource attribute, as a highly variable value it should be (and already is) a metric.","commit_id":"9b03e2403a9bfa0dc669c9005d9334e0f5e59793"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"0a3ffc89ad0c0cf2cb05c6156b8b7c370b6504fe","unresolved":false,"context_lines":[{"line_number":324,"context_line":"      zone_name: resource_metadata.name"},{"line_number":325,"context_line":"      email: resource_metadata.email"},{"line_number":326,"context_line":"      zone_type: resource_metadata.type"},{"line_number":327,"context_line":"      status: resource_metadata.status"},{"line_number":328,"context_line":"      pool_id: resource_metadata.pool_id"},{"line_number":329,"context_line":"    event_delete: dns.zone.delete"},{"line_number":330,"context_line":"    event_attributes:"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"6b3afbc5_84b46e9b","line":327,"in_reply_to":"7053fcc2_f01338d2","updated":"2026-01-15 09:23:21.000000000","message":"Done","commit_id":"9b03e2403a9bfa0dc669c9005d9334e0f5e59793"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"a41c424e5c10e3ccd02f3a34f11eaf6d3d416df9","unresolved":true,"context_lines":[{"line_number":322,"context_line":"      dns.zone.serial:"},{"line_number":323,"context_line":"    attributes:"},{"line_number":324,"context_line":"      zone_name: resource_metadata.name"},{"line_number":325,"context_line":"      email: resource_metadata.email"},{"line_number":326,"context_line":"      zone_type: resource_metadata.type"},{"line_number":327,"context_line":"      pool_id: resource_metadata.pool_id"},{"line_number":328,"context_line":"    event_delete: dns.zone.delete"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"c3ffe4cd_2f3457bb","line":325,"range":{"start_line":325,"start_character":0,"end_line":325,"end_character":2},"updated":"2026-01-16 12:47:19.000000000","message":"Why does a dns zone have an e-mail? Is it just because the event_definitions have an e-mail? \n\n(unrelated) I see dn domains in event_definitions, but there\u0027s no gnocchi resource here. What is the reason for that? Should there be a resource for dns domains here?","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":36393,"name":"Callum Dickinson","email":"callum.dickinson@catalystcloud.nz","username":"Callum027","status":"Catalyst Cloud"},"change_message_id":"f53633e819dd91ff971dbbaa8d2713ec88e164d0","unresolved":true,"context_lines":[{"line_number":322,"context_line":"      dns.zone.serial:"},{"line_number":323,"context_line":"    attributes:"},{"line_number":324,"context_line":"      zone_name: resource_metadata.name"},{"line_number":325,"context_line":"      email: resource_metadata.email"},{"line_number":326,"context_line":"      zone_type: resource_metadata.type"},{"line_number":327,"context_line":"      pool_id: resource_metadata.pool_id"},{"line_number":328,"context_line":"    event_delete: dns.zone.delete"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"c95f873d_d05b1a5a","line":325,"range":{"start_line":325,"start_character":0,"end_line":325,"end_character":2},"in_reply_to":"05df1ff6_fce435e6","updated":"2026-01-16 17:35:37.000000000","message":"I put `domains` in the definition because I saw that it was provided in notification payloads. I\u0027m afraid I don\u0027t know what it\u0027s for but I figured it can\u0027t hurt including it in the event definition.","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"cb922e0c3aada715b34ae68d314f4195cf863e58","unresolved":true,"context_lines":[{"line_number":322,"context_line":"      dns.zone.serial:"},{"line_number":323,"context_line":"    attributes:"},{"line_number":324,"context_line":"      zone_name: resource_metadata.name"},{"line_number":325,"context_line":"      email: resource_metadata.email"},{"line_number":326,"context_line":"      zone_type: resource_metadata.type"},{"line_number":327,"context_line":"      pool_id: resource_metadata.pool_id"},{"line_number":328,"context_line":"    event_delete: dns.zone.delete"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"05df1ff6_fce435e6","line":325,"range":{"start_line":325,"start_character":0,"end_line":325,"end_character":2},"in_reply_to":"c3ffe4cd_2f3457bb","updated":"2026-01-16 15:59:00.000000000","message":"Regarding the email, it is standard for DNS zones as it\u0027s the administrative contact (the SOA RNAME field)\n\nThe unrelated part, I dont have a proper answer I am afraid. It seems that DNS Domain in Designate where the prehistoric predecessor of DNS Zones. Maybe the event_definitions has dns domains for backwards compatibility with older designate deployments?","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"684fc25cf70ab657a889fc2183e14859c0fa061b","unresolved":true,"context_lines":[{"line_number":322,"context_line":"      dns.zone.serial:"},{"line_number":323,"context_line":"    attributes:"},{"line_number":324,"context_line":"      zone_name: resource_metadata.name"},{"line_number":325,"context_line":"      email: resource_metadata.email"},{"line_number":326,"context_line":"      zone_type: resource_metadata.type"},{"line_number":327,"context_line":"      pool_id: resource_metadata.pool_id"},{"line_number":328,"context_line":"    event_delete: dns.zone.delete"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"284c6ba5_0ce8d6de","line":325,"range":{"start_line":325,"start_character":0,"end_line":325,"end_character":2},"in_reply_to":"c95f873d_d05b1a5a","updated":"2026-01-16 21:18:11.000000000","message":"I love to have answers to stuff that I did not know :)","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"}],"ceilometer/tests/unit/dns/test_designate.py":[{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"40aeaa5cae5e4c51f220da629f880348bc597aa0","unresolved":true,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class FakeZone:"},{"line_number":26,"context_line":"    \"\"\"Fake zone object mimicking openstacksdk Resource.\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def __init__(self, **kwargs):"},{"line_number":29,"context_line":"        for key, value in kwargs.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"954745ab_01ab5beb","line":26,"updated":"2026-01-14 21:15:08.000000000","message":"Could these be replaced by the actual openstacksdk types? Resources in openstacsdk allow passing a connection\u003dNone parm into the constructor, specifically so that they can be used in testing without a live cloud. [1]\n\nIMHO, this makes the tests more useful, since we have higher confidence that the properties we\u0027re accessing exist on the resources.\n\n\n[1] https://github.com/openstack/openstacksdk/blob/master/openstack/resource.py#L449","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"9c8527506bd33634489c6c6047f8d9826086e00b","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class FakeZone:"},{"line_number":26,"context_line":"    \"\"\"Fake zone object mimicking openstacksdk Resource.\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def __init__(self, **kwargs):"},{"line_number":29,"context_line":"        for key, value in kwargs.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"1485c2a2_c54d85a8","line":26,"in_reply_to":"954745ab_01ab5beb","updated":"2026-01-15 08:34:24.000000000","message":"This always brings up the philosophical discussion on what is the \"proper\" boundary between a unit test and an integration test. However, when used with connection\u003dNone, SDK objects are just data containers and they behave exactly like Mocks, but with the advance of, as you stated, testing that this code is properly aligned with the code that will be used in production. \n\nI modified it to use the SDK objects with connection\u003dNone to leverage this advantage.","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"88a2be4f60a2308902be16f5a428f3d2b48829c4","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":46,"context_line":"        self.CONF \u003d service.prepare_service([], [])"},{"line_number":47,"context_line":"        # Mock the openstack.connection.Connection to avoid auth issues"},{"line_number":48,"context_line":"        with mock.patch(\u0027openstack.connection.Connection\u0027):"},{"line_number":49,"context_line":"            self.manager \u003d manager.AgentManager(0, self.CONF)"},{"line_number":50,"context_line":"        plugin_base._get_keystone \u003d mock.Mock()"},{"line_number":51,"context_line":"        catalog \u003d (plugin_base._get_keystone.session.auth.get_access."}],"source_content_type":"text/x-python","patch_set":2,"id":"cc3f91f0_6775ff41","line":48,"updated":"2026-01-14 21:50:58.000000000","message":"Could openstack.connection.Connection be mocked for the entire duration of the test instead of just for the call to create a manager?\n\nThis would let you model a FakeConnection instead and return fake_get_zones and fake_get_recordset from there. This would mean that you also don\u0027t have to mock all calls to designate client. However, the scope of the testing might change slightly, since you\u0027ll be using the real ceilometer.designate client. It would provide some additional test coverage for the designate client and the other parts of the code you\u0027re adding here, and potentially catch some testcases you didn\u0027t consider.","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"9c8527506bd33634489c6c6047f8d9826086e00b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":46,"context_line":"        self.CONF \u003d service.prepare_service([], [])"},{"line_number":47,"context_line":"        # Mock the openstack.connection.Connection to avoid auth issues"},{"line_number":48,"context_line":"        with mock.patch(\u0027openstack.connection.Connection\u0027):"},{"line_number":49,"context_line":"            self.manager \u003d manager.AgentManager(0, self.CONF)"},{"line_number":50,"context_line":"        plugin_base._get_keystone \u003d mock.Mock()"},{"line_number":51,"context_line":"        catalog \u003d (plugin_base._get_keystone.session.auth.get_access."}],"source_content_type":"text/x-python","patch_set":2,"id":"59c45f3b_21d8fe20","line":48,"in_reply_to":"cc3f91f0_6775ff41","updated":"2026-01-15 08:34:24.000000000","message":"Yes, very good suggestion.","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"486d32d74b5bde4ff9ec5d49dd4d21dd192c7732","unresolved":true,"context_lines":[{"line_number":131,"context_line":"        samples \u003d list(self.pollster.get_samples("},{"line_number":132,"context_line":"            self.manager, {},"},{"line_number":133,"context_line":"            resources\u003dself.fake_get_zones()))"},{"line_number":134,"context_line":"        self.assertEqual(3, len(samples))"},{"line_number":135,"context_line":"        for field in self.pollster.FIELDS:"},{"line_number":136,"context_line":"            self.assertEqual("},{"line_number":137,"context_line":"                getattr(self.fake_get_zones()[0], field),"}],"source_content_type":"text/x-python","patch_set":2,"id":"69d393c8_1ed063b6","line":134,"updated":"2026-01-14 21:05:44.000000000","message":"```suggestion\n        self.assertEqual(len(fake_get_zones()), len(samples))\n```\nOften when new pollsters are added, and new tests for them are implemented, people end up adding additional fake data. This would make that a little easier in the future.","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"9c8527506bd33634489c6c6047f8d9826086e00b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        samples \u003d list(self.pollster.get_samples("},{"line_number":132,"context_line":"            self.manager, {},"},{"line_number":133,"context_line":"            resources\u003dself.fake_get_zones()))"},{"line_number":134,"context_line":"        self.assertEqual(3, len(samples))"},{"line_number":135,"context_line":"        for field in self.pollster.FIELDS:"},{"line_number":136,"context_line":"            self.assertEqual("},{"line_number":137,"context_line":"                getattr(self.fake_get_zones()[0], field),"}],"source_content_type":"text/x-python","patch_set":2,"id":"f47e7539_0215d11f","line":134,"in_reply_to":"69d393c8_1ed063b6","updated":"2026-01-15 08:34:24.000000000","message":"Done","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"486d32d74b5bde4ff9ec5d49dd4d21dd192c7732","unresolved":true,"context_lines":[{"line_number":157,"context_line":"        with mock.patch(\u0027openstack.connection.Connection\u0027):"},{"line_number":158,"context_line":"            discovered_zones \u003d discovery.ZoneDiscovery("},{"line_number":159,"context_line":"                self.CONF).discover(self.manager)"},{"line_number":160,"context_line":"        self.assertEqual(3, len(list(discovered_zones)))"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"class TestZoneRecordsetCountPollster(_BaseTestDNSPollster):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fef9aec_61a60ce3","line":160,"updated":"2026-01-14 21:05:44.000000000","message":"```suggestion\n        self.assertEqual(len(fake_get_zones()), len(list(discovered_zones)))\n```","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"35c571593c00b2e34726aca8f90be959f13da099","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        with mock.patch(\u0027openstack.connection.Connection\u0027):"},{"line_number":158,"context_line":"            discovered_zones \u003d discovery.ZoneDiscovery("},{"line_number":159,"context_line":"                self.CONF).discover(self.manager)"},{"line_number":160,"context_line":"        self.assertEqual(3, len(list(discovered_zones)))"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"class TestZoneRecordsetCountPollster(_BaseTestDNSPollster):"}],"source_content_type":"text/x-python","patch_set":2,"id":"8ed1b61c_7d06c0aa","line":160,"in_reply_to":"175b7eb1_c15f55d5","updated":"2026-01-15 08:40:47.000000000","message":"It was more of a overlook on my side than a typo. Thanks for adding it and fixing the suggestion.","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"9c8527506bd33634489c6c6047f8d9826086e00b","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        with mock.patch(\u0027openstack.connection.Connection\u0027):"},{"line_number":158,"context_line":"            discovered_zones \u003d discovery.ZoneDiscovery("},{"line_number":159,"context_line":"                self.CONF).discover(self.manager)"},{"line_number":160,"context_line":"        self.assertEqual(3, len(list(discovered_zones)))"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"class TestZoneRecordsetCountPollster(_BaseTestDNSPollster):"}],"source_content_type":"text/x-python","patch_set":2,"id":"175b7eb1_c15f55d5","line":160,"in_reply_to":"5fef9aec_61a60ce3","updated":"2026-01-15 08:34:24.000000000","message":"Yeh, that will make the test more flexible for the future, and thats why that fake_get_zones() method exists.\n\nI have added it, however with a slight change as we have to do self.fake_get_zones() to be able to get that method. I have done that expecting that your suggetion was a typo. If it was not, please correct me.","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"486d32d74b5bde4ff9ec5d49dd4d21dd192c7732","unresolved":true,"context_lines":[{"line_number":176,"context_line":"            resources\u003dself.fake_get_zones()))"},{"line_number":177,"context_line":"        # Each zone should have 2 recordsets (from the mock)"},{"line_number":178,"context_line":"        for sample in samples:"},{"line_number":179,"context_line":"            self.assertEqual(2, sample.volume)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def test_get_zone_meter_names(self):"},{"line_number":182,"context_line":"        samples \u003d list(self.pollster.get_samples("}],"source_content_type":"text/x-python","patch_set":2,"id":"30475ead_b9190644","line":179,"updated":"2026-01-14 21:05:44.000000000","message":"```suggestion\n            self.assertEqual(len(fake_get_recordsets()), sample.volume)\n```","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"9c8527506bd33634489c6c6047f8d9826086e00b","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            resources\u003dself.fake_get_zones()))"},{"line_number":177,"context_line":"        # Each zone should have 2 recordsets (from the mock)"},{"line_number":178,"context_line":"        for sample in samples:"},{"line_number":179,"context_line":"            self.assertEqual(2, sample.volume)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def test_get_zone_meter_names(self):"},{"line_number":182,"context_line":"        samples \u003d list(self.pollster.get_samples("}],"source_content_type":"text/x-python","patch_set":2,"id":"e8bfbd7d_5b4de814","line":179,"in_reply_to":"30475ead_b9190644","updated":"2026-01-15 08:34:24.000000000","message":"Done","commit_id":"a5ea0048b8ca82e63e5e9a33565ecc5d8982cf3a"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"a41c424e5c10e3ccd02f3a34f11eaf6d3d416df9","unresolved":true,"context_lines":[{"line_number":122,"context_line":"        samples \u003d list(self.pollster.get_samples("},{"line_number":123,"context_line":"            self.manager, {},"},{"line_number":124,"context_line":"            resources\u003dself.fake_get_zones()))"},{"line_number":125,"context_line":"        self.assertEqual(len(self.fake_get_zones()), len(samples))"},{"line_number":126,"context_line":"        for field in self.pollster.FIELDS:"},{"line_number":127,"context_line":"            self.assertEqual("},{"line_number":128,"context_line":"                getattr(self.fake_get_zones()[0], field),"}],"source_content_type":"text/x-python","patch_set":4,"id":"24fe9455_68d2a974","line":125,"updated":"2026-01-16 12:47:19.000000000","message":"nit: for readability, adding a blank line between test setup, test, and assertions helps to grok the tests better IMHO","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"cb922e0c3aada715b34ae68d314f4195cf863e58","unresolved":true,"context_lines":[{"line_number":122,"context_line":"        samples \u003d list(self.pollster.get_samples("},{"line_number":123,"context_line":"            self.manager, {},"},{"line_number":124,"context_line":"            resources\u003dself.fake_get_zones()))"},{"line_number":125,"context_line":"        self.assertEqual(len(self.fake_get_zones()), len(samples))"},{"line_number":126,"context_line":"        for field in self.pollster.FIELDS:"},{"line_number":127,"context_line":"            self.assertEqual("},{"line_number":128,"context_line":"                getattr(self.fake_get_zones()[0], field),"}],"source_content_type":"text/x-python","patch_set":4,"id":"d11421c8_1f7621e0","line":125,"in_reply_to":"24fe9455_68d2a974","updated":"2026-01-16 15:59:00.000000000","message":"Absolutely.","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"a41c424e5c10e3ccd02f3a34f11eaf6d3d416df9","unresolved":true,"context_lines":[{"line_number":168,"context_line":"            resources\u003dself.fake_get_zones()))"},{"line_number":169,"context_line":"        # Each zone should have the mocked number of recordsets"},{"line_number":170,"context_line":"        for sample in samples:"},{"line_number":171,"context_line":"            self.assertEqual(len(self.fake_get_recordsets()), sample.volume)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_get_zone_meter_names(self):"},{"line_number":174,"context_line":"        samples \u003d list(self.pollster.get_samples("}],"source_content_type":"text/x-python","patch_set":4,"id":"60cdeb13_91629278","line":171,"range":{"start_line":171,"start_character":29,"end_line":171,"end_character":60},"updated":"2026-01-16 12:47:19.000000000","message":"nit: You could define a `num_recordsets` var outside the loop","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"cb922e0c3aada715b34ae68d314f4195cf863e58","unresolved":true,"context_lines":[{"line_number":168,"context_line":"            resources\u003dself.fake_get_zones()))"},{"line_number":169,"context_line":"        # Each zone should have the mocked number of recordsets"},{"line_number":170,"context_line":"        for sample in samples:"},{"line_number":171,"context_line":"            self.assertEqual(len(self.fake_get_recordsets()), sample.volume)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_get_zone_meter_names(self):"},{"line_number":174,"context_line":"        samples \u003d list(self.pollster.get_samples("}],"source_content_type":"text/x-python","patch_set":4,"id":"923f4e28_b76b3bf8","line":171,"range":{"start_line":171,"start_character":29,"end_line":171,"end_character":60},"in_reply_to":"60cdeb13_91629278","updated":"2026-01-16 15:59:00.000000000","message":"Yeah, good suggestion.","commit_id":"7790779687a6d71a2309e87b3b617f50d5b28944"}]}
