Skip to main content

docs_metrics/
docs_metrics.rs

1//! Documentation examples for Metrics page.
2//!
3//! Run with: cargo run --example docs_metrics
4
5use s2_sdk::{
6    S2,
7    types::{
8        AccountMetricSet, BasinMetricSet, GetAccountMetricsInput, GetBasinMetricsInput,
9        GetStreamMetricsInput, S2Config, StreamMetricSet, TimeRange,
10    },
11};
12
13#[tokio::main]
14async fn main() -> Result<(), Box<dyn std::error::Error>> {
15    let access_token = std::env::var("S2_ACCESS_TOKEN")?;
16    let client = S2::new(S2Config::new(access_token))?;
17
18    // ANCHOR: metrics
19    let now = std::time::SystemTime::now()
20        .duration_since(std::time::UNIX_EPOCH)?
21        .as_secs() as u32;
22    let thirty_days_ago = now - 30 * 24 * 3600;
23    let six_hours_ago = now - 6 * 3600;
24    let hour_ago = now - 3600;
25
26    // Account-level: active basins over the last 30 days
27    let account_metrics = client
28        .get_account_metrics(GetAccountMetricsInput::new(AccountMetricSet::ActiveBasins(
29            TimeRange::new(thirty_days_ago, now),
30        )))
31        .await?;
32
33    // Basin-level: storage usage with hourly resolution
34    let basin_metrics = client
35        .get_basin_metrics(GetBasinMetricsInput::new(
36            "events".parse()?,
37            BasinMetricSet::Storage(TimeRange::new(six_hours_ago, now)),
38        ))
39        .await?;
40
41    // Stream-level: storage for a specific stream
42    let stream_metrics = client
43        .get_stream_metrics(GetStreamMetricsInput::new(
44            "events".parse()?,
45            "user-actions".parse()?,
46            StreamMetricSet::Storage(TimeRange::new(hour_ago, now)),
47        ))
48        .await?;
49    // ANCHOR_END: metrics
50
51    println!(
52        "{:?} {:?} {:?}",
53        account_metrics, basin_metrics, stream_metrics
54    );
55
56    Ok(())
57}