From e418ea99d7b198e128739bbeffde722e8778ea20 Mon Sep 17 00:00:00 2001 From: Philip-21 Date: Tue, 14 Jan 2025 01:02:05 +0100 Subject: [PATCH 1/3] first commits Signed-off-by: Philip-21 --- pkg/api/controllers/provider/health.go | 34 ++++++++++++++++++++++++++ pkg/api/server.go | 1 + pkg/provider/manager/manager.go | 9 +++++++ 3 files changed, 44 insertions(+) create mode 100644 pkg/api/controllers/provider/health.go diff --git a/pkg/api/controllers/provider/health.go b/pkg/api/controllers/provider/health.go new file mode 100644 index 0000000000..c1fd88e369 --- /dev/null +++ b/pkg/api/controllers/provider/health.go @@ -0,0 +1,34 @@ +package provider + +import ( + "fmt" + "net/http" + + "github.com/daytonaio/daytona/pkg/api/controllers/provider/dto" + "github.com/daytonaio/daytona/pkg/server" + "github.com/gin-gonic/gin" +) + +// HealthCheck godoc +// +// @Tags provider +// @Summary Provider health check +// @Description Provider health check +// @Success 200 +// @Router /provider/health [get] +// @id HealthCheck +func HealthCheck(ctx *gin.Context) { + var req dto.Provider + err := ctx.BindJSON(&req) + if err != nil { + ctx.AbortWithError(http.StatusBadRequest, fmt.Errorf("invalid request body: %w", err)) + return + } + server := server.GetInstance(nil) + exist := server.ProviderManager.IsInitialized(req.Name) + if !exist { + ctx.AbortWithError(http.StatusInternalServerError, fmt.Errorf("failed to initialize provider: %w", err)) + return + } + ctx.Status(200) +} diff --git a/pkg/api/server.go b/pkg/api/server.go index 12e704c175..3597efda95 100644 --- a/pkg/api/server.go +++ b/pkg/api/server.go @@ -236,6 +236,7 @@ func (a *ApiServer) Start() error { providerController.GET("/", provider.ListProviders) providerController.POST("/:provider/uninstall", provider.UninstallProvider) providerController.GET("/:provider/target-manifest", provider.GetTargetManifest) + providerController.GET("/health", provider.HealthCheck) } containerRegistryController := protected.Group("/container-registry") diff --git a/pkg/provider/manager/manager.go b/pkg/provider/manager/manager.go index 6f554f3af0..d8eb377f39 100644 --- a/pkg/provider/manager/manager.go +++ b/pkg/provider/manager/manager.go @@ -46,6 +46,7 @@ type IProviderManager interface { TerminateProviderProcesses(providersBasePath string) error UninstallProvider(name string) error Purge() error + IsInitialized(providerName string) bool } type ProviderManagerConfig struct { @@ -335,3 +336,11 @@ func (m *ProviderManager) dispenseProvider(client *plugin.Client, name string) ( return &provider, nil } + +func (m *ProviderManager) IsInitialized(providerName string) bool { + pluginRef, exists := m.pluginRefs[providerName] + if !exists { + return false + } + return pluginRef != nil +} From 6d880bdd1ec66c25559f838ad4b872dcb912f277 Mon Sep 17 00:00:00 2001 From: Philip-21 Date: Tue, 14 Jan 2025 11:24:14 +0100 Subject: [PATCH 2/3] changes Signed-off-by: Philip-21 --- pkg/api/controllers/provider/health.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/api/controllers/provider/health.go b/pkg/api/controllers/provider/health.go index c1fd88e369..d413a4825a 100644 --- a/pkg/api/controllers/provider/health.go +++ b/pkg/api/controllers/provider/health.go @@ -9,7 +9,7 @@ import ( "github.com/gin-gonic/gin" ) -// HealthCheck godoc +// HealthCheck godoc // // @Tags provider // @Summary Provider health check From b244b85a21dfc0f035c279ed58ea7b7ce1f89732 Mon Sep 17 00:00:00 2001 From: Philip-21 Date: Tue, 14 Jan 2025 11:44:15 +0100 Subject: [PATCH 3/3] licenses Signed-off-by: Philip-21 --- pkg/api/controllers/provider/health.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/api/controllers/provider/health.go b/pkg/api/controllers/provider/health.go index d413a4825a..4add7194f1 100644 --- a/pkg/api/controllers/provider/health.go +++ b/pkg/api/controllers/provider/health.go @@ -1,3 +1,6 @@ +// Copyright 2024 Daytona Platforms Inc. +// SPDX-License-Identifier: Apache-2.0 + package provider import (