Files
Olares/framework/app-service/pkg/apiserver/handler_installer_utils.go
dkeven 7f09420bdf fix(appservice): update depedencies to fix some vulnerabilities (#2314)
* refactor(appservice): rename go module to fit into the main repo (#2311)

* fix(appservice): update depedencies to fix some vulnerabilities (#2313)
2025-12-25 11:30:55 +08:00

114 lines
3.6 KiB
Go

package apiserver
import (
"context"
"encoding/json"
"errors"
"fmt"
"net/http"
"time"
"github.com/beclab/Olares/framework/app-service/api/app.bytetrade.io/v1alpha1"
"github.com/beclab/Olares/framework/app-service/pkg/apiserver/api"
"github.com/beclab/Olares/framework/app-service/pkg/constants"
apputils "github.com/beclab/Olares/framework/app-service/pkg/utils/app"
"github.com/beclab/Olares/framework/app-service/pkg/workflowinstaller"
"github.com/emicklei/go-restful/v3"
"github.com/go-resty/resty/v2"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/client"
)
// UpdateAppState update applicationmanager state, message
func (h *Handler) UpdateAppState(ctx context.Context, name string, state v1alpha1.ApplicationManagerState, message string) error {
var appMgr v1alpha1.ApplicationManager
key := types.NamespacedName{Name: name}
err := h.ctrlClient.Get(ctx, key, &appMgr)
if err != nil {
return err
}
appMgrCopy := appMgr.DeepCopy()
now := metav1.Now()
appMgr.Status.State = state
appMgr.Status.Message = message
appMgr.Status.StatusTime = &now
appMgr.Status.UpdateTime = &now
err = h.ctrlClient.Status().Patch(ctx, &appMgr, client.MergeFrom(appMgrCopy))
return err
}
func (h *Handler) checkDependencies(req *restful.Request, resp *restful.Response) {
owner := req.Attribute(constants.UserContextAttribute) // get owner from request token
var err error
depReq := depRequest{}
err = req.ReadEntity(&depReq)
if err != nil {
api.HandleError(resp, req, err)
return
}
unSatisfiedDeps, _ := apputils.CheckDependencies(req.Request.Context(), h.ctrlClient, depReq.Data, owner.(string), true)
klog.Infof("Check application dependencies unSatisfiedDeps=%v", unSatisfiedDeps)
data := make([]api.DependenciesRespData, 0)
for _, dep := range unSatisfiedDeps {
data = append(data, api.DependenciesRespData{
Name: dep.Name,
Version: dep.Version,
Type: dep.Type,
})
}
resp.WriteEntity(api.DependenciesResp{
Response: api.Response{Code: 200},
Data: data,
})
}
func (h *Handler) cleanRecommendFeedData(name, owner string) error {
knowledgeAPI := fmt.Sprintf("http://knowledge-base-api.user-system-%s:3010", owner)
feedAPI := knowledgeAPI + "/knowledge/feed/algorithm/" + name
client := resty.New()
response, err := client.R().Get(feedAPI)
if err != nil {
return err
}
if response.StatusCode() != http.StatusOK {
klog.Errorf("Failed to get knowledge feed list status=%s body=%s", response.Status(), response.String())
return errors.New(response.Status())
}
var ret workflowinstaller.KnowledgeAPIResp
err = json.Unmarshal(response.Body(), &ret)
if err != nil {
return err
}
feedUrls := ret.Data
klog.Info("Start to clean recommend feed data ", feedAPI, len(feedUrls))
if len(feedUrls) > 0 {
limit := 10
removeClient := resty.New()
for i := 0; i*limit < len(feedUrls); i++ {
start := i * limit
end := start + limit
if end > len(feedUrls) {
end = len(feedUrls)
}
removeList := feedUrls[start:end]
reqData := workflowinstaller.KnowledgeFeedDelReq{FeedUrls: removeList}
removeBody, _ := json.Marshal(reqData)
res, _ := removeClient.SetTimeout(5*time.Second).R().SetHeader(restful.HEADER_ContentType, restful.MIME_JSON).
SetBody(removeBody).Delete(feedAPI)
if res.StatusCode() == http.StatusOK {
klog.Info("Delete feed success: ", i, len(removeList))
} else {
klog.Errorf("Failed to clean recommend feed data err=%s", string(res.Body()))
}
}
}
klog.Info("Delete entry success page: ", name, len(feedUrls))
return nil
}