* Live: allow publishing over Centrifuge subscription
Currently when publishing over a Grafana Live channel,
the data is sent over the HTTP API. This works fine when
there is only a single Grafana instance running, but
when there are multiple instances, the data will only hit
one instance, which is often not desired: sometimes you need
to guarantee that the data appears on the same instance that
the frontend is connected to.
An example of this is in the Grafana LLM app when running the
MCP server. The MCP protocol is stateful; users subscribe to
a channel to get a long-lived stream of server-sent events,
then send subsequent requests to the server to get further
results. If there are multiple Grafana instances running then
the requests are likely to land on an instance other than the
one that the user is connected to.
This commit adds a new option to the `GrafanaLiveSrv` interface
that allows the user to publish data over the Centrifuge
subscription instead of the HTTP API. This is not the default and
should rarely be used, but is required to fulfil certain use cases.
* Address nits from code review
Co-authored-by: kay delaney <45561153+kaydelaney@users.noreply.github.com>
---------
Co-authored-by: kay delaney <45561153+kaydelaney@users.noreply.github.com>
Developers using Grafana Live need to know whether a message is too
big to be sent over the Grafana Live websocket. Since this limit
is configurable, it is useful to expose it to the frontend.
This commit adds a new field to the frontend settings,
`liveMessageSizeLimit`, which the frontend can use to access the
limit configured in the backend.
Relates to #99770.
* Draft: Move css grid stuff to main
* Scenes: Implement drag and drop support for SceneCSSGridLayout
* Fix some nits
* WIP Refactor
* Added a comment
* Add orchestrator to v2schema and fix error (#100964)
* Add orchestrator to v2schema and fix error
* Display placeholder directly when starting to drag
---------
Co-authored-by: kay delaney <kay@grafana.com>
* Fix merge issue
* Fix panel drag offset and remove console.logs
* Fix small nit
* Fix issue where layout options weren't refreshed on changing layout
* Return empty array from useEditPaneOptions if dashboard body isn't LayoutOrchestrator
* Expect layoutOrchestrator when serializing scene
* Fix tests to expect orchestrator instead of layoutManager
* Fix tests in transformSaveModelSchemaV2ToScene.test.ts
* Fix tests in transformSceneToSaveModelSchemaV2.test.ts
* More test fixes
* fix lint issues
* Small fixes
* default to adding layout orchestrator?
* Empty commit
* delete artifactspage.go
* remove artifactspage.tmpl.html
* betterer
* WIP refactor, not ready for review
* Slightly fix placeholder behavior. still broken though
* Fixed some visual glitches. Still very buggy
* Fix layout bugginess when initiating dragging
* more WIP
* Fix some broken logic
* clean up
* Move LayoutOrchestrator to dashboard state
* More cleanup
* Fix misaligned placeholders after changing layout options or resizing browser
* Fix issue with dragging vs selection
* Fix scroll position jumping when dragging in vertically-oriented grid
* Fix import order errors
* Remove '!' from layoutOrchestrator references
* Add LazyLoader support
* Dynamic Dashboards: Responsive Grid drag and drop minor fixes (#102430)
Changes
---------
Co-authored-by: Oscar Kilhed <oscar.kilhed@grafana.com>
Co-authored-by: Bogdan Matei <bogdan.matei@grafana.com>
* Allow html in tooltips
* Display multiple warnings/infos properly with html
* Revert "Allow html in tooltips"
This reverts commit 5c7e965d2d554b693d4897e52cf6865e0c9b8374.
* Display multiple warnings/infos properly with html in ReactNode
* Fix lint
* Revise according to code review
* Revise according to code review part 2
* Revise according to code review part 3
* feat: component extension point for adaptive telemetry query actions
- only render the first non-null added-component, and provide utility in the added component infrastructure to support this
---------
Co-authored-by: Levente Balogh <balogh.levente.hu@gmail.com>
* markup or ignore remaining grafana-ui translations
* fix unit tests, commit betterer results which somehow didn't get autocommitted?! :o
* fix SharedPreferences unit test
* fix remaining unit tests
* fix azure e2e test
* better solution
* refactor(frontend): rename all @grafana/data/src imports to @grafana/data
* feat(grafana-data): introduce internal entrypoint for sharing code only with grafana
* feat(grafana-data): add test entrypoint for data test utils usage in core
* refactor(frontend): update import paths to use grafana/data exports entrypoints
* docs(grafana-data): update comment in internal/index.ts
* refactor(frontend): prefer public namespaced exports over re-exporting via internal
* remove feature flag
* remove feature flag in state manager
* make sure no data with empty results is handled
Signed-off-by: Yuri Tseretyan <yuriy.tseretyan@grafana.com>
---------
Signed-off-by: Yuri Tseretyan <yuriy.tseretyan@grafana.com>
* Use useOptions in Combobox
* Clean code
* Betterer results
* Add grouping to Combobox
* Fix code after mergin main
* Manage ids
* wip - first pass at improved dom structure for a11y
* improve styling, remove old implementation
* more style!!!!
* more tidy up
* deprecated comment
* another comment!
* tests
* remember the index of each group
---------
Co-authored-by: joshhunt <josh.hunt@grafana.com>
* Externalize api and remove dependency cycles
* fix tests
* Update comment
* Split the state observable creation in ScopesService
* Make the feature flag guard more explicit
* Change reduce to map
* remove action set feature toggle
* don't pass feature toggles to action set service instantiation
* linting
* test fixes and frontend clean-up
* fix test
* Add heuristic approach to fixing untranslated text with eslint rule
* Update logic of how we track and report untranslated strings so we can prevent autofixes
* Update betterer to reflect different reporting of untranslated text
* Move logic for rule to utils and change to suggest instead of fix
* Update tests to cope with suggest instead of fix
* Remove commented out `only`
* Add config to allow force fixing
* Fix type errors and improve shouldFix logic
* Dashboards: Add conditional rendering
* Updates
* Fixes
* Code improvements
* Code improvements
* limit condition choices, add delete and clean up ui
* add basic variable condition
* add conditional rendering based on time range interval
* adjust failing test
* remove deprecated pseudo locale file
* extract conditional rendering from behaviour to state property
* clean up behaviour initialisation
* clean up ts errors
* adjust data condition to account for RowItem
* persist-conditional-rendering
* fix group value name and kind type
* Fix types in base
* minor style fix
* Fix subscribes
* notify change when deleting condition
* fix hidden row item error
* Remove option to have groups in groups
* fix merge issue
* address comments
* subscribe to panel data change in data condition
* Remove loop labels
* only persist conditional rendering if root group has items
* update backend types
* Serialize variable conditional rendering operator as equals notEquals
---------
Co-authored-by: Bogdan Matei <bogdan.matei@grafana.com>
Co-authored-by: Sergej-Vlasov <sergej.s.vlasov@gmail.com>
* wip: Create a proxy state manager to avoid complexity
* Read path redirecting
* add tests for unified dashboard API
* add tests
* Contemplate both formats in DashboardProxy
* Fix force old
* Fix tests for proxy
* catch errors
* Save as V2 when dynamic dashboard is enabled
* Improve tests
* Remove feature toggle
* Use kubernetesDashboards for e2e suite
* Fix issue when loading snapshots
* Fix typescript errors
* Integrate with backend conversion error
* Remove legacy annotation
* fix snapshot loading; lint
* Add missing hideTimeControls
* fix test
* make setupDashboardAPI to all suites
* refactor getDashboardAPI
* Add tests
* fix DashboardScenePage tests
* fix tests
* fix go tests
* Refactor to understand better the need of transforming to v2 to compare
* Fix detect changes logic
* yes status from schema gen
---------
Co-authored-by: alexandra vargas <alexa1866@gmail.com>
Co-authored-by: Haris Rozajac <haris.rozajac12@gmail.com>