package publishservice
import (
+ "fmt"
"net/http"
"path"
"strings"
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 {
}
}
-func (ps *PublishService) AreAPIsRegistered(serviceDescriptions *[]publishserviceapi.ServiceAPIDescription) bool {
+func (ps *PublishService) AreAPIsPublished(serviceDescriptions *[]publishserviceapi.ServiceAPIDescription) bool {
if serviceDescriptions != nil {
registeredApis := ps.getAllAefIds()
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()
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)
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 {
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()