mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-03-23 03:21:50 +00:00
♻️ v4: 去掉添加 Agent ID 要求 需要更新面板 close #83
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
@@ -17,7 +18,6 @@ import (
|
||||
"github.com/genkiroid/cert"
|
||||
"github.com/go-ping/ping"
|
||||
"github.com/p14yground/go-github-selfupdate/selfupdate"
|
||||
"github.com/spf13/cobra"
|
||||
"google.golang.org/grpc"
|
||||
|
||||
"github.com/naiba/nezha/model"
|
||||
@@ -29,30 +29,17 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
clientID string
|
||||
server string
|
||||
clientSecret string
|
||||
debug bool
|
||||
version string
|
||||
|
||||
rootCmd = &cobra.Command{
|
||||
Use: "nezha-agent",
|
||||
Short: "「哪吒面板」监控、备份、站点管理一站式服务",
|
||||
Long: `哪吒面板
|
||||
================================
|
||||
监控、备份、站点管理一站式服务
|
||||
啦啦啦,啦啦啦,我是 mjj 小行家`,
|
||||
Run: run,
|
||||
Version: version,
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
reporting bool
|
||||
client pb.NezhaServiceClient
|
||||
ctx = context.Background()
|
||||
delayWhenError = time.Second * 10
|
||||
updateCh = make(chan struct{}, 0)
|
||||
delayWhenError = time.Second * 10 // Agent 重连间隔
|
||||
updateCh = make(chan struct{}, 0) // Agent 自动更新间隔
|
||||
httpClient = &http.Client{
|
||||
Transport: &http.Transport{
|
||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||
@@ -91,22 +78,28 @@ func init() {
|
||||
func main() {
|
||||
// 来自于 GoReleaser 的版本号
|
||||
dao.Version = version
|
||||
rootCmd.PersistentFlags().StringVarP(&server, "server", "s", "localhost:5555", "客户端ID")
|
||||
rootCmd.PersistentFlags().StringVarP(&clientID, "id", "i", "", "客户端ID")
|
||||
rootCmd.PersistentFlags().StringVarP(&clientSecret, "secret", "p", "", "客户端Secret")
|
||||
rootCmd.PersistentFlags().BoolVarP(&debug, "debug", "d", false, "开启Debug")
|
||||
if err := rootCmd.Execute(); err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func run(cmd *cobra.Command, args []string) {
|
||||
var debug bool
|
||||
flag.String("i", "", "unused 旧Agent兼容")
|
||||
flag.BoolVar(&debug, "d", false, "允许不安全连接")
|
||||
flag.StringVar(&server, "s", "localhost:5555", "管理面板RPC端口")
|
||||
flag.StringVar(&clientSecret, "p", "", "Agent连接Secret")
|
||||
flag.Parse()
|
||||
|
||||
dao.Conf = &model.Config{
|
||||
Debug: debug,
|
||||
}
|
||||
|
||||
if server == "" || clientSecret == "" {
|
||||
flag.Usage()
|
||||
return
|
||||
}
|
||||
|
||||
run()
|
||||
}
|
||||
|
||||
func run() {
|
||||
auth := rpc.AuthHandler{
|
||||
ClientID: clientID,
|
||||
ClientSecret: clientSecret,
|
||||
}
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@ func (ma *memberAPI) delete(c *gin.Context) {
|
||||
err = dao.DB.Delete(&model.Server{}, "id = ?", id).Error
|
||||
if err == nil {
|
||||
dao.ServerLock.Lock()
|
||||
delete(dao.SecretToID, dao.ServerList[id].Secret)
|
||||
delete(dao.ServerList, id)
|
||||
dao.ServerLock.Unlock()
|
||||
dao.ReSortServer()
|
||||
@@ -154,7 +155,7 @@ func (ma *memberAPI) addOrEditServer(c *gin.Context) {
|
||||
s.Note = sf.Note
|
||||
if sf.ID == 0 {
|
||||
s.Secret = utils.MD5(fmt.Sprintf("%s%s%d", time.Now(), sf.Name, admin.ID))
|
||||
s.Secret = s.Secret[:10]
|
||||
s.Secret = s.Secret[:18]
|
||||
err = dao.DB.Create(&s).Error
|
||||
} else {
|
||||
isEdit = true
|
||||
@@ -178,6 +179,7 @@ func (ma *memberAPI) addOrEditServer(c *gin.Context) {
|
||||
s.Host = &model.Host{}
|
||||
s.State = &model.HostState{}
|
||||
dao.ServerLock.Lock()
|
||||
dao.SecretToID[s.Secret] = s.ID
|
||||
dao.ServerList[s.ID] = &s
|
||||
dao.ServerLock.Unlock()
|
||||
}
|
||||
@@ -264,15 +266,16 @@ func (ma *memberAPI) addOrEditCron(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
dao.ServerLock.Lock()
|
||||
defer dao.ServerLock.Unlock()
|
||||
|
||||
dao.CronLock.Lock()
|
||||
defer dao.CronLock.Unlock()
|
||||
crOld := dao.Crons[cr.ID]
|
||||
if crOld != nil && crOld.CronID != 0 {
|
||||
dao.Cron.Remove(crOld.CronID)
|
||||
}
|
||||
|
||||
cr.CronID, err = dao.Cron.AddFunc(cr.Scheduler, func() {
|
||||
dao.ServerLock.RLock()
|
||||
defer dao.ServerLock.RUnlock()
|
||||
for j := 0; j < len(cr.Servers); j++ {
|
||||
if dao.ServerList[cr.Servers[j]].TaskStream != nil {
|
||||
dao.ServerList[cr.Servers[j]].TaskStream.Send(&pb.Task{
|
||||
|
||||
@@ -27,6 +27,7 @@ func init() {
|
||||
dao.Cron = cron.New(cron.WithLocation(shanghai))
|
||||
dao.Crons = make(map[uint64]*model.Cron)
|
||||
dao.ServerList = make(map[uint64]*model.Server)
|
||||
dao.SecretToID = make(map[string]uint64)
|
||||
|
||||
err = dao.Conf.Read("data/config.yaml")
|
||||
if err != nil {
|
||||
@@ -68,6 +69,7 @@ func loadServers() {
|
||||
innerS.Host = &model.Host{}
|
||||
innerS.State = &model.HostState{}
|
||||
dao.ServerList[innerS.ID] = &innerS
|
||||
dao.SecretToID[innerS.Secret] = innerS.ID
|
||||
}
|
||||
dao.ReSortServer()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user