Implement health check for xApp
[ric-plt/ricdms.git] / pkg / resthooks / resthooks.go
1 //==================================================================================
2 //  Copyright (c) 2022 Samsung
3 //
4 //   Licensed under the Apache License, Version 2.0 (the "License");
5 //   you may not use this file except in compliance with the License.
6 //   You may obtain a copy of the License at
7 //
8 //       http://www.apache.org/licenses/LICENSE-2.0
9 //
10 //   Unless required by applicable law or agreed to in writing, software
11 //   distributed under the License is distributed on an "AS IS" BASIS,
12 //   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 //   See the License for the specific language governing permissions and
14 //   limitations under the License.
15 //
16 //   This source code is part of the near-RT RIC (RAN Intelligent Controller)
17 //   platform project (RICP).
18 //==================================================================================
19 //
20
21 package resthooks
22
23 import (
24         ch "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/charts"
25         "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/deploy"
26         ph "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/health"
27         "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/models"
28         "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/onboard"
29         "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/restapi/operations/charts"
30         dp "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/restapi/operations/deploy"
31         "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/restapi/operations/health"
32         "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/ricdms"
33         "github.com/go-openapi/runtime/middleware"
34 )
35
36 func NewResthook(h ph.IHealthChecker, o onboard.IOnboarder, chMgr ch.IChartMgr, depMgr deploy.IDeploy) *Resthook {
37         return &Resthook{
38                 HealthChecker: h,
39                 Onboarder:     o,
40                 ChartMgr:      chMgr,
41                 DeployMgr:     depMgr,
42         }
43 }
44
45 func (rh *Resthook) GetDMSHealth() (resp middleware.Responder) {
46         ricdms.Logger.Debug("healthchecker : %v\n", rh.HealthChecker)
47         return health.NewGetHealthCheckOK().WithPayload(rh.HealthChecker.GetStatus())
48 }
49
50 func (rh *Resthook) GetxAppHealth(appname, namespace string) (resp middleware.Responder) {
51         ricdms.Logger.Debug("Healthchecker: xApp health check is initiated")
52         status := rh.HealthChecker.GetxAppStatus(appname, namespace)
53         if status == nil {
54                 return health.NewGetHealthCheckInternalServerError()
55         }
56         return health.NewGetHealthCheckOK().WithPayload(status)
57 }
58
59 func (rh *Resthook) OnBoard(params *models.Descriptor) (resp middleware.Responder) {
60         ricdms.Logger.Debug("onboarder: invoked")
61         return rh.Onboarder.Onboard(params)
62 }
63
64 func (rh *Resthook) GetCharts() (resp middleware.Responder) {
65         ricdms.Logger.Debug("getcharts: invoked")
66         chartList, err := rh.ChartMgr.GetCharts()
67
68         if err != nil {
69                 return charts.NewGetChartsListInternalServerError()
70         }
71         return charts.NewGetChartsListOK().WithPayload(chartList)
72 }
73
74 func (rh *Resthook) DownloadChart(chartname, version string) (resp middleware.Responder) {
75         ricdms.Logger.Debug("DownloadCharts: invoked")
76         reader, err := rh.ChartMgr.DownloadChart(chartname, version)
77
78         if err != nil {
79                 ricdms.Logger.Error("Error : %v", err)
80                 return charts.NewDownloadHelmChartInternalServerError()
81         }
82
83         return charts.NewDownloadHelmChartOK().WithPayload(reader)
84 }
85
86 func (rh *Resthook) GetChartsByName(name string) middleware.Responder {
87         ricdms.Logger.Debug("GetChartByName: invoked")
88         res, err := rh.ChartMgr.GetChartsByName(name)
89
90         if err != nil {
91                 ricdms.Logger.Error("error: %v", err)
92                 return charts.NewGetChartInternalServerError()
93         }
94
95         response := make([]interface{}, 0)
96         for _, item := range res {
97                 response = append(response, item)
98         }
99
100         return charts.NewGetChartOK().WithPayload(response)
101 }
102
103 func (rh *Resthook) GetChartByNameAndVersion(name, version string) middleware.Responder {
104         ricdms.Logger.Debug("GetChartByNameAndVersion is invoked")
105         resp, err := rh.ChartMgr.GetChartsByNameAndVersion(name, version)
106
107         if err != nil {
108                 return charts.NewGetChartsFetcherInternalServerError()
109         }
110
111         return charts.NewGetChartsFetcherOK().WithPayload(resp)
112 }
113
114 func (rh *Resthook) DownloadAndInstallChart(appname, version, namespace string) middleware.Responder {
115         ricdms.Logger.Debug("DownloadAndInstall Chart is invoked")
116         reader, err := rh.ChartMgr.DownloadChart(appname, version)
117
118         if err != nil {
119                 ricdms.Logger.Error("error in downloading the chart : %v", err)
120                 return dp.NewPostDeployInternalServerError()
121         }
122
123         err = rh.DeployMgr.Deploy(reader, appname, version, namespace)
124         if err != nil {
125                 return dp.NewPostDeployInternalServerError()
126         }
127         return dp.NewPostDeployCreated()
128 }
129
130 func (rh *Resthook) UninstallChart(appname, version, namespace string) middleware.Responder {
131         ricdms.Logger.Debug("Uninstall chart is invoked")
132         err := rh.DeployMgr.Uninstall(appname, version, namespace)
133         if err != nil {
134                 ricdms.Logger.Error("Uninstall failed: %v", err)
135                 return dp.NewDeleteDeployInternalServerError()
136         }
137
138         return dp.NewDeleteDeployCreated()
139 }