Skip to content

Commit

Permalink
监控接口返回值增加监控数据采集间隔信息 #117
Browse files Browse the repository at this point in the history
  • Loading branch information
heqingpan committed Jul 14, 2024
1 parent 78bd119 commit 65e9b72
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 12 deletions.
3 changes: 2 additions & 1 deletion src/console/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,8 @@ pub fn console_api_config_v2(config: &mut web::ServiceConfig) {
)
.service(
web::resource("/metrics/timeline")
.route(web::get().to(v2::metrics_api::query_metrics_timeline)),
.route(web::get().to(v2::metrics_api::query_metrics_timeline))
.route(web::post().to(v2::metrics_api::query_metrics_timeline_json)),
),
);
}
22 changes: 14 additions & 8 deletions src/console/model/metrics_model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,25 @@ pub struct TimelineQueryRequest {
// LEAST | MINUTE
pub timeline_group_name: Option<String>,
//pub query_all_key: bool,
pub keys: Option<String>,
// 用逗号分割
pub string_key: Option<String>,
// string_key与keys只取其中一个
pub keys: Option<Vec<String>>,
pub node_id: Option<u64>,
}

impl From<TimelineQueryRequest> for TimelineQueryParam {
fn from(value: TimelineQueryRequest) -> Self {
let keys = value
.keys
.unwrap_or_default()
.split(",")
.filter(|e| !e.is_empty())
.map(|e| e.to_string())
.collect();
let mut keys = value.keys.unwrap_or_default();
if keys.is_empty() {
keys = value
.string_key
.unwrap_or_default()
.split(",")
.filter(|e| !e.is_empty())
.map(|e| e.to_string())
.collect();
}
Self {
start_time: value.start_time.unwrap_or_default(),
timeline_group_name: value.timeline_group_name.unwrap_or_default(),
Expand Down
14 changes: 14 additions & 0 deletions src/console/v2/metrics_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,20 @@ pub async fn query_metrics_timeline(
}
}

pub async fn query_metrics_timeline_json(
app: Data<Arc<AppShareData>>,
web::Json(req): web::Json<TimelineQueryRequest>,
) -> actix_web::Result<impl Responder> {
let param: TimelineQueryParam = req.into();
match do_query_metrics_timeline(app, param).await {
Ok(v) => Ok(v),
Err(err) => Ok(HttpResponse::Ok().json(ApiResult::<()>::error(
"SYSTEM_ERROR".to_owned(),
Some(err.to_string()),
))),
}
}

async fn do_query_metrics_timeline(
app: Data<Arc<AppShareData>>,
param: TimelineQueryParam,
Expand Down
2 changes: 2 additions & 0 deletions src/metrics/core.rs
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,8 @@ impl Inject for MetricsManager {
if let Some(sys_config) = sys_config {
self.metrics_enable = sys_config.metrics_enable;
self.collect_interval = sys_config.metrics_collect_interval_second;
self.metrics_timeline_manager
.set_least_interval(self.collect_interval);
self.log_interval = sys_config.metrics_log_interval_second;
if self.metrics_enable {
log::info!("metrics enable! log_interval: {}s", self.log_interval);
Expand Down
13 changes: 10 additions & 3 deletions src/metrics/timeline/core.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@ pub struct TimelineGroup {
timelines: LinkedList<TimelineValue>,
pub(crate) limit_count: usize,
pub(crate) last_time: u64,
pub(crate) interval_second: u64,
}

impl TimelineGroup {
pub fn new(limit_count: usize) -> Self {
pub fn new(limit_count: usize, interval: u64) -> Self {
Self {
timelines: LinkedList::new(),
limit_count,
last_time: 0,
interval_second: interval,
}
}

Expand Down Expand Up @@ -98,6 +100,7 @@ impl TimelineGroup {
last_time,
from_node_id: 0,
time_index,
interval_second: self.interval_second,
gauge_data,
summery_data,
}
Expand Down Expand Up @@ -139,11 +142,15 @@ pub struct MetricsTimelineManager {
impl MetricsTimelineManager {
pub fn new() -> Self {
Self {
minute_timeline_group: TimelineGroup::new(360),
least_timeline_group: TimelineGroup::new(360),
minute_timeline_group: TimelineGroup::new(360, 60),
least_timeline_group: TimelineGroup::new(360, 15),
}
}

pub fn set_least_interval(&mut self, least_interval: u64) {
self.least_timeline_group.interval_second = least_interval;
}

pub fn add_minute_record(&mut self, snapshot: MetricsSnapshot) {
self.minute_timeline_group.add_record(snapshot);
}
Expand Down
1 change: 1 addition & 0 deletions src/metrics/timeline/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ pub struct TimelineQueryResponse {
pub last_time: u64,
pub from_node_id: u64,
pub time_index: Vec<u64>,
pub interval_second: u64,
pub gauge_data: HashMap<String, Vec<f64>>,
pub summery_data: HashMap<String, TimelineSummary>,
}

0 comments on commit 65e9b72

Please sign in to comment.