feat: add debug logging for slice calculation and node management operations
This commit is contained in:
@@ -427,6 +427,28 @@ impl DashboardController {
|
||||
// Get resource provider nodes with updated slice calculations
|
||||
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
|
||||
let total_nodes = resource_provider_nodes.len() as u32;
|
||||
let mut online_nodes = 0u32;
|
||||
@@ -2524,6 +2546,17 @@ impl DashboardController {
|
||||
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 {
|
||||
// Create rental options if full node rental is enabled
|
||||
let rental_options = if full_node_rental_enabled {
|
||||
@@ -2561,6 +2594,13 @@ impl DashboardController {
|
||||
|
||||
// Choose the appropriate method based on pricing mode
|
||||
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(
|
||||
&user_email,
|
||||
node_ids.clone(),
|
||||
@@ -2568,6 +2608,13 @@ impl DashboardController {
|
||||
individual_node_pricing.unwrap()
|
||||
).await
|
||||
} 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(
|
||||
&user_email,
|
||||
node_ids.clone(),
|
||||
@@ -2576,6 +2623,13 @@ impl DashboardController {
|
||||
).await
|
||||
}
|
||||
} 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
|
||||
};
|
||||
|
||||
|
@@ -98,15 +98,42 @@ impl ResourceProviderService {
|
||||
|
||||
/// Get all nodes for a resource_provider
|
||||
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) {
|
||||
// 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 {
|
||||
if let Some(ref sla) = node.marketplace_sla {
|
||||
} else {
|
||||
}
|
||||
log::info!(
|
||||
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
|
||||
} else {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"get_resource_provider_nodes:no_data user={} returning_empty",
|
||||
user_email
|
||||
);
|
||||
Vec::new()
|
||||
}
|
||||
}
|
||||
@@ -1390,10 +1417,25 @@ impl ResourceProviderService {
|
||||
|
||||
/// 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> {
|
||||
// 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
|
||||
let mut added_nodes: Vec<FarmNode> = Vec::new();
|
||||
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 {
|
||||
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())?;
|
||||
|
||||
// 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);
|
||||
|
||||
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
|
||||
let node_id_for_sla = node_id.clone();
|
||||
|
||||
@@ -1481,23 +1539,93 @@ impl ResourceProviderService {
|
||||
};
|
||||
|
||||
// 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(
|
||||
node.total_base_slices as u32,
|
||||
node.allocated_base_slices as u32,
|
||||
&node,
|
||||
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()
|
||||
.map(|c| serde_json::to_value(c).unwrap_or_default())
|
||||
.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());
|
||||
added_nodes.push(node);
|
||||
}
|
||||
|
||||
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())?;
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
|
@@ -143,12 +143,30 @@ impl SliceCalculatorService {
|
||||
|
||||
/// Calculate maximum base slices from node capacity
|
||||
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 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 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
|
||||
std::cmp::min(std::cmp::min(cpu_slices, memory_slices), storage_slices)
|
||||
result
|
||||
}
|
||||
|
||||
/// Generate all possible slice combinations from available base slices
|
||||
@@ -159,10 +177,31 @@ impl SliceCalculatorService {
|
||||
node: &FarmNode,
|
||||
resource_provider_email: &str
|
||||
) -> 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 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 {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"generate_slice_combinations:no_available_slices node_id={} returning_empty",
|
||||
node.id
|
||||
);
|
||||
return combinations;
|
||||
}
|
||||
|
||||
@@ -216,6 +255,30 @@ impl SliceCalculatorService {
|
||||
|
||||
// Sort by multiplier (smallest slices first)
|
||||
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
|
||||
}
|
||||
|
||||
|
@@ -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": []
|
||||
}
|
@@ -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": []
|
||||
}
|
@@ -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": []
|
||||
}
|
@@ -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": []
|
||||
}
|
@@ -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": []
|
||||
}
|
@@ -1 +0,0 @@
|
||||
[]
|
@@ -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"}}
|
||||
]
|
@@ -1 +0,0 @@
|
||||
[]
|
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
}
|
@@ -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
|
||||
}
|
@@ -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
@@ -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"
|
||||
}
|
@@ -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
|
||||
}
|
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"version": "2025-08-09",
|
||||
"schema": 1,
|
||||
"notes": "Initial fixture scaffold with demo users user1..user10"
|
||||
}
|
Reference in New Issue
Block a user