Trim comments across Rust and webapp source to direct one-liners (ticket 030)
Pass over src/*.rs, webapp/src/**, and the in-app "?" docs prose: condensed multi-paragraph doc comments to single lines that state the non-obvious why, deleted comments that only restated adjacent code, and tightened the Docs.tsx help-panel wording. No logic, structure, or code formatting changed — verified via cargo test (143 passed) and tsc -b && vite build. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XFUNZwCvz3kcod3352ZR2o
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
3cef6dc8ae
commit
00c21c8032
+21
-96
@@ -11,12 +11,7 @@ pub struct LogEntryDto {
|
||||
pub sequence: u64,
|
||||
pub timestamp_ms: i64,
|
||||
pub text: String,
|
||||
/// Derived param values (ticket 001's `ParamDeclaration`s) for this line,
|
||||
/// keyed by param name. Only params whose regex actually matched this
|
||||
/// line's text (and whose captured group parsed as the declared `kind`)
|
||||
/// are present — a non-matching param is omitted rather than sent as
|
||||
/// null, so the frontend can render a blank/dash for anything missing
|
||||
/// from the map.
|
||||
/// Only params whose regex matched (and parsed as the declared kind) are present — omitted rather than sent as null, so the frontend can render a blank for anything missing.
|
||||
pub params: BTreeMap<String, MetricPrimitive>,
|
||||
}
|
||||
|
||||
@@ -33,9 +28,9 @@ pub struct MetricDeclarationDto {
|
||||
pub name: String,
|
||||
pub message_match_regex: String,
|
||||
pub params: Vec<RegexToMetricPrimitiveMatcher>,
|
||||
/// See `crate::engine::DeclareMetricRequest::matched_labels` (ticket 025).
|
||||
/// See `crate::engine::DeclareMetricRequest::matched_labels`.
|
||||
pub matched_labels: Option<BTreeMap<String, String>>,
|
||||
/// See `crate::engine::DeclareMetricRequest::unmatched_labels` (ticket 025).
|
||||
/// See `crate::engine::DeclareMetricRequest::unmatched_labels`.
|
||||
pub unmatched_labels: Option<BTreeMap<String, String>>,
|
||||
}
|
||||
|
||||
@@ -60,9 +55,7 @@ pub struct LogsParams {
|
||||
pub start_ms: Option<i64>,
|
||||
pub end_ms: Option<i64>,
|
||||
pub limit: Option<usize>,
|
||||
/// Raw FilterBar query string (ticket 007), e.g. `regex("error") and
|
||||
/// sequence<5`. Parsed with `filter_parser::parse` and evaluated in the
|
||||
/// engine; a malformed string surfaces as `EngineResponse::Error`.
|
||||
/// Raw FilterBar query string, e.g. `regex("error") and sequence<5`.
|
||||
pub filter: Option<String>,
|
||||
}
|
||||
|
||||
@@ -71,14 +64,11 @@ pub struct TimelineParams {
|
||||
pub start_ms: Option<i64>,
|
||||
pub end_ms: Option<i64>,
|
||||
pub bucket_ms: Option<i64>,
|
||||
/// Same FilterBar query string as `LogsParams::filter`: only logs
|
||||
/// matching it are counted into timeline buckets.
|
||||
/// Same FilterBar query string as `LogsParams::filter`; only matching logs are counted into timeline buckets.
|
||||
pub filter: Option<String>,
|
||||
}
|
||||
|
||||
/// One entry from a metric's derived bucket timeseries: the label combination
|
||||
/// that bucket represents, plus one `(sequence, timestamp, value)` occurrence
|
||||
/// within it.
|
||||
/// One (sequence, timestamp, value) occurrence within a metric's bucket for a given label combination.
|
||||
#[derive(Debug, Clone, Serialize)]
|
||||
pub struct BucketValueDto {
|
||||
pub labels: BTreeMap<String, MetricPrimitive>,
|
||||
@@ -87,13 +77,7 @@ pub struct BucketValueDto {
|
||||
pub value: MetricPrimitive,
|
||||
}
|
||||
|
||||
/// Query params for `GET /api/metrics/:name`. `labels` is a single
|
||||
/// comma-separated `key=value` list (e.g. `?labels=path=/a,duration=5`)
|
||||
/// rather than repeated `label.foo=bar` params, since axum's `Query`
|
||||
/// extractor needs a fixed/known set of field names — an arbitrary label set
|
||||
/// doesn't fit that without a custom deserializer. Every listed label must
|
||||
/// match (compared against each label value's `Display` form, see
|
||||
/// `MetricPrimitive`); unlisted labels on a bucket are ignored.
|
||||
/// `labels` is a comma-separated `key=value` list (not repeated params) since axum's `Query` extractor needs a fixed set of field names.
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct BucketValuesParams {
|
||||
pub labels: Option<String>,
|
||||
@@ -103,24 +87,13 @@ pub struct BucketValuesParams {
|
||||
pub limit: Option<usize>,
|
||||
}
|
||||
|
||||
/// One chart-ready time series returned by `GET /api/query` (ticket 013's PromQL
|
||||
/// endpoint): a label combination plus its `(timestamp_ms, value)` points, sorted by
|
||||
/// timestamp. `labels` uses plain `String` values (not `MetricPrimitive`) since every
|
||||
/// value has already been through `MetricPrimitive`'s `Display` form — chart code
|
||||
/// doesn't need the typed value, just something to show in a legend/tooltip.
|
||||
///
|
||||
/// `value` is always `f64` (see `crate::engine::coerce_to_f64` for how a bucket's
|
||||
/// `MetricPrimitive` is coerced into one), since a chart needs a plottable number
|
||||
/// regardless of the underlying metric primitive's kind.
|
||||
/// `labels` uses plain `String` (already Display-formatted) since charts just need something to show; `value` is always `f64` for plottability.
|
||||
#[derive(Debug, Clone, Serialize, PartialEq)]
|
||||
pub struct PromqlSeriesDto {
|
||||
pub labels: BTreeMap<String, String>,
|
||||
pub points: Vec<(i64, f64)>,
|
||||
}
|
||||
|
||||
/// Query params for `GET /api/query`. `promql` is the query string (see
|
||||
/// `crate::promql`); `start_ms`/`end_ms` bound which points are included, mirroring
|
||||
/// `/api/logs`/`/api/metrics/:name`.
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct PromqlParams {
|
||||
pub promql: String,
|
||||
@@ -128,17 +101,13 @@ pub struct PromqlParams {
|
||||
pub end_ms: Option<i64>,
|
||||
}
|
||||
|
||||
/// JSON error body returned by API handlers on a 4xx/5xx response, e.g.
|
||||
/// `{ "error": "invalid regex: ..." }`.
|
||||
/// JSON error body returned by API handlers on a 4xx/5xx response.
|
||||
#[derive(Debug, Serialize)]
|
||||
pub struct ErrorDto {
|
||||
pub error: String,
|
||||
}
|
||||
|
||||
/// Request body for `POST /api/settings/css`: raw CSS content to import and
|
||||
/// store alongside the settings file. `is_theme` (ticket 033) marks this as
|
||||
/// a selectable colour-scheme theme rather than arbitrary CSS; defaults to
|
||||
/// `false` (arbitrary CSS) when omitted.
|
||||
/// `is_theme` marks this as a selectable colour-scheme theme rather than arbitrary CSS; defaults to false.
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct ImportCssRequest {
|
||||
pub filename: String,
|
||||
@@ -147,9 +116,7 @@ pub struct ImportCssRequest {
|
||||
pub is_theme: bool,
|
||||
}
|
||||
|
||||
/// Request body for `POST /api/settings/css/link`: a reference to an
|
||||
/// external CSS path/URL that ottyl doesn't copy or own. `is_theme` (ticket
|
||||
/// 033) marks this as a selectable theme rather than arbitrary CSS.
|
||||
/// A reference to an external CSS path/URL that ottyl doesn't copy or own.
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct LinkCssRequest {
|
||||
pub path_or_url: String,
|
||||
@@ -157,14 +124,7 @@ pub struct LinkCssRequest {
|
||||
pub is_theme: bool,
|
||||
}
|
||||
|
||||
/// Response shape for a single CSS entry, used both by the list endpoint and
|
||||
/// by mutation endpoints that return the affected entry. `id` is the entry's
|
||||
/// real id for `Imported` entries, or a stable id derived from the
|
||||
/// linked path/URL for `Linked` entries (see `settings::css_entry_id`) —
|
||||
/// this lets the frontend key/reference both kinds of entries uniformly,
|
||||
/// even though only `Imported` entries are deletable/content-fetchable.
|
||||
/// `is_theme` (ticket 033) distinguishes a theme entry (selectable from the
|
||||
/// theme picker) from arbitrary imported/linked CSS.
|
||||
/// `id` is the real id for `Imported` entries or a stable id derived from the path/URL for `Linked` ones, so the frontend can key both kinds uniformly (only `Imported` entries are deletable/content-fetchable).
|
||||
#[derive(Debug, Clone, Serialize)]
|
||||
pub struct CssEntryDto {
|
||||
pub id: String,
|
||||
@@ -202,19 +162,14 @@ impl From<&CssEntry> for CssEntryDto {
|
||||
}
|
||||
}
|
||||
|
||||
/// Response shape for `GET /api/settings` and `PATCH /api/settings` (ticket
|
||||
/// 011): the subset of `Settings` the NavMenu UI needs to render a colour
|
||||
/// scheme picker and know which profile is active. `css_entries` is
|
||||
/// deliberately omitted here since it already has its own dedicated
|
||||
/// `GET /api/settings/css` endpoint (ticket 010).
|
||||
/// `css_entries` is omitted here since it has its own `GET /api/settings/css` endpoint.
|
||||
#[derive(Debug, Clone, Serialize)]
|
||||
pub struct SettingsDto {
|
||||
pub color_scheme: ColorScheme,
|
||||
pub active_profile: Option<String>,
|
||||
/// `None` means unlimited (ticket 026).
|
||||
/// `None` means unlimited.
|
||||
pub max_logs: Option<usize>,
|
||||
/// Id of the selected custom theme entry, if any (ticket 033). `None`
|
||||
/// means `color_scheme` alone determines the active palette.
|
||||
/// Id of the selected custom theme entry, if any. `None` means `color_scheme` alone determines the active palette.
|
||||
pub custom_theme_id: Option<String>,
|
||||
}
|
||||
|
||||
@@ -229,11 +184,7 @@ impl From<&Settings> for SettingsDto {
|
||||
}
|
||||
}
|
||||
|
||||
/// Request body for `PATCH /api/settings`. `color_scheme`: `None` leaves the
|
||||
/// current value untouched. `max_logs`/`custom_theme_id`: each distinguishes
|
||||
/// "field omitted" (leave unchanged, outer `None`) from "field present"
|
||||
/// (inner `Option` applied verbatim — `null` clears it, a value sets it), via
|
||||
/// `deserialize_double_option`.
|
||||
/// `max_logs`/`custom_theme_id` distinguish "omitted" (leave unchanged) from "present" (null clears, value sets), via `deserialize_double_option`.
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct UpdateSettingsRequest {
|
||||
pub color_scheme: Option<ColorScheme>,
|
||||
@@ -243,10 +194,7 @@ pub struct UpdateSettingsRequest {
|
||||
pub custom_theme_id: Option<Option<String>>,
|
||||
}
|
||||
|
||||
/// Distinguishes a missing JSON field (outer `None`, via `#[serde(default)]`
|
||||
/// short-circuiting before this runs) from a present `null` (`Some(None)`)
|
||||
/// or present value (`Some(Some(value))`) — plain `Option<Option<T>>` can't
|
||||
/// tell "absent" and "explicit null" apart on its own.
|
||||
/// Distinguishes a missing field (outer `None`) from present `null` (`Some(None)`) or present value (`Some(Some(value))`), which plain `Option<Option<T>>` can't do alone.
|
||||
fn deserialize_double_option<'de, D, T>(deserializer: D) -> Result<Option<Option<T>>, D::Error>
|
||||
where
|
||||
D: serde::Deserializer<'de>,
|
||||
@@ -255,10 +203,6 @@ where
|
||||
Option::<T>::deserialize(deserializer).map(Some)
|
||||
}
|
||||
|
||||
/// Request body for `POST /api/settings/alerts` (ticket 017): creates a new
|
||||
/// alert rule (see `crate::alerts::Settings::create_alert_rule`). `AlertRule`
|
||||
/// itself is returned directly as the response body (it already derives
|
||||
/// `Serialize`), so there's no separate response DTO here.
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct CreateAlertRuleRequest {
|
||||
pub name: String,
|
||||
@@ -267,8 +211,6 @@ pub struct CreateAlertRuleRequest {
|
||||
pub sink: AlertSink,
|
||||
}
|
||||
|
||||
/// Request body for `PUT /api/settings/alerts/:id`: replaces every field
|
||||
/// except `id` (taken from the URL, see `Settings::update_alert_rule`).
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct UpdateAlertRuleRequest {
|
||||
pub name: String,
|
||||
@@ -277,19 +219,13 @@ pub struct UpdateAlertRuleRequest {
|
||||
pub sink: AlertSink,
|
||||
}
|
||||
|
||||
/// Request body for `POST /api/settings/alerts/test` (ticket 020): delivers
|
||||
/// a test notification to an ntfy topic/server without requiring a saved
|
||||
/// rule. `server` defaults to `https://ntfy.sh` when absent, same as
|
||||
/// `AlertSink::Ntfy`.
|
||||
/// `server` defaults to `https://ntfy.sh` when absent.
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct TestAlertNotificationRequest {
|
||||
pub topic: String,
|
||||
pub server: Option<String>,
|
||||
}
|
||||
|
||||
/// Summary of one profile for `GET /api/settings/profiles` (ticket 011):
|
||||
/// just the name and declaration/dashboard counts the Presets panel needs to
|
||||
/// render a list, rather than the full param/metric declaration bodies.
|
||||
#[derive(Debug, Clone, Serialize)]
|
||||
pub struct ProfileSummaryDto {
|
||||
pub name: String,
|
||||
@@ -309,15 +245,12 @@ impl From<&Profile> for ProfileSummaryDto {
|
||||
}
|
||||
}
|
||||
|
||||
/// Request body for `POST /api/settings/profiles`: creates a new, empty
|
||||
/// profile with this name (see `ProfileStore::create`).
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct CreateProfileRequest {
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
/// One panel within a dashboard (ticket 014): a PromQL query plus how to
|
||||
/// chart its result. Mirrors `profile::Panel`.
|
||||
/// Mirrors `profile::Panel`.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct PanelDto {
|
||||
pub id: String,
|
||||
@@ -348,9 +281,7 @@ impl From<&PanelDto> for Panel {
|
||||
}
|
||||
}
|
||||
|
||||
/// A saved dashboard (ticket 014), as returned by
|
||||
/// `GET /api/settings/profiles/:name/dashboards` and friends. Mirrors
|
||||
/// `profile::Dashboard`.
|
||||
/// Mirrors `profile::Dashboard`.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct DashboardDto {
|
||||
pub id: String,
|
||||
@@ -378,18 +309,12 @@ impl From<&DashboardDto> for Dashboard {
|
||||
}
|
||||
}
|
||||
|
||||
/// Request body for `POST /api/settings/profiles/:name/dashboards`: creates
|
||||
/// a new, empty dashboard with this name (see `ProfileStore::create_dashboard`).
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct CreateDashboardRequest {
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
/// Request body for
|
||||
/// `PUT /api/settings/profiles/:name/dashboards/:dashboard_id`: replaces the
|
||||
/// dashboard's `name`/`panels` (see `ProfileStore::save_dashboard`). The
|
||||
/// dashboard `id` in the URL is authoritative — any `id` in the body is
|
||||
/// ignored.
|
||||
/// The dashboard `id` in the URL is authoritative; any `id` in the body is ignored.
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct SaveDashboardRequest {
|
||||
pub name: String,
|
||||
|
||||
Reference in New Issue
Block a user