feat: add debug logging for slice calculation and node management operations

This commit is contained in:
mik-tf
2025-09-09 00:19:43 -04:00
parent 52316319e6
commit 31f3834e6d
19 changed files with 597 additions and 4155 deletions

View File

@@ -427,6 +427,28 @@ impl DashboardController {
// Get resource provider nodes with updated slice calculations // Get resource provider nodes with updated slice calculations
let resource_provider_nodes = resource_provider_service.get_resource_provider_nodes(&user_email); let resource_provider_nodes = resource_provider_service.get_resource_provider_nodes(&user_email);
// DEBUG: Log template data being prepared
log::info!(
target: "debug.slice_trace",
"dashboard:template_data_prep user={} nodes_loaded_count={}",
user_email,
resource_provider_nodes.len()
);
// DEBUG: Log each node's slice data being sent to template
for node in &resource_provider_nodes {
log::info!(
target: "debug.slice_trace",
"dashboard:node_template_data user={} node_id={} grid_node_id={:?} total_base_slices={} allocated_base_slices={} available_combinations_count={}",
user_email,
node.id,
node.grid_node_id,
node.total_base_slices,
node.allocated_base_slices,
node.available_combinations.len()
);
}
// Calculate resource_provider statistics from nodes // Calculate resource_provider statistics from nodes
let total_nodes = resource_provider_nodes.len() as u32; let total_nodes = resource_provider_nodes.len() as u32;
let mut online_nodes = 0u32; let mut online_nodes = 0u32;
@@ -2524,6 +2546,17 @@ impl DashboardController {
pricing_mode pricing_mode
); );
// DEBUG: Log which path will be taken
log::info!(
target: "debug.slice_trace",
"add_grid_nodes:path_decision req_id={} email={} slice_formats_count={} full_node_rental_enabled={} pricing_mode={}",
req_id,
user_email,
slice_formats.len(),
full_node_rental_enabled,
pricing_mode
);
let add_result = if !slice_formats.is_empty() || full_node_rental_enabled { let add_result = if !slice_formats.is_empty() || full_node_rental_enabled {
// Create rental options if full node rental is enabled // Create rental options if full node rental is enabled
let rental_options = if full_node_rental_enabled { let rental_options = if full_node_rental_enabled {
@@ -2561,6 +2594,13 @@ impl DashboardController {
// Choose the appropriate method based on pricing mode // Choose the appropriate method based on pricing mode
if pricing_mode == "individual" && individual_node_pricing.is_some() { if pricing_mode == "individual" && individual_node_pricing.is_some() {
log::info!(
target: "debug.slice_trace",
"add_grid_nodes:calling_individual_pricing req_id={} email={} node_count={}",
req_id,
user_email,
node_ids.len()
);
resource_provider_service.add_multiple_grid_nodes_with_individual_pricing( resource_provider_service.add_multiple_grid_nodes_with_individual_pricing(
&user_email, &user_email,
node_ids.clone(), node_ids.clone(),
@@ -2568,6 +2608,13 @@ impl DashboardController {
individual_node_pricing.unwrap() individual_node_pricing.unwrap()
).await ).await
} else { } else {
log::info!(
target: "debug.slice_trace",
"add_grid_nodes:calling_comprehensive_config req_id={} email={} node_count={}",
req_id,
user_email,
node_ids.len()
);
resource_provider_service.add_multiple_grid_nodes_with_comprehensive_config( resource_provider_service.add_multiple_grid_nodes_with_comprehensive_config(
&user_email, &user_email,
node_ids.clone(), node_ids.clone(),
@@ -2576,6 +2623,13 @@ impl DashboardController {
).await ).await
} }
} else { } else {
log::info!(
target: "debug.slice_trace",
"add_grid_nodes:calling_simple_add req_id={} email={} node_count={}",
req_id,
user_email,
node_ids.len()
);
resource_provider_service.add_multiple_grid_nodes(&user_email, node_ids.clone()).await resource_provider_service.add_multiple_grid_nodes(&user_email, node_ids.clone()).await
}; };

View File

@@ -98,15 +98,42 @@ impl ResourceProviderService {
/// Get all nodes for a resource_provider /// Get all nodes for a resource_provider
pub fn get_resource_provider_nodes(&self, user_email: &str) -> Vec<FarmNode> { pub fn get_resource_provider_nodes(&self, user_email: &str) -> Vec<FarmNode> {
log::info!(
target: "debug.slice_trace",
"get_resource_provider_nodes:start user={}",
user_email
);
if let Some(data) = UserPersistence::load_user_data(user_email) { if let Some(data) = UserPersistence::load_user_data(user_email) {
// Debug: Log marketplace SLA data for all nodes log::info!(
target: "debug.slice_trace",
"get_resource_provider_nodes:loaded_data user={} nodes_count={}",
user_email,
data.nodes.len()
);
// DEBUG: Log slice data for each node to verify what's stored
for node in &data.nodes { for node in &data.nodes {
if let Some(ref sla) = node.marketplace_sla { log::info!(
} else { target: "debug.slice_trace",
} "get_resource_provider_nodes:node_data user={} node_id={} grid_node_id={:?} total_base_slices={} allocated_base_slices={} available_combinations_count={} slice_last_calculated={:?}",
user_email,
node.id,
node.grid_node_id,
node.total_base_slices,
node.allocated_base_slices,
node.available_combinations.len(),
node.slice_last_calculated
);
} }
data.nodes data.nodes
} else { } else {
log::info!(
target: "debug.slice_trace",
"get_resource_provider_nodes:no_data user={} returning_empty",
user_email
);
Vec::new() Vec::new()
} }
} }
@@ -1390,10 +1417,25 @@ impl ResourceProviderService {
/// Add multiple grid nodes at once /// Add multiple grid nodes at once
pub async fn add_multiple_grid_nodes(&self, user_email: &str, grid_node_ids: Vec<u32>) -> Result<Vec<FarmNode>, String> { pub async fn add_multiple_grid_nodes(&self, user_email: &str, grid_node_ids: Vec<u32>) -> Result<Vec<FarmNode>, String> {
// DEBUG: Log entry point
log::info!(
target: "debug.slice_trace",
"add_multiple_grid_nodes:start user={} node_ids={:?}",
user_email,
grid_node_ids
);
// Batch approach: load once, add all nodes, save once // Batch approach: load once, add all nodes, save once
let mut added_nodes: Vec<FarmNode> = Vec::new(); let mut added_nodes: Vec<FarmNode> = Vec::new();
let mut persistent_data = crate::models::builders::SessionDataBuilder::load_or_create(user_email); let mut persistent_data = crate::models::builders::SessionDataBuilder::load_or_create(user_email);
log::info!(
target: "debug.slice_trace",
"add_multiple_grid_nodes:loaded_existing user={} existing_node_count={}",
user_email,
persistent_data.nodes.len()
);
for grid_node_id in grid_node_ids { for grid_node_id in grid_node_ids {
let node_id = format!("grid_node_{}", grid_node_id); let node_id = format!("grid_node_{}", grid_node_id);
@@ -1415,8 +1457,24 @@ impl ResourceProviderService {
let grid_data = self.grid_service.fetch_node_data(grid_node_id).await.map_err(|e| e.to_string())?; let grid_data = self.grid_service.fetch_node_data(grid_node_id).await.map_err(|e| e.to_string())?;
// FIX: Calculate slice data using the slice calculator (same as add_node_from_grid) // FIX: Calculate slice data using the slice calculator (same as add_node_from_grid)
log::info!(
target: "debug.slice_trace",
"add_multiple_grid_nodes:calculating_slices user={} grid_node_id={} resources={:?}",
user_email,
grid_node_id,
grid_data.total_resources
);
let total_base_slices = self.slice_calculator.calculate_max_base_slices(&grid_data.total_resources); let total_base_slices = self.slice_calculator.calculate_max_base_slices(&grid_data.total_resources);
log::info!(
target: "debug.slice_trace",
"add_multiple_grid_nodes:calculated_slices user={} grid_node_id={} total_base_slices={}",
user_email,
grid_node_id,
total_base_slices
);
// Generate unique node ID for SLA // Generate unique node ID for SLA
let node_id_for_sla = node_id.clone(); let node_id_for_sla = node_id.clone();
@@ -1481,23 +1539,93 @@ impl ResourceProviderService {
}; };
// FIX: Generate initial slice combinations // FIX: Generate initial slice combinations
log::info!(
target: "debug.slice_trace",
"add_multiple_grid_nodes:generating_combinations user={} grid_node_id={} total_base_slices={} allocated_base_slices={}",
user_email,
grid_node_id,
node.total_base_slices,
node.allocated_base_slices
);
let combinations = self.slice_calculator.generate_slice_combinations( let combinations = self.slice_calculator.generate_slice_combinations(
node.total_base_slices as u32, node.total_base_slices as u32,
node.allocated_base_slices as u32, node.allocated_base_slices as u32,
&node, &node,
user_email user_email
); );
log::info!(
target: "debug.slice_trace",
"add_multiple_grid_nodes:generated_combinations user={} grid_node_id={} combinations_count={}",
user_email,
grid_node_id,
combinations.len()
);
node.available_combinations = combinations.iter() node.available_combinations = combinations.iter()
.map(|c| serde_json::to_value(c).unwrap_or_default()) .map(|c| serde_json::to_value(c).unwrap_or_default())
.collect(); .collect();
log::info!(
target: "debug.slice_trace",
"add_multiple_grid_nodes:node_created user={} node_id={} grid_node_id={} total_slices={} available_combinations={}",
user_email,
node.id,
grid_node_id,
node.total_base_slices,
node.available_combinations.len()
);
persistent_data.nodes.push(node.clone()); persistent_data.nodes.push(node.clone());
added_nodes.push(node); added_nodes.push(node);
} }
if !added_nodes.is_empty() { if !added_nodes.is_empty() {
log::info!(
target: "debug.slice_trace",
"add_multiple_grid_nodes:saving_data user={} total_nodes_to_save={} added_nodes_count={}",
user_email,
persistent_data.nodes.len(),
added_nodes.len()
);
UserPersistence::save_user_data(&persistent_data).map_err(|e| e.to_string())?; UserPersistence::save_user_data(&persistent_data).map_err(|e| e.to_string())?;
log::info!(
target: "debug.slice_trace",
"add_multiple_grid_nodes:data_saved user={} added_nodes_count={}",
user_email,
added_nodes.len()
);
// DEBUG: Log final node data to verify what was actually saved
for node in &added_nodes {
log::info!(
target: "debug.slice_trace",
"add_multiple_grid_nodes:final_node_data user={} node_id={} grid_node_id={:?} total_base_slices={} slice_last_calculated={:?}",
user_email,
node.id,
node.grid_node_id,
node.total_base_slices,
node.slice_last_calculated
);
}
} else {
log::info!(
target: "debug.slice_trace",
"add_multiple_grid_nodes:no_nodes_added user={} (all were duplicates or failed)",
user_email
);
} }
log::info!(
target: "debug.slice_trace",
"add_multiple_grid_nodes:complete user={} result_count={}",
user_email,
added_nodes.len()
);
Ok(added_nodes) Ok(added_nodes)
} }

View File

@@ -143,12 +143,30 @@ impl SliceCalculatorService {
/// Calculate maximum base slices from node capacity /// Calculate maximum base slices from node capacity
pub fn calculate_max_base_slices(&self, capacity: &NodeCapacity) -> u32 { pub fn calculate_max_base_slices(&self, capacity: &NodeCapacity) -> u32 {
log::info!(
target: "debug.slice_trace",
"calculate_max_base_slices:start capacity={:?} base_slice={:?}",
capacity,
self.base_slice
);
let cpu_slices = capacity.cpu_cores as u32 / self.base_slice.cpu_cores; let cpu_slices = capacity.cpu_cores as u32 / self.base_slice.cpu_cores;
let memory_slices = capacity.memory_gb as u32 / self.base_slice.memory_gb; let memory_slices = capacity.memory_gb as u32 / self.base_slice.memory_gb;
let storage_slices = capacity.storage_gb as u32 / self.base_slice.storage_gb; let storage_slices = capacity.storage_gb as u32 / self.base_slice.storage_gb;
let result = std::cmp::min(std::cmp::min(cpu_slices, memory_slices), storage_slices);
log::info!(
target: "debug.slice_trace",
"calculate_max_base_slices:result cpu_slices={} memory_slices={} storage_slices={} limiting_factor={}",
cpu_slices,
memory_slices,
storage_slices,
result
);
// Return the limiting factor // Return the limiting factor
std::cmp::min(std::cmp::min(cpu_slices, memory_slices), storage_slices) result
} }
/// Generate all possible slice combinations from available base slices /// Generate all possible slice combinations from available base slices
@@ -159,10 +177,31 @@ impl SliceCalculatorService {
node: &FarmNode, node: &FarmNode,
resource_provider_email: &str resource_provider_email: &str
) -> Vec<SliceCombination> { ) -> Vec<SliceCombination> {
log::info!(
target: "debug.slice_trace",
"generate_slice_combinations:start max_base_slices={} allocated_slices={} node_id={} user={}",
max_base_slices,
allocated_slices,
node.id,
resource_provider_email
);
let available_base_slices = max_base_slices.saturating_sub(allocated_slices); let available_base_slices = max_base_slices.saturating_sub(allocated_slices);
let mut combinations = Vec::new(); let mut combinations = Vec::new();
log::info!(
target: "debug.slice_trace",
"generate_slice_combinations:available_base_slices={} node_id={}",
available_base_slices,
node.id
);
if available_base_slices == 0 { if available_base_slices == 0 {
log::info!(
target: "debug.slice_trace",
"generate_slice_combinations:no_available_slices node_id={} returning_empty",
node.id
);
return combinations; return combinations;
} }
@@ -216,6 +255,30 @@ impl SliceCalculatorService {
// Sort by multiplier (smallest slices first) // Sort by multiplier (smallest slices first)
combinations.sort_by_key(|c| c.multiplier); combinations.sort_by_key(|c| c.multiplier);
log::info!(
target: "debug.slice_trace",
"generate_slice_combinations:result node_id={} combinations_count={} available_base_slices={}",
node.id,
combinations.len(),
available_base_slices
);
// DEBUG: Log each combination for detailed analysis
for combination in &combinations {
log::info!(
target: "debug.slice_trace",
"generate_slice_combinations:combination node_id={} id={} multiplier={} quantity={} cpu={} memory={} storage={}",
node.id,
combination.id,
combination.multiplier,
combination.quantity_available,
combination.cpu_cores,
combination.memory_gb,
combination.storage_gb
);
}
combinations combinations
} }

View File

@@ -1,47 +0,0 @@
{
"user_email": "account@example.com",
"wallet_balance_usd": 0.0,
"transactions": [],
"staked_amount_usd": 0.0,
"pool_positions": {},
"name": "account",
"country": null,
"timezone": null,
"password_hash": "$2b$12$.JKEdRSl1XdJ0PoF38vPZeG1t1iP5X48mVix0IEwvpPwCR8BoMa2m",
"services": [],
"service_requests": [],
"service_bookings": [],
"availability": null,
"slas": [],
"apps": [],
"app_deployments": [],
"deleted": null,
"deleted_at": null,
"deletion_reason": null,
"nodes": [],
"farmer_earnings": [],
"farmer_settings": null,
"slice_products": [],
"user_activities": [],
"user_preferences": null,
"usage_statistics": null,
"orders": [],
"active_product_rentals": [],
"farmer_rental_earnings": [],
"node_rentals": [],
"node_groups": [],
"slice_rentals": [],
"slice_assignments": [],
"display_currency": "USD",
"quick_topup_amounts": [
10.0,
25.0,
50.0,
100.0
],
"auto_topup_settings": null,
"products": [],
"owned_products": [],
"owned_product_ids": [],
"ssh_keys": []
}

View File

@@ -1,47 +0,0 @@
{
"user_email": "as@example.com",
"wallet_balance_usd": 0.0,
"transactions": [],
"staked_amount_usd": 0.0,
"pool_positions": {},
"name": "as",
"country": null,
"timezone": null,
"password_hash": "$2b$12$ufHU5KPFcSoX6MRyCS8nXeBl.ABeo3jQX8mwy7s5KWvX/ZSn3Sqku",
"services": [],
"service_requests": [],
"service_bookings": [],
"availability": null,
"slas": [],
"apps": [],
"app_deployments": [],
"deleted": true,
"deleted_at": "2025-08-28T02:06:04.008732444+00:00",
"deletion_reason": "User requested account deletion",
"nodes": [],
"farmer_earnings": [],
"farmer_settings": null,
"slice_products": [],
"user_activities": [],
"user_preferences": null,
"usage_statistics": null,
"orders": [],
"active_product_rentals": [],
"farmer_rental_earnings": [],
"node_rentals": [],
"node_groups": [],
"slice_rentals": [],
"slice_assignments": [],
"display_currency": "USD",
"quick_topup_amounts": [
10.0,
25.0,
50.0,
100.0
],
"auto_topup_settings": null,
"products": [],
"owned_products": [],
"owned_product_ids": [],
"ssh_keys": []
}

View File

@@ -1,82 +0,0 @@
{
"user_email": "asdf@example.com",
"wallet_balance_usd": 0.0,
"transactions": [],
"staked_amount_usd": 0.0,
"pool_positions": {},
"name": "Johny",
"country": "Bahamas",
"timezone": "UTC-03:30",
"password_hash": "$2b$12$JQLUbKe4Ac/VoTmfxENJzebRhbutn6vVSKpwqgeqZdD78L55exXpC",
"services": [],
"service_requests": [],
"service_bookings": [],
"availability": null,
"slas": [],
"apps": [],
"app_deployments": [],
"deleted": true,
"deleted_at": "2025-08-28T02:03:31.789334123+00:00",
"deletion_reason": "User requested account deletion",
"nodes": [],
"farmer_earnings": [],
"farmer_settings": null,
"slice_products": [],
"user_activities": [],
"user_preferences": {
"theme": "light",
"language": "en",
"currency_display": "USD",
"email_notifications": true,
"push_notifications": true,
"marketing_emails": false,
"data_sharing": false,
"preferred_currency": "USD",
"preferred_language": "en",
"timezone": "UTC",
"notification_settings": {
"email_enabled": true,
"push_enabled": false,
"sms_enabled": false,
"slack_webhook": null,
"discord_webhook": null,
"enabled": false,
"push": true,
"node_offline_alerts": true,
"maintenance_reminders": true,
"earnings_reports": false
},
"privacy_settings": {
"profile_public": false,
"email_public": false,
"activity_public": false,
"stats_public": false,
"profile_visibility": "private",
"marketing_emails": false,
"data_sharing": false,
"activity_tracking": false
},
"dashboard_layout": "grid",
"last_payment_method": null
},
"usage_statistics": null,
"orders": [],
"active_product_rentals": [],
"farmer_rental_earnings": [],
"node_rentals": [],
"node_groups": [],
"slice_rentals": [],
"slice_assignments": [],
"display_currency": "CAD",
"quick_topup_amounts": [
10.0,
25.0,
50.0,
100.0
],
"auto_topup_settings": null,
"products": [],
"owned_products": [],
"owned_product_ids": [],
"ssh_keys": []
}

View File

@@ -1,82 +0,0 @@
{
"user_email": "name@example.com",
"wallet_balance_usd": 0.0,
"transactions": [],
"staked_amount_usd": 0.0,
"pool_positions": {},
"name": "name2",
"country": "",
"timezone": "",
"password_hash": "$2b$12$RUOgaY9dKK6QGrQ8E.Fsgus0eteppjzG6NeBDtgAPZKdGblK56PFq",
"services": [],
"service_requests": [],
"service_bookings": [],
"availability": null,
"slas": [],
"apps": [],
"app_deployments": [],
"deleted": true,
"deleted_at": "2025-08-22T15:08:44.196197805+00:00",
"deletion_reason": "User requested account deletion",
"nodes": [],
"farmer_earnings": [],
"farmer_settings": null,
"slice_products": [],
"user_activities": [],
"user_preferences": {
"theme": "light",
"language": "en",
"currency_display": "USD",
"email_notifications": true,
"push_notifications": true,
"marketing_emails": false,
"data_sharing": false,
"preferred_currency": "USD",
"preferred_language": "en",
"timezone": "UTC",
"notification_settings": {
"email_enabled": true,
"push_enabled": true,
"sms_enabled": false,
"slack_webhook": null,
"discord_webhook": null,
"enabled": false,
"push": true,
"node_offline_alerts": true,
"maintenance_reminders": true,
"earnings_reports": false
},
"privacy_settings": {
"profile_public": false,
"email_public": false,
"activity_public": false,
"stats_public": false,
"profile_visibility": "private",
"marketing_emails": false,
"data_sharing": false,
"activity_tracking": false
},
"dashboard_layout": "grid",
"last_payment_method": null
},
"usage_statistics": null,
"orders": [],
"active_product_rentals": [],
"farmer_rental_earnings": [],
"node_rentals": [],
"node_groups": [],
"slice_rentals": [],
"slice_assignments": [],
"display_currency": "USD",
"quick_topup_amounts": [
10.0,
25.0,
50.0,
100.0
],
"auto_topup_settings": null,
"products": [],
"owned_products": [],
"owned_product_ids": [],
"ssh_keys": []
}

View File

@@ -1,231 +0,0 @@
{
"user_email": "new@example.com",
"wallet_balance_usd": 887.0,
"transactions": [
{
"id": "41594920-3783-4def-bf88-c83ad247be8d",
"user_id": "new@example.com",
"transaction_type": {
"Purchase": {
"product_id": "credits"
}
},
"amount": 888.0,
"currency": "USD",
"exchange_rate_usd": 1.0,
"amount_usd": 888.0,
"description": "Credits purchase via paypal",
"reference_id": "41594920-3783-4def-bf88-c83ad247be8d",
"metadata": null,
"timestamp": "2025-08-27T07:00:10.506808621Z",
"status": "Completed"
},
{
"id": "69a6ad1c-52dd-477b-b3ae-5784cc18773f",
"user_id": "new@example.com",
"transaction_type": {
"CreditsTransfer": {
"to_user": "user1@example.com",
"note": null
}
},
"amount": 1.0,
"currency": "USD",
"exchange_rate_usd": 1.0,
"amount_usd": 1.0,
"description": "Credits transfer to user1@example.com: No note",
"reference_id": "transfer-016c4451-eb04-4373-88fe-31c0a1375996",
"metadata": null,
"timestamp": "2025-08-27T07:00:18.582850390Z",
"status": "Completed"
}
],
"staked_amount_usd": 0.0,
"pool_positions": {},
"name": "new",
"country": null,
"timezone": null,
"password_hash": "$2b$12$4urVNAajnRgoyWBQWW9PyuQRCiWehnqK.71/qu6PyEIEVVDW/Vo0W",
"services": [],
"service_requests": [],
"service_bookings": [],
"availability": null,
"slas": [],
"apps": [],
"app_deployments": [],
"deleted": null,
"deleted_at": null,
"deletion_reason": null,
"nodes": [],
"farmer_earnings": [],
"farmer_settings": null,
"slice_products": [],
"user_activities": [
{
"id": "028ec6ce-6e86-4da6-a514-0a4a2e249e9e",
"user_email": "new@example.com",
"activity_type": "WalletTransaction",
"description": "Transferred $1 credits to user1@example.com",
"metadata": null,
"timestamp": "2025-08-27T07:00:18.582870563Z",
"ip_address": null,
"user_agent": null,
"session_id": null,
"importance": "Medium",
"category": "Wallet"
},
{
"id": "05d20135-52af-4fb4-9f51-77bcf1d5010c",
"user_email": "new@example.com",
"activity_type": "WalletTransaction",
"description": "Purchased $888 credits via paypal",
"metadata": null,
"timestamp": "2025-08-27T07:00:10.507159414Z",
"ip_address": null,
"user_agent": null,
"session_id": null,
"importance": "Medium",
"category": "Wallet"
}
],
"user_preferences": {
"theme": "light",
"language": "en",
"currency_display": "symbol",
"email_notifications": true,
"push_notifications": true,
"marketing_emails": false,
"data_sharing": false,
"preferred_currency": "USD",
"preferred_language": "en",
"timezone": "UTC",
"notification_settings": {
"email_enabled": true,
"push_enabled": true,
"sms_enabled": false,
"slack_webhook": null,
"discord_webhook": null,
"enabled": true,
"push": true,
"node_offline_alerts": true,
"maintenance_reminders": true,
"earnings_reports": true
},
"privacy_settings": {
"profile_public": false,
"email_public": false,
"activity_public": false,
"stats_public": false,
"profile_visibility": "private",
"marketing_emails": false,
"data_sharing": false,
"activity_tracking": true
},
"dashboard_layout": "default",
"last_payment_method": "paypal"
},
"usage_statistics": null,
"orders": [],
"active_product_rentals": [],
"farmer_rental_earnings": [],
"node_rentals": [],
"node_groups": [
{
"id": "compute",
"name": "Compute",
"description": "General compute workloads",
"node_ids": [],
"group_type": {
"Default": "compute"
},
"updated_at": "2025-08-27T07:00:02.494038779Z",
"created_at": "2025-08-27T07:00:02.494030010Z",
"group_config": {
"group_name": "Compute Nodes",
"max_nodes": 100,
"allocation_strategy": "balanced",
"auto_scaling": true,
"preferred_slice_formats": [
"1x1",
"2x2"
],
"default_pricing": 50.0,
"resource_optimization": {
"cpu_optimization": 0.5,
"memory_optimization": 0.5,
"storage_optimization": 0.5,
"network_optimization": 0.5
}
}
},
{
"id": "storage",
"name": "Storage",
"description": "Storage and data workloads",
"node_ids": [],
"group_type": {
"Default": "storage"
},
"updated_at": "2025-08-27T07:00:02.494050216Z",
"created_at": "2025-08-27T07:00:02.494049839Z",
"group_config": {
"group_name": "Storage Nodes",
"max_nodes": 50,
"allocation_strategy": "storage_optimized",
"auto_scaling": false,
"preferred_slice_formats": [
"1x1"
],
"default_pricing": 30.0,
"resource_optimization": {
"cpu_optimization": 0.3,
"memory_optimization": 0.3,
"storage_optimization": 0.8,
"network_optimization": 0.6
}
}
},
{
"id": "ai-gpu",
"name": "AI/GPU",
"description": "AI and GPU-intensive workloads",
"node_ids": [],
"group_type": {
"Default": "ai-gpu"
},
"updated_at": "2025-08-27T07:00:02.494057927Z",
"created_at": "2025-08-27T07:00:02.494057555Z",
"group_config": {
"group_name": "AI/GPU Nodes",
"max_nodes": 20,
"allocation_strategy": "gpu_optimized",
"auto_scaling": true,
"preferred_slice_formats": [
"4x4",
"8x8"
],
"default_pricing": 200.0,
"resource_optimization": {
"cpu_optimization": 0.8,
"memory_optimization": 0.7,
"storage_optimization": 0.4,
"network_optimization": 0.5
}
}
}
],
"slice_rentals": [],
"slice_assignments": [],
"display_currency": "USD",
"quick_topup_amounts": [
10.0,
25.0,
50.0,
100.0
],
"auto_topup_settings": null,
"products": [],
"owned_products": [],
"owned_product_ids": [],
"ssh_keys": []
}

View File

@@ -1 +0,0 @@
[]

View File

@@ -1,12 +0,0 @@
[
{"id":"user1","email":"user1@example.com","password":"password","roles":["provider"],"profile":{"display_name":"User 1","kind":"provider"}},
{"id":"user2","email":"user2@example.com","password":"password","roles":["provider"],"profile":{"display_name":"User 2","kind":"provider"}},
{"id":"user3","email":"user3@example.com","password":"password","roles":["provider"],"profile":{"display_name":"User 3","kind":"provider"}},
{"id":"user4","email":"user4@example.com","password":"password","roles":["provider","buyer"],"profile":{"display_name":"User 4","kind":"provider_buyer"}},
{"id":"user5","email":"user5@example.com","password":"password","roles":["provider","buyer"],"profile":{"display_name":"User 5","kind":"provider_buyer"}},
{"id":"user6","email":"user6@example.com","password":"password","roles":["provider","buyer"],"profile":{"display_name":"User 6","kind":"provider_buyer"}},
{"id":"user7","email":"user7@example.com","password":"password","roles":["buyer"],"profile":{"display_name":"User 7","kind":"buyer"}},
{"id":"user8","email":"user8@example.com","password":"password","roles":["buyer"],"profile":{"display_name":"User 8","kind":"buyer"}},
{"id":"user9","email":"user9@example.com","password":"password","roles":["buyer"],"profile":{"display_name":"User 9","kind":"buyer"}},
{"id":"user10","email":"user10@example.com","password":"password","roles":["buyer"],"profile":{"display_name":"User 10","kind":"buyer"}}
]

View File

@@ -1 +0,0 @@
[]

File diff suppressed because it is too large Load Diff

View File

@@ -1,49 +0,0 @@
{
"user_email": "user111@example.com",
"wallet_balance_usd": 0.0,
"transactions": [],
"staked_amount_usd": 0.0,
"pool_positions": {},
"name": "user111",
"country": null,
"timezone": null,
"password_hash": "$2b$12$0I0taABmXC9qgK/oe1ynjO/eVIG4sdguLm6DLQffvbjU33jkSe6Ti",
"services": [],
"service_requests": [],
"service_bookings": [],
"availability": null,
"slas": [],
"apps": [],
"application_deployments": [],
"deleted": null,
"deleted_at": null,
"deletion_reason": null,
"nodes": [],
"resource_provider_earnings": [],
"resource_provider_settings": null,
"slice_products": [],
"user_activities": [],
"user_preferences": null,
"usage_statistics": null,
"orders": [],
"active_product_rentals": [],
"resource_provider_rental_earnings": [],
"node_rentals": [],
"node_groups": [],
"slice_rentals": [],
"slice_assignments": [],
"display_currency": "MC",
"quick_topup_amounts": [
10.0,
25.0,
50.0,
100.0
],
"auto_topup_settings": null,
"products": [],
"owned_products": [],
"owned_product_ids": [],
"ssh_keys": [],
"message_threads": null,
"messages": null
}

View File

@@ -1,541 +0,0 @@
{
"user_email": "user123@example.com",
"wallet_balance_usd": 12.0,
"transactions": [
{
"id": "5590075e-2ec3-4ece-b64e-2ab2bd8a4a92",
"user_id": "user123@example.com",
"transaction_type": {
"Purchase": {
"product_id": "credits"
}
},
"amount": 12.0,
"currency": "USD",
"exchange_rate_usd": 1.0,
"amount_usd": 12.0,
"description": "Credits purchase via credit_card",
"reference_id": "5590075e-2ec3-4ece-b64e-2ab2bd8a4a92",
"metadata": null,
"timestamp": "2025-09-08T17:16:29.777650952Z",
"status": "Completed"
}
],
"staked_amount_usd": 0.0,
"pool_positions": {},
"name": "user123",
"country": null,
"timezone": null,
"password_hash": "$2b$12$g8daTd2i0nUXUOJEBFMGKuRhJTNye6hae1hDETWLTKBTPs.3WasQu",
"services": [],
"service_requests": [],
"service_bookings": [],
"availability": null,
"slas": [],
"apps": [],
"application_deployments": [],
"deleted": null,
"deleted_at": null,
"deletion_reason": null,
"nodes": [
{
"id": "grid_node_1",
"location": "Unknown, Belgium",
"status": "Online",
"capacity": {
"cpu_cores": 56,
"memory_gb": 188,
"storage_gb": 135975,
"bandwidth_mbps": 1000,
"ssd_storage_gb": 1863,
"hdd_storage_gb": 134112,
"ram_gb": 188
},
"used_capacity": {
"cpu_cores": 25,
"memory_gb": 92,
"storage_gb": 1021,
"bandwidth_mbps": 0,
"ssd_storage_gb": 1021,
"hdd_storage_gb": 0,
"ram_gb": 92
},
"uptime_percentage": 99.0,
"farming_start_date": "2025-08-10T03:03:44.241167749Z",
"last_updated": "2025-09-09T03:03:44.241194575Z",
"utilization_7_day_avg": 65.0,
"slice_formats_supported": [
"1x1",
"2x2",
"4x4"
],
"rental_options": null,
"total_base_slices": 0,
"allocated_base_slices": 0,
"earnings_today_usd": 0.0,
"grid_node_id": "1",
"available_combinations": [],
"slice_allocations": [],
"slice_last_calculated": null,
"marketplace_sla": {
"id": "sla-repair-90a36bcd-b6e2-45e7-872a-baeaa485f220",
"name": "Repaired Node SLA",
"uptime_guarantee": 99.8,
"response_time_hours": 24,
"resolution_time_hours": 48,
"penalty_rate": 0.01,
"uptime_guarantee_percentage": 99.8,
"base_slice_price": 0.5,
"bandwidth_guarantee_mbps": 100.0,
"last_updated": "2025-09-09T03:04:23.227212978Z"
},
"slice_pricing": {
"base_price_per_hour": 1.0,
"currency": "USD",
"pricing_multiplier": 1.0
},
"grid_data": {
"capacity": {
"bandwidth_mbps": 1000,
"cpu_cores": 56,
"hdd_storage_gb": 134112,
"memory_gb": 188,
"ram_gb": 188,
"ssd_storage_gb": 1863,
"storage_gb": 135975
},
"certification_type": "Diy",
"city": "Unknown",
"country": "Belgium",
"farm_id": 1,
"farm_name": "Freefarm",
"farming_policy_id": 1,
"grid_node_id": 1,
"last_updated": "2025-09-09T03:03:44.240833231Z",
"location": "Unknown, Belgium",
"node_id": 1,
"public_ips": [
"192.168.1.100"
],
"status": "Online",
"total_resources": {
"bandwidth_mbps": 1000,
"cpu_cores": 56,
"hdd_storage_gb": 134112,
"memory_gb": 188,
"ram_gb": 188,
"ssd_storage_gb": 1863,
"storage_gb": 135975
},
"uptime": 99.5,
"used_resources": {
"bandwidth_mbps": 0,
"cpu_cores": 25,
"hdd_storage_gb": 0,
"memory_gb": 92,
"ram_gb": 92,
"ssd_storage_gb": 1021,
"storage_gb": 1021
}
},
"slice_formats": null,
"name": "Grid Node 1",
"region": "Belgium",
"node_type": "MyceliumNode",
"staking_options": null,
"availability_status": "Available",
"node_group_id": null,
"group_assignment_date": null,
"group_slice_format": null,
"group_slice_price": null,
"last_seen": "2025-09-09T03:03:44.241206636Z",
"health_score": 100.0
},
{
"id": "grid_node_10",
"location": "Unknown, Belgium",
"status": "Online",
"capacity": {
"cpu_cores": 8,
"memory_gb": 15,
"storage_gb": 402559,
"bandwidth_mbps": 1000,
"ssd_storage_gb": 223,
"hdd_storage_gb": 402336,
"ram_gb": 15
},
"used_capacity": {
"cpu_cores": 4,
"memory_gb": 10,
"storage_gb": 137,
"bandwidth_mbps": 0,
"ssd_storage_gb": 137,
"hdd_storage_gb": 0,
"ram_gb": 10
},
"uptime_percentage": 99.0,
"farming_start_date": "2025-08-10T03:10:19.936729614Z",
"last_updated": "2025-09-09T03:10:19.936733378Z",
"utilization_7_day_avg": 65.0,
"slice_formats_supported": [
"1x1",
"2x2",
"4x4"
],
"rental_options": null,
"total_base_slices": 0,
"allocated_base_slices": 0,
"earnings_today_usd": 0.0,
"grid_node_id": "10",
"available_combinations": [],
"slice_allocations": [],
"slice_last_calculated": null,
"marketplace_sla": {
"id": "sla-repair-e3b05c2c-5eb6-4304-93c0-7a9c7348636a",
"name": "Repaired Node SLA",
"uptime_guarantee": 99.8,
"response_time_hours": 24,
"resolution_time_hours": 48,
"penalty_rate": 0.01,
"uptime_guarantee_percentage": 99.8,
"base_slice_price": 0.5,
"bandwidth_guarantee_mbps": 100.0,
"last_updated": "2025-09-09T03:13:53.570999450Z"
},
"slice_pricing": {
"base_price_per_hour": 1.0,
"currency": "USD",
"pricing_multiplier": 1.0
},
"grid_data": {
"capacity": {
"bandwidth_mbps": 1000,
"cpu_cores": 8,
"hdd_storage_gb": 402336,
"memory_gb": 15,
"ram_gb": 15,
"ssd_storage_gb": 223,
"storage_gb": 402559
},
"certification_type": "Diy",
"city": "Unknown",
"country": "Belgium",
"farm_id": 1,
"farm_name": "Freefarm",
"farming_policy_id": 1,
"grid_node_id": 10,
"last_updated": "2025-09-09T03:10:19.936676347Z",
"location": "Unknown, Belgium",
"node_id": 10,
"public_ips": [
"192.168.1.100"
],
"status": "Online",
"total_resources": {
"bandwidth_mbps": 1000,
"cpu_cores": 8,
"hdd_storage_gb": 402336,
"memory_gb": 15,
"ram_gb": 15,
"ssd_storage_gb": 223,
"storage_gb": 402559
},
"uptime": 99.5,
"used_resources": {
"bandwidth_mbps": 0,
"cpu_cores": 4,
"hdd_storage_gb": 0,
"memory_gb": 10,
"ram_gb": 10,
"ssd_storage_gb": 137,
"storage_gb": 137
}
},
"slice_formats": null,
"name": "Grid Node 10",
"region": "Belgium",
"node_type": "MyceliumNode",
"staking_options": null,
"availability_status": "Available",
"node_group_id": null,
"group_assignment_date": null,
"group_slice_format": null,
"group_slice_price": null,
"last_seen": "2025-09-09T03:10:19.936736220Z",
"health_score": 100.0
},
{
"id": "grid_node_12",
"location": "Unknown, Belgium",
"status": "Online",
"capacity": {
"cpu_cores": 8,
"memory_gb": 15,
"storage_gb": 402559,
"bandwidth_mbps": 1000,
"ssd_storage_gb": 223,
"hdd_storage_gb": 402336,
"ram_gb": 15
},
"used_capacity": {
"cpu_cores": 5,
"memory_gb": 12,
"storage_gb": 165,
"bandwidth_mbps": 0,
"ssd_storage_gb": 165,
"hdd_storage_gb": 0,
"ram_gb": 12
},
"uptime_percentage": 99.0,
"farming_start_date": "2025-08-10T03:30:24.732131670Z",
"last_updated": "2025-09-09T03:30:24.732143334Z",
"utilization_7_day_avg": 65.0,
"slice_formats_supported": [
"1x1",
"2x2",
"4x4"
],
"rental_options": null,
"total_base_slices": 0,
"allocated_base_slices": 0,
"earnings_today_usd": 0.0,
"grid_node_id": "12",
"available_combinations": [],
"slice_allocations": [],
"slice_last_calculated": null,
"marketplace_sla": {
"id": "sla-repair-25c05a40-790f-4a80-8ef8-fa12a726c0ff",
"name": "Repaired Node SLA",
"uptime_guarantee": 99.8,
"response_time_hours": 24,
"resolution_time_hours": 48,
"penalty_rate": 0.01,
"uptime_guarantee_percentage": 99.8,
"base_slice_price": 0.5,
"bandwidth_guarantee_mbps": 100.0,
"last_updated": "2025-09-09T03:30:27.416132016Z"
},
"slice_pricing": {
"base_price_per_hour": 1.0,
"currency": "USD",
"pricing_multiplier": 1.0
},
"grid_data": {
"capacity": {
"bandwidth_mbps": 1000,
"cpu_cores": 8,
"hdd_storage_gb": 402336,
"memory_gb": 15,
"ram_gb": 15,
"ssd_storage_gb": 223,
"storage_gb": 402559
},
"certification_type": "Diy",
"city": "Unknown",
"country": "Belgium",
"farm_id": 1,
"farm_name": "Freefarm",
"farming_policy_id": 1,
"grid_node_id": 12,
"last_updated": "2025-09-09T03:30:24.731928799Z",
"location": "Unknown, Belgium",
"node_id": 12,
"public_ips": [
"192.168.1.100"
],
"status": "Online",
"total_resources": {
"bandwidth_mbps": 1000,
"cpu_cores": 8,
"hdd_storage_gb": 402336,
"memory_gb": 15,
"ram_gb": 15,
"ssd_storage_gb": 223,
"storage_gb": 402559
},
"uptime": 99.5,
"used_resources": {
"bandwidth_mbps": 0,
"cpu_cores": 5,
"hdd_storage_gb": 0,
"memory_gb": 12,
"ram_gb": 12,
"ssd_storage_gb": 165,
"storage_gb": 165
}
},
"slice_formats": null,
"name": "Grid Node 12",
"region": "Belgium",
"node_type": "MyceliumNode",
"staking_options": null,
"availability_status": "Available",
"node_group_id": null,
"group_assignment_date": null,
"group_slice_format": null,
"group_slice_price": null,
"last_seen": "2025-09-09T03:30:24.732150580Z",
"health_score": 100.0
}
],
"resource_provider_earnings": [],
"resource_provider_settings": null,
"slice_products": [],
"user_activities": [
{
"id": "1db56139-8a5f-4e32-a235-c0f1bb4ab357",
"user_email": "user123@example.com",
"activity_type": "WalletTransaction",
"description": "Purchased $12 credits via credit_card",
"metadata": null,
"timestamp": "2025-09-08T17:16:29.777958164Z",
"ip_address": null,
"user_agent": null,
"session_id": null,
"importance": "Medium",
"category": "Wallet"
}
],
"user_preferences": {
"theme": "light",
"language": "en",
"currency_display": "symbol",
"email_notifications": true,
"push_notifications": true,
"marketing_emails": false,
"data_sharing": false,
"preferred_currency": "USD",
"preferred_language": "en",
"timezone": "UTC",
"notification_settings": {
"email_enabled": true,
"push_enabled": true,
"sms_enabled": false,
"slack_webhook": null,
"discord_webhook": null,
"enabled": true,
"push": true,
"node_offline_alerts": true,
"maintenance_reminders": true,
"earnings_reports": true
},
"privacy_settings": {
"profile_public": false,
"email_public": false,
"activity_public": false,
"stats_public": false,
"profile_visibility": "private",
"marketing_emails": false,
"data_sharing": false,
"activity_tracking": true
},
"dashboard_layout": "default",
"last_payment_method": "credit_card"
},
"usage_statistics": null,
"orders": [],
"active_product_rentals": [],
"resource_provider_rental_earnings": [],
"node_rentals": [],
"node_groups": [
{
"id": "compute",
"name": "Compute",
"description": "General compute workloads",
"node_ids": [],
"group_type": {
"Default": "compute"
},
"updated_at": "2025-09-08T18:44:31.238377407Z",
"created_at": "2025-09-08T18:44:31.238375624Z",
"group_config": {
"group_name": "Compute Nodes",
"max_nodes": 100,
"allocation_strategy": "balanced",
"auto_scaling": true,
"preferred_slice_formats": [
"1x1",
"2x2"
],
"default_pricing": 50.0,
"resource_optimization": {
"cpu_optimization": 0.5,
"memory_optimization": 0.5,
"storage_optimization": 0.5,
"network_optimization": 0.5
}
}
},
{
"id": "storage",
"name": "Storage",
"description": "Storage and data workloads",
"node_ids": [],
"group_type": {
"Default": "storage"
},
"updated_at": "2025-09-08T18:44:31.238384425Z",
"created_at": "2025-09-08T18:44:31.238383997Z",
"group_config": {
"group_name": "Storage Nodes",
"max_nodes": 50,
"allocation_strategy": "storage_optimized",
"auto_scaling": false,
"preferred_slice_formats": [
"1x1"
],
"default_pricing": 30.0,
"resource_optimization": {
"cpu_optimization": 0.3,
"memory_optimization": 0.3,
"storage_optimization": 0.8,
"network_optimization": 0.6
}
}
},
{
"id": "ai-gpu",
"name": "AI/GPU",
"description": "AI and GPU-intensive workloads",
"node_ids": [],
"group_type": {
"Default": "ai-gpu"
},
"updated_at": "2025-09-08T18:44:31.238388576Z",
"created_at": "2025-09-08T18:44:31.238388156Z",
"group_config": {
"group_name": "AI/GPU Nodes",
"max_nodes": 20,
"allocation_strategy": "gpu_optimized",
"auto_scaling": true,
"preferred_slice_formats": [
"4x4",
"8x8"
],
"default_pricing": 200.0,
"resource_optimization": {
"cpu_optimization": 0.8,
"memory_optimization": 0.7,
"storage_optimization": 0.4,
"network_optimization": 0.5
}
}
}
],
"slice_rentals": [],
"slice_assignments": [],
"display_currency": "AED",
"quick_topup_amounts": [
10.0,
25.0,
50.0,
100.0
],
"auto_topup_settings": null,
"products": [],
"owned_products": [],
"owned_product_ids": [],
"ssh_keys": [],
"message_threads": null,
"messages": null
}

View File

@@ -1,15 +0,0 @@
{
"user_id": "user123@example.com",
"items": [
{
"product_id": "user_user0_example_com_fa373486",
"quantity": 1,
"selected_specifications": {},
"added_at": "2025-09-09T03:32:30.573242755Z",
"updated_at": "2025-09-09T03:32:30.573242755Z"
}
],
"session_id": null,
"created_at": "2025-09-09T03:32:30.573133861Z",
"updated_at": "2025-09-09T03:32:30.573271484Z"
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +0,0 @@
{
"user_id": "user1@example.com",
"items": [],
"session_id": null,
"created_at": "2025-08-28T03:10:49.436820705Z",
"updated_at": "2025-08-29T04:46:03.458815283Z"
}

View File

@@ -1,247 +0,0 @@
{
"user_email": "user321@example.com",
"wallet_balance_usd": 0.0,
"transactions": [],
"staked_amount_usd": 0.0,
"pool_positions": {},
"name": "user321",
"country": null,
"timezone": null,
"password_hash": "$2b$12$3I5q1NB/ukv2isB6p5RN1ecn6Wkb92gmD2O5gzQ8YF3veOLUa1JXu",
"services": [],
"service_requests": [],
"service_bookings": [],
"availability": null,
"slas": [],
"apps": [],
"application_deployments": [],
"deleted": null,
"deleted_at": null,
"deletion_reason": null,
"nodes": [
{
"id": "grid_node_2007",
"location": "Unknown, Belgium",
"status": "Online",
"capacity": {
"cpu_cores": 24,
"memory_gb": 188,
"storage_gb": 8859,
"bandwidth_mbps": 1000,
"ssd_storage_gb": 476,
"hdd_storage_gb": 8383,
"ram_gb": 188
},
"used_capacity": {
"cpu_cores": 9,
"memory_gb": 55,
"storage_gb": 343,
"bandwidth_mbps": 0,
"ssd_storage_gb": 343,
"hdd_storage_gb": 0,
"ram_gb": 55
},
"uptime_percentage": 99.0,
"farming_start_date": "2025-08-10T03:27:08.942256607Z",
"last_updated": "2025-09-09T03:27:08.942268123Z",
"utilization_7_day_avg": 65.0,
"slice_formats_supported": [
"1x1",
"2x2",
"4x4"
],
"rental_options": null,
"total_base_slices": 0,
"allocated_base_slices": 0,
"earnings_today_usd": 0.0,
"grid_node_id": "2007",
"available_combinations": [],
"slice_allocations": [],
"slice_last_calculated": null,
"marketplace_sla": {
"id": "sla-repair-8fa25e61-493a-46cc-b942-ce8cef923ae6",
"name": "Repaired Node SLA",
"uptime_guarantee": 99.8,
"response_time_hours": 24,
"resolution_time_hours": 48,
"penalty_rate": 0.01,
"uptime_guarantee_percentage": 99.8,
"base_slice_price": 0.5,
"bandwidth_guarantee_mbps": 100.0,
"last_updated": "2025-09-09T03:27:12.489433171Z"
},
"slice_pricing": {
"base_price_per_hour": 1.0,
"currency": "USD",
"pricing_multiplier": 1.0
},
"grid_data": {
"capacity": {
"bandwidth_mbps": 1000,
"cpu_cores": 24,
"hdd_storage_gb": 8383,
"memory_gb": 188,
"ram_gb": 188,
"ssd_storage_gb": 476,
"storage_gb": 8859
},
"certification_type": "Diy",
"city": "Unknown",
"country": "Belgium",
"farm_id": 1,
"farm_name": "Freefarm",
"farming_policy_id": 1,
"grid_node_id": 2007,
"last_updated": "2025-09-09T03:27:08.942100965Z",
"location": "Unknown, Belgium",
"node_id": 2007,
"public_ips": [
"192.168.1.100"
],
"status": "Online",
"total_resources": {
"bandwidth_mbps": 1000,
"cpu_cores": 24,
"hdd_storage_gb": 8383,
"memory_gb": 188,
"ram_gb": 188,
"ssd_storage_gb": 476,
"storage_gb": 8859
},
"uptime": 99.5,
"used_resources": {
"bandwidth_mbps": 0,
"cpu_cores": 9,
"hdd_storage_gb": 0,
"memory_gb": 55,
"ram_gb": 55,
"ssd_storage_gb": 343,
"storage_gb": 343
}
},
"slice_formats": null,
"name": "Grid Node 2007",
"region": "Belgium",
"node_type": "MyceliumNode",
"staking_options": null,
"availability_status": "Available",
"node_group_id": null,
"group_assignment_date": null,
"group_slice_format": null,
"group_slice_price": null,
"last_seen": "2025-09-09T03:27:08.942273898Z",
"health_score": 100.0
}
],
"resource_provider_earnings": [],
"resource_provider_settings": null,
"slice_products": [],
"user_activities": [],
"user_preferences": null,
"usage_statistics": null,
"orders": [],
"active_product_rentals": [],
"resource_provider_rental_earnings": [],
"node_rentals": [],
"node_groups": [
{
"id": "compute",
"name": "Compute",
"description": "General compute workloads",
"node_ids": [],
"group_type": {
"Default": "compute"
},
"updated_at": "2025-09-09T03:26:57.639840151Z",
"created_at": "2025-09-09T03:26:57.639836172Z",
"group_config": {
"group_name": "Compute Nodes",
"max_nodes": 100,
"allocation_strategy": "balanced",
"auto_scaling": true,
"preferred_slice_formats": [
"1x1",
"2x2"
],
"default_pricing": 50.0,
"resource_optimization": {
"cpu_optimization": 0.5,
"memory_optimization": 0.5,
"storage_optimization": 0.5,
"network_optimization": 0.5
}
}
},
{
"id": "storage",
"name": "Storage",
"description": "Storage and data workloads",
"node_ids": [],
"group_type": {
"Default": "storage"
},
"updated_at": "2025-09-09T03:26:57.639846621Z",
"created_at": "2025-09-09T03:26:57.639846284Z",
"group_config": {
"group_name": "Storage Nodes",
"max_nodes": 50,
"allocation_strategy": "storage_optimized",
"auto_scaling": false,
"preferred_slice_formats": [
"1x1"
],
"default_pricing": 30.0,
"resource_optimization": {
"cpu_optimization": 0.3,
"memory_optimization": 0.3,
"storage_optimization": 0.8,
"network_optimization": 0.6
}
}
},
{
"id": "ai-gpu",
"name": "AI/GPU",
"description": "AI and GPU-intensive workloads",
"node_ids": [],
"group_type": {
"Default": "ai-gpu"
},
"updated_at": "2025-09-09T03:26:57.639850994Z",
"created_at": "2025-09-09T03:26:57.639850646Z",
"group_config": {
"group_name": "AI/GPU Nodes",
"max_nodes": 20,
"allocation_strategy": "gpu_optimized",
"auto_scaling": true,
"preferred_slice_formats": [
"4x4",
"8x8"
],
"default_pricing": 200.0,
"resource_optimization": {
"cpu_optimization": 0.8,
"memory_optimization": 0.7,
"storage_optimization": 0.4,
"network_optimization": 0.5
}
}
}
],
"slice_rentals": [],
"slice_assignments": [],
"display_currency": "MC",
"quick_topup_amounts": [
10.0,
25.0,
50.0,
100.0
],
"auto_topup_settings": null,
"products": [],
"owned_products": [],
"owned_product_ids": [],
"ssh_keys": [],
"message_threads": null,
"messages": null
}

View File

@@ -1,5 +0,0 @@
{
"version": "2025-08-09",
"schema": 1,
"notes": "Initial fixture scaffold with demo users user1..user10"
}