#[cfg(feature = "config")]
pub mod parse;
#[cfg(feature = "config")]
pub mod normalize;
#[cfg(feature = "config")]
pub mod expand;
pub mod timing;
#[cfg(feature = "config")]
pub mod compile_after;
#[cfg(feature = "config")]
pub mod prepare;
use std::collections::BTreeMap;
use crate::config::{
BurstConfig, CardinalitySpikeConfig, DistributionConfig, DynamicLabelConfig, GapConfig,
};
use crate::encoder::EncoderConfig;
use crate::generator::{GeneratorConfig, LogGeneratorConfig};
use crate::packs::MetricOverride;
use crate::sink::SinkConfig;
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "config",
derive(serde::Serialize, serde::Deserialize),
serde(deny_unknown_fields)
)]
pub struct ScenarioFile {
pub version: u32,
#[cfg_attr(feature = "config", serde(default))]
pub scenario_name: Option<String>,
#[cfg_attr(feature = "config", serde(default))]
pub category: Option<String>,
#[cfg_attr(feature = "config", serde(default))]
pub description: Option<String>,
#[cfg_attr(feature = "config", serde(default))]
pub defaults: Option<Defaults>,
pub scenarios: Vec<Entry>,
}
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "config",
derive(serde::Serialize, serde::Deserialize),
serde(deny_unknown_fields)
)]
pub struct Defaults {
#[cfg_attr(feature = "config", serde(default))]
pub rate: Option<f64>,
#[cfg_attr(feature = "config", serde(default))]
pub duration: Option<String>,
#[cfg_attr(feature = "config", serde(default))]
pub encoder: Option<EncoderConfig>,
#[cfg_attr(feature = "config", serde(default))]
pub sink: Option<SinkConfig>,
#[cfg_attr(feature = "config", serde(default))]
pub labels: Option<BTreeMap<String, String>>,
}
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "config",
derive(serde::Serialize, serde::Deserialize),
serde(deny_unknown_fields)
)]
pub struct Entry {
#[cfg_attr(feature = "config", serde(default))]
pub id: Option<String>,
pub signal_type: String,
#[cfg_attr(feature = "config", serde(default))]
pub name: Option<String>,
#[cfg_attr(feature = "config", serde(default))]
pub rate: Option<f64>,
#[cfg_attr(feature = "config", serde(default))]
pub duration: Option<String>,
#[cfg_attr(feature = "config", serde(default))]
pub generator: Option<GeneratorConfig>,
#[cfg_attr(feature = "config", serde(default))]
pub log_generator: Option<LogGeneratorConfig>,
#[cfg_attr(feature = "config", serde(default))]
pub labels: Option<BTreeMap<String, String>>,
#[cfg_attr(feature = "config", serde(default))]
pub dynamic_labels: Option<Vec<DynamicLabelConfig>>,
#[cfg_attr(feature = "config", serde(default))]
pub encoder: Option<EncoderConfig>,
#[cfg_attr(feature = "config", serde(default))]
pub sink: Option<SinkConfig>,
#[cfg_attr(feature = "config", serde(default))]
pub jitter: Option<f64>,
#[cfg_attr(feature = "config", serde(default))]
pub jitter_seed: Option<u64>,
#[cfg_attr(feature = "config", serde(default))]
pub gaps: Option<GapConfig>,
#[cfg_attr(feature = "config", serde(default))]
pub bursts: Option<BurstConfig>,
#[cfg_attr(feature = "config", serde(default))]
pub cardinality_spikes: Option<Vec<CardinalitySpikeConfig>>,
#[cfg_attr(feature = "config", serde(default))]
pub phase_offset: Option<String>,
#[cfg_attr(feature = "config", serde(default))]
pub clock_group: Option<String>,
#[cfg_attr(feature = "config", serde(default))]
pub after: Option<AfterClause>,
#[cfg_attr(feature = "config", serde(default))]
pub pack: Option<String>,
#[cfg_attr(feature = "config", serde(default))]
pub overrides: Option<BTreeMap<String, MetricOverride>>,
#[cfg_attr(feature = "config", serde(default))]
pub distribution: Option<DistributionConfig>,
#[cfg_attr(feature = "config", serde(default))]
pub buckets: Option<Vec<f64>>,
#[cfg_attr(feature = "config", serde(default))]
pub quantiles: Option<Vec<f64>>,
#[cfg_attr(feature = "config", serde(default))]
pub observations_per_tick: Option<u32>,
#[cfg_attr(feature = "config", serde(default))]
pub mean_shift_per_sec: Option<f64>,
#[cfg_attr(feature = "config", serde(default))]
pub seed: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "config", derive(serde::Serialize, serde::Deserialize))]
pub enum AfterOp {
#[cfg_attr(feature = "config", serde(rename = "<"))]
LessThan,
#[cfg_attr(feature = "config", serde(rename = ">"))]
GreaterThan,
}
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "config",
derive(serde::Serialize, serde::Deserialize),
serde(deny_unknown_fields)
)]
pub struct AfterClause {
#[cfg_attr(feature = "config", serde(rename = "ref"))]
pub ref_id: String,
pub op: AfterOp,
pub value: f64,
#[cfg_attr(feature = "config", serde(default))]
pub delay: Option<String>,
}