## Summary
With the new logic to merge backend and frontend query responses, some
of the frontend query responses were being lost due to early
termination.
Merging frontend and backend responses was not properly waiting for all
promises to resolve before returning this "merged" result
## Detailed explanation
In `mergeQueries` although `Promise.all` was triggered, we returned
immediately without waiting for the promises to actually resolve, now
instead of passing down promises:
- use `switchMap` so that the upstream backend response observable can
be used as an inner Observable value to be concatenated with the rest of
the responses
- Why not use `map`? To prevent out of sync results, we need to wait for
the promises to resolve **before** we pass it down to the `mergeQueries`
function, `map` does not allow that.
- use `from` and trigger `Promise.all` **before** calling `mergeQueries`
so that all promise results can be resolved and converted to observables
by the time they get passed into the function
- modify `mergeQueries` to accept `DataResponse` for arguments, clone
the existing data and return the merged result.
<img width="1700" height="398" alt="Screenshot 2025-12-29 at 1 06 05 PM"
src="https://github.com/user-attachments/assets/c07c59b1-43b8-47f9-adc6-67583b125856"
/>
## Why
To fix how frontend and backend queries are merged so that no response
gets lost in the process
## How to test
1. Create a new dashboard or go to Explore
2. For query type select `Problems` or anything that is not `Metrics`
3. Execute the query, and you should be able to see a response.
This PR migrates the use of `DatasourceApi` to `DatasourceWithBackend`,
with this a couple additional improvements were made:
1. Migrate to use `interpolateVariablesInQuery` everywhere instead of
the custom `replaceTemplateVariables` we were using
2. Moves util functions out of `datasource.ts` and into the existing
`utils.ts`
<img width="1261" height="406" alt="Screenshot 2025-11-20 at 11 37
56 AM"
src="https://github.com/user-attachments/assets/9e396cf2-eab0-49d1-958c-963a2e896eba"
/>
Now we can see the `query` calls being made to the backend:
<img width="367" height="102" alt="Screenshot 2025-11-20 at 11 38 18 AM"
src="https://github.com/user-attachments/assets/a5a9a337-7f19-4f7c-9d04-9d30c0216fb2"
/>
Tested:
- By running queries from Explore and Dashboards (with and without
variables)
- By interacting with all the different Editors to make sure `ComboBox`
was working as expected
Next:
Once this is merged, we will next be able to slowly move away from using
the `ZabbixConnector` to make backend datasource calls.
Fixes:
[#131](https://github.com/orgs/grafana/projects/457/views/40?pane=issue&itemId=139450234&issue=grafana%7Coss-big-tent-squad%7C131)
This PR moves the health check to backend only leaving in the frontend
the functionality to test the dbconnector datasource.
Leaving the `dbconnector.testDataSource` should be fine since the
datasource types we allow for db connection with Zabbix already are
backend datasources, and so their health requests would go through the
backend.
Verified:
Clicking test and seeing a `health` request go out.
IMPORTANT: While testing this in the UI, I found a bug with the config
editor - whenever a change is made in the UI and tested, the changes
don't take effect (i.e. disabling trends, keeps `trends` set to `true`,
enabling db connection keep `dbConnectionEnabled` set to `false` and so
on.). Created a separate
[issue](https://github.com/orgs/grafana/projects/457/views/40?pane=issue&itemId=3627315751&issue=grafana%7Coss-big-tent-squad%7C132)
to fix this
Fixes https://github.com/grafana/oss-big-tent-squad/issues/124
Fixes https://github.com/grafana/grafana-zabbix/issues/2004
* Problems count mode
* Use tooltip from grafana ui
* Add editors for new modes
* Fix macro mode
* Fix bugs
* Unify editors to use one Triggers editor for all count queries
* Use time range toggle for triggers query, #918
* Add item tags suport for triggers count mode
* Fix triggers count by items
* Use data frames for triggers data, #1441
* Return empty result if no items found
* Add migration for problems count mode
* bump version to 4.3.0-pre
* Add zip task to makefile
* Add schema to query model
* Minor refactor
* Refactor: move components to separate files
* Minor refactor
* Support url in event tags
* Add tooltip with link url
* Update grafana packages
* Fix adding new problems panel
* ProblemDetails: rewrite as a functional component
* minor refactor
* Use grafana toolkit template for building plugin
* Fix linter and type errors
* Update styles building
* Fix sass deprecation warning
* Remove empty js files produced by webpack building sass
* Fix signing script
* Replace classnames with cx
* Fix data source config page
* Use custom webpack config instead of overriding original one
* Use gpx_ prefix for plugin executable
* Remove unused configs
* Roll back react hooks dependencies usage
* Move plugin-specific ts config to root config file
* Temporary do not use rst2html for function description tooltip
* Remove unused code
* remove unused dependencies
* update react table dependency
* Migrate tests to typescript
* remove unused dependencies
* Remove old webpack configs
* Add sign target to makefile
* Add magefile
* Update CI test job
* Update go packages
* Update build instructions
* Downgrade go version to 1.18
* Fix go version in ci
* Fix metric picker
* Add comment to webpack config
* remove angular mocks
* update bra config
* Rename datasource-zabbix to datasource (fix mage build)
* Add instructions for building backend with mage
* Fix webpack targets
* Fix ci backend tests
* Add initial e2e tests
* Fix e2e ci tests
* Update docker compose for cypress tests
* build grafana docker image
* Fix docker stop task
* CI: add Grafana compatibility check