mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-26 08:18:18 +00:00
dd7da015e3
* init rustfs config * improve code for rustfs-config crate * add * improve code for comment * fix: modify rustfs-config crate name * add default fn * improve error logger * fix: modify docker config yaml * improve code for config * feat: restrict kafka feature to Linux only - Add target-specific feature configuration in Cargo.toml for obs and event-notifier crates - Implement conditional compilation for kafka feature only on Linux systems - Add appropriate error handling for non-Linux platforms - Ensure backward compatibility with existing code * refactor(ci): optimize build workflow for better efficiency - Integrate GUI build steps into main build-rustfs job - Add conditional GUI build execution based on tag releases - Simplify workflow by removing redundant build-rustfs-gui job - Copy binary directly to embedded-rustfs directory without downloading artifacts - Update merge job dependency to only rely on build-rustfs - Improve cross-platform compatibility for Windows binary naming (.exe) - Streamline artifact uploading and OSS publishing process - Maintain consistent conditional logic for release operations * refactor(ci): optimize build workflow for better efficiency - Integrate GUI build steps into main build-rustfs job - Add conditional GUI build execution based on tag releases - Simplify workflow by removing redundant build-rustfs-gui job - Copy binary directly to embedded-rustfs directory without downloading artifacts - Update merge job dependency to only rely on build-rustfs - Improve cross-platform compatibility for Windows binary naming (.exe) - Streamline artifact uploading and OSS publishing process - Maintain consistent conditional logic for release operations * fix(ci): add repo-token to setup-protoc action for authentication - Add GITHUB_TOKEN parameter to arduino/setup-protoc@v3 action - Ensure proper authentication for Protoc installation in CI workflow - Maintain consistent setup across different CI environments * modify config * improve readme.md * remove env config relation * add allow(dead_code)
111 lines
3.7 KiB
Rust
111 lines
3.7 KiB
Rust
use rustfs_event_notifier::create_adapters;
|
|
use rustfs_event_notifier::NotifierSystem;
|
|
use rustfs_event_notifier::{AdapterConfig, NotifierConfig, WebhookConfig};
|
|
use rustfs_event_notifier::{Bucket, Event, Identity, Metadata, Name, Object, Source};
|
|
use std::collections::HashMap;
|
|
use std::error;
|
|
use std::sync::Arc;
|
|
use tokio::signal;
|
|
use tracing::Level;
|
|
use tracing_subscriber::FmtSubscriber;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<(), Box<dyn error::Error>> {
|
|
let subscriber = FmtSubscriber::builder()
|
|
.with_max_level(Level::DEBUG) // set to debug or lower level
|
|
.with_target(false) // simplify output
|
|
.finish();
|
|
tracing::subscriber::set_global_default(subscriber).expect("failed to set up log subscriber");
|
|
|
|
let config = NotifierConfig {
|
|
store_path: "./events".to_string(),
|
|
channel_capacity: 100,
|
|
adapters: vec![AdapterConfig::Webhook(WebhookConfig {
|
|
endpoint: "http://127.0.0.1:3020/webhook".to_string(),
|
|
auth_token: Some("secret-token".to_string()),
|
|
custom_headers: Some(HashMap::from([("X-Custom".to_string(), "value".to_string())])),
|
|
max_retries: 3,
|
|
timeout: 10,
|
|
})],
|
|
};
|
|
|
|
// event_load_config
|
|
// loading configuration from environment variables
|
|
let _config = NotifierConfig::event_load_config(Some("./crates/event-notifier/examples/event.toml".to_string()));
|
|
tracing::info!("event_load_config config: {:?} \n", _config);
|
|
dotenvy::dotenv()?;
|
|
let _config = NotifierConfig::event_load_config(None);
|
|
tracing::info!("event_load_config config: {:?} \n", _config);
|
|
let system = Arc::new(tokio::sync::Mutex::new(NotifierSystem::new(config.clone()).await?));
|
|
let adapters = create_adapters(&config.adapters)?;
|
|
|
|
// create an s3 metadata object
|
|
let metadata = Metadata {
|
|
schema_version: "1.0".to_string(),
|
|
configuration_id: "test-config".to_string(),
|
|
bucket: Bucket {
|
|
name: "my-bucket".to_string(),
|
|
owner_identity: Identity {
|
|
principal_id: "owner123".to_string(),
|
|
},
|
|
arn: "arn:aws:s3:::my-bucket".to_string(),
|
|
},
|
|
object: Object {
|
|
key: "test.txt".to_string(),
|
|
size: Some(1024),
|
|
etag: Some("abc123".to_string()),
|
|
content_type: Some("text/plain".to_string()),
|
|
user_metadata: None,
|
|
version_id: None,
|
|
sequencer: "1234567890".to_string(),
|
|
},
|
|
};
|
|
|
|
// create source object
|
|
let source = Source {
|
|
host: "localhost".to_string(),
|
|
port: "80".to_string(),
|
|
user_agent: "curl/7.68.0".to_string(),
|
|
};
|
|
|
|
// create events using builder mode
|
|
let event = Event::builder()
|
|
.event_time("2023-10-01T12:00:00.000Z")
|
|
.event_name(Name::ObjectCreatedPut)
|
|
.user_identity(Identity {
|
|
principal_id: "user123".to_string(),
|
|
})
|
|
.s3(metadata)
|
|
.source(source)
|
|
.channels(vec!["webhook".to_string()])
|
|
.build()
|
|
.expect("failed to create event");
|
|
|
|
{
|
|
let system = system.lock().await;
|
|
system.send_event(event).await?;
|
|
}
|
|
|
|
let system_clone = Arc::clone(&system);
|
|
let system_handle = tokio::spawn(async move {
|
|
let mut system = system_clone.lock().await;
|
|
system.start(adapters).await
|
|
});
|
|
|
|
signal::ctrl_c().await?;
|
|
tracing::info!("Received shutdown signal");
|
|
let result = {
|
|
let mut system = system.lock().await;
|
|
system.shutdown().await
|
|
};
|
|
|
|
if let Err(e) = result {
|
|
tracing::error!("Failed to shut down the notification system: {}", e);
|
|
} else {
|
|
tracing::info!("Notification system shut down successfully");
|
|
}
|
|
|
|
system_handle.await??;
|
|
Ok(())
|
|
}
|