* add VersionedNotifierPlugin and method that converts NotifierPlugin to it
* return new schema if query parameter version=2
* add version to k8s model of integration
* fix open api snapshot
* add version to IntegrationConfig
* use current version on conversion
* create versioned integrations for test
Recording rule fields were not being copied correctly when duplicating an alert rule. This manifests as missing `TargetDataSourceUID` fields from the `Record` part of the rule when rules in a group are re-ordered.
Added some additional tests to ensure we cover the generation of recording rules in tests and fixed the copying logic to ensure all fields are copied correctly.
* docs(openapi): Cleanup tag usage and minor fixes
* Add missing change
* More fixes
* make swagger-gen
* Remove unused documentation
* Update pkg/services/publicdashboards/api/query.go
Co-authored-by: Artur Wierzbicki <artur@arturwierzbicki.com>
* Run make swagger-gen
* Run make openapi3-gen
---------
Co-authored-by: Artur Wierzbicki <artur@arturwierzbicki.com>
* Alerting: Add Extended List Query for Alert Rules w/pagination
This adds an extended query which allows filtering by the kind of rule (Recording or Alerting) and supports pagination.
Pagination tokens will allow us to list all rules paginated, regardless of the rule group.
---------
Co-authored-by: William Wernert <william.wernert@grafana.com>
* Capture error_type label on metrics/traces
* Make error messages more helpful to user
* Use errutil, categorized errors, and tie them to error_type (category in code)
* Misc trace fixes
* Add metric to track SQL input conversion
This reintroduces database pagination for the Prometheus API for rules.
Follow up for #109558 to use the new pagination format.
Note: This changes the sort-order to use `NamespaceUID` instead of the fully qualified Folder path. This also changes the cursor format to use the `NamespaceUID` instead of the Folder path and to be in a reverisble format.
This reintroduces store level pagination, without using it in the prometheus API yet.
Related to #108633
Co-authored-by: William Wernert <william.wernert@grafana.com>
What is this feature?
This PR add the backend functionality to support viewing extra Alertmanager configurations (imported with the Prometheus conversion API) in the UI under the feature flag alertingImportAlertmanagerUI. The same flag will be used to enable this in the UI.
This is just the backend part, the full PoC PR is here: #109027
It uses a special datasource UID prefix __grafana-converted-extra-config-{identifier} to identify imported configurations. When the Alertmanager proxy handler detects this prefix:
GET requests are proxied to either the Grafana Alertmanager service (for alerts, silences, etc.) or the Prometheus conversion API to get the config
Write operations are not supported
* update CreateGrafanaAlertmanagerConfig to accept UserGrafanaConfig move construction logic to alertmanager
* consolidate building UserGrafanaConfig into buildConfig
* use config to determine whether it needs to be send calculate hash of the entire request struct rather than configuration
* Alerting: Move some tests to full integration tests
* add back two error handling tests
* imports
---------
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
* Remote Alertmanager: Use the same struct for Grafana stat and Mimir full state
* Alertmanager: Add methods to merge nflog and silences
* update grafana/alerting version
* make update-workspace
* update mocks
* remove unnecesary methods from the remote Alertmanager implementation, create separate StateMerger interface
* (WIP) Remote Alertmanager: Optionally merge remote state before starting the internal Alertmanager
* cleanup ngalert.go
* restore defaults.ini
* move state parsing logic to 'remote' package, clean up ngalert.go
* remove GetBase, implement MegeNflog and MergeSilences
* delete fmt.Println
* FetchRemoteState -> GetRemoteState
* UserGrafanaState -> UserState
* remove duplicate clusterpb import
* reorder MimirClient interface
* use general getState() method for Grafana state and Mimir full state
* remove unnecessary state merging methods from the Alertmanager interface
* remove pullState field
* reduce diff
* add info log after merging
* merge silences and nflog entries in the same method
* merge the remote state in the forked AM
* reduce diff
* update remote AM mock
* tests
* make error more specific
* typo
* deduplicate config preparation logic squashes config preparation in 3 places into a single method buildConfiguration
* remove copying config from decrypt because we already use copy
* move logic from decryptConfiguration to buildConfiguration
* move logic from mergeExtraConfigs to buildConfiguration
* load default config with buildConfiguration method and skip if fails
---------
Co-authored-by: Santiago <santiagohernandez.1997@gmail.com>
What is this feature?
This PR further improves concurrent updates to the provenance table (a follow-up for #101688). The fix explicitly checks for a provenance record using SELECT ... FOR UPDATE for the databases that support it before performing either an update or upsert operation. This preemptive locking reduces the possibility of deadlocks in MySQL.
This works only with the alertingProvenanceLockWrites feature flag enabled.
Why do we need this feature?
The current implementation (directly performing upserts without prior locking) may still encounter deadlocks because of the gap and insert-intention locks in some configurations, for example, with repeatable-read transaction isolation level in MySQL+InnoDB.
---------
Co-authored-by: William Wernert <william.wernert@grafana.com>