代码拉取完成,页面将自动刷新
package simcar
import (
"context"
"fmt"
"gitee.com/info-superbahn-ict/superbahn/internal/supbstrategies/v3_test/strategies/request"
m1 "gitee.com/info-superbahn-ict/superbahn/pkg/supbmanager/v3_test/supb-modules/supbres/strategies/model"
nervous "gitee.com/info-superbahn-ict/superbahn/pkg/supbnervous"
"gitee.com/info-superbahn-ict/superbahn/sync/define"
"gitee.com/info-superbahn-ict/superbahn/v3_test/supbenv/log"
"os"
"strconv"
"strings"
"time"
)
/*
这个是策略执行主体,策略运行后,会自动运行改函数
nu: 总线控制
meta: 策略的元数据,你可以在里面找到你控制的应用的
*/
func Executor(ctx context.Context, tryTime, tryInterval int, logger log.Logger, rpc nervous.Controller, meta *m1.SupbStrategyBaseInfo, updateMeta <-chan *m1.SupbStrategyBaseInfo) {
// 总控连接
//url := "localhost:10000"
sleepTime := 0
sleepTimeStr := os.Getenv("SLEEP")
if sleepTimeStr != "" {
sT, err := strconv.Atoi(sleepTimeStr)
if err != nil {
log.Errorf("%v", err)
return
}
sleepTime = sT
logger.Infof("SLEEP = %v", sleepTimeStr)
}
time.Sleep(time.Duration(sleepTime) * time.Second)
logger.Infof("car algorithm start")
// 获取策略应用实例
var (
err error
)
appkeys, guids, err := request.GetStrategyControlledApplicationsMultiContainer(string(meta.StrategyKey), tryTime, tryInterval, rpc)
if err != nil {
logger.Errorf("%v", err)
return
}
logger.Infof("appkeys %v", appkeys)
logger.Infof("guids %v", guids)
// 策略样例,小车调控
// 随便例举一个 appkey 和 该appkey下容器的guid
var serverGuid, interfereGuid, carKey string
//for _, v := range appkeys {
// if strings.Contains(v, "supb.application.test.darknet") {
// darknetGuid = guids[v][0]
// darknetKey = v
// break
// }
//}
for _, v := range appkeys {
if strings.Contains(v, "supb.application.test.hydramini") {
for k, v2 := range guids[v] {
//if strings.Contains(k, "supb.application.test.hydramini.agent") {
// carGuid = v2
// carKey = v
//}
if strings.Contains(k, "supb.application.test.hydramini.server") {
serverGuid = v2
carKey = v
}
}
}
}
for _, v := range appkeys {
if strings.Contains(v, "supb.application.test.hydramini.interfere") {
for k, v2 := range guids[v] {
if strings.Contains(k, "supb.application.test.hydramini.interfere.cpu") {
interfereGuid = v2
}
}
}
}
logger.Infof("car guid: %v server: %v interfere: %v", serverGuid, interfereGuid)
oldValue := 5
tk := time.NewTicker(time.Second)
for {
//cpu1, err := request.GetApplicationContainerMetricsCPU(carKey, carGuid, tryTime, tryInterval, rpc)
//if err != nil {
// logger.Warnf("receive msg %v", err)
// continue
//}
cpu2, err := request.GetApplicationContainerMetricsCPU(carKey, serverGuid, tryTime, tryInterval, rpc)
if err != nil {
logger.Warnf("receive msg %v", err)
continue
}
val := 9 - int((cpu2+50)/10)
if val <= 1 {
val = 1
}
if val >= 9 {
val = 9
}
if oldValue != val {
oldValue = val
ratio := fmt.Sprintf("%v", float64(val)/10.0)
logger.Infof("set interfere ratio %v", ratio)
if interfereGuid != "" {
_, err = rpc.RPCCallCustom(interfereGuid, 100, 500, define.RPCFunctionNameOfObjectRunningOnAgentForSetCpuRatioShare, ratio)
if err != nil {
logger.Errorf("control interferenceGuid %v, cpu ratio to %v %v", ratio, err)
}
} else {
logger.Infof("not interfere %v", interfereGuid)
}
}
select {
case <-tk.C:
continue
case <-ctx.Done():
return
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。