Let's start afresh

This commit is contained in:
Starbeamrainbowlabs 2021-09-30 21:31:38 +01:00
parent 12339aad90
commit cf3d3355ca
Signed by: sbrl
GPG key ID: 1BE5172E637709C2
10 changed files with 0 additions and 236 deletions

View file

@ -1,22 +0,0 @@
[package]
name = "systemquery"
version = "0.1.0"
authors = ["Starbeamrainbowlabs <sbrl@starbeamrainbowlabs.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
log = "0.4" # Apparently Rust has an entire logging setup - this is the base crate
pretty_env_logger = "0.4" # The logging implementation we've chosen for the above
clap = "2" # CLI argument parser
serde = { version = "1.0", features = ["derive"] } # Serialisation
serde_derive = "1.0" # Serialisation helper
toml = "0.5" # TOML serialisation module
tokio = { version = "1", features = ["full"] } # Async runtime
psk-client = { version = "0.1", features = ["vendored-openssl"] } # Pre-shared key TLS support

View file

@ -1,36 +0,0 @@
use tokio::net::{ TcpListener, TcpStream };
use crate::settings::Settings;
mod peer_connection;
use peer_connection::PeerConnection;
pub struct Agent {
settings: Settings,
listener: TcpListener,
peers: Vec<PeerConnection>
}
impl Agent {
pub async fn new(settings: Settings) {
let bind_address = settings.bind_address.clone();
let mut agent = Agent {
settings,
listener: match TcpListener::bind(bind_address.clone()).await {
Ok(listener) => listener,
Err(error) => panic!("Error: Failed to open socket using the address '{}': {}", bind_address, error)
},
peers: Vec::new()
};
loop {
let (client, _) = agent.listener.accept().await.unwrap();
let peer = PeerConnection::new(client);
agent.peers.push(peer);
}
}
}

View file

@ -1,34 +0,0 @@
use tokio::net::TcpStream;
use tokio::io::Interest;
use tokio::sync::oneshot;
pub struct PeerConnection {
send: oneshot::Sender<String>,
receive: oneshot::Receiver<String>
}
impl PeerConnection {
pub fn new(stream: TcpStream) -> PeerConnection {
let (in_tx1, in_rx1) = oneshot::channel();
let (out_tx2, out_rx2) = oneshot::channel();
let peer = PeerConnection { send: in_tx1, receive: out_rx2 };
tokio::spawn(async {
peer.handle(stream, in_rx1, out_tx2);
});
return peer;
}
pub async fn handle(&self,
stream: TcpStream,
stream_in: oneshot::Receiver<String>,
stream_out: oneshot::Sender<String>) {
let ready = stream.ready(Interest::READABLE | Interest::WRITABLE).await?;
if ready.is_readable() {
let mut data =
}
}
}

View file

@ -1,59 +0,0 @@
#[macro_use]
extern crate clap;
extern crate pretty_env_logger;
use std::process;
use clap::{ App, AppSettings, Arg, SubCommand };
mod settings;
mod agent;
fn main() {
// Initialise the logging system
pretty_env_logger::init();
let mut cli = App::new("systemquery")
.version(crate_version!())
.author("Starbeamrainbowlabs")
.about("Distributed system information query tool")
.global_settings(&[ AppSettings::ColoredHelp ])
.subcommand(SubCommand::with_name("agent")
.about("Starts the systemquery agent")
.arg(Arg::with_name("config")
.short("c").long("config")
.value_name("path/to/config.toml")
.help("Specifies the config file location")
.takes_value(true)
.default_value("/etc/systemquery/systemquery.toml")))
.subcommand(SubCommand::with_name("query")
.about("Query the cluster [requires agent to be running on this host]")
.arg(Arg::with_name("address")
.short("a").long("address")
.takes_value(true)
.help("Address of the agent to connect to")
.takes_value(true)
.default_value("unix-abstract:systemquery")));
let args = cli.clone().get_matches();
match args.subcommand_name() {
Some("agent") => {
println!("Coming soon :-)");
},
Some("query") => {
println!("Coming soon :-)");
},
None => {
cli.print_help().ok();
println!("\n");
process::exit(0);
},
_ => {
println!("Error: Unknown subcommand {}", args.subcommand_name().unwrap());
process::exit(1);
}
}
}

View file

@ -1,6 +0,0 @@
pub struct JoinRequest {
hostname: String,
datetime: Date
}

View file

@ -1 +0,0 @@
pub mod messages;

View file

@ -1,20 +0,0 @@
use serde::{ Serialize, Deserialize };
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Settings {
pub bind_address : String,
pub port : i16,
pub secret_join : String,
pub secret_query : String
}
impl Default for Settings {
fn default() -> Settings {
Settings {
bind_address: "127.0.0.1".to_string(),
port: 3015,
secret_join: "CHANGE_ME".to_string(),
secret_query: "CHANGE_ME".to_string()
}
}
}

View file

@ -1,32 +0,0 @@
use std::fs;
// for toml::toml!, which are aren't currently using
// #[macro_use]
// use toml;
mod definitions;
pub use definitions::Settings;
impl Settings {
pub fn new() -> Settings {
Settings::default()
}
/// Creates a new Settings object from the contents of a given (TOML) file.
pub fn from_file(filename : String) -> Settings {
let config_str = match fs::read_to_string(&filename) {
Ok(str) => str,
Err(error) => {
// println!("{}", error);
panic!("{}", error); // Oops, something went wrong while reading the config file
}
};
let config_obj : Settings = toml::from_str(&config_str).unwrap();
// info!("{:?}", config_obj);
return config_obj;
}
}

View file

@ -1,25 +0,0 @@
use tokio::sync::oneshot::{ Sender, Receiver };
struct SingleChannel<T> {
tx: Sender<T>,
rx: Receiver<T>
}
impl Default for SingleChannel {
fn default() -> SingleChannel {
let (tx, rx) = oneshot::channel();
SingleChannel { tx, rx }
}
}
struct DualChannel<T> {
left: SingleChannel<T>,
right: SingleChannel<T>
}
impl Default for DualChannel {
fn default() -> DualChannel {
DualChannel { left: SingleChannel::default(), right: SingleChannel::default() };
}
}

View file

@ -1 +0,0 @@