Skip to content

Commit 6e33081

Browse files
committed
Update.
1 parent e1e0916 commit 6e33081

File tree

1 file changed

+75
-17
lines changed

1 file changed

+75
-17
lines changed

cmd/dashboard/main.go

Lines changed: 75 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@ package main
33
import (
44
"fmt"
55
"log"
6+
"net/http"
67
"os"
8+
"os/signal"
79
"path/filepath"
10+
"syscall"
811
"time"
912

1013
"github.com/spf13/pflag"
14+
"github.com/xos/serverstatus/cmd/dashboard/controller"
15+
"github.com/xos/serverstatus/cmd/dashboard/rpc"
1116
"github.com/xos/serverstatus/model"
1217
"github.com/xos/serverstatus/proto"
1318
"github.com/xos/serverstatus/service/singleton"
@@ -43,21 +48,6 @@ func init() {
4348
pflag.Parse()
4449
}
4550

46-
func initSystem() {
47-
// 启动 singleton 包下的所有服务
48-
singleton.LoadSingleton()
49-
50-
// 每天的3:30 对 监控记录 和 流量记录 进行清理
51-
if _, err := singleton.Cron.AddFunc("0 30 3 * * *", singleton.CleanMonitorHistory); err != nil {
52-
panic(err)
53-
}
54-
55-
// 每小时对流量记录进行打点
56-
if _, err := singleton.Cron.AddFunc("0 0 * * * *", singleton.RecordTransferHourlyUsage); err != nil {
57-
panic(err)
58-
}
59-
}
60-
6151
func main() {
6252
var err error
6353
hostName, err = os.Hostname()
@@ -113,9 +103,77 @@ func main() {
113103
return
114104
}
115105

116-
// 这里是原来的main函数代码
106+
// 初始化系统
117107
log.Println("NG>> 服务启动中...")
118-
initSystem()
108+
singleton.LoadSingleton()
109+
110+
// 添加定时任务
111+
log.Println("NG>> 初始化定时任务...")
112+
// 每天的3:30 对 监控记录 和 流量记录 进行清理
113+
if _, err := singleton.Cron.AddFunc("0 30 3 * * *", singleton.CleanMonitorHistory); err != nil {
114+
panic(err)
115+
}
116+
// 每小时对流量记录进行打点
117+
if _, err := singleton.Cron.AddFunc("0 0 * * * *", singleton.RecordTransferHourlyUsage); err != nil {
118+
panic(err)
119+
}
120+
121+
// 启动HTTP和gRPC服务
122+
startServices()
123+
124+
// 添加这段代码,等待中断信号以优雅地关闭服务
125+
log.Println("NG>> 所有服务已启动,正在运行...")
126+
waitForInterrupt()
127+
}
128+
129+
// startServices 启动HTTP和gRPC服务
130+
func startServices() {
131+
// 启动RPC服务
132+
go startRPCServer()
133+
134+
// 启动HTTP服务
135+
go startHTTPServer()
136+
137+
// 启动其他必要的服务
138+
go dispatchReportInfoTask()
139+
}
140+
141+
// startRPCServer 启动gRPC服务
142+
func startRPCServer() {
143+
log.Printf("NG>> gRPC服务启动在端口 %d", singleton.Conf.GRPCPort)
144+
145+
// 使用rpc包中的服务器
146+
rpc.ServeRPC(singleton.Conf.GRPCPort)
147+
}
148+
149+
// startHTTPServer 启动HTTP服务
150+
func startHTTPServer() {
151+
log.Printf("NG>> HTTP服务启动在端口 %d", singleton.Conf.HTTPPort)
152+
153+
// 使用controller包中的ServeWeb函数
154+
srv := controller.ServeWeb(singleton.Conf.HTTPPort)
155+
156+
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
157+
log.Fatalf("NG>> HTTP服务启动失败: %v", err)
158+
}
159+
}
160+
161+
// waitForInterrupt 等待中断信号
162+
func waitForInterrupt() {
163+
// 创建一个通道接收系统信号
164+
c := make(chan os.Signal, 1)
165+
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
166+
167+
// 阻塞等待信号
168+
<-c
169+
170+
// 收到信号后,执行清理工作
171+
log.Println("NG>> 收到中断信号,服务正在关闭...")
172+
173+
// 保存最后的流量统计
174+
singleton.RecordTransferHourlyUsage()
175+
176+
log.Println("NG>> 服务已安全关闭")
119177
}
120178

121179
func dispatchReportInfoTask() {

0 commit comments

Comments
 (0)