langfuse/scoring/
queue.rs1use std::sync::{Arc, Mutex};
4
5use langfuse_core::types::ScoreBody;
6
7pub struct BatchQueue {
12 buffer: Arc<Mutex<Vec<ScoreBody>>>,
13 max_size: usize,
14}
15
16impl BatchQueue {
17 pub fn new(max_size: usize) -> Self {
19 Self {
20 buffer: Arc::new(Mutex::new(Vec::new())),
21 max_size,
22 }
23 }
24
25 pub fn push(&self, score: ScoreBody) -> bool {
29 let mut buf = self.buffer.lock().expect("BatchQueue lock poisoned");
30 buf.push(score);
31 buf.len() >= self.max_size
32 }
33
34 pub fn drain(&self) -> Vec<ScoreBody> {
36 let mut buf = self.buffer.lock().expect("BatchQueue lock poisoned");
37 std::mem::take(&mut *buf)
38 }
39
40 pub fn len(&self) -> usize {
42 self.buffer.lock().expect("BatchQueue lock poisoned").len()
43 }
44
45 pub fn is_empty(&self) -> bool {
47 self.buffer
48 .lock()
49 .expect("BatchQueue lock poisoned")
50 .is_empty()
51 }
52}