@@ -56,13 +56,14 @@ use crate::alerts::alert_traits::{AlertManagerTrait, AlertTrait};
56
56
use crate :: alerts:: alert_types:: ThresholdAlert ;
57
57
use crate :: alerts:: target:: { NotificationConfig , TARGETS } ;
58
58
use crate :: handlers:: http:: fetch_schema;
59
+ use crate :: metastore:: MetastoreError ;
59
60
// use crate::handlers::http::query::create_streams_for_distributed;
60
61
// use crate::option::Mode;
61
62
use crate :: parseable:: { PARSEABLE , StreamNotFound } ;
62
63
use crate :: query:: { QUERY_SESSION , resolve_stream_names} ;
63
64
use crate :: rbac:: map:: SessionKey ;
64
65
use crate :: storage;
65
- use crate :: storage:: { ALERTS_ROOT_DIRECTORY , ObjectStorageError } ;
66
+ use crate :: storage:: ObjectStorageError ;
66
67
use crate :: sync:: alert_runtime;
67
68
use crate :: utils:: user_auth_for_query;
68
69
@@ -103,10 +104,7 @@ pub fn create_default_alerts_manager() -> Alerts {
103
104
104
105
impl AlertConfig {
105
106
/// Migration function to convert v1 alerts to v2 structure
106
- pub async fn migrate_from_v1 (
107
- alert_json : & JsonValue ,
108
- store : & dyn crate :: storage:: ObjectStorage ,
109
- ) -> Result < AlertConfig , AlertError > {
107
+ pub async fn migrate_from_v1 ( alert_json : & JsonValue ) -> Result < AlertConfig , AlertError > {
110
108
let basic_fields = Self :: parse_basic_fields ( alert_json) ?;
111
109
let alert_info = format ! ( "Alert '{}' (ID: {})" , basic_fields. title, basic_fields. id) ;
112
110
@@ -138,7 +136,7 @@ impl AlertConfig {
138
136
} ;
139
137
140
138
// Save the migrated alert back to storage
141
- store . put_alert ( basic_fields . id , & migrated_alert) . await ?;
139
+ PARSEABLE . metastore . put_alert ( & migrated_alert) . await ?;
142
140
143
141
Ok ( migrated_alert)
144
142
}
@@ -950,6 +948,8 @@ pub enum AlertError {
950
948
Unimplemented ( String ) ,
951
949
#[ error( "{0}" ) ]
952
950
ValidationFailure ( String ) ,
951
+ #[ error( transparent) ]
952
+ MetastoreError ( #[ from] MetastoreError ) ,
953
953
}
954
954
955
955
impl actix_web:: ResponseError for AlertError {
@@ -977,6 +977,7 @@ impl actix_web::ResponseError for AlertError {
977
977
Self :: ArrowError ( _) => StatusCode :: INTERNAL_SERVER_ERROR ,
978
978
Self :: Unimplemented ( _) => StatusCode :: INTERNAL_SERVER_ERROR ,
979
979
Self :: NotPresentInOSS ( _) => StatusCode :: BAD_REQUEST ,
980
+ Self :: MetastoreError ( _) => StatusCode :: INTERNAL_SERVER_ERROR ,
980
981
}
981
982
}
982
983
@@ -991,19 +992,10 @@ impl actix_web::ResponseError for AlertError {
991
992
impl AlertManagerTrait for Alerts {
992
993
/// Loads alerts from disk, blocks
993
994
async fn load ( & self ) -> anyhow:: Result < ( ) > {
994
- let mut map = self . alerts . write ( ) . await ;
995
- let store = PARSEABLE . storage . get_object_store ( ) ;
996
-
997
995
// Get alerts path and read raw bytes for migration handling
998
- let relative_path = relative_path :: RelativePathBuf :: from ( ALERTS_ROOT_DIRECTORY ) ;
996
+ let raw_objects = PARSEABLE . metastore . get_alerts ( ) . await ? ;
999
997
1000
- let raw_objects = store
1001
- . get_objects (
1002
- Some ( & relative_path) ,
1003
- Box :: new ( |file_name| file_name. ends_with ( ".json" ) ) ,
1004
- )
1005
- . await
1006
- . unwrap_or_default ( ) ;
998
+ let mut map = self . alerts . write ( ) . await ;
1007
999
1008
1000
for raw_bytes in raw_objects {
1009
1001
// First, try to parse as JSON Value to check version
@@ -1022,7 +1014,7 @@ impl AlertManagerTrait for Alerts {
1022
1014
|| json_value. get ( "stream" ) . is_some ( )
1023
1015
{
1024
1016
// This is a v1 alert that needs migration
1025
- match AlertConfig :: migrate_from_v1 ( & json_value, store . as_ref ( ) ) . await {
1017
+ match AlertConfig :: migrate_from_v1 ( & json_value) . await {
1026
1018
Ok ( migrated) => migrated,
1027
1019
Err ( e) => {
1028
1020
error ! ( "Failed to migrate v1 alert: {e}" ) ;
@@ -1042,7 +1034,7 @@ impl AlertManagerTrait for Alerts {
1042
1034
} else {
1043
1035
// No version field, assume v1 and migrate
1044
1036
warn ! ( "Found alert without version field, assuming v1 and migrating" ) ;
1045
- match AlertConfig :: migrate_from_v1 ( & json_value, store . as_ref ( ) ) . await {
1037
+ match AlertConfig :: migrate_from_v1 ( & json_value) . await {
1046
1038
Ok ( migrated) => migrated,
1047
1039
Err ( e) => {
1048
1040
error ! ( "Failed to migrate alert without version: {e}" ) ;
@@ -1253,8 +1245,6 @@ impl AlertManagerTrait for Alerts {
1253
1245
alert_id : Ulid ,
1254
1246
new_notification_state : NotificationState ,
1255
1247
) -> Result < ( ) , AlertError > {
1256
- // let store = PARSEABLE.storage.get_object_store();
1257
-
1258
1248
// read and modify alert
1259
1249
let mut write_access = self . alerts . write ( ) . await ;
1260
1250
let mut alert: Box < dyn AlertTrait > = if let Some ( alert) = write_access. get ( & alert_id) {
0 commit comments