mirror of
https://github.com/beclab/Olares
synced 2026-04-21 13:37:46 +00:00
* refactor: integrate app service into main repo * Delete framework/app-service/LICENSE.md * fix(manifest): remove unused manager deploy file * refactor: change the output dir of CRDs to the standard path --------- Co-authored-by: Peng Peng <billpengpeng@gmail.com>
71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package apiserver
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"bytetrade.io/web3os/app-service/pkg/apiserver/api"
|
|
"bytetrade.io/web3os/app-service/pkg/appwatchers"
|
|
"github.com/emicklei/go-restful/v3"
|
|
"k8s.io/klog/v2"
|
|
)
|
|
|
|
var singleTask *sync.Once = &sync.Once{}
|
|
|
|
func (h *Handler) highload(req *restful.Request, resp *restful.Response) {
|
|
var load struct {
|
|
CPU float64 `json:"cpu"`
|
|
Memory float64 `json:"memory"`
|
|
}
|
|
|
|
err := req.ReadEntity(&load)
|
|
if err != nil {
|
|
klog.Errorf("Failed to read request err=%v", err)
|
|
api.HandleBadRequest(resp, req, err)
|
|
return
|
|
}
|
|
|
|
klog.Infof("System resources high load cpu=%v memory=%v", load.CPU, load.Memory)
|
|
|
|
// start application suspending task
|
|
singleTask.Do(func() {
|
|
go func() {
|
|
err := appwatchers.SuspendTopApp(h.serviceCtx, h.ctrlClient)
|
|
if err != nil {
|
|
klog.Errorf("Failed to suspend applications err=%v", err)
|
|
}
|
|
singleTask = &sync.Once{}
|
|
}()
|
|
})
|
|
|
|
resp.WriteAsJson(map[string]int{"code": 0})
|
|
|
|
}
|
|
|
|
var userSingleTask = &sync.Once{}
|
|
|
|
func (h *Handler) userHighLoad(req *restful.Request, resp *restful.Response) {
|
|
var load struct {
|
|
CPU float64 `json:"cpu"`
|
|
Memory float64 `json:"memory"`
|
|
User string `json:"user"`
|
|
}
|
|
|
|
err := req.ReadEntity(&load)
|
|
if err != nil {
|
|
klog.Errorf("Failed to read request err=%v", err)
|
|
api.HandleBadRequest(resp, req, err)
|
|
return
|
|
}
|
|
klog.Infof("User: %s resources high load, cpu %.2f, mem %.2f", load.User, load.CPU, load.Memory)
|
|
|
|
userSingleTask.Do(func() {
|
|
go func() {
|
|
err := appwatchers.SuspendUserTopApp(h.serviceCtx, h.ctrlClient, load.User)
|
|
if err != nil {
|
|
klog.Errorf("Failed to suspend application user=%s err=%v", load.User, err)
|
|
}
|
|
userSingleTask = &sync.Once{}
|
|
}()
|
|
})
|
|
resp.WriteAsJson(map[string]int{"code": 0})
|
|
}
|