2 ==================================================================================
3 Copyright (c) 2021 Samsung
5 Licensed under the Apache License, Version 2.0 (the "License");
6 you may not use this file except in compliance with the License.
7 You may obtain a copy of the License at
9 http://www.apache.org/licenses/LICENSE-2.0
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
17 This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 platform project (RICP).
19 ==================================================================================
27 "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/a1"
28 "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/models"
29 "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/restapi"
30 "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/restapi/operations"
31 "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/restapi/operations/a1_e_i_data_delivery"
32 "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/restapi/operations/a1_mediator"
33 "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/resthooks"
34 "github.com/go-openapi/loads"
35 "github.com/go-openapi/runtime/middleware"
38 func NewRestful() *Restful {
40 rh: resthooks.NewResthook(),
42 r.api = r.setupHandler()
46 func (r *Restful) setupHandler() *operations.A1API {
47 swaggerSpec, err := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON)
52 api := operations.NewA1API(swaggerSpec)
53 api.A1MediatorA1ControllerGetAllPolicyTypesHandler = a1_mediator.A1ControllerGetAllPolicyTypesHandlerFunc(func(param a1_mediator.A1ControllerGetAllPolicyTypesParams) middleware.Responder {
54 a1.Logger.Debug("handler for get all policy type")
55 return a1_mediator.NewA1ControllerGetAllPolicyTypesOK().WithPayload(r.rh.GetAllPolicyType())
58 api.A1MediatorA1ControllerCreatePolicyTypeHandler = a1_mediator.A1ControllerCreatePolicyTypeHandlerFunc(func(params a1_mediator.A1ControllerCreatePolicyTypeParams) middleware.Responder {
59 a1.Logger.Debug("handler for Create policy type ")
60 if err = r.rh.CreatePolicyType(models.PolicyTypeID(params.PolicyTypeID), *params.Body); err == nil {
61 //Increase prometheus counter
62 return a1_mediator.NewA1ControllerCreatePolicyTypeCreated()
64 if r.rh.IsTypeAlready(err) || r.rh.IsTypeMismatch(err) {
65 return a1_mediator.NewA1ControllerCreatePolicyTypeBadRequest()
67 return a1_mediator.NewA1ControllerCreatePolicyTypeServiceUnavailable()
71 api.A1MediatorA1ControllerGetPolicyTypeHandler = a1_mediator.A1ControllerGetPolicyTypeHandlerFunc(func(params a1_mediator.A1ControllerGetPolicyTypeParams) middleware.Responder {
72 a1.Logger.Debug("handler for get policy type from policytypeID")
73 return a1_mediator.NewA1ControllerGetPolicyTypeOK().WithPayload(r.rh.GetPolicyType(models.PolicyTypeID(params.PolicyTypeID)))
76 api.A1MediatorA1ControllerCreateOrReplacePolicyInstanceHandler = a1_mediator.A1ControllerCreateOrReplacePolicyInstanceHandlerFunc(func(params a1_mediator.A1ControllerCreateOrReplacePolicyInstanceParams) middleware.Responder {
77 a1.Logger.Debug("handler for create policy type instance ")
78 if err = r.rh.CreatePolicyInstance(models.PolicyTypeID(params.PolicyTypeID), models.PolicyInstanceID(params.PolicyInstanceID), params.Body); err == nil {
79 return a1_mediator.NewA1ControllerCreateOrReplacePolicyInstanceAccepted()
81 if r.rh.IsValidJson(err) {
82 return a1_mediator.NewA1ControllerCreateOrReplacePolicyInstanceBadRequest()
84 return a1_mediator.NewA1ControllerCreateOrReplacePolicyInstanceServiceUnavailable()
88 api.A1MediatorA1ControllerGetPolicyInstanceHandler = a1_mediator.A1ControllerGetPolicyInstanceHandlerFunc(func(params a1_mediator.A1ControllerGetPolicyInstanceParams) middleware.Responder {
89 a1.Logger.Debug("handler for get policy instance from policytypeID")
90 if resp, err := r.rh.GetPolicyInstance(models.PolicyTypeID(params.PolicyTypeID), models.PolicyInstanceID(params.PolicyInstanceID)); err == nil {
91 return a1_mediator.NewA1ControllerGetPolicyInstanceOK().WithPayload(resp)
93 if r.rh.IsPolicyInstanceNotFound(err) {
94 return a1_mediator.NewA1ControllerGetPolicyInstanceNotFound()
96 return a1_mediator.NewA1ControllerGetPolicyInstanceServiceUnavailable()
99 api.A1MediatorA1ControllerGetAllInstancesForTypeHandler = a1_mediator.A1ControllerGetAllInstancesForTypeHandlerFunc(func(params a1_mediator.A1ControllerGetAllInstancesForTypeParams) middleware.Responder {
100 a1.Logger.Debug("handler for get all policy instance")
101 if resp, err := r.rh.GetAllPolicyInstance(models.PolicyTypeID(params.PolicyTypeID)); err == nil {
103 return a1_mediator.NewA1ControllerGetAllInstancesForTypeOK().WithPayload(resp)
106 if r.rh.IsPolicyInstanceNotFound(err) {
107 return a1_mediator.NewA1ControllerGetPolicyInstanceNotFound()
109 return a1_mediator.NewA1ControllerGetAllInstancesForTypeServiceUnavailable()
113 api.A1MediatorA1ControllerDeletePolicyTypeHandler = a1_mediator.A1ControllerDeletePolicyTypeHandlerFunc(func(params a1_mediator.A1ControllerDeletePolicyTypeParams) middleware.Responder {
114 a1.Logger.Debug("handler for delete policy type")
115 if err := r.rh.DeletePolicyType(models.PolicyTypeID(params.PolicyTypeID)); err != nil {
116 if r.rh.CanPolicyTypeBeDeleted(err) {
117 return a1_mediator.NewA1ControllerDeletePolicyTypeBadRequest()
119 return a1_mediator.NewA1ControllerDeletePolicyTypeServiceUnavailable()
122 return a1_mediator.NewA1ControllerDeletePolicyTypeNoContent()
126 api.A1MediatorA1ControllerGetPolicyInstanceStatusHandler = a1_mediator.A1ControllerGetPolicyInstanceStatusHandlerFunc(func(params a1_mediator.A1ControllerGetPolicyInstanceStatusParams) middleware.Responder {
127 a1.Logger.Debug("handler for get policy instance status")
128 if resp, err := r.rh.GetPolicyInstanceStatus(models.PolicyTypeID(params.PolicyTypeID), models.PolicyInstanceID(params.PolicyInstanceID)); err == nil {
129 return a1_mediator.NewA1ControllerGetPolicyInstanceStatusOK().WithPayload(resp)
131 if r.rh.IsPolicyInstanceNotFound(err) {
132 return a1_mediator.NewA1ControllerGetPolicyInstanceStatusNotFound()
134 return a1_mediator.NewA1ControllerGetPolicyInstanceStatusServiceUnavailable()
137 api.A1MediatorA1ControllerDeletePolicyInstanceHandler = a1_mediator.A1ControllerDeletePolicyInstanceHandlerFunc(func(params a1_mediator.A1ControllerDeletePolicyInstanceParams) middleware.Responder {
138 a1.Logger.Debug("handler for delete policy instance")
139 if err := r.rh.DeletePolicyInstance(models.PolicyTypeID(params.PolicyTypeID), models.PolicyInstanceID(params.PolicyInstanceID)); err != nil {
140 if r.rh.CanPolicyInstanceBeDeleted(err) {
141 return a1_mediator.NewA1ControllerDeletePolicyInstanceNotFound()
143 return a1_mediator.NewA1ControllerDeletePolicyInstanceServiceUnavailable()
146 return a1_mediator.NewA1ControllerDeletePolicyInstanceAccepted()
150 api.A1eiDataDeliveryA1ControllerDataDeliveryHandler = a1_e_i_data_delivery.A1ControllerDataDeliveryHandlerFunc(func(params a1_e_i_data_delivery.A1ControllerDataDeliveryParams) middleware.Responder {
151 a1.Logger.Debug("handler for EI data delivery")
152 if err = r.rh.DataDelivery(params.Body); err != nil {
153 return a1_e_i_data_delivery.NewA1ControllerDataDeliveryNotFound()
155 return a1_e_i_data_delivery.NewA1ControllerDataDeliveryOK()
162 func (r *Restful) Run() {
164 server := restapi.NewServer(r.api)
165 defer server.Shutdown()
167 server.Host = "0.0.0.0"
168 if err := server.Serve(); err != nil {
169 log.Fatal(err.Error())