feat: update
Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
parent
34fabb72be
commit
7e22a7f3ab
662
Cargo.lock
generated
662
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -14,6 +14,7 @@ use axum::{
|
|||||||
use churn_domain::AgentEnrollReq;
|
use churn_domain::AgentEnrollReq;
|
||||||
use clap::{Parser, Subcommand};
|
use clap::{Parser, Subcommand};
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
use tokio::net::TcpListener;
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser)]
|
||||||
#[command(author, version, about, long_about = None, subcommand_required = true)]
|
#[command(author, version, about, long_about = None, subcommand_required = true)]
|
||||||
@ -70,8 +71,8 @@ async fn handle_command(cmd: Command) -> anyhow::Result<()> {
|
|||||||
.with_state(AppState::default());
|
.with_state(AppState::default());
|
||||||
|
|
||||||
tracing::info!("churn server listening on {}", host);
|
tracing::info!("churn server listening on {}", host);
|
||||||
axum::Server::bind(&host)
|
let listener = TcpListener::bind(&host).await?;
|
||||||
.serve(app.into_make_service())
|
axum::serve(listener, app.into_make_service())
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use capnp::message::{Builder, HeapAllocator};
|
use capnp::message::{Builder, HeapAllocator};
|
||||||
use capnp::message::{ReaderOptions, TypedReader};
|
use capnp::message::{ReaderOptions, TypedReader};
|
||||||
use capnp::serialize::{self, SliceSegments};
|
use capnp::serialize::{self, BufferSegments};
|
||||||
|
|
||||||
use capnp::traits::Owned;
|
use capnp::traits::Owned;
|
||||||
use churn_domain::{Agent, Lease, LogEvent};
|
use churn_domain::{Agent, Lease, LogEvent};
|
||||||
@ -17,7 +17,7 @@ pub trait CapnpPackExt {
|
|||||||
serialize::write_message_to_words(builder)
|
serialize::write_message_to_words(builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn string_to_capnp<S>(mut content: &[u8]) -> TypedReader<SliceSegments, S>
|
fn string_to_capnp<S>(mut content: &[u8]) -> TypedReader<BufferSegments<&[u8]>, S>
|
||||||
where
|
where
|
||||||
S: Owned,
|
S: Owned,
|
||||||
{
|
{
|
||||||
@ -47,9 +47,9 @@ impl CapnpPackExt for LogEvent {
|
|||||||
let log_event = log_event.get()?;
|
let log_event = log_event.get()?;
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
id: uuid::Uuid::parse_str(log_event.get_id()?)?,
|
id: uuid::Uuid::parse_str(log_event.get_id()?.to_str()?)?,
|
||||||
author: log_event.get_author()?.into(),
|
author: log_event.get_author()?.to_string()?,
|
||||||
content: log_event.get_content()?.into(),
|
content: log_event.get_content()?.to_string()?,
|
||||||
timestamp: chrono::DateTime::<chrono::Utc>::from_utc(
|
timestamp: chrono::DateTime::<chrono::Utc>::from_utc(
|
||||||
chrono::NaiveDateTime::from_timestamp_opt(log_event.get_datetime(), 0).unwrap(),
|
chrono::NaiveDateTime::from_timestamp_opt(log_event.get_datetime(), 0).unwrap(),
|
||||||
chrono::Utc,
|
chrono::Utc,
|
||||||
@ -75,7 +75,7 @@ impl CapnpPackExt for Agent {
|
|||||||
let item = item.get()?;
|
let item = item.get()?;
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
name: item.get_name()?.into(),
|
name: item.get_name()?.to_string()?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,8 +98,8 @@ impl CapnpPackExt for Lease {
|
|||||||
let item = item.get()?;
|
let item = item.get()?;
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
id: uuid::Uuid::parse_str(item.get_id()?)?,
|
id: uuid::Uuid::parse_str(item.get_id()?.to_str()?)?,
|
||||||
lease: uuid::Uuid::parse_str(item.get_lease()?)?,
|
lease: uuid::Uuid::parse_str(item.get_lease()?.to_str()?)?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,7 @@ pub mod log_event {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> {
|
impl <'a,> ::capnp::traits::SetterInput<Owned<>> for Reader<'a,> {
|
||||||
fn set_pointer_builder(mut pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
|
fn set_pointer_builder(mut pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,8 +151,8 @@ pub mod log_event {
|
|||||||
::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None)
|
::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None)
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn set_id(&mut self, value: ::capnp::text::Reader<'_>) {
|
pub fn set_id(&mut self, value: impl ::capnp::traits::SetterInput<::capnp::text::Owned>) {
|
||||||
self.builder.reborrow().get_pointer_field(0).set_text(value);
|
::capnp::traits::SetterInput::set_pointer_builder(self.builder.reborrow().get_pointer_field(0), value, false).unwrap()
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn init_id(self, size: u32) -> ::capnp::text::Builder<'a> {
|
pub fn init_id(self, size: u32) -> ::capnp::text::Builder<'a> {
|
||||||
@ -167,8 +167,8 @@ pub mod log_event {
|
|||||||
::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None)
|
::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None)
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn set_author(&mut self, value: ::capnp::text::Reader<'_>) {
|
pub fn set_author(&mut self, value: impl ::capnp::traits::SetterInput<::capnp::text::Owned>) {
|
||||||
self.builder.reborrow().get_pointer_field(1).set_text(value);
|
::capnp::traits::SetterInput::set_pointer_builder(self.builder.reborrow().get_pointer_field(1), value, false).unwrap()
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn init_author(self, size: u32) -> ::capnp::text::Builder<'a> {
|
pub fn init_author(self, size: u32) -> ::capnp::text::Builder<'a> {
|
||||||
@ -183,8 +183,8 @@ pub mod log_event {
|
|||||||
::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None)
|
::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None)
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn set_content(&mut self, value: ::capnp::text::Reader<'_>) {
|
pub fn set_content(&mut self, value: impl ::capnp::traits::SetterInput<::capnp::text::Owned>) {
|
||||||
self.builder.reborrow().get_pointer_field(2).set_text(value);
|
::capnp::traits::SetterInput::set_pointer_builder(self.builder.reborrow().get_pointer_field(2), value, false).unwrap()
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn init_content(self, size: u32) -> ::capnp::text::Builder<'a> {
|
pub fn init_content(self, size: u32) -> ::capnp::text::Builder<'a> {
|
||||||
@ -309,9 +309,11 @@ pub mod log_event {
|
|||||||
encoded_node: &ENCODED_NODE,
|
encoded_node: &ENCODED_NODE,
|
||||||
nonunion_members: NONUNION_MEMBERS,
|
nonunion_members: NONUNION_MEMBERS,
|
||||||
members_by_discriminant: MEMBERS_BY_DISCRIMINANT,
|
members_by_discriminant: MEMBERS_BY_DISCRIMINANT,
|
||||||
|
members_by_name: MEMBERS_BY_NAME,
|
||||||
};
|
};
|
||||||
pub static NONUNION_MEMBERS : &[u16] = &[0,1,2,3];
|
pub static NONUNION_MEMBERS : &[u16] = &[0,1,2,3];
|
||||||
pub static MEMBERS_BY_DISCRIMINANT : &[u16] = &[];
|
pub static MEMBERS_BY_DISCRIMINANT : &[u16] = &[];
|
||||||
|
pub static MEMBERS_BY_NAME : &[u16] = &[1,2,3,0];
|
||||||
pub const TYPE_ID: u64 = 0xe78f_0c5b_590e_1932;
|
pub const TYPE_ID: u64 = 0xe78f_0c5b_590e_1932;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -421,7 +423,7 @@ pub mod agent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> {
|
impl <'a,> ::capnp::traits::SetterInput<Owned<>> for Reader<'a,> {
|
||||||
fn set_pointer_builder(mut pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
|
fn set_pointer_builder(mut pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -444,8 +446,8 @@ pub mod agent {
|
|||||||
::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None)
|
::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None)
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn set_name(&mut self, value: ::capnp::text::Reader<'_>) {
|
pub fn set_name(&mut self, value: impl ::capnp::traits::SetterInput<::capnp::text::Owned>) {
|
||||||
self.builder.reborrow().get_pointer_field(0).set_text(value);
|
::capnp::traits::SetterInput::set_pointer_builder(self.builder.reborrow().get_pointer_field(0), value, false).unwrap()
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn init_name(self, size: u32) -> ::capnp::text::Builder<'a> {
|
pub fn init_name(self, size: u32) -> ::capnp::text::Builder<'a> {
|
||||||
@ -513,9 +515,11 @@ pub mod agent {
|
|||||||
encoded_node: &ENCODED_NODE,
|
encoded_node: &ENCODED_NODE,
|
||||||
nonunion_members: NONUNION_MEMBERS,
|
nonunion_members: NONUNION_MEMBERS,
|
||||||
members_by_discriminant: MEMBERS_BY_DISCRIMINANT,
|
members_by_discriminant: MEMBERS_BY_DISCRIMINANT,
|
||||||
|
members_by_name: MEMBERS_BY_NAME,
|
||||||
};
|
};
|
||||||
pub static NONUNION_MEMBERS : &[u16] = &[0];
|
pub static NONUNION_MEMBERS : &[u16] = &[0];
|
||||||
pub static MEMBERS_BY_DISCRIMINANT : &[u16] = &[];
|
pub static MEMBERS_BY_DISCRIMINANT : &[u16] = &[];
|
||||||
|
pub static MEMBERS_BY_NAME : &[u16] = &[0];
|
||||||
pub const TYPE_ID: u64 = 0xf4a4_cb97_342c_81a0;
|
pub const TYPE_ID: u64 = 0xf4a4_cb97_342c_81a0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -633,7 +637,7 @@ pub mod lease {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> {
|
impl <'a,> ::capnp::traits::SetterInput<Owned<>> for Reader<'a,> {
|
||||||
fn set_pointer_builder(mut pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
|
fn set_pointer_builder(mut pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -656,8 +660,8 @@ pub mod lease {
|
|||||||
::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None)
|
::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None)
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn set_id(&mut self, value: ::capnp::text::Reader<'_>) {
|
pub fn set_id(&mut self, value: impl ::capnp::traits::SetterInput<::capnp::text::Owned>) {
|
||||||
self.builder.reborrow().get_pointer_field(0).set_text(value);
|
::capnp::traits::SetterInput::set_pointer_builder(self.builder.reborrow().get_pointer_field(0), value, false).unwrap()
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn init_id(self, size: u32) -> ::capnp::text::Builder<'a> {
|
pub fn init_id(self, size: u32) -> ::capnp::text::Builder<'a> {
|
||||||
@ -672,8 +676,8 @@ pub mod lease {
|
|||||||
::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None)
|
::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None)
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn set_lease(&mut self, value: ::capnp::text::Reader<'_>) {
|
pub fn set_lease(&mut self, value: impl ::capnp::traits::SetterInput<::capnp::text::Owned>) {
|
||||||
self.builder.reborrow().get_pointer_field(1).set_text(value);
|
::capnp::traits::SetterInput::set_pointer_builder(self.builder.reborrow().get_pointer_field(1), value, false).unwrap()
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn init_lease(self, size: u32) -> ::capnp::text::Builder<'a> {
|
pub fn init_lease(self, size: u32) -> ::capnp::text::Builder<'a> {
|
||||||
@ -757,9 +761,11 @@ pub mod lease {
|
|||||||
encoded_node: &ENCODED_NODE,
|
encoded_node: &ENCODED_NODE,
|
||||||
nonunion_members: NONUNION_MEMBERS,
|
nonunion_members: NONUNION_MEMBERS,
|
||||||
members_by_discriminant: MEMBERS_BY_DISCRIMINANT,
|
members_by_discriminant: MEMBERS_BY_DISCRIMINANT,
|
||||||
|
members_by_name: MEMBERS_BY_NAME,
|
||||||
};
|
};
|
||||||
pub static NONUNION_MEMBERS : &[u16] = &[0,1];
|
pub static NONUNION_MEMBERS : &[u16] = &[0,1];
|
||||||
pub static MEMBERS_BY_DISCRIMINANT : &[u16] = &[];
|
pub static MEMBERS_BY_DISCRIMINANT : &[u16] = &[];
|
||||||
|
pub static MEMBERS_BY_NAME : &[u16] = &[0,1];
|
||||||
pub const TYPE_ID: u64 = 0xb0d6_0854_c50e_5662;
|
pub const TYPE_ID: u64 = 0xb0d6_0854_c50e_5662;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ use event::EventService;
|
|||||||
use lease::LeaseService;
|
use lease::LeaseService;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
use tokio::net::TcpListener;
|
||||||
|
|
||||||
use crate::db::Db;
|
use crate::db::Db;
|
||||||
|
|
||||||
@ -94,8 +95,8 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
tracing::info!("churn server listening on {}", host);
|
tracing::info!("churn server listening on {}", host);
|
||||||
axum::Server::bind(&host)
|
let listener = TcpListener::bind(&host).await?;
|
||||||
.serve(app.into_make_service())
|
axum::serve(listener, app.into_make_service())
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,6 @@ edition = "2021"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
dagger-sdk = "0.9.8"
|
dagger-sdk = "0.9.8"
|
||||||
dagger-rust = "0.2.0"
|
dagger-rust = {git = "https://git.front.kjuulh.io/kjuulh/dagger-components.git", ref = "main"}
|
||||||
tokio.workspace = true
|
tokio.workspace = true
|
||||||
eyre = "*"
|
eyre = "*"
|
||||||
|
@ -19,21 +19,22 @@ async fn main() -> eyre::Result<()> {
|
|||||||
let server = server
|
let server = server
|
||||||
.with_env_variable("CHURN_DATABASE", "sled")
|
.with_env_variable("CHURN_DATABASE", "sled")
|
||||||
.with_env_variable("CHURN_SLED_PATH", "/mnt/sled")
|
.with_env_variable("CHURN_SLED_PATH", "/mnt/sled")
|
||||||
.with_mounted_cache("/mnt/sled", client.cache_volume("sled").id().await?)
|
.with_mounted_cache("/mnt/sled", client.cache_volume("sled"))
|
||||||
.with_exec(vec!["churn-server", "serve", "--host", "0.0.0.0:3000"])
|
.with_exec(vec!["churn-server", "serve", "--host", "0.0.0.0:3000"])
|
||||||
.with_exposed_port(3000);
|
.with_exposed_port(3000);
|
||||||
|
|
||||||
let server_id = server.id().await?;
|
let server_service = server.as_service();
|
||||||
|
|
||||||
let agent = build_container(client.clone(), "churn-agent").await?;
|
let agent = build_container(client.clone(), "churn-agent").await?;
|
||||||
let agent = agent
|
let agent = agent
|
||||||
.with_service_binding("churn-server", server_id.clone())
|
.with_service_binding("churn-server", server_service.clone())
|
||||||
.with_exec(vec!["churn-agent", "daemon", "--host", "0.0.0.0:3000"])
|
.with_exec(vec!["churn-agent", "daemon", "--host", "0.0.0.0:3000"])
|
||||||
.with_exposed_port(3000);
|
.with_exposed_port(3000);
|
||||||
|
let agent_service = agent.as_service();
|
||||||
|
|
||||||
let churning = cli
|
let churning = cli
|
||||||
.with_service_binding("churn-agent", agent.id().await?)
|
.with_service_binding("churn-agent", agent_service)
|
||||||
.with_service_binding("churn-server", server_id)
|
.with_service_binding("churn-server", server_service)
|
||||||
.with_env_variable("CHURN_SERVER", "http://churn-server:3000")
|
.with_env_variable("CHURN_SERVER", "http://churn-server:3000")
|
||||||
.with_env_variable("CHURN_SERVER_TOKEN", "something")
|
.with_env_variable("CHURN_SERVER_TOKEN", "something")
|
||||||
.with_env_variable("CHURN_AGENT", "http://churn-agent:3000")
|
.with_env_variable("CHURN_AGENT", "http://churn-agent:3000")
|
||||||
@ -52,7 +53,7 @@ async fn main() -> eyre::Result<()> {
|
|||||||
let stderr = churning.stderr().await?;
|
let stderr = churning.stderr().await?;
|
||||||
println!("{stderr}");
|
println!("{stderr}");
|
||||||
|
|
||||||
churning.exit_code().await?;
|
churning.sync().await?;
|
||||||
println!("Finished building churning...");
|
println!("Finished building churning...");
|
||||||
|
|
||||||
repl(churning).await?; //.with_entrypoint(vec!["churn"])).await?;
|
repl(churning).await?; //.with_entrypoint(vec!["churn"])).await?;
|
||||||
@ -90,7 +91,7 @@ async fn repl(container: dagger_sdk::Container) -> eyre::Result<()> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
match container.exit_code().await {
|
match container.sync().await {
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(_e) => {
|
Err(_e) => {
|
||||||
//eprintln!("encountred error: {}", e);
|
//eprintln!("encountred error: {}", e);
|
||||||
@ -101,10 +102,7 @@ async fn repl(container: dagger_sdk::Container) -> eyre::Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn build_container(
|
async fn build_container(client: Query, bin_name: &str) -> eyre::Result<dagger_sdk::Container> {
|
||||||
client: Arc<Query>,
|
|
||||||
bin_name: &str,
|
|
||||||
) -> eyre::Result<dagger_sdk::Container> {
|
|
||||||
let crates = &["crates/*", "ci"];
|
let crates = &["crates/*", "ci"];
|
||||||
let debian_deps = &[
|
let debian_deps = &[
|
||||||
"libssl-dev",
|
"libssl-dev",
|
||||||
|
Loading…
Reference in New Issue
Block a user