)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"26c3f3231d586107a69675798bca6bc6a5368636","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"732f7d5c_bcb0dbf6","updated":"2025-05-20 07:07:47.000000000","message":"recheck","commit_id":"2afdcc11ad76350e9c4bb79804ea43f41e130f39"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"d6f376526777d49f2925cb4d2fe42636eb5738f3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"82b5f6d8_17b44ee6","updated":"2025-05-19 10:21:02.000000000","message":"recheck","commit_id":"2afdcc11ad76350e9c4bb79804ea43f41e130f39"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"1338b6a301af37346073bd5b28330c9db630179e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"dda47f6f_029f69e9","updated":"2025-05-21 11:29:54.000000000","message":"Can you please review guys?\n\nSoftware factory is a known error","commit_id":"c8b55a1c6572f7d9900fd8ed254c11593906f33d"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"658f9ba1526a66b72e1915226514ea4550ab91a0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"f622acba_d08d34f9","updated":"2025-05-26 19:04:05.000000000","message":"lgtm in general, if you submit another patch, pls fix the now \u003d now \u003d ..","commit_id":"0762feb711fcbd0e0459b274944b4293da8f5072"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"ebd064bcf443a029a26fb1df5787ee6b0b0d7b6d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"0789011e_aa9e14ad","in_reply_to":"f622acba_d08d34f9","updated":"2025-05-27 10:00:51.000000000","message":"copy paste... I have fixed, good catch!","commit_id":"0762feb711fcbd0e0459b274944b4293da8f5072"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fad5a6d6b4e7daf40193b930349898059aa05245","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"a9b9e43d_3d622010","updated":"2025-05-27 18:03:38.000000000","message":"this lgtm David, thanks!","commit_id":"54dd9c7a255ef71f87836a37fb7946599e6f1bea"}],"watcher_tempest_plugin/tests/scenario/base.py":[{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"f5629e6a141889c14569ac840d5faf085e71422d","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def _make_measures_host(self, measures_count, time_step, min\u003d10, max\u003d20):"},{"line_number":343,"context_line":"        measures_body \u003d []"},{"line_number":344,"context_line":"        now \u003d datetime.now(timezone.utc)"},{"line_number":345,"context_line":"        for i in range(1, measures_count + 1):"},{"line_number":346,"context_line":"            dt \u003d now - timedelta(minutes\u003di * time_step)"},{"line_number":347,"context_line":"            measures_body.append("}],"source_content_type":"text/x-python","patch_set":2,"id":"84f38b9b_f7aa1ec9","line":344,"updated":"2025-05-14 15:25:04.000000000","message":"[warnings]\tWARNING\tdatetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).","commit_id":"2afdcc11ad76350e9c4bb79804ea43f41e130f39"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c6af82ada1982f33ed86a544b50809e5675f6296","unresolved":true,"context_lines":[{"line_number":443,"context_line":"            # Generate host_ram_usage fake metrics"},{"line_number":444,"context_line":"            ram_metric_uuid \u003d res[\u0027metrics\u0027]["},{"line_number":445,"context_line":"                self.GNOCCHI_METRIC_MAP[\u0027host_ram_usage\u0027]"},{"line_number":446,"context_line":"            ]"},{"line_number":447,"context_line":"            if h[\u0027hypervisor_hostname\u0027] in loaded_hosts:"},{"line_number":448,"context_line":"                mem_measures \u003d self._make_measures_host("},{"line_number":449,"context_line":"                    10, 1,"},{"line_number":450,"context_line":"                    min\u003dint(h[\u0027memory_mb\u0027]) * 0.7,"},{"line_number":451,"context_line":"                    max\u003dint(h[\u0027memory_mb\u0027]) * 0.8)"},{"line_number":452,"context_line":"            else:"},{"line_number":453,"context_line":"                mem_measures \u003d self._make_measures_host("},{"line_number":454,"context_line":"                    10, 1,"},{"line_number":455,"context_line":"                    min\u003dint(h[\u0027memory_mb\u0027]) * 0.1,"},{"line_number":456,"context_line":"                    max\u003dint(h[\u0027memory_mb\u0027]) * 0.2)"},{"line_number":457,"context_line":"            self.gnocchi.add_measures(ram_metric_uuid, mem_measures)"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def _show_measures(self, metric_uuid):"}],"source_content_type":"text/x-python","patch_set":6,"id":"a7f0bb8a_d90e0b87","line":456,"range":{"start_line":446,"start_character":0,"end_line":456,"end_character":50},"updated":"2025-05-21 15:41:08.000000000","message":"TBH, i\u0027m unclear what unit is using hardware.memory.used and how those are sent to gnocchi but i don\u0027t see any transformation of the value in https://github.com/openstack/watcher/blob/master/watcher/decision_engine/datasources/gnocchi.py so i think we can assume this is fine.","commit_id":"c8b55a1c6572f7d9900fd8ed254c11593906f33d"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"52cceed19507d9a47ffe1b97e70f82dd46fec8ac","unresolved":false,"context_lines":[{"line_number":443,"context_line":"            # Generate host_ram_usage fake metrics"},{"line_number":444,"context_line":"            ram_metric_uuid \u003d res[\u0027metrics\u0027]["},{"line_number":445,"context_line":"                self.GNOCCHI_METRIC_MAP[\u0027host_ram_usage\u0027]"},{"line_number":446,"context_line":"            ]"},{"line_number":447,"context_line":"            if h[\u0027hypervisor_hostname\u0027] in loaded_hosts:"},{"line_number":448,"context_line":"                mem_measures \u003d self._make_measures_host("},{"line_number":449,"context_line":"                    10, 1,"},{"line_number":450,"context_line":"                    min\u003dint(h[\u0027memory_mb\u0027]) * 0.7,"},{"line_number":451,"context_line":"                    max\u003dint(h[\u0027memory_mb\u0027]) * 0.8)"},{"line_number":452,"context_line":"            else:"},{"line_number":453,"context_line":"                mem_measures \u003d self._make_measures_host("},{"line_number":454,"context_line":"                    10, 1,"},{"line_number":455,"context_line":"                    min\u003dint(h[\u0027memory_mb\u0027]) * 0.1,"},{"line_number":456,"context_line":"                    max\u003dint(h[\u0027memory_mb\u0027]) * 0.2)"},{"line_number":457,"context_line":"            self.gnocchi.add_measures(ram_metric_uuid, mem_measures)"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def _show_measures(self, metric_uuid):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1d30ff7b_e5760bc5","line":456,"range":{"start_line":446,"start_character":0,"end_line":456,"end_character":50},"in_reply_to":"a7f0bb8a_d90e0b87","updated":"2025-05-22 09:24:44.000000000","message":"Acknowledged","commit_id":"c8b55a1c6572f7d9900fd8ed254c11593906f33d"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c6af82ada1982f33ed86a544b50809e5675f6296","unresolved":true,"context_lines":[{"line_number":626,"context_line":"        # Generate memory usage data for a instance consuming 80%"},{"line_number":627,"context_line":"        # unit is megabytes, total is obtained from flavor"},{"line_number":628,"context_line":"        # no inc_factor as memory is saved as gauge"},{"line_number":629,"context_line":"        mem_usage_mb \u003d int(instance[\u0027flavor\u0027][\u0027ram\u0027] * 0.8)"},{"line_number":630,"context_line":"        ram_data \u003d self._generate_prometheus_metrics("},{"line_number":631,"context_line":"            self.PROMETHEUS_METRIC_MAP[\u0027instance_ram_usage\u0027],"},{"line_number":632,"context_line":"            labels\u003dinstance_labels,"},{"line_number":633,"context_line":"            start_value\u003dmem_usage_mb,"},{"line_number":634,"context_line":"            inc_factor\u003d0)"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"        self.prometheus_client.add_measures(cpu_data)"},{"line_number":637,"context_line":"        self.prometheus_client.add_measures(ram_data)"}],"source_content_type":"text/x-python","patch_set":6,"id":"266a00a2_fed40bd9","line":634,"range":{"start_line":629,"start_character":0,"end_line":634,"end_character":25},"updated":"2025-05-21 15:41:08.000000000","message":"This seems correct.","commit_id":"c8b55a1c6572f7d9900fd8ed254c11593906f33d"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"52cceed19507d9a47ffe1b97e70f82dd46fec8ac","unresolved":false,"context_lines":[{"line_number":626,"context_line":"        # Generate memory usage data for a instance consuming 80%"},{"line_number":627,"context_line":"        # unit is megabytes, total is obtained from flavor"},{"line_number":628,"context_line":"        # no inc_factor as memory is saved as gauge"},{"line_number":629,"context_line":"        mem_usage_mb \u003d int(instance[\u0027flavor\u0027][\u0027ram\u0027] * 0.8)"},{"line_number":630,"context_line":"        ram_data \u003d self._generate_prometheus_metrics("},{"line_number":631,"context_line":"            self.PROMETHEUS_METRIC_MAP[\u0027instance_ram_usage\u0027],"},{"line_number":632,"context_line":"            labels\u003dinstance_labels,"},{"line_number":633,"context_line":"            start_value\u003dmem_usage_mb,"},{"line_number":634,"context_line":"            inc_factor\u003d0)"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"        self.prometheus_client.add_measures(cpu_data)"},{"line_number":637,"context_line":"        self.prometheus_client.add_measures(ram_data)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1323ca5b_a8bb00b4","line":634,"range":{"start_line":629,"start_character":0,"end_line":634,"end_character":25},"in_reply_to":"266a00a2_fed40bd9","updated":"2025-05-22 09:24:44.000000000","message":"Acknowledged","commit_id":"c8b55a1c6572f7d9900fd8ed254c11593906f33d"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c6af82ada1982f33ed86a544b50809e5675f6296","unresolved":true,"context_lines":[{"line_number":684,"context_line":"                # no inc_factor as memory is saved as gauge"},{"line_number":685,"context_line":"                load \u003d 0.8 if h[\u0027hypervisor_hostname\u0027] in loaded_hosts else 0.1"},{"line_number":686,"context_line":"                mem_usage_mb \u003d int(h[\u0027memory_mb\u0027] * load)"},{"line_number":687,"context_line":"                ram_data \u003d self._generate_prometheus_metrics("},{"line_number":688,"context_line":"                    self.PROMETHEUS_METRIC_MAP[\u0027host_ram_usage\u0027],"},{"line_number":689,"context_line":"                    labels\u003dhost_labels,"},{"line_number":690,"context_line":"                    start_value\u003dmem_usage_mb,"},{"line_number":691,"context_line":"                    inc_factor\u003d0)"},{"line_number":692,"context_line":"                self.prometheus_client.add_measures(ram_data)"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    # ### AUDIT TEMPLATES ### #"}],"source_content_type":"text/x-python","patch_set":6,"id":"4158d52c_cd1c9b51","line":691,"range":{"start_line":687,"start_character":0,"end_line":691,"end_character":33},"updated":"2025-05-21 15:41:08.000000000","message":"I think this will not work. Note the metric you are adding here is node_memory_MemAvailable_bytes not the actual used memory in MB. The prometheus driver builds that metric in https://github.com/openstack/watcher/blob/master/watcher/decision_engine/datasources/prometheus.py#L317-L324 .\n\nActually, in prometheus, to get the host metric for memory, you will need to inject both node_memory_MemTotal_bytes and node_memory_MemAvailable_bytes (note this is the unused memory in bytes) so that the driver calculates properly.","commit_id":"c8b55a1c6572f7d9900fd8ed254c11593906f33d"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"52cceed19507d9a47ffe1b97e70f82dd46fec8ac","unresolved":false,"context_lines":[{"line_number":684,"context_line":"                # no inc_factor as memory is saved as gauge"},{"line_number":685,"context_line":"                load \u003d 0.8 if h[\u0027hypervisor_hostname\u0027] in loaded_hosts else 0.1"},{"line_number":686,"context_line":"                mem_usage_mb \u003d int(h[\u0027memory_mb\u0027] * load)"},{"line_number":687,"context_line":"                ram_data \u003d self._generate_prometheus_metrics("},{"line_number":688,"context_line":"                    self.PROMETHEUS_METRIC_MAP[\u0027host_ram_usage\u0027],"},{"line_number":689,"context_line":"                    labels\u003dhost_labels,"},{"line_number":690,"context_line":"                    start_value\u003dmem_usage_mb,"},{"line_number":691,"context_line":"                    inc_factor\u003d0)"},{"line_number":692,"context_line":"                self.prometheus_client.add_measures(ram_data)"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    # ### AUDIT TEMPLATES ### #"}],"source_content_type":"text/x-python","patch_set":6,"id":"ea8b27ed_9c74522d","line":691,"range":{"start_line":687,"start_character":0,"end_line":691,"end_character":33},"in_reply_to":"4158d52c_cd1c9b51","updated":"2025-05-22 09:24:44.000000000","message":"moved to:\n\nmem_available_mb \u003d int(h[\u0027memory_mb\u0027] * (1 - load))","commit_id":"c8b55a1c6572f7d9900fd8ed254c11593906f33d"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"fc71916034b4c933b09ccd205f07466699c2d551","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def _make_measures_host(self, measures_count, time_step, min\u003d10, max\u003d20):"},{"line_number":343,"context_line":"        measures_body \u003d []"},{"line_number":344,"context_line":"        now \u003d datetime.now(timezone.utc)"},{"line_number":345,"context_line":"        for i in range(1, measures_count + 1):"},{"line_number":346,"context_line":"            dt \u003d now - timedelta(minutes\u003di * time_step)"},{"line_number":347,"context_line":"            measures_body.append("}],"source_content_type":"text/x-python","patch_set":9,"id":"5e2d70a4_cb099c34","line":344,"updated":"2025-05-22 12:07:39.000000000","message":"to fix a deprecation warning","commit_id":"0762feb711fcbd0e0459b274944b4293da8f5072"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"658f9ba1526a66b72e1915226514ea4550ab91a0","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def _make_measures_host(self, measures_count, time_step, min\u003d10, max\u003d20):"},{"line_number":343,"context_line":"        measures_body \u003d []"},{"line_number":344,"context_line":"        now \u003d datetime.now(timezone.utc)"},{"line_number":345,"context_line":"        for i in range(1, measures_count + 1):"},{"line_number":346,"context_line":"            dt \u003d now - timedelta(minutes\u003di * time_step)"},{"line_number":347,"context_line":"            measures_body.append("}],"source_content_type":"text/x-python","patch_set":9,"id":"6e9995c1_b43ba5e0","line":344,"in_reply_to":"5e2d70a4_cb099c34","updated":"2025-05-26 19:04:05.000000000","message":"+1","commit_id":"0762feb711fcbd0e0459b274944b4293da8f5072"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"658f9ba1526a66b72e1915226514ea4550ab91a0","unresolved":true,"context_lines":[{"line_number":353,"context_line":"    def _make_measures_instance(self, measures_count, time_step,"},{"line_number":354,"context_line":"                                min\u003d80, max\u003d90, metric_type\u003d\u0027cpu\u0027):"},{"line_number":355,"context_line":"        measures_body \u003d []"},{"line_number":356,"context_line":"        now \u003d now \u003d datetime.now(timezone.utc)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        if metric_type \u003d\u003d \"cpu\":"},{"line_number":359,"context_line":"            final_cpu \u003d (measures_count + 1) * 60 * time_step * 1e9"}],"source_content_type":"text/x-python","patch_set":9,"id":"b5bd447d_a2f3be4e","line":356,"range":{"start_line":356,"start_character":7,"end_line":356,"end_character":17},"updated":"2025-05-26 19:04:05.000000000","message":"now \u003d now?","commit_id":"0762feb711fcbd0e0459b274944b4293da8f5072"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"ebd064bcf443a029a26fb1df5787ee6b0b0d7b6d","unresolved":false,"context_lines":[{"line_number":353,"context_line":"    def _make_measures_instance(self, measures_count, time_step,"},{"line_number":354,"context_line":"                                min\u003d80, max\u003d90, metric_type\u003d\u0027cpu\u0027):"},{"line_number":355,"context_line":"        measures_body \u003d []"},{"line_number":356,"context_line":"        now \u003d now \u003d datetime.now(timezone.utc)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        if metric_type \u003d\u003d \"cpu\":"},{"line_number":359,"context_line":"            final_cpu \u003d (measures_count + 1) * 60 * time_step * 1e9"}],"source_content_type":"text/x-python","patch_set":9,"id":"6e915721_e2447ce9","line":356,"range":{"start_line":356,"start_character":7,"end_line":356,"end_character":17},"in_reply_to":"b5bd447d_a2f3be4e","updated":"2025-05-27 10:00:51.000000000","message":"Done","commit_id":"0762feb711fcbd0e0459b274944b4293da8f5072"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"658f9ba1526a66b72e1915226514ea4550ab91a0","unresolved":false,"context_lines":[{"line_number":447,"context_line":"            if h[\u0027hypervisor_hostname\u0027] in loaded_hosts:"},{"line_number":448,"context_line":"                mem_measures \u003d self._make_measures_host("},{"line_number":449,"context_line":"                    10, 1,"},{"line_number":450,"context_line":"                    min\u003dint(h[\u0027memory_mb\u0027]) * 0.7,"},{"line_number":451,"context_line":"                    max\u003dint(h[\u0027memory_mb\u0027]) * 0.8)"},{"line_number":452,"context_line":"            else:"},{"line_number":453,"context_line":"                mem_measures \u003d self._make_measures_host("}],"source_content_type":"text/x-python","patch_set":9,"id":"816f3d88_e06a379c","line":450,"range":{"start_line":450,"start_character":0,"end_line":450,"end_character":50},"updated":"2025-05-26 19:04:05.000000000","message":"ok, makes sense","commit_id":"0762feb711fcbd0e0459b274944b4293da8f5072"}]}
