X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=inline;f=capifcore%2Finternal%2Fpublishservice%2Fpublishservice.go;h=2b7f52d90add9065493199afd9434e66801a69a4;hb=de80bd1d75e2f9c410a0c626e4d03fa250fcb183;hp=c62e73be31bb1a298707fa9ebfb5978476b2ba00;hpb=f083d47095bf223383a4e6c17d895655b900f9de;p=nonrtric%2Fplt%2Fsme.git diff --git a/capifcore/internal/publishservice/publishservice.go b/capifcore/internal/publishservice/publishservice.go index c62e73b..2b7f52d 100644 --- a/capifcore/internal/publishservice/publishservice.go +++ b/capifcore/internal/publishservice/publishservice.go @@ -21,6 +21,7 @@ package publishservice import ( + "fmt" "net/http" "path" "strings" @@ -38,10 +39,10 @@ import ( log "github.com/sirupsen/logrus" ) -//go:generate mockery --name APIRegister -type APIRegister interface { - AreAPIsRegistered(serviceDescriptions *[]publishserviceapi.ServiceAPIDescription) bool - IsAPIRegistered(aefId, path string) bool +//go:generate mockery --name PublishRegister +type PublishRegister interface { + AreAPIsPublished(serviceDescriptions *[]publishserviceapi.ServiceAPIDescription) bool + IsAPIPublished(aefId, path string) bool } type PublishService struct { @@ -59,7 +60,7 @@ func NewPublishService(serviceRegister providermanagement.ServiceRegister, hm he } } -func (ps *PublishService) AreAPIsRegistered(serviceDescriptions *[]publishserviceapi.ServiceAPIDescription) bool { +func (ps *PublishService) AreAPIsPublished(serviceDescriptions *[]publishserviceapi.ServiceAPIDescription) bool { if serviceDescriptions != nil { registeredApis := ps.getAllAefIds() @@ -115,19 +116,30 @@ func checkProfiles(newProfiles *[]publishserviceapi.AefProfile, registeredAefIds return allRegistered } -func (ps *PublishService) IsAPIRegistered(aefId, path string) bool { +func (ps *PublishService) IsAPIPublished(aefId, path string) bool { return slices.Contains(ps.getAllAefIds(), aefId) } func (ps *PublishService) GetApfIdServiceApis(ctx echo.Context, apfId string) error { - return ctx.NoContent(http.StatusNotImplemented) + serviceDescriptions, ok := ps.publishedServices[apfId] + if ok { + err := ctx.JSON(http.StatusOK, serviceDescriptions) + if err != nil { + // Something really bad happened, tell Echo that our handler failed + return err + } + } else { + return sendCoreError(ctx, http.StatusNotFound, fmt.Sprintf("Provider %s not registered", apfId)) + } + + return nil } func (ps *PublishService) PostApfIdServiceApis(ctx echo.Context, apfId string) error { var newServiceAPIDescription publishserviceapi.ServiceAPIDescription err := ctx.Bind(&newServiceAPIDescription) if err != nil { - return sendCoreError(ctx, http.StatusBadRequest, "Invalid format for service") + return sendCoreError(ctx, http.StatusBadRequest, "Invalid format for service "+apfId) } ps.lock.Lock() @@ -136,20 +148,18 @@ func (ps *PublishService) PostApfIdServiceApis(ctx echo.Context, apfId string) e registeredFuncs := ps.serviceRegister.GetAefsForPublisher(apfId) for _, profile := range *newServiceAPIDescription.AefProfiles { if !slices.Contains(registeredFuncs, profile.AefId) { - return sendCoreError(ctx, http.StatusNotFound, "Function not registered, "+profile.AefId) + return sendCoreError(ctx, http.StatusNotFound, fmt.Sprintf("Function %s not registered", profile.AefId)) } } newId := "api_id_" + newServiceAPIDescription.ApiName newServiceAPIDescription.ApiId = &newId - info := strings.Split(*newServiceAPIDescription.Description, ",") - if len(info) == 5 { - err = ps.helmManager.InstallHelmChart(info[1], info[2], info[3], info[4]) - if err != nil { - return sendCoreError(ctx, http.StatusBadRequest, "Unable to install Helm chart due to: "+err.Error()) - } - log.Info("Installed service: ", newId) + + shouldReturn, returnValue := ps.installHelmChart(newServiceAPIDescription, ctx) + if shouldReturn { + return returnValue } + _, ok := ps.publishedServices[apfId] if ok { ps.publishedServices[apfId] = append(ps.publishedServices[apfId], &newServiceAPIDescription) @@ -168,6 +178,18 @@ func (ps *PublishService) PostApfIdServiceApis(ctx echo.Context, apfId string) e return nil } +func (ps *PublishService) installHelmChart(newServiceAPIDescription publishserviceapi.ServiceAPIDescription, ctx echo.Context) (bool, error) { + info := strings.Split(*newServiceAPIDescription.Description, ",") + if len(info) == 5 { + err := ps.helmManager.InstallHelmChart(info[1], info[2], info[3], info[4]) + if err != nil { + return true, sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf("Unable to install Helm chart %s due to: %s", info[3], err.Error())) + } + log.Debug("Installed service: ", newServiceAPIDescription.ApiId) + } + return false, nil +} + func (ps *PublishService) DeleteApfIdServiceApisServiceApiId(ctx echo.Context, apfId string, serviceApiId string) error { serviceDescriptions, ok := ps.publishedServices[string(apfId)] if ok { @@ -176,7 +198,7 @@ func (ps *PublishService) DeleteApfIdServiceApisServiceApiId(ctx echo.Context, a info := strings.Split(*description.Description, ",") if len(info) == 5 { ps.helmManager.UninstallHelmChart(info[1], info[3]) - log.Info("Deleted service: ", serviceApiId) + log.Debug("Deleted service: ", serviceApiId) } ps.lock.Lock() defer ps.lock.Unlock()