// Copyright 2025 PingCAP, Inc.

mod collector;
mod config;
mod controller;
mod cpu_config;
mod cpu_throttle;
mod cpu_token_check_future;
mod event;
mod hub;
mod limiter;
mod metrics;
mod monitor;
mod publisher;
mod resource;
mod service_limit_fetcher;
mod subscriber;
mod usage;
mod util;

pub use collector::{ResourceCollector, ThreadCollector};
pub use config::{Config, ConfigManager};
pub use controller::ResourceController;
pub use cpu_config::CpuThrottleConfig;
pub use cpu_throttle::{CpuThrottleManager, CpuTokenBucket, CpuTokenHandle, ThrottleError};
pub use cpu_token_check_future::{CpuTokenCheckFuture, CpuTokenError};
pub use event::{Metric, ResourceEvent, Scope, Severity, SeverityThreshold};
use hub::{EventHub, ResourceHub};
pub use limiter::{KeyspaceReadLimiter, ReadLimiter, TransferLeaderLimiter};
pub use metrics::{
    ACTIVE_KEYSPACE_READ_BYTES, CPU_THROTTLE_ALLOCATIONS, CPU_THROTTLE_BURST_COUNT,
    CPU_THROTTLE_BURST_TOKENS_USED, CPU_THROTTLE_FAIR_ALLOCATIONS,
    CPU_THROTTLE_GLOBAL_BUCKET_AVAILABLE, CPU_THROTTLE_GLOBAL_BUCKET_CAPACITY,
    CPU_THROTTLE_GLOBAL_REFILL_RATE, CPU_THROTTLE_KEYSPACE_BUCKET_AVAILABLE,
    CPU_THROTTLE_KEYSPACE_BUCKET_CAPACITY, CPU_THROTTLE_KEYSPACE_DEBT_US,
    CPU_THROTTLE_KEYSPACE_INFLIGHT_US, CPU_THROTTLE_KEYSPACE_REFILL_RATE,
    CPU_THROTTLE_LOW_PRIORITY_DAG_ALLOCATIONS, CPU_THROTTLE_LOW_PRIORITY_DAG_BUCKET_AVAILABLE,
    CPU_THROTTLE_LOW_PRIORITY_DAG_BUCKET_CAPACITY,
    CPU_THROTTLE_LOW_PRIORITY_DAG_CPU_TOKEN_WAIT_DURATION_HISTOGRAM,
    CPU_THROTTLE_LOW_PRIORITY_DAG_KEYSPACE_WAIT_DURATION_HISTOGRAM,
    CPU_THROTTLE_LOW_PRIORITY_DAG_REFILL_RATE,
    CPU_THROTTLE_LOW_PRIORITY_DAG_REQUEST_ACTUAL_TO_ESTIMATED_RATIO_HISTOGRAM,
    CPU_THROTTLE_LOW_PRIORITY_DAG_REQUEST_CPU_TIME_HISTOGRAM,
    CPU_THROTTLE_LOW_PRIORITY_DAG_WAIT_DURATION_HISTOGRAM, CPU_THROTTLE_REFILL_RATE_ADJUSTMENTS,
    CPU_THROTTLE_REQUEST_ACTUAL_TO_ESTIMATED_RATIO_HISTOGRAM,
    CPU_THROTTLE_REQUEST_CPU_TIME_HISTOGRAM, CPU_THROTTLE_REQUEST_DAG_MAIN_CPU_TIME_HISTOGRAM,
    CPU_THROTTLE_TENANT_CAP_QUOTA_US, CPU_THROTTLE_TENANT_CAP_RATIO, CPU_TOKEN_RETRY_COUNT,
    CPU_TOKEN_RUNTIME_ALLOCATIONS, CPU_TOKEN_RUNTIME_WAIT_DURATION_HISTOGRAM,
    CPU_TOKEN_WAIT_DURATION_HISTOGRAM, CPU_USAGE_MONITOR_GLOBAL, CPU_USAGE_MONITOR_KEYSPACE,
    REQUEST_WAIT_HISTOGRAM_VEC, RESOURCE_CONTROL_GLOBAL_USAGE_SAMPLES,
    RESOURCE_CONTROL_KEYSPACE_USAGE_SAMPLES, RESOURCE_CONTROL_TICKS_TOTAL,
    SERVICE_LIMIT_FETCH_DURATION, SERVICE_LIMIT_FETCH_TOTAL, SERVICE_LIMIT_KEYSPACE_QUOTA_US,
    SERVICE_LIMIT_KEYSPACE_VALUE, SERVICE_LIMIT_LAST_SUCCESS_TIMESTAMP,
};
pub use monitor::TotalCpuMonitor;
use publisher::EventPublisher;
pub use publisher::ResourcePublisher;
pub use resource::{CpuType, Resource, ResourceType, ResourceValue, Usage};
pub use service_limit_fetcher::ServiceLimitFetcher;
pub use subscriber::{
    ReadSubscriber, ResourceSubscriber, TotalCpuSubscriber, TransferLeaderSubscriber,
};
use usage::{GlobalInstantUsages, ResourceUsage, Usages};
pub use util::{AtomicDuration, AtomicTime, TimeUnit};

const MAX_BATCH_SIZE: usize = 1024 * 1024;
