setup
parent
f503d2952b
commit
6f9bb82136
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Template .env
|
||||||
|
|
||||||
|
# Url to Monitoring-System (main configs distributor) web-socket
|
||||||
|
CONFIG_SERVER_CREDS = "ws://ip.ip.ip.ip:port"
|
||||||
|
# Path (full or right relative) to the API-grabber socket file
|
||||||
|
# Using internal HTTP API across Unix-Socket
|
||||||
|
API_GRUBBER_SOCKET = "api-grub.sock"
|
||||||
|
|
@ -10,7 +10,6 @@ serde = { version = "1.0.217", features = ["derive"] }
|
||||||
serde_json = "1.0.135"
|
serde_json = "1.0.135"
|
||||||
tokio = { version = "1.43.0", features = ["full"] }
|
tokio = { version = "1.43.0", features = ["full"] }
|
||||||
tokio-websockets = { version = "^0.11.0", features = ["client", "openssl", "rand"] }
|
tokio-websockets = { version = "^0.11.0", features = ["client", "openssl", "rand"] }
|
||||||
integr-structs = {path = "../integr-structs"}
|
|
||||||
anyhow = "1.0.95"
|
anyhow = "1.0.95"
|
||||||
env_logger = "0.11.6"
|
env_logger = "0.11.6"
|
||||||
log = "0.4.25"
|
log = "0.4.25"
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,8 @@
|
||||||
// using Unix-Socket Client
|
// using Unix-Socket Client
|
||||||
|
|
||||||
use anyhow::{Error, Result};
|
use anyhow::{Error, Result};
|
||||||
use integr_structs::api::ApiConfigV2;
|
// use integr_structs::api::ApiConfigV2;
|
||||||
|
use crate::structs::ApiConfigV2;
|
||||||
use tokio::time::{sleep, Duration};
|
use tokio::time::{sleep, Duration};
|
||||||
use tokio::net::UnixStream;
|
use tokio::net::UnixStream;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use tokio::sync::mpsc::Sender;
|
use tokio::sync::mpsc::Sender;
|
||||||
use integr_structs::api::ApiConfigV2;
|
// use integr_structs::api::ApiConfigV2;
|
||||||
|
use crate::structs::ApiConfigV2;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use tokio::time::{sleep, Duration};
|
use tokio::time::{sleep, Duration};
|
||||||
// mock
|
// mock
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
mod delivery;
|
mod delivery;
|
||||||
mod integration;
|
mod integration;
|
||||||
mod logger;
|
mod logger;
|
||||||
|
mod structs;
|
||||||
|
|
||||||
use integr_structs::api::ApiConfigV2;
|
// use integr_structs::api::ApiConfigV2;
|
||||||
|
use structs::ApiConfigV2;
|
||||||
use logger::setup_logger;
|
use logger::setup_logger;
|
||||||
use dotenv::dotenv;
|
use dotenv::dotenv;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
use core::sync;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
use serde_json::{ to_string_pretty, Value };
|
||||||
|
use anyhow::Result;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
|
||||||
|
// v2
|
||||||
|
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
||||||
|
pub struct ApiConfigV2 {
|
||||||
|
pub id : u64,
|
||||||
|
#[serde(default)]
|
||||||
|
pub template : Vec<Template>,
|
||||||
|
pub ip_address : String,
|
||||||
|
pub login : Option<String>,
|
||||||
|
pub pass : Option<String>,
|
||||||
|
pub api_key : Option<String>,
|
||||||
|
pub period : u32, // if "0" -> inf
|
||||||
|
pub timeout : u32, // if "0" -> no-delay
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for ApiConfigV2 {
|
||||||
|
fn default() -> Self {
|
||||||
|
ApiConfigV2 {
|
||||||
|
id : 0,
|
||||||
|
template : Vec::new(),
|
||||||
|
ip_address : String::from("no_ip"),
|
||||||
|
login : None,
|
||||||
|
pass : None,
|
||||||
|
api_key : None,
|
||||||
|
period : 0,
|
||||||
|
timeout : 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl ApiConfigV2 {
|
||||||
|
pub fn template() -> Self {
|
||||||
|
ApiConfigV2 {
|
||||||
|
id : 1111,
|
||||||
|
template : Vec::new(),
|
||||||
|
ip_address : String::from("ip"),
|
||||||
|
login : None,
|
||||||
|
pass : None,
|
||||||
|
api_key : None,
|
||||||
|
period : 1111,
|
||||||
|
timeout : 1111,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn pattern() -> Self {
|
||||||
|
ApiConfigV2 {
|
||||||
|
id : 1111,
|
||||||
|
template : vec![
|
||||||
|
Template {
|
||||||
|
id : String::from("no id"),
|
||||||
|
name : String::from("open api"),
|
||||||
|
url : String::from("https://dummy-json.mock.beeceptor.com/countries"),
|
||||||
|
method : String::from("GET"),
|
||||||
|
measure : Vec::new(),
|
||||||
|
}
|
||||||
|
],
|
||||||
|
ip_address : String::from("ip"),
|
||||||
|
login : None,
|
||||||
|
pass : None,
|
||||||
|
api_key : None,
|
||||||
|
period : 1,
|
||||||
|
timeout : 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
|
||||||
|
pub struct Template {
|
||||||
|
pub id : String,
|
||||||
|
pub name : String,
|
||||||
|
pub url : String,
|
||||||
|
pub method : String,
|
||||||
|
#[serde(default)]
|
||||||
|
pub measure : Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for Template {
|
||||||
|
fn default() -> Self {
|
||||||
|
Template {
|
||||||
|
id : String::from("no-id"),
|
||||||
|
name : String::from("no-name"),
|
||||||
|
url : String::from("no-url"),
|
||||||
|
method : String::from("post"),
|
||||||
|
measure : Vec::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
|
pub struct ProcessedEndpoint {
|
||||||
|
id : String,
|
||||||
|
name : String,
|
||||||
|
url : String,
|
||||||
|
method : String,
|
||||||
|
#[serde(default)]
|
||||||
|
metrics : HashMap<String, Value>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ProcessedEndpoint {
|
||||||
|
pub fn new(id: &str, name: &str, url: &str, method: &str, metrics: HashMap<String, Value>) -> Self {
|
||||||
|
ProcessedEndpoint {
|
||||||
|
id : id.to_owned(),
|
||||||
|
name : name.to_owned(),
|
||||||
|
url : url.to_owned(),
|
||||||
|
method : method.to_owned(),
|
||||||
|
metrics : metrics,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn from_target_response(response: &str, keys: &Template) -> Result<String> {
|
||||||
|
let mut hm: HashMap<String, Value> = HashMap::new();
|
||||||
|
let mut response: Value = serde_json::from_str(response)?;
|
||||||
|
|
||||||
|
let _ = keys.measure.iter()
|
||||||
|
.map(|key| (key, response[key].take()))
|
||||||
|
.for_each(|(key, value)| {
|
||||||
|
hm.insert(key.clone(), value);
|
||||||
|
});
|
||||||
|
let val = ProcessedEndpoint::new(&keys.id, &keys.name, &keys.url, &keys.method,hm);
|
||||||
|
Ok(to_string_pretty(&val)?)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue