mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-01-19 09:35:51 +08:00
add a view for the task queue in the metrics
This commit is contained in:
parent
1b601f70c6
commit
c433bdd1cd
File diff suppressed because it is too large
Load Diff
@ -31,7 +31,7 @@ mod uuid_codec;
|
|||||||
pub type Result<T> = std::result::Result<T, Error>;
|
pub type Result<T> = std::result::Result<T, Error>;
|
||||||
pub type TaskId = u32;
|
pub type TaskId = u32;
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::{BTreeMap, HashMap};
|
||||||
use std::ops::{Bound, RangeBounds};
|
use std::ops::{Bound, RangeBounds};
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::sync::atomic::AtomicBool;
|
use std::sync::atomic::AtomicBool;
|
||||||
@ -737,6 +737,34 @@ impl IndexScheduler {
|
|||||||
Ok(tasks)
|
Ok(tasks)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_stats(&self) -> Result<BTreeMap<String, BTreeMap<String, u64>>> {
|
||||||
|
let rtxn = self.read_txn()?;
|
||||||
|
|
||||||
|
let mut res = BTreeMap::new();
|
||||||
|
|
||||||
|
res.insert(
|
||||||
|
"statuses".to_string(),
|
||||||
|
enum_iterator::all::<Status>()
|
||||||
|
.map(|s| Ok((s.to_string(), self.get_status(&rtxn, s)?.len())))
|
||||||
|
.collect::<Result<BTreeMap<String, u64>>>()?,
|
||||||
|
);
|
||||||
|
res.insert(
|
||||||
|
"types".to_string(),
|
||||||
|
enum_iterator::all::<Kind>()
|
||||||
|
.map(|s| Ok((s.to_string(), self.get_kind(&rtxn, s)?.len())))
|
||||||
|
.collect::<Result<BTreeMap<String, u64>>>()?,
|
||||||
|
);
|
||||||
|
res.insert(
|
||||||
|
"indexes".to_string(),
|
||||||
|
self.index_tasks
|
||||||
|
.iter(&rtxn)?
|
||||||
|
.map(|res| Ok(res.map(|(name, bitmap)| (name.to_string(), bitmap.len()))?))
|
||||||
|
.collect::<Result<BTreeMap<String, u64>>>()?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Ok(res)
|
||||||
|
}
|
||||||
|
|
||||||
/// Return true iff there is at least one task associated with this index
|
/// Return true iff there is at least one task associated with this index
|
||||||
/// that is processing.
|
/// that is processing.
|
||||||
pub fn is_index_processing(&self, index: &str) -> Result<bool> {
|
pub fn is_index_processing(&self, index: &str) -> Result<bool> {
|
||||||
|
@ -40,4 +40,7 @@ lazy_static! {
|
|||||||
HTTP_RESPONSE_TIME_CUSTOM_BUCKETS.to_vec()
|
HTTP_RESPONSE_TIME_CUSTOM_BUCKETS.to_vec()
|
||||||
)
|
)
|
||||||
.expect("Can't create a metric");
|
.expect("Can't create a metric");
|
||||||
|
pub static ref NB_TASKS: IntGaugeVec =
|
||||||
|
register_int_gauge_vec!(opts!("nb_tasks", "Number of tasks"), &["kind", "value"])
|
||||||
|
.expect("Can't create a metric");
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,12 @@ pub async fn get_metrics(
|
|||||||
.set(value.number_of_documents as i64);
|
.set(value.number_of_documents as i64);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (kind, value) in index_scheduler.get_stats()? {
|
||||||
|
for (value, count) in value {
|
||||||
|
crate::metrics::NB_TASKS.with_label_values(&[&kind, &value]).set(count as i64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let encoder = TextEncoder::new();
|
let encoder = TextEncoder::new();
|
||||||
let mut buffer = vec![];
|
let mut buffer = vec![];
|
||||||
encoder.encode(&prometheus::gather(), &mut buffer).expect("Failed to encode metrics");
|
encoder.encode(&prometheus::gather(), &mut buffer).expect("Failed to encode metrics");
|
||||||
|
Loading…
Reference in New Issue
Block a user