Skip to content

Commit

Permalink
fix(backend): fixes healthz response by adding json content type. Fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
hsinhoyeh committed May 20, 2022
1 parent b0db428 commit bd38cb5
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 0 deletions.
1 change: 1 addition & 0 deletions backend/src/apiserver/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ func startHttpProxy(resourceManager *resource.ResourceManager) {
topMux.HandleFunc("/apis/v1beta1/pipelines/upload", pipelineUploadServer.UploadPipeline)
topMux.HandleFunc("/apis/v1beta1/pipelines/upload_version", pipelineUploadServer.UploadPipelineVersion)
topMux.HandleFunc("/apis/v1beta1/healthz", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
io.WriteString(w, `{"commit_sha":"`+common.GetStringConfigWithDefault("COMMIT_SHA", "unknown")+`", "tag_name":"`+common.GetStringConfigWithDefault("TAG_NAME", "unknown")+`", "multi_user":`+strconv.FormatBool(common.IsMultiUserMode())+`}`)
})

Expand Down
52 changes: 52 additions & 0 deletions backend/src/common/client/api_server/healthz_client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package api_server

import (
"fmt"

"github.com/go-openapi/strfmt"
apiclient "github.com/kubeflow/pipelines/backend/api/go_http_client/healthz_client"
params "github.com/kubeflow/pipelines/backend/api/go_http_client/healthz_client/healthz_service"
model "github.com/kubeflow/pipelines/backend/api/go_http_client/healthz_model"
"github.com/kubeflow/pipelines/backend/src/common/util"
"k8s.io/client-go/tools/clientcmd"
)

type HealthzInterface interface {
GetHealthz() (*params.GetHealthzOK, error)
}

type HealthzClient struct {
apiClient *apiclient.Healthz
}

func NewHealthzClient(clientConfig clientcmd.ClientConfig, debug bool) (*HealthzClient, error) {
runtime, err := NewHTTPRuntime(clientConfig, debug)
if err != nil {
return nil, err
}

apiClient := apiclient.New(runtime, strfmt.Default)

// Creating upload client
return &HealthzClient{
apiClient: apiClient,
}, nil
}

func (c *HealthzClient) GetHealthz() (*model.APIGetHealthzResponse, error) {
parameters := params.NewGetHealthzParamsWithTimeout(apiServerDefaultTimeout)
response, err := c.apiClient.HealthzService.GetHealthz(parameters, PassThroughAuth)
if err != nil {
if defaultError, ok := err.(*params.GetHealthzDefault); ok {
err = CreateErrorFromAPIStatus(defaultError.Payload.Error, defaultError.Payload.Code)
} else {
err = CreateErrorCouldNotRecoverAPIStatus(err)
}

return nil, util.NewUserError(err,
fmt.Sprintf("Failed to get Healthz. Params: '%+v'", parameters),
fmt.Sprintf("Failed to get Healthz. Params: '%+v'", parameters))

}
return response.Payload, nil
}
64 changes: 64 additions & 0 deletions backend/test/integration/healthz_api_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package integration

import (
"testing"

"github.com/golang/glog"
"github.com/kubeflow/pipelines/backend/src/common/client/api_server"
"github.com/kubeflow/pipelines/backend/test"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
)

type HealthzApiTest struct {
suite.Suite
namespace string
healthzClient *api_server.HealthzClient
}

// Check the namespace have ML job installed and ready
func (s *HealthzApiTest) SetupTest() {
if !*runIntegrationTests {
s.T().SkipNow()
return
}

if !*isDevMode {
err := test.WaitForReady(*namespace, *initializeTimeout)
if err != nil {
glog.Exitf("Failed to initialize test. Error: %v", err)
}
}
s.namespace = *namespace
clientConfig := test.GetClientConfig(*namespace)
var err error
s.healthzClient, err = api_server.NewHealthzClient(clientConfig, false)
if err != nil {
glog.Exitf("Failed to get healthz client. Error: %v", err)
}
s.cleanUp()
}

func (s *HealthzApiTest) TearDownSuite() {
if *runIntegrationTests {
if !*isDevMode {
s.cleanUp()
}
}
}

func (s *HealthzApiTest) cleanUp() {
}

func (s *HealthzApiTest) TestHealthzAPI() {
t := s.T()

/* ---------- Verify healthz response ---------- */
healthzResp, err := s.healthzClient.GetHealthz()
assert.Nil(t, err)
assert.NotNil(t, healthzResp)
}

func TestHealthzAPI(t *testing.T) {
suite.Run(t, new(HealthzApiTest))
}

0 comments on commit bd38cb5

Please sign in to comment.