Skip to content

Commit c921583

Browse files
author
secus
committed
Fix deployment API and Kubernetes service
- Fixed env_vars field name in frontend (envVars -> env_vars) - Fixed API base URL to use localhost for development - Updated documentation page structure and content - Improved Kubernetes service logging and error handling - Fixed deployment handler to pass correct env_vars format - Added migration file for desired_replicas column - Cleaned up verbose Kubernetes logging output - Fixed update_deployment_env_vars to properly update existing deployments
1 parent 4e80011 commit c921583

7 files changed

Lines changed: 1026 additions & 1496 deletions

File tree

apps/container-engine-frontend/src/api/api.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import axios from 'axios';
33
// Base API configuration
44
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || window.location.origin;
55
// const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || "http://localhost:3000";
6+
// const API_BASE_URL = "https://decenter.run";
7+
8+
69

710

811
// Create axios instance with default config

apps/container-engine-frontend/src/pages/DocumentationPage.tsx

Lines changed: 722 additions & 1222 deletions
Large diffs are not rendered by default.

apps/container-engine-frontend/src/pages/NewDeploymentPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ const NewDeploymentPage: React.FC = () => {
7676
app_name,
7777
image,
7878
port,
79-
envVars: formattedEnvVars,
79+
env_vars: formattedEnvVars,
8080
replicas,
8181
});
8282

migrations/20241015000001_add_desired_replicas.sql

Whitespace-only changes.

src/handlers/deployment.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,13 @@ pub async fn create_deployment(
5050
);
5151

5252
// Convert optional fields to JSON
53-
let env_vars_for_job = payload.env_vars.clone();
5453
let env_vars_value = payload.env_vars.unwrap_or_default();
5554
let env_vars_json = serde_json::to_value(&env_vars_value)?;
5655
let resources = Some(serde_json::to_value(payload.resources.unwrap_or_default())?);
5756
let health_check = payload
5857
.health_check
5958
.map(|hc| serde_json::to_value(hc))
6059
.transpose()?;
61-
6260
sqlx::query!(
6361
r#"
6462
INSERT INTO deployments (
@@ -86,14 +84,16 @@ pub async fn create_deployment(
8684
)
8785
.execute(&state.db.pool)
8886
.await?;
87+
88+
8989
// TODO: Implement Kubernetes deployment logic here
9090
let job = DeploymentJob::new(
9191
deployment_id,
9292
user.user_id,
9393
payload.app_name.clone(),
9494
payload.image.clone(),
9595
payload.port,
96-
env_vars_for_job,
96+
Some(env_vars_value), // Pass the actual HashMap instead of Option
9797
payload.replicas,
9898
resources,
9999
health_check,

src/jobs/deployment_worker.rs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -429,23 +429,23 @@ impl DeploymentWorker {
429429
)
430430
.await
431431
{
432-
// Call user webhooks for successful start
432+
error!("Failed to update deployment status to running: {}", e);
433+
// Call user webhooks for failed start (database update failed)
433434
self.call_user_webhooks(
434435
job.user_id,
435-
crate::user::webhook_models::WebhookEvent::DeploymentStarted,
436+
crate::user::webhook_models::WebhookEvent::DeploymentStartFailed,
436437
&job,
437438
)
438439
.await;
439-
error!("Failed to update deployment status to running: {}", e);
440440
} else {
441-
// Call user webhooks for failed start
441+
// Successfully started deployment
442+
// Call user webhooks for successful start
442443
self.call_user_webhooks(
443444
job.user_id,
444-
crate::user::webhook_models::WebhookEvent::DeploymentStartFailed,
445+
crate::user::webhook_models::WebhookEvent::DeploymentStarted,
445446
&job,
446447
)
447448
.await;
448-
// Successfully started deployment
449449
}
450450
}
451451
Err(e) => {
@@ -458,6 +458,13 @@ impl DeploymentWorker {
458458
Some(&format!("Start failed: {}", e)),
459459
)
460460
.await;
461+
// Call user webhooks for failed start (K8s scale failed)
462+
self.call_user_webhooks(
463+
job.user_id,
464+
crate::user::webhook_models::WebhookEvent::DeploymentStartFailed,
465+
&job,
466+
)
467+
.await;
461468
}
462469
}
463470
}
@@ -478,11 +485,14 @@ impl DeploymentWorker {
478485
// Scale to 0 replicas
479486
match k8s_service.scale_deployment(&job.deployment_id, 0).await {
480487
Ok(_) => {
481-
if let Err(e) = sqlx::query!(
482-
"UPDATE deployments SET status = 'stopped', replicas = 0, updated_at = NOW() WHERE id = $1",
483-
job.deployment_id
488+
// Only update status, keep replicas unchanged for restart
489+
if let Err(e) = Self::update_deployment_status(
490+
&self.db_pool,
491+
job.deployment_id,
492+
"stopped",
493+
None,
494+
None,
484495
)
485-
.execute(&self.db_pool)
486496
.await
487497
{
488498
// Call user webhooks for failed stop

0 commit comments

Comments
 (0)