)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"dd1dac13a6b860c738142c8cbaf9dacdd00a8d55","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a9d129a1_b479997f","updated":"2025-05-20 15:29:44.000000000","message":"Couple of questions inline to understand better the folder layout. It looks very good!\n\nAlso (for future discussion) I\u0027m interested about the choice of Cypress as an end to end testing framework. For what I know, it is a Javascript framework. Is it also used for Django end to end testing?\n\nThanks!","commit_id":"0cbf75560221e852125a715dddc419434ff95666"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"ab4a10f53d783723d1e36794a4cdfebe4cdecbe7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"86e7c8d8_77772a71","updated":"2025-05-21 09:06:37.000000000","message":"LGTM, thanks Sean!","commit_id":"0cbf75560221e852125a715dddc419434ff95666"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"ab4a10f53d783723d1e36794a4cdfebe4cdecbe7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"dec6e326_9153ac9f","in_reply_to":"5329b0c0_2b4bd67f","updated":"2025-05-21 09:06:37.000000000","message":"I\u0027m all in for testing Cypress/Playwright (testing the test framework 😄). The choice back then for Horizon was to use Selenium, but right now there are other alternatives, hopefully lighter and more reliable.\n\nLet\u0027s take some time to investigate a bit the options and try them out. I would also ask Radomir and Tatiana about their thoughts, maybe they have some experience with them.","commit_id":"0cbf75560221e852125a715dddc419434ff95666"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ff4717d64c33f5c55bc16fdb0c2ca4b545956a46","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5329b0c0_2b4bd67f","in_reply_to":"7862b33a_67a79b3b","updated":"2025-05-20 18:20:41.000000000","message":"https://www.youtube.com/watch?v\u003dMRDJoggYamo is on my watch list to finsih.","commit_id":"0cbf75560221e852125a715dddc419434ff95666"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d019e804df232c38e71cb558857612232740702c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b355f635_5296d038","in_reply_to":"a9d129a1_b479997f","updated":"2025-05-20 18:00:34.000000000","message":"that could be selenium \n\nhonestly i only breilfy looked at both and cypress seamed nicer at 10000 feet\nbut we can use anything else that enables easy testing.\n\ni know that horizon has some selenium testing but cypress seams to have less baggage.\n\ni think Emma mentioned you have uses one or both of those in the past\ndo you have a preference?\n\nbeing entrily honest i was also playing with ai at the weekend and asked it to generate some simple websites in go and python and provide  some test and it used cypress and the tests looked pretty simpel to read \n\nso im not really attach to either solution i just want to make sure we think about it before we get to far in.","commit_id":"0cbf75560221e852125a715dddc419434ff95666"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2229d7f9f98e2a2c63a864e1fc146fe8caa6807f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7862b33a_67a79b3b","in_reply_to":"b355f635_5296d038","updated":"2025-05-20 18:19:06.000000000","message":"i guess there are actully 3 main options in this space\n\nhttps://github.com/seleniumhq/selenium\nhttps://github.com/cypress-io/cypress\nand\nhttps://github.com/microsoft/playwright-python\n\n\nplaywright and cypress use chome dev tools protocol to integrate much more tightly in the browser\n\nfirefox, chrome/chromiom and webkit are suppported by both playright\nand cypress.\n\nplaywright runs the tests outside the browser where as cypress runs them in the browser via iframs.\n\nplaywright would allows us to express the tests in python which is proably a point in it favor. since cypress would need tests in javascritp.\n\n\nthis is an area where we definitely have room to explore.\nselenium has a very different approach to how it executes test and historically at least it has a reputation for being flaky.\n\nim hoping we can do most fo the testing with basic django unit/fuctional tests \ni just  want ot make sure if we need end to end test we can achive that too.\n\nplaywright tries to minimize deps, cypress has a number of deps and build on other popular Javascript testing frameworks selecting it is premature without lookign at the others, i just wanted to avoid selenium if we didnt need it.","commit_id":"0cbf75560221e852125a715dddc419434ff95666"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"970cb22b0224e29bfa315f0ec17e591deedb9263","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"38d5aad8_c8b9505f","in_reply_to":"dec6e326_9153ac9f","updated":"2025-05-21 11:58:07.000000000","message":"sure there is no rush to select one and we can try doing soem basic testing with them and get input form others.\n\nskyline used cypress \nhttps://github.com/openstack/skyline-console/blob/master/test/e2e/integration/pages/compute/aggregate.spec.js\n\nobvioulsy horizon has some silenim testing today\nhttps://github.com/openstack/horizon/blob/master/openstack_dashboard/test/selenium/integration/test_host_aggregates.py\n\nnothihng in openstack is currently using playwright\nbut ther esame tets also look pretty clean\n\nhttps://github.com/microsoft/playwright-python/blob/main/examples/todomvc/mvctests/test_new_todo.py\n\nAll 3 are workable, but the stability of the test is definitely very high on the criteria. there is an obvious ease of use aspect too but that secondary to having to keep going back and fixign the tests.","commit_id":"0cbf75560221e852125a715dddc419434ff95666"}],"src/grian_ui/datasource/__init__.py":[{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"dd1dac13a6b860c738142c8cbaf9dacdd00a8d55","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# SPDX-License-Identifier: Apache-2.0"}],"source_content_type":"text/x-python","patch_set":1,"id":"9129dd0c_57ee951a","line":2,"updated":"2025-05-20 15:29:44.000000000","message":"Do we expect to define here an abstraction on how we retrieve the different metrics we show per resource? As in, for example, a function called \"cpu_utilization(hypervisor)\" in which we craft a PromQL query that we later forward to the telemetry-client, previously instantiated in API?","commit_id":"0cbf75560221e852125a715dddc419434ff95666"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"ab4a10f53d783723d1e36794a4cdfebe4cdecbe7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# SPDX-License-Identifier: Apache-2.0"}],"source_content_type":"text/x-python","patch_set":1,"id":"33e3570a_46b641ed","line":2,"in_reply_to":"01b888b7_d7945892","updated":"2025-05-21 09:06:37.000000000","message":"It make a lot of sense, thanks for clarifying.\n\nI like the possibility of being able to plug in other datasource backend.\n\nI\u0027m a bit hesitant about the fakes location though. If the goal is to use them for testing, we should probably place them within the testing modules. This is a nitpick, so I think we can discuss further later.","commit_id":"0cbf75560221e852125a715dddc419434ff95666"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"970cb22b0224e29bfa315f0ec17e591deedb9263","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# SPDX-License-Identifier: Apache-2.0"}],"source_content_type":"text/x-python","patch_set":1,"id":"4a52cb58_f39dd9f4","line":2,"in_reply_to":"33e3570a_46b641ed","updated":"2025-05-21 11:58:07.000000000","message":"Well i put them in the normal location because in Nova we ship the fake compute node driver in the standard package as well\nhttps://github.com/openstack/nova/blob/master/nova/virt/fake.py\n\nso that the pattern im more familar with.\n\nwe have several differnte \"sized\" fake comptues \nhttps://github.com/openstack/nova/blob/master/nova/virt/fake.py#L707-L726\nthat are some tiems used in scale testing in a real deployment ot verify the schduler perfroamcne or api performance.\n\n\nhttps://docs.openstack.org/kolla-ansible/wallaby/reference/compute/nova-fake-driver.html\n\nneutron and ironic also have fake drivers that are used for thise an simialr usecaes.\n\nhttps://github.com/openstack/ironic/blob/master/ironic/drivers/fake_hardware.py\n\nThe reason they tend ot not be in the test module is so that they are included in default packaging with the project and because they are generally witten in such a way as they are valid implementation even if in reality they don\u0027t actually do anything meaningful to an end user.\n\nin nova\u0027s case it create all fo the normal stuff in the db that any other driver would do i just does not create a vm.","commit_id":"0cbf75560221e852125a715dddc419434ff95666"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f482c6d9b086ad28d61eded6e21253c409bf7462","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# SPDX-License-Identifier: Apache-2.0"}],"source_content_type":"text/x-python","patch_set":1,"id":"01b888b7_d7945892","line":2,"in_reply_to":"9129dd0c_57ee951a","updated":"2025-05-20 17:52:08.000000000","message":"the idea is https://review.opendev.org/c/openstack/grian-ui/+/950402/1/src/grian_ui/datasource/api.py\n\nwill define a python interfnace for each query \n\ni.e. \n\n```\ndef cpu_utilization(hypervisor) -\u003e LIST[metric]:\n    pass\n```\n\nvia either an abstrack base class or a python protocol\n\nand then teh fake datasouce \nhttps://review.opendev.org/c/openstack/grian-ui/+/950402/1/src/grian_ui/datasource/fake/__init__.py\n\nwill provide some fake data response.\nthat can be hardcode data for testing/dev.\n\nand \n\nhttps://review.opendev.org/c/openstack/grian-ui/+/950402/1/src/grian_ui/datasource/prometheus/__init__.py\n\nwhould be where we actully use the observablity client to get the real data\n\n\nso all the prometious logic woudl be in\ngrian_ui.datasouce.promethious\n\nbut we woudl have indirection via \n\napi \u003d grian_ui.datasouce.api.get_instance()\nhost_one_usage \u003d api.cpu_utilization(\"host-1\")\n\nthe idea was to model it like this\n\nwe have an api module that uses a config option to know which backend to load\n\nhttps://github.com/openstack/os-vif/blob/unmaintained/wallaby/os_vif/internal/ip/api.py\nand a interface \nhttps://github.com/openstack/os-vif/blob/unmaintained/wallaby/os_vif/internal/ip/ip_command.py#L16\n\n\nthose shoudl really have been in the same file.\n\nthen 2 concrete implementations\n\nhttps://github.com/openstack/os-vif/blob/unmaintained/wallaby/os_vif/internal/ip/linux/impl_pyroute2.py\n\nhttps://github.com/openstack/os-vif/blob/unmaintained/wallaby/os_vif/internal/ip/windows/impl_netifaces.py\n\n\nthis will mean if anyoen ever want to plug in something else like gnochii they can\n\nand for development we have an easy way to use fake data to buidl dashboard which we can test with cypress.\n\nin unit/functional tests we can mock out the data but havign a fake backend for end 2 end test can be nice.","commit_id":"0cbf75560221e852125a715dddc419434ff95666"}],"src/grian_ui/datasource/prometheus/__init__.py":[{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"dd1dac13a6b860c738142c8cbaf9dacdd00a8d55","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# SPDX-License-Identifier: Apache-2.0"}],"source_content_type":"text/x-python","patch_set":1,"id":"d96f061c_77f58c15","line":2,"updated":"2025-05-20 15:29:44.000000000","message":"Which is the purpose of this module?","commit_id":"0cbf75560221e852125a715dddc419434ff95666"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"ab4a10f53d783723d1e36794a4cdfebe4cdecbe7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# SPDX-License-Identifier: Apache-2.0"}],"source_content_type":"text/x-python","patch_set":1,"id":"9b76a9f7_d9a84c56","line":2,"in_reply_to":"8d665c3b_76f72246","updated":"2025-05-21 09:06:37.000000000","message":"Gotcha.\n\nYes, I noticed 😊","commit_id":"0cbf75560221e852125a715dddc419434ff95666"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f482c6d9b086ad28d61eded6e21253c409bf7462","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# SPDX-License-Identifier: Apache-2.0"}],"source_content_type":"text/x-python","patch_set":1,"id":"8d665c3b_76f72246","line":2,"in_reply_to":"d96f061c_77f58c15","updated":"2025-05-20 17:52:08.000000000","message":"this or preferably in file within this directory \nis where we would encapsulate all the knowledge of promethous\n\nso this is the only part of the code that would directly use the observably client\n\nby the way im mostly using the __init__.py files so that git will keep the folder structure.\n\nso that we coudl start working on differnt parts of the repo without having merge conflicts :)","commit_id":"0cbf75560221e852125a715dddc419434ff95666"}]}
