Refactor app engine resource units
updated app proto file to mib fixed all tests and migrations removed unused price calculation functions modified mock data
This commit is contained in:
parent
1ca66f3bc3
commit
46ba0961bf
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -1011,7 +1011,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "detee-shared"
|
name = "detee-shared"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+ssh://git@gitea.detee.cloud/testnet/proto?branch=credits-v2#6d377926408953e8da2c0f4c6625d4fb90ba7652"
|
source = "git+ssh://git@gitea.detee.cloud/testnet/proto?branch=credits_app#2fb91e5e876f28f4d7092c7fed0efc93f06111ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 2.0.1",
|
"bincode 2.0.1",
|
||||||
"prost",
|
"prost",
|
||||||
|
@ -15,7 +15,7 @@ serde_yaml = "0.9.34"
|
|||||||
surrealdb = "2.2.2"
|
surrealdb = "2.2.2"
|
||||||
tokio = { version = "1.44.2", features = ["macros", "rt-multi-thread"] }
|
tokio = { version = "1.44.2", features = ["macros", "rt-multi-thread"] }
|
||||||
tonic = { version = "0.12", features = ["tls"] }
|
tonic = { version = "0.12", features = ["tls"] }
|
||||||
detee-shared = { git = "ssh://git@gitea.detee.cloud/testnet/proto", branch = "credits-v2" }
|
detee-shared = { git = "ssh://git@gitea.detee.cloud/testnet/proto", branch = "credits_app" }
|
||||||
ed25519-dalek = "2.1.1"
|
ed25519-dalek = "2.1.1"
|
||||||
bs58 = "0.5.1"
|
bs58 = "0.5.1"
|
||||||
tokio-stream = "0.1.17"
|
tokio-stream = "0.1.17"
|
||||||
|
@ -25,9 +25,9 @@ pub struct AppNode {
|
|||||||
pub region: String,
|
pub region: String,
|
||||||
pub city: String,
|
pub city: String,
|
||||||
pub ip: String,
|
pub ip: String,
|
||||||
pub avail_mem_mb: u32,
|
pub avail_mem_mib: u32,
|
||||||
pub avail_vcpus: u32,
|
pub avail_vcpus: u32,
|
||||||
pub avail_storage_gbs: u32,
|
pub avail_storage_mib: u32,
|
||||||
pub avail_ports: u32,
|
pub avail_ports: u32,
|
||||||
pub max_ports_per_app: u32,
|
pub max_ports_per_app: u32,
|
||||||
pub price: u64,
|
pub price: u64,
|
||||||
@ -72,9 +72,9 @@ pub struct NewAppReq {
|
|||||||
pub mr_enclave: String,
|
pub mr_enclave: String,
|
||||||
pub hratls_pubkey: String,
|
pub hratls_pubkey: String,
|
||||||
pub ports: Vec<u32>,
|
pub ports: Vec<u32>,
|
||||||
pub memory_mb: u32,
|
pub memory_mib: u32,
|
||||||
pub vcpus: u32,
|
pub vcpus: u32,
|
||||||
pub disk_size_gb: u32,
|
pub disk_size_mib: u32,
|
||||||
pub locked_nano: u64,
|
pub locked_nano: u64,
|
||||||
pub price_per_unit: u64,
|
pub price_per_unit: u64,
|
||||||
pub error: String,
|
pub error: String,
|
||||||
@ -165,12 +165,12 @@ impl NewAppReq {
|
|||||||
->$app_node
|
->$app_node
|
||||||
CONTENT {{
|
CONTENT {{
|
||||||
created_at: time::now(), app_name: $app_name, package_url: $package_url,
|
created_at: time::now(), app_name: $app_name, package_url: $package_url,
|
||||||
mr_enclave: $mr_enclave, hratls_pubkey: $hratls_pubkey, ports: {:?}, memory_mb: {},
|
mr_enclave: $mr_enclave, hratls_pubkey: $hratls_pubkey, ports: {:?}, memory_mib: {},
|
||||||
vcpus: {}, disk_size_gb: {}, locked_nano: {locked_nano}, price_per_unit: {}, error: '',
|
vcpus: {}, disk_size_mib: {}, locked_nano: {locked_nano}, price_per_unit: {}, error: '',
|
||||||
}};
|
}};
|
||||||
|
|
||||||
COMMIT TRANSACTION;",
|
COMMIT TRANSACTION;",
|
||||||
self.ports, self.memory_mb, self.vcpus, self.disk_size_gb, self.price_per_unit);
|
self.ports, self.memory_mib, self.vcpus, self.disk_size_mib, self.price_per_unit);
|
||||||
|
|
||||||
log::trace!("submit_new_app_req query: {tx_query}");
|
log::trace!("submit_new_app_req query: {tx_query}");
|
||||||
|
|
||||||
@ -212,9 +212,9 @@ pub struct AppNodeWithReports {
|
|||||||
pub region: String,
|
pub region: String,
|
||||||
pub city: String,
|
pub city: String,
|
||||||
pub ip: String,
|
pub ip: String,
|
||||||
pub avail_mem_mb: u32,
|
pub avail_mem_mib: u32,
|
||||||
pub avail_vcpus: u32,
|
pub avail_vcpus: u32,
|
||||||
pub avail_storage_gbs: u32,
|
pub avail_storage_mib: u32,
|
||||||
pub avail_ports: u32,
|
pub avail_ports: u32,
|
||||||
pub max_ports_per_app: u32,
|
pub max_ports_per_app: u32,
|
||||||
pub price: u64,
|
pub price: u64,
|
||||||
@ -233,13 +233,13 @@ impl AppNodeWithReports {
|
|||||||
avail_ports >= {} &&
|
avail_ports >= {} &&
|
||||||
max_ports_per_app >= {} &&
|
max_ports_per_app >= {} &&
|
||||||
avail_vcpus >= {} &&
|
avail_vcpus >= {} &&
|
||||||
avail_mem_mb >= {} &&
|
avail_mem_mib >= {} &&
|
||||||
avail_storage_gbs >= {} ",
|
avail_storage_mib >= {} ",
|
||||||
filters.free_ports,
|
filters.free_ports,
|
||||||
filters.free_ports,
|
filters.free_ports,
|
||||||
filters.vcpus,
|
filters.vcpus,
|
||||||
filters.memory_mb,
|
filters.memory_mib,
|
||||||
filters.storage_gb
|
filters.storage_mib
|
||||||
);
|
);
|
||||||
|
|
||||||
// TODO: bind all strings
|
// TODO: bind all strings
|
||||||
@ -278,8 +278,8 @@ pub struct ActiveApp {
|
|||||||
pub mapped_ports: Vec<(u32, u32)>,
|
pub mapped_ports: Vec<(u32, u32)>,
|
||||||
pub host_ipv4: String,
|
pub host_ipv4: String,
|
||||||
pub vcpus: u32,
|
pub vcpus: u32,
|
||||||
pub memory_mb: u32,
|
pub memory_mib: u32,
|
||||||
pub disk_size_gb: u32,
|
pub disk_size_mib: u32,
|
||||||
pub created_at: Datetime,
|
pub created_at: Datetime,
|
||||||
pub price_per_unit: u64,
|
pub price_per_unit: u64,
|
||||||
pub locked_nano: u64,
|
pub locked_nano: u64,
|
||||||
@ -299,8 +299,8 @@ impl From<ActiveApp> for DeletedApp {
|
|||||||
mapped_ports: value.mapped_ports,
|
mapped_ports: value.mapped_ports,
|
||||||
host_ipv4: value.host_ipv4,
|
host_ipv4: value.host_ipv4,
|
||||||
vcpus: value.vcpus,
|
vcpus: value.vcpus,
|
||||||
memory_mb: value.memory_mb,
|
memory_mib: value.memory_mib,
|
||||||
disk_size_gb: value.disk_size_gb,
|
disk_size_mib: value.disk_size_mib,
|
||||||
created_at: value.created_at,
|
created_at: value.created_at,
|
||||||
price_per_unit: value.price_per_unit,
|
price_per_unit: value.price_per_unit,
|
||||||
mr_enclave: value.mr_enclave,
|
mr_enclave: value.mr_enclave,
|
||||||
@ -311,15 +311,6 @@ impl From<ActiveApp> for DeletedApp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ActiveApp {
|
impl ActiveApp {
|
||||||
pub fn price_per_minute(&self) -> u64 {
|
|
||||||
(self.total_units() * self.price_per_unit as f64) as u64
|
|
||||||
}
|
|
||||||
|
|
||||||
fn total_units(&self) -> f64 {
|
|
||||||
// TODO: Optimize this based on price of hardware.
|
|
||||||
(self.vcpus as f64 * 5f64) + (self.memory_mb as f64 / 200f64) + (self.disk_size_gb as f64)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn get_by_uuid(db: &Surreal<Client>, uuid: &str) -> Result<Option<Self>, Error> {
|
pub async fn get_by_uuid(db: &Surreal<Client>, uuid: &str) -> Result<Option<Self>, Error> {
|
||||||
let contract: Option<Self> = db
|
let contract: Option<Self> = db
|
||||||
.query("select * from $active_app_id;".to_string())
|
.query("select * from $active_app_id;".to_string())
|
||||||
@ -352,8 +343,8 @@ impl ActiveApp {
|
|||||||
mapped_ports,
|
mapped_ports,
|
||||||
host_ipv4: new_app_res.ip_address,
|
host_ipv4: new_app_res.ip_address,
|
||||||
vcpus: new_app_req.vcpus,
|
vcpus: new_app_req.vcpus,
|
||||||
memory_mb: new_app_req.memory_mb,
|
memory_mib: new_app_req.memory_mib,
|
||||||
disk_size_gb: new_app_req.disk_size_gb,
|
disk_size_mib: new_app_req.disk_size_mib,
|
||||||
created_at: new_app_req.created_at.clone(),
|
created_at: new_app_req.created_at.clone(),
|
||||||
price_per_unit: new_app_req.price_per_unit,
|
price_per_unit: new_app_req.price_per_unit,
|
||||||
locked_nano: new_app_req.locked_nano,
|
locked_nano: new_app_req.locked_nano,
|
||||||
@ -367,7 +358,7 @@ impl ActiveApp {
|
|||||||
let locked_nano = active_app.locked_nano;
|
let locked_nano = active_app.locked_nano;
|
||||||
|
|
||||||
let _: Vec<ActiveApp> = db.insert(()).relation(active_app).await?;
|
let _: Vec<ActiveApp> = db.insert(()).relation(active_app).await?;
|
||||||
NewAppReq::delete(&db, &new_app_res.uuid).await?;
|
NewAppReq::delete(db, &new_app_res.uuid).await?;
|
||||||
db.query(format!("UPDATE {ACCOUNT}:{admin_account} SET tmp_locked -= {locked_nano};"))
|
db.query(format!("UPDATE {ACCOUNT}:{admin_account} SET tmp_locked -= {locked_nano};"))
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
@ -498,8 +489,8 @@ pub struct ActiveAppWithNode {
|
|||||||
pub mapped_ports: Vec<(u32, u32)>,
|
pub mapped_ports: Vec<(u32, u32)>,
|
||||||
pub host_ipv4: String,
|
pub host_ipv4: String,
|
||||||
pub vcpus: u32,
|
pub vcpus: u32,
|
||||||
pub memory_mb: u32,
|
pub memory_mib: u32,
|
||||||
pub disk_size_gb: u32,
|
pub disk_size_mib: u32,
|
||||||
pub created_at: Datetime,
|
pub created_at: Datetime,
|
||||||
pub price_per_unit: u64,
|
pub price_per_unit: u64,
|
||||||
pub locked_nano: u64,
|
pub locked_nano: u64,
|
||||||
@ -519,8 +510,8 @@ impl From<ActiveAppWithNode> for ActiveApp {
|
|||||||
mapped_ports: val.mapped_ports,
|
mapped_ports: val.mapped_ports,
|
||||||
host_ipv4: val.host_ipv4,
|
host_ipv4: val.host_ipv4,
|
||||||
vcpus: val.vcpus,
|
vcpus: val.vcpus,
|
||||||
memory_mb: val.memory_mb,
|
memory_mib: val.memory_mib,
|
||||||
disk_size_gb: val.disk_size_gb,
|
disk_size_mib: val.disk_size_mib,
|
||||||
created_at: val.created_at,
|
created_at: val.created_at,
|
||||||
price_per_unit: val.price_per_unit,
|
price_per_unit: val.price_per_unit,
|
||||||
locked_nano: val.locked_nano,
|
locked_nano: val.locked_nano,
|
||||||
@ -599,8 +590,8 @@ impl ActiveAppWithNode {
|
|||||||
pub struct AppNodeResources {
|
pub struct AppNodeResources {
|
||||||
pub avail_ports: u32,
|
pub avail_ports: u32,
|
||||||
pub avail_vcpus: u32,
|
pub avail_vcpus: u32,
|
||||||
pub avail_mem_mb: u32,
|
pub avail_mem_mib: u32,
|
||||||
pub avail_storage_gbs: u32,
|
pub avail_storage_mib: u32,
|
||||||
pub max_ports_per_app: u32,
|
pub max_ports_per_app: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -628,9 +619,9 @@ impl From<&old_brain::BrainData> for Vec<AppNode> {
|
|||||||
region: old_node.region.clone(),
|
region: old_node.region.clone(),
|
||||||
city: old_node.city.clone(),
|
city: old_node.city.clone(),
|
||||||
ip: old_node.ip.clone(),
|
ip: old_node.ip.clone(),
|
||||||
avail_mem_mb: old_node.avail_mem_mb,
|
avail_mem_mib: old_node.avail_mem_mib,
|
||||||
avail_vcpus: old_node.avail_vcpus,
|
avail_vcpus: old_node.avail_vcpus,
|
||||||
avail_storage_gbs: old_node.avail_storage_mb,
|
avail_storage_mib: old_node.avail_storage_mib,
|
||||||
avail_ports: old_node.avail_no_of_port,
|
avail_ports: old_node.avail_no_of_port,
|
||||||
max_ports_per_app: old_node.max_ports_per_app,
|
max_ports_per_app: old_node.max_ports_per_app,
|
||||||
price: old_node.price,
|
price: old_node.price,
|
||||||
@ -664,9 +655,9 @@ impl From<&old_brain::BrainData> for Vec<ActiveApp> {
|
|||||||
app_node: RecordId::from((APP_NODE, old_c.node_pubkey.clone())),
|
app_node: RecordId::from((APP_NODE, old_c.node_pubkey.clone())),
|
||||||
mapped_ports,
|
mapped_ports,
|
||||||
host_ipv4: old_c.host_ipv4.clone(),
|
host_ipv4: old_c.host_ipv4.clone(),
|
||||||
disk_size_gb: old_c.disk_size_mb * 1024,
|
disk_size_mib: old_c.disk_size_mib,
|
||||||
vcpus: old_c.vcpus,
|
vcpus: old_c.vcpus,
|
||||||
memory_mb: old_c.memory_mb,
|
memory_mib: old_c.memory_mib,
|
||||||
price_per_unit: old_c.price_per_unit,
|
price_per_unit: old_c.price_per_unit,
|
||||||
locked_nano: old_c.locked_nano,
|
locked_nano: old_c.locked_nano,
|
||||||
created_at: old_c.created_at.into(),
|
created_at: old_c.created_at.into(),
|
||||||
@ -692,8 +683,8 @@ pub struct DeletedApp {
|
|||||||
pub mapped_ports: Vec<(u32, u32)>,
|
pub mapped_ports: Vec<(u32, u32)>,
|
||||||
pub host_ipv4: String,
|
pub host_ipv4: String,
|
||||||
pub vcpus: u32,
|
pub vcpus: u32,
|
||||||
pub memory_mb: u32,
|
pub memory_mib: u32,
|
||||||
pub disk_size_gb: u32,
|
pub disk_size_mib: u32,
|
||||||
pub created_at: Datetime,
|
pub created_at: Datetime,
|
||||||
pub price_per_unit: u64,
|
pub price_per_unit: u64,
|
||||||
pub mr_enclave: String,
|
pub mr_enclave: String,
|
||||||
|
@ -1013,9 +1013,9 @@ impl From<&old_brain::BrainData> for Vec<VmNode> {
|
|||||||
region: old_node.region.clone(),
|
region: old_node.region.clone(),
|
||||||
city: old_node.city.clone(),
|
city: old_node.city.clone(),
|
||||||
ip: old_node.ip.clone(),
|
ip: old_node.ip.clone(),
|
||||||
avail_mem_mib: old_node.avail_mem_mb,
|
avail_mem_mib: old_node.avail_mem_mib,
|
||||||
avail_vcpus: old_node.avail_vcpus,
|
avail_vcpus: old_node.avail_vcpus,
|
||||||
avail_storage_mib: old_node.avail_storage_gbs,
|
avail_storage_mib: old_node.avail_storage_mib,
|
||||||
avail_ipv4: old_node.avail_ipv4,
|
avail_ipv4: old_node.avail_ipv4,
|
||||||
avail_ipv6: old_node.avail_ipv6,
|
avail_ipv6: old_node.avail_ipv6,
|
||||||
avail_ports: old_node.avail_ports,
|
avail_ports: old_node.avail_ports,
|
||||||
@ -1045,9 +1045,9 @@ impl From<&old_brain::BrainData> for Vec<ActiveVm> {
|
|||||||
mapped_ports,
|
mapped_ports,
|
||||||
public_ipv4: old_c.public_ipv4.clone(),
|
public_ipv4: old_c.public_ipv4.clone(),
|
||||||
public_ipv6: old_c.public_ipv6.clone(),
|
public_ipv6: old_c.public_ipv6.clone(),
|
||||||
disk_size_mib: old_c.disk_size_gb,
|
disk_size_mib: old_c.disk_size_mib,
|
||||||
vcpus: old_c.vcpus,
|
vcpus: old_c.vcpus,
|
||||||
memory_mib: old_c.memory_mb,
|
memory_mib: old_c.memory_mib,
|
||||||
dtrfs_sha: old_c.dtrfs_sha.clone(),
|
dtrfs_sha: old_c.dtrfs_sha.clone(),
|
||||||
kernel_sha: old_c.kernel_sha.clone(),
|
kernel_sha: old_c.kernel_sha.clone(),
|
||||||
price_per_unit: old_c.price_per_unit,
|
price_per_unit: old_c.price_per_unit,
|
||||||
|
@ -52,9 +52,9 @@ impl BrainAppDaemon for AppDaemonServer {
|
|||||||
ip: req.main_ip,
|
ip: req.main_ip,
|
||||||
price: req.price,
|
price: req.price,
|
||||||
|
|
||||||
avail_mem_mb: 0,
|
avail_mem_mib: 0,
|
||||||
avail_vcpus: 0,
|
avail_vcpus: 0,
|
||||||
avail_storage_gbs: 0,
|
avail_storage_mib: 0,
|
||||||
avail_ports: 0,
|
avail_ports: 0,
|
||||||
max_ports_per_app: 0,
|
max_ports_per_app: 0,
|
||||||
offline_minutes: 0,
|
offline_minutes: 0,
|
||||||
|
@ -280,8 +280,8 @@ impl From<db::ActiveAppWithNode> for AppContract {
|
|||||||
node_pubkey: value.app_node.id.key().to_string(),
|
node_pubkey: value.app_node.id.key().to_string(),
|
||||||
public_ipv4: value.host_ipv4,
|
public_ipv4: value.host_ipv4,
|
||||||
resource: Some(AppResource {
|
resource: Some(AppResource {
|
||||||
memory_mb: value.memory_mb,
|
memory_mib: value.memory_mib,
|
||||||
disk_size_gb: value.disk_size_gb,
|
disk_size_mib: value.disk_size_mib,
|
||||||
vcpus: value.vcpus,
|
vcpus: value.vcpus,
|
||||||
ports: value.mapped_ports.iter().map(|(_, g)| *g).collect(),
|
ports: value.mapped_ports.iter().map(|(_, g)| *g).collect(),
|
||||||
}),
|
}),
|
||||||
@ -322,9 +322,9 @@ impl From<NewAppReq> for db::NewAppReq {
|
|||||||
mr_enclave,
|
mr_enclave,
|
||||||
hratls_pubkey: val.hratls_pubkey,
|
hratls_pubkey: val.hratls_pubkey,
|
||||||
ports: resource.ports,
|
ports: resource.ports,
|
||||||
memory_mb: resource.memory_mb,
|
memory_mib: resource.memory_mib,
|
||||||
vcpus: resource.vcpus,
|
vcpus: resource.vcpus,
|
||||||
disk_size_gb: resource.disk_size_gb,
|
disk_size_mib: resource.disk_size_mib,
|
||||||
locked_nano: val.locked_nano,
|
locked_nano: val.locked_nano,
|
||||||
price_per_unit: val.price_per_unit,
|
price_per_unit: val.price_per_unit,
|
||||||
error: String::new(),
|
error: String::new(),
|
||||||
@ -337,8 +337,8 @@ impl From<db::NewAppReq> for NewAppReq {
|
|||||||
fn from(value: db::NewAppReq) -> Self {
|
fn from(value: db::NewAppReq) -> Self {
|
||||||
let resource = AppResource {
|
let resource = AppResource {
|
||||||
vcpus: value.vcpus,
|
vcpus: value.vcpus,
|
||||||
memory_mb: value.memory_mb,
|
memory_mib: value.memory_mib,
|
||||||
disk_size_gb: value.disk_size_gb,
|
disk_size_mib: value.disk_size_mib,
|
||||||
ports: value.ports,
|
ports: value.ports,
|
||||||
};
|
};
|
||||||
let mr_enclave = Some(hex::decode(value.mr_enclave).unwrap_or_default());
|
let mr_enclave = Some(hex::decode(value.mr_enclave).unwrap_or_default());
|
||||||
@ -382,8 +382,8 @@ impl From<AppNodeResources> for db::AppNodeResources {
|
|||||||
Self {
|
Self {
|
||||||
avail_ports: value.avail_no_of_port,
|
avail_ports: value.avail_no_of_port,
|
||||||
avail_vcpus: value.avail_vcpus,
|
avail_vcpus: value.avail_vcpus,
|
||||||
avail_mem_mb: value.avail_memory_mb,
|
avail_mem_mib: value.avail_memory_mib,
|
||||||
avail_storage_gbs: value.avail_storage_gb,
|
avail_storage_mib: value.avail_storage_mib,
|
||||||
max_ports_per_app: value.max_ports_per_app,
|
max_ports_per_app: value.max_ports_per_app,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,9 +37,9 @@ pub struct VmNode {
|
|||||||
pub region: String,
|
pub region: String,
|
||||||
pub city: String,
|
pub city: String,
|
||||||
pub ip: String,
|
pub ip: String,
|
||||||
pub avail_mem_mb: u32,
|
pub avail_mem_mib: u32,
|
||||||
pub avail_vcpus: u32,
|
pub avail_vcpus: u32,
|
||||||
pub avail_storage_gbs: u32,
|
pub avail_storage_mib: u32,
|
||||||
pub avail_ipv4: u32,
|
pub avail_ipv4: u32,
|
||||||
pub avail_ipv6: u32,
|
pub avail_ipv6: u32,
|
||||||
pub avail_ports: u32,
|
pub avail_ports: u32,
|
||||||
@ -60,9 +60,9 @@ pub struct VmContract {
|
|||||||
pub exposed_ports: Vec<u32>,
|
pub exposed_ports: Vec<u32>,
|
||||||
pub public_ipv4: String,
|
pub public_ipv4: String,
|
||||||
pub public_ipv6: String,
|
pub public_ipv6: String,
|
||||||
pub disk_size_gb: u32,
|
pub disk_size_mib: u32,
|
||||||
pub vcpus: u32,
|
pub vcpus: u32,
|
||||||
pub memory_mb: u32,
|
pub memory_mib: u32,
|
||||||
pub kernel_sha: String,
|
pub kernel_sha: String,
|
||||||
pub dtrfs_sha: String,
|
pub dtrfs_sha: String,
|
||||||
pub created_at: chrono::DateTime<Utc>,
|
pub created_at: chrono::DateTime<Utc>,
|
||||||
@ -82,9 +82,9 @@ pub struct AppContract {
|
|||||||
pub node_pubkey: String,
|
pub node_pubkey: String,
|
||||||
pub mapped_ports: Vec<(u16, u16)>,
|
pub mapped_ports: Vec<(u16, u16)>,
|
||||||
pub host_ipv4: String,
|
pub host_ipv4: String,
|
||||||
pub disk_size_mb: u32,
|
pub disk_size_mib: u32,
|
||||||
pub vcpus: u32,
|
pub vcpus: u32,
|
||||||
pub memory_mb: u32,
|
pub memory_mib: u32,
|
||||||
pub created_at: chrono::DateTime<Utc>,
|
pub created_at: chrono::DateTime<Utc>,
|
||||||
pub updated_at: chrono::DateTime<Utc>,
|
pub updated_at: chrono::DateTime<Utc>,
|
||||||
// price per unit per minute
|
// price per unit per minute
|
||||||
@ -105,9 +105,9 @@ pub struct AppNode {
|
|||||||
pub region: String,
|
pub region: String,
|
||||||
pub city: String,
|
pub city: String,
|
||||||
pub ip: String,
|
pub ip: String,
|
||||||
pub avail_mem_mb: u32,
|
pub avail_mem_mib: u32,
|
||||||
pub avail_vcpus: u32,
|
pub avail_vcpus: u32,
|
||||||
pub avail_storage_mb: u32,
|
pub avail_storage_mib: u32,
|
||||||
pub avail_no_of_port: u32,
|
pub avail_no_of_port: u32,
|
||||||
pub max_ports_per_app: u32,
|
pub max_ports_per_app: u32,
|
||||||
// nanotokens per unit per minute
|
// nanotokens per unit per minute
|
||||||
|
@ -33,8 +33,8 @@ DEFINE FUNCTION OVERWRITE fn::app_price_per_minute(
|
|||||||
LET $app = (select * from $app_id)[0];
|
LET $app = (select * from $app_id)[0];
|
||||||
RETURN
|
RETURN
|
||||||
(($app.vcpus * 5) +
|
(($app.vcpus * 5) +
|
||||||
($app.memory_mb / 200) +
|
($app.memory_mib / 200) +
|
||||||
($app.disk_size_gb / 10))
|
($app.disk_size_mib / 10))
|
||||||
* $app.price_per_unit;
|
* $app.price_per_unit;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -88,9 +88,9 @@ DEFINE FIELD country ON TABLE app_node TYPE string;
|
|||||||
DEFINE FIELD region ON TABLE app_node TYPE string;
|
DEFINE FIELD region ON TABLE app_node TYPE string;
|
||||||
DEFINE FIELD city ON TABLE app_node TYPE string;
|
DEFINE FIELD city ON TABLE app_node TYPE string;
|
||||||
DEFINE FIELD ip ON TABLE app_node TYPE string;
|
DEFINE FIELD ip ON TABLE app_node TYPE string;
|
||||||
DEFINE FIELD avail_mem_mb ON TABLE app_node TYPE int;
|
DEFINE FIELD avail_mem_mib ON TABLE app_node TYPE int;
|
||||||
DEFINE FIELD avail_vcpus ON TABLE app_node TYPE int;
|
DEFINE FIELD avail_vcpus ON TABLE app_node TYPE int;
|
||||||
DEFINE FIELD avail_storage_gbs ON TABLE app_node TYPE int;
|
DEFINE FIELD avail_storage_mib ON TABLE app_node TYPE int;
|
||||||
DEFINE FIELD avail_ports ON TABLE app_node TYPE int;
|
DEFINE FIELD avail_ports ON TABLE app_node TYPE int;
|
||||||
DEFINE FIELD max_ports_per_app ON TABLE app_node TYPE int;
|
DEFINE FIELD max_ports_per_app ON TABLE app_node TYPE int;
|
||||||
DEFINE FIELD price ON TABLE app_node TYPE int;
|
DEFINE FIELD price ON TABLE app_node TYPE int;
|
||||||
@ -102,9 +102,9 @@ DEFINE FIELD package_url ON TABLE new_app_req TYPE string;
|
|||||||
DEFINE FIELD mr_enclave ON TABLE new_app_req TYPE string;
|
DEFINE FIELD mr_enclave ON TABLE new_app_req TYPE string;
|
||||||
DEFINE FIELD hratls_pubkey ON TABLE new_app_req TYPE string;
|
DEFINE FIELD hratls_pubkey ON TABLE new_app_req TYPE string;
|
||||||
DEFINE FIELD ports ON TABLE new_app_req TYPE array<int>;
|
DEFINE FIELD ports ON TABLE new_app_req TYPE array<int>;
|
||||||
DEFINE FIELD memory_mb ON TABLE new_app_req TYPE int;
|
DEFINE FIELD memory_mib ON TABLE new_app_req TYPE int;
|
||||||
DEFINE FIELD vcpus ON TABLE new_app_req TYPE int;
|
DEFINE FIELD vcpus ON TABLE new_app_req TYPE int;
|
||||||
DEFINE FIELD disk_size_gb ON TABLE new_app_req TYPE int;
|
DEFINE FIELD disk_size_mib ON TABLE new_app_req TYPE int;
|
||||||
DEFINE FIELD locked_nano ON TABLE new_app_req TYPE int;
|
DEFINE FIELD locked_nano ON TABLE new_app_req TYPE int;
|
||||||
DEFINE FIELD price_per_unit ON TABLE new_app_req TYPE int;
|
DEFINE FIELD price_per_unit ON TABLE new_app_req TYPE int;
|
||||||
DEFINE FIELD error ON TABLE new_app_req TYPE string;
|
DEFINE FIELD error ON TABLE new_app_req TYPE string;
|
||||||
@ -115,8 +115,8 @@ DEFINE FIELD app_name ON TABLE active_app TYPE string;
|
|||||||
DEFINE FIELD mapped_ports ON TABLE active_app TYPE array<[int, int]>;
|
DEFINE FIELD mapped_ports ON TABLE active_app TYPE array<[int, int]>;
|
||||||
DEFINE FIELD host_ipv4 ON TABLE active_app TYPE string;
|
DEFINE FIELD host_ipv4 ON TABLE active_app TYPE string;
|
||||||
DEFINE FIELD vcpus ON TABLE active_app TYPE int;
|
DEFINE FIELD vcpus ON TABLE active_app TYPE int;
|
||||||
DEFINE FIELD memory_mb ON TABLE active_app TYPE int;
|
DEFINE FIELD memory_mib ON TABLE active_app TYPE int;
|
||||||
DEFINE FIELD disk_size_gb ON TABLE active_app TYPE int;
|
DEFINE FIELD disk_size_mib ON TABLE active_app TYPE int;
|
||||||
DEFINE FIELD created_at ON TABLE active_app TYPE datetime;
|
DEFINE FIELD created_at ON TABLE active_app TYPE datetime;
|
||||||
DEFINE FIELD price_per_unit ON TABLE active_app TYPE int;
|
DEFINE FIELD price_per_unit ON TABLE active_app TYPE int;
|
||||||
DEFINE FIELD locked_nano ON TABLE active_app TYPE int;
|
DEFINE FIELD locked_nano ON TABLE active_app TYPE int;
|
||||||
@ -130,8 +130,8 @@ DEFINE FIELD app_name ON TABLE deleted_app TYPE string;
|
|||||||
DEFINE FIELD mapped_ports ON TABLE deleted_app TYPE array<[int, int]>;
|
DEFINE FIELD mapped_ports ON TABLE deleted_app TYPE array<[int, int]>;
|
||||||
DEFINE FIELD host_ipv4 ON TABLE deleted_app TYPE string;
|
DEFINE FIELD host_ipv4 ON TABLE deleted_app TYPE string;
|
||||||
DEFINE FIELD vcpus ON TABLE deleted_app TYPE int;
|
DEFINE FIELD vcpus ON TABLE deleted_app TYPE int;
|
||||||
DEFINE FIELD memory_mb ON TABLE deleted_app TYPE int;
|
DEFINE FIELD memory_mib ON TABLE deleted_app TYPE int;
|
||||||
DEFINE FIELD disk_size_gb ON TABLE deleted_app TYPE int;
|
DEFINE FIELD disk_size_mib ON TABLE deleted_app TYPE int;
|
||||||
DEFINE FIELD created_at ON TABLE deleted_app TYPE datetime;
|
DEFINE FIELD created_at ON TABLE deleted_app TYPE datetime;
|
||||||
DEFINE FIELD deleted_at ON TABLE deleted_app TYPE datetime DEFAULT time::now();
|
DEFINE FIELD deleted_at ON TABLE deleted_app TYPE datetime DEFAULT time::now();
|
||||||
DEFINE FIELD price_per_unit ON TABLE deleted_app TYPE int;
|
DEFINE FIELD price_per_unit ON TABLE deleted_app TYPE int;
|
||||||
|
@ -13,8 +13,8 @@ async fn test_new_app_db_tx() {
|
|||||||
node_pubkey: "AH3SpV6ZjXMGSSe6xGH2ekUZxyUhnesAFz4LjX7PnvVn".to_string(),
|
node_pubkey: "AH3SpV6ZjXMGSSe6xGH2ekUZxyUhnesAFz4LjX7PnvVn".to_string(),
|
||||||
resource: Some(
|
resource: Some(
|
||||||
AppResource {
|
AppResource {
|
||||||
memory_mb: 1500,
|
memory_mib: 1500,
|
||||||
disk_size_gb: 2,
|
disk_size_mib: 2000,
|
||||||
vcpus: 1,
|
vcpus: 1,
|
||||||
ports: vec![ 8080 ],
|
ports: vec![ 8080 ],
|
||||||
},
|
},
|
||||||
|
@ -93,6 +93,7 @@ async fn test_app_creation() {
|
|||||||
db.select::<Option<db::ActiveApp>>((ACTIVE_APP, new_app_resp.uuid)).await.unwrap();
|
db.select::<Option<db::ActiveApp>>((ACTIVE_APP, new_app_resp.uuid)).await.unwrap();
|
||||||
assert!(active_app.is_some());
|
assert!(active_app.is_some());
|
||||||
|
|
||||||
|
tokio::time::sleep(std::time::Duration::from_millis(300)).await;
|
||||||
let acc_db: db::Account = db.select((ACCOUNT, key.pubkey.clone())).await.unwrap().unwrap();
|
let acc_db: db::Account = db.select((ACCOUNT, key.pubkey.clone())).await.unwrap().unwrap();
|
||||||
assert_eq!(acc_db.balance, airdrop_amount * TOKEN_DECIMAL - (locking_nano + 100));
|
assert_eq!(acc_db.balance, airdrop_amount * TOKEN_DECIMAL - (locking_nano + 100));
|
||||||
assert_eq!(acc_db.tmp_locked, 0);
|
assert_eq!(acc_db.tmp_locked, 0);
|
||||||
|
@ -102,8 +102,8 @@ async fn test_app_daemon_resource_msg() {
|
|||||||
node_pubkey: daemon_pubkey,
|
node_pubkey: daemon_pubkey,
|
||||||
avail_no_of_port: 5,
|
avail_no_of_port: 5,
|
||||||
avail_vcpus: 4,
|
avail_vcpus: 4,
|
||||||
avail_memory_mb: 8192,
|
avail_memory_mib: 8192,
|
||||||
avail_storage_gb: 100,
|
avail_storage_mib: 10_0000,
|
||||||
max_ports_per_app: 5,
|
max_ports_per_app: 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -123,17 +123,17 @@ async fn test_app_daemon_resource_msg() {
|
|||||||
let app_node_opt: Option<AppNode> = db.select((APP_NODE, daemon_key.pubkey)).await.unwrap();
|
let app_node_opt: Option<AppNode> = db.select((APP_NODE, daemon_key.pubkey)).await.unwrap();
|
||||||
assert!(app_node_opt.is_some());
|
assert!(app_node_opt.is_some());
|
||||||
let db::AppNode {
|
let db::AppNode {
|
||||||
avail_mem_mb,
|
avail_mem_mib,
|
||||||
avail_vcpus,
|
avail_vcpus,
|
||||||
avail_storage_gbs,
|
avail_storage_mib,
|
||||||
avail_ports,
|
avail_ports,
|
||||||
max_ports_per_app,
|
max_ports_per_app,
|
||||||
..
|
..
|
||||||
} = app_node_opt.unwrap();
|
} = app_node_opt.unwrap();
|
||||||
|
|
||||||
assert_eq!(avail_mem_mb, req_data.avail_memory_mb);
|
assert_eq!(avail_mem_mib, req_data.avail_memory_mib);
|
||||||
assert_eq!(avail_vcpus, req_data.avail_vcpus);
|
assert_eq!(avail_vcpus, req_data.avail_vcpus);
|
||||||
assert_eq!(avail_storage_gbs, req_data.avail_storage_gb);
|
assert_eq!(avail_storage_mib, req_data.avail_storage_mib);
|
||||||
assert_eq!(avail_ports, req_data.avail_no_of_port);
|
assert_eq!(avail_ports, req_data.avail_no_of_port);
|
||||||
assert_eq!(max_ports_per_app, req_data.max_ports_per_app);
|
assert_eq!(max_ports_per_app, req_data.max_ports_per_app);
|
||||||
}
|
}
|
||||||
|
@ -488,9 +488,9 @@ app_nodes:
|
|||||||
region: Hesse
|
region: Hesse
|
||||||
city: Frankfurt am Main
|
city: Frankfurt am Main
|
||||||
ip: 212.95.45.139
|
ip: 212.95.45.139
|
||||||
avail_mem_mb: 16000
|
avail_mem_mib: 16000
|
||||||
avail_vcpus: 16
|
avail_vcpus: 16
|
||||||
avail_storage_mb: 200000
|
avail_storage_mib: 200000
|
||||||
avail_no_of_port: 20000
|
avail_no_of_port: 20000
|
||||||
max_ports_per_app: 9
|
max_ports_per_app: 9
|
||||||
price: 20000
|
price: 20000
|
||||||
@ -506,9 +506,9 @@ app_contracts:
|
|||||||
- - 28667
|
- - 28667
|
||||||
- 8080
|
- 8080
|
||||||
host_ipv4: 212.95.45.139
|
host_ipv4: 212.95.45.139
|
||||||
disk_size_mb: 1000
|
disk_size_mib: 1000
|
||||||
vcpus: 1
|
vcpus: 1
|
||||||
memory_mb: 1000
|
memory_mib: 1000
|
||||||
created_at: 2025-04-21T11:27:28.833236909Z
|
created_at: 2025-04-21T11:27:28.833236909Z
|
||||||
updated_at: 2025-04-21T11:27:28.833237729Z
|
updated_at: 2025-04-21T11:27:28.833237729Z
|
||||||
price_per_unit: 200000
|
price_per_unit: 200000
|
||||||
|
Loading…
Reference in New Issue
Block a user