| Crates.io | sentrystr-collector |
| lib.rs | sentrystr-collector |
| version | 0.1.2 |
| created_at | 2025-09-21 21:37:47.229967+00 |
| updated_at | 2025-09-22 21:20:51.079346+00 |
| description | Collector service for retrieving Sentry-like events from Nostr network |
| homepage | |
| repository | https://github.com/9qeklajc/sentrystr |
| max_upload_size | |
| id | 1849226 |
| size | 87,304 |
Event collection and monitoring service for the SentryStr ecosystem.
The SentryStr Collector provides tools for collecting, filtering, and monitoring error events from Nostr relays. It can be used to build monitoring dashboards, alerting systems, and event analysis tools.
Add this to your Cargo.toml:
[dependencies]
sentrystr-collector = "0.1.0"
Basic usage:
use sentrystr_collector::{EventCollector, EventFilter};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let relays = vec!["wss://relay.damus.io".to_string()];
let collector = EventCollector::new(relays).await?;
// Collect recent events
let filter = EventFilter::new().with_limit(10);
let events = collector.collect_events(filter).await?;
for event in events {
println!("Event: {:?} from {}", event.event.message, event.author);
}
Ok(())
}
Filter events by various criteria:
use sentrystr_collector::{EventCollector, EventFilter};
use sentrystr::Level;
use nostr::Keys;
use chrono::{Utc, Duration};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let relays = vec!["wss://relay.damus.io".to_string()];
let collector = EventCollector::new(relays).await?;
let author = Keys::generate().public_key();
let since = Utc::now() - Duration::hours(24);
let filter = EventFilter::new()
.with_author(author)
.with_level(Level::Error)
.with_since(since)
.with_limit(50);
let events = collector.collect_events(filter).await?;
println!("Found {} error events in the last 24 hours", events.len());
Ok(())
}
Subscribe to live events:
use sentrystr_collector::{EventCollector, EventFilter};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let relays = vec!["wss://relay.damus.io".to_string()];
let collector = EventCollector::new(relays).await?;
let mut rx = collector.subscribe_to_events(EventFilter::new()).await?;
while let Some(event) = rx.recv().await {
println!("Live event: {:?}", event.event.message);
// Handle the event (store, alert, etc.)
}
Ok(())
}
Set up DM alerts for specific event types:
use sentrystr_collector::{EventCollector, PrivateMessageConfig};
use sentrystr::Level;
use nostr::Keys;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let relays = vec!["wss://relay.damus.io".to_string()];
let mut collector = EventCollector::new(relays).await?;
// Setup DM alerts for errors
let recipient = Keys::generate().public_key();
let dm_config = PrivateMessageConfig {
recipient_pubkey: recipient,
min_level: Some(Level::Error),
use_nip17: true,
};
collector = collector.with_private_messaging(dm_config)?;
// Now critical events will also send DMs
let mut rx = collector.subscribe_to_events(EventFilter::new()).await?;
while let Some(event) = rx.recv().await {
println!("Event received and processed for DM alerts");
}
Ok(())
}
This crate works seamlessly with other SentryStr ecosystem crates:
MIT License - see LICENSE file for details.