Implement health check for xApp
[ric-plt/ricdms.git] / pkg / resthooks / resthooks.go
index 622bcaf..e0d7df2 100644 (file)
@@ -22,20 +22,23 @@ package resthooks
 
 import (
        ch "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/charts"
+       "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/deploy"
        ph "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/health"
        "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/models"
        "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/onboard"
        "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/restapi/operations/charts"
+       dp "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/restapi/operations/deploy"
        "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/restapi/operations/health"
        "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/ricdms"
        "github.com/go-openapi/runtime/middleware"
 )
 
-func NewResthook(h ph.IHealthChecker, o onboard.IOnboarder, chMgr ch.IChartMgr) *Resthook {
+func NewResthook(h ph.IHealthChecker, o onboard.IOnboarder, chMgr ch.IChartMgr, depMgr deploy.IDeploy) *Resthook {
        return &Resthook{
                HealthChecker: h,
                Onboarder:     o,
                ChartMgr:      chMgr,
+               DeployMgr:     depMgr,
        }
 }
 
@@ -44,6 +47,15 @@ func (rh *Resthook) GetDMSHealth() (resp middleware.Responder) {
        return health.NewGetHealthCheckOK().WithPayload(rh.HealthChecker.GetStatus())
 }
 
+func (rh *Resthook) GetxAppHealth(appname, namespace string) (resp middleware.Responder) {
+       ricdms.Logger.Debug("Healthchecker: xApp health check is initiated")
+       status := rh.HealthChecker.GetxAppStatus(appname, namespace)
+       if status == nil {
+               return health.NewGetHealthCheckInternalServerError()
+       }
+       return health.NewGetHealthCheckOK().WithPayload(status)
+}
+
 func (rh *Resthook) OnBoard(params *models.Descriptor) (resp middleware.Responder) {
        ricdms.Logger.Debug("onboarder: invoked")
        return rh.Onboarder.Onboard(params)
@@ -70,3 +82,58 @@ func (rh *Resthook) DownloadChart(chartname, version string) (resp middleware.Re
 
        return charts.NewDownloadHelmChartOK().WithPayload(reader)
 }
+
+func (rh *Resthook) GetChartsByName(name string) middleware.Responder {
+       ricdms.Logger.Debug("GetChartByName: invoked")
+       res, err := rh.ChartMgr.GetChartsByName(name)
+
+       if err != nil {
+               ricdms.Logger.Error("error: %v", err)
+               return charts.NewGetChartInternalServerError()
+       }
+
+       response := make([]interface{}, 0)
+       for _, item := range res {
+               response = append(response, item)
+       }
+
+       return charts.NewGetChartOK().WithPayload(response)
+}
+
+func (rh *Resthook) GetChartByNameAndVersion(name, version string) middleware.Responder {
+       ricdms.Logger.Debug("GetChartByNameAndVersion is invoked")
+       resp, err := rh.ChartMgr.GetChartsByNameAndVersion(name, version)
+
+       if err != nil {
+               return charts.NewGetChartsFetcherInternalServerError()
+       }
+
+       return charts.NewGetChartsFetcherOK().WithPayload(resp)
+}
+
+func (rh *Resthook) DownloadAndInstallChart(appname, version, namespace string) middleware.Responder {
+       ricdms.Logger.Debug("DownloadAndInstall Chart is invoked")
+       reader, err := rh.ChartMgr.DownloadChart(appname, version)
+
+       if err != nil {
+               ricdms.Logger.Error("error in downloading the chart : %v", err)
+               return dp.NewPostDeployInternalServerError()
+       }
+
+       err = rh.DeployMgr.Deploy(reader, appname, version, namespace)
+       if err != nil {
+               return dp.NewPostDeployInternalServerError()
+       }
+       return dp.NewPostDeployCreated()
+}
+
+func (rh *Resthook) UninstallChart(appname, version, namespace string) middleware.Responder {
+       ricdms.Logger.Debug("Uninstall chart is invoked")
+       err := rh.DeployMgr.Uninstall(appname, version, namespace)
+       if err != nil {
+               ricdms.Logger.Error("Uninstall failed: %v", err)
+               return dp.NewDeleteDeployInternalServerError()
+       }
+
+       return dp.NewDeleteDeployCreated()
+}