// Copyright 2024 RustFS Team
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//! Offline log fault-analysis core for RustFS (`rustfs diagnose`).
//!
//! Design contract (see rustfs/backlog#1281):
//! - fully synchronous, no tokio, no rustfs-* internal deps;
//! - order-independent aggregation: analysis never requires globally
//!   time-sorted input;
//! - parse failures are data, not errors.

pub mod analyze;
pub mod ingest;
pub mod model;
pub mod parse;
mod redact;
pub mod report;
pub mod rules;

pub use analyze::{AnalysisReport, AnalyzeOptions, Analyzer, Summary, TimeBucket, TimelineAnomaly, UnmatchedCluster};
pub use ingest::{IngestOptions, IngestReport, SkipReason, ingest_path, ingest_reader};
pub use model::{EventKind, LogEvent, LogLevel, ParseStats, SourceRef};
pub use parse::LineParser;
pub use report::{ReportFormat, render};
pub use rules::{
    EXTERNAL_RULES_SCHEMA_VERSION, ExternalRulesError, Finding, FindingsCollector, Matcher, Rule, RuleEngine, RuleSet,
    RuleSetError, Severity, seed_rule_set, seed_rules, seed_rules_with_external,
};
