interprocess/configure/server/server.go (96 lines of code) (raw):
package server
import (
"context"
"fmt"
"sort"
grpc "google.golang.org/grpc"
"github.com/aliyun/aliyun_assist_client/agent/flagging"
"github.com/aliyun/aliyun_assist_client/agent/log"
pb "github.com/aliyun/aliyun_assist_client/interprocess/configure/agrpc"
"github.com/aliyun/aliyun_assist_client/thirdparty/sirupsen/logrus"
)
type agentServer struct {
pb.UnimplementedAssistAgentServer
}
func newRespStatus() *pb.RespStatus {
return &pb.RespStatus{
StatusCode: 0,
ErrMessage: "OK",
}
}
func RegisterAssistAgentServer(sr grpc.ServiceRegistrar) {
pb.RegisterAssistAgentServer(sr, &agentServer{})
}
type ConfItemList []*pb.ConfItem
func (l ConfItemList) Len() int { return len(l) }
func (l ConfItemList) Swap(i, j int) { l[i], l[j] = l[j], l[i] }
func (l ConfItemList) Less(i, j int) bool { return l[i].Name < l[j].Name }
func (s *agentServer) GetConf(ctx context.Context, req *pb.GetConfReq) (*pb.GetConfResp, error) {
resp := &pb.GetConfResp{
Status: newRespStatus(),
}
logger := log.GetLogger().WithField("grpc", "GetConf")
defer func() {
logger.Infof("runtime[%v], statusCode[%d] errMsg[%s]", req.Runtime, resp.Status.StatusCode, resp.Status.ErrMessage)
}()
res := flagging.GetAllConf(logger, req.Runtime)
for k, v := range res {
resp.Items = append(resp.Items, &pb.ConfItem{
Name: k,
Value: v,
})
}
sort.Sort(ConfItemList(resp.Items))
return resp, nil
}
func (s *agentServer) SetConf(ctx context.Context, req *pb.SetConfReq) (*pb.SetConfResp, error) {
resp := &pb.SetConfResp{
Status: newRespStatus(),
}
logger := log.GetLogger().WithField("grpc", "SetConf")
defer func() {
logger.Infof("runtime[%v] crossVer[%v] items[%v], statusCode[%d] errMsg[%s]", req.Runtime, req.CrossVersion, req.Items, resp.Status.StatusCode, resp.Status.ErrMessage)
}()
var kvList []string
for _, item := range req.Items {
kvList = append(kvList, item.Name)
kvList = append(kvList, item.Value)
}
var err error
if req.Runtime {
err = flagging.UpdateConfigRuntime(logger, kvList)
} else {
err = flagging.UpdateConfigFile(logger, kvList, req.CrossVersion)
}
if err != nil {
resp.Status.StatusCode = 1
resp.Status.ErrMessage = err.Error()
}
return resp, nil
}
func (s *agentServer) ReloadConf(ctx context.Context, req *pb.ReloadConfReq) (*pb.ReloadConfResp, error) {
resp := &pb.ReloadConfResp{
Status: newRespStatus(),
}
logger := log.GetLogger().WithField("grpc", "ReloadConf")
defer func() {
logger.Infof("statusCode[%d] errMsg[%s]", resp.Status.StatusCode, resp.Status.ErrMessage)
}()
flagging.ReloadConfig(logger)
return resp, nil
}
func GetConfLocal(logger logrus.FieldLogger) []*pb.ConfItem {
res := []*pb.ConfItem{}
items := flagging.GetAllConf(logger, false)
for k, v := range items {
res = append(res, &pb.ConfItem{
Name: k,
Value: fmt.Sprint(v),
})
}
sort.Sort(ConfItemList(res))
return res
}
func SetConfLocal(logger logrus.FieldLogger, kvList []string, crossVer bool) error {
return flagging.UpdateConfigFile(logger, kvList, crossVer)
}