Reorganize bel impl
This commit is contained in:
parent
2edfe90fd4
commit
526b826091
1 changed files with 41 additions and 43 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
use crate::data_build_event::Event;
|
use crate::data_build_event::Event;
|
||||||
use crate::{BuildState, DataBuildEvent, WantDetail};
|
use crate::{BuildState, DataBuildEvent, WantDetail};
|
||||||
use prost::Message;
|
use prost::Message;
|
||||||
use rusqlite::{Connection, Result as SqliteResult};
|
use rusqlite::Connection;
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
use std::time::{SystemTime, UNIX_EPOCH};
|
use std::time::{SystemTime, UNIX_EPOCH};
|
||||||
|
|
@ -15,6 +15,43 @@ trait BELStorage {
|
||||||
) -> Result<Vec<DataBuildEvent>, Box<dyn Error>>;
|
) -> Result<Vec<DataBuildEvent>, Box<dyn Error>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct MemoryBELStorage {
|
||||||
|
events: Vec<DataBuildEvent>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MemoryBELStorage {
|
||||||
|
fn create() -> MemoryBELStorage {
|
||||||
|
MemoryBELStorage { events: vec![] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BELStorage for MemoryBELStorage {
|
||||||
|
fn append_event(&mut self, event: Event) -> Result<u64, Box<dyn Error>> {
|
||||||
|
let now = SystemTime::now();
|
||||||
|
let duration_since_epoch = now.duration_since(UNIX_EPOCH).expect("Time went backwards");
|
||||||
|
|
||||||
|
let timestamp = duration_since_epoch.as_nanos() as u64;
|
||||||
|
|
||||||
|
let dbe = DataBuildEvent {
|
||||||
|
timestamp,
|
||||||
|
event_id: self.events.len() as u64,
|
||||||
|
event: Some(event),
|
||||||
|
};
|
||||||
|
self.events.push(dbe);
|
||||||
|
Ok(self.events.len() as u64)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn list_events(
|
||||||
|
&self,
|
||||||
|
since_idx: u64,
|
||||||
|
limit: u64,
|
||||||
|
) -> Result<Vec<DataBuildEvent>, Box<dyn Error>> {
|
||||||
|
Ok(self.events.iter().cloned().filter(|e| e.timestamp > since_idx)
|
||||||
|
.take(limit as usize)
|
||||||
|
.collect())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct SqliteBELStorage {
|
struct SqliteBELStorage {
|
||||||
connection: Connection,
|
connection: Connection,
|
||||||
}
|
}
|
||||||
|
|
@ -149,48 +186,9 @@ impl<B: BELStorage> BuildEventLog<B> {
|
||||||
}
|
}
|
||||||
|
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::build_event_log::{BELStorage, BuildEventLog, SqliteBELStorage};
|
use crate::build_event_log::{BELStorage, BuildEventLog, MemoryBELStorage, SqliteBELStorage};
|
||||||
use crate::data_build_event::Event;
|
use crate::data_build_event::Event;
|
||||||
use crate::{DataBuildEvent, PartitionRef, WantCreateEventV1};
|
use crate::{PartitionRef, WantCreateEventV1};
|
||||||
use std::error::Error;
|
|
||||||
use std::time::{SystemTime, UNIX_EPOCH};
|
|
||||||
|
|
||||||
struct TestBELStorage {
|
|
||||||
events: Vec<DataBuildEvent>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TestBELStorage {
|
|
||||||
fn create() -> TestBELStorage {
|
|
||||||
TestBELStorage { events: vec![] }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl BELStorage for TestBELStorage {
|
|
||||||
fn append_event(&mut self, event: Event) -> Result<u64, Box<dyn Error>> {
|
|
||||||
let now = SystemTime::now();
|
|
||||||
let duration_since_epoch = now.duration_since(UNIX_EPOCH).expect("Time went backwards");
|
|
||||||
|
|
||||||
let timestamp = duration_since_epoch.as_nanos() as u64;
|
|
||||||
|
|
||||||
let dbe = DataBuildEvent {
|
|
||||||
timestamp,
|
|
||||||
event_id: self.events.len() as u64,
|
|
||||||
event: Some(event),
|
|
||||||
};
|
|
||||||
self.events.push(dbe);
|
|
||||||
Ok(self.events.len() as u64)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn list_events(
|
|
||||||
&self,
|
|
||||||
since_idx: u64,
|
|
||||||
limit: u64,
|
|
||||||
) -> Result<Vec<DataBuildEvent>, Box<dyn Error>> {
|
|
||||||
Ok(self.events.iter().cloned().filter(|e| e.timestamp > since_idx)
|
|
||||||
.take(limit as usize)
|
|
||||||
.collect())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_hello() {
|
fn test_hello() {
|
||||||
|
|
@ -199,7 +197,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_append_event() {
|
fn test_append_event() {
|
||||||
let storage = TestBELStorage::create();
|
let storage = MemoryBELStorage::create();
|
||||||
let mut log = BuildEventLog::create(storage);
|
let mut log = BuildEventLog::create(storage);
|
||||||
// Initial state
|
// Initial state
|
||||||
assert_eq!(log.storage.events.len(), 0);
|
assert_eq!(log.storage.events.len(), 0);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue