77 "net/http"
88 "os"
99 "os/signal"
10- "strings"
1110 "syscall"
1211 "time"
1312
@@ -20,15 +19,11 @@ import (
2019 "github.com/komari-monitor/komari/internal/database/auditlog"
2120 "github.com/komari-monitor/komari/internal/database/dbcore"
2221 "github.com/komari-monitor/komari/internal/database/models"
23- d_notification "github.com/komari-monitor/komari/internal/database/notification"
2422 "github.com/komari-monitor/komari/internal/database/records"
2523 "github.com/komari-monitor/komari/internal/database/tasks"
2624 "github.com/komari-monitor/komari/internal/eventType"
2725 logutil "github.com/komari-monitor/komari/internal/log"
28- "github.com/komari-monitor/komari/internal/messageSender"
2926 "github.com/komari-monitor/komari/internal/patch"
30- "github.com/komari-monitor/komari/internal/restore"
31- "github.com/komari-monitor/komari/pkg/cloudflared"
3227 "github.com/komari-monitor/komari/server"
3328 "github.com/spf13/cobra"
3429)
@@ -55,54 +50,44 @@ func RunServer() {
5550 if err := os .MkdirAll ("./data/theme" , os .ModePerm ); err != nil {
5651 log .Fatalf ("Failed to create theme directory: %v" , err )
5752 }
58- // 进行备份恢复
59- if restore .NeedBackupRestore () {
60- restore .RestoreBackup ()
61- }
62- conf .Load ()
63- InitDatabase ()
64- patch .ApplyPatch ()
6553
6654 if conf .Version != conf .Version_Development {
6755 gin .SetMode (gin .ReleaseMode )
6856 }
6957
70- config , err := conf .GetWithV1Format ()
71- if err != nil {
72- log .Fatal (err )
73- }
74-
7558 r := gin .New ()
7659 r .Use (logutil .GinLogger ())
7760 r .Use (logutil .GinRecovery ())
7861
79- event .Trigger (eventType .ServerInitializeStart , event.M {"config" : config , "engine" : r })
62+ InitDatabase ()
63+ patch .Apply ()
64+ err , _ := event .Trigger (eventType .ServerInitializeStart , event.M {"engine" : r })
65+ if err != nil {
66+ log .Fatalf ("Something went wrong during ServerInitializeStart event: %v" , err )
67+ os .Exit (1 )
68+ }
8069
70+ config , err := conf .GetWithV1Format ()
71+ if err != nil {
72+ log .Fatal (err )
73+ }
8174 go DoScheduledWork ()
82- go messageSender .Initialize ()
8375
8476 server .StartNezhaGRPCServer (config .NezhaCompatListen )
8577
86- // 初始化 cloudflared
87- if strings .ToLower (GetEnv ("KOMARI_ENABLE_CLOUDFLARED" , "false" )) == "true" {
88- err := cloudflared .RunCloudflared () // 阻塞,确保cloudflared跑起来
89- if err != nil {
90- log .Fatalf ("Failed to run cloudflared: %v" , err )
91- }
92- }
93-
9478 server .Init (r )
9579
9680 srv := & http.Server {
9781 Addr : flags .Listen ,
9882 Handler : r ,
9983 }
100-
101- event .Trigger (eventType .ServerInitializeDone , event.M {"config" : config })
102-
10384 log .Printf ("Starting server on %s ..." , flags .Listen )
85+ event .Trigger (eventType .ServerInitializeDone , event.M {})
86+ ScheduledEventTasksInit ()
87+
10488 if err := srv .ListenAndServe (); err != nil && err != http .ErrServerClosed {
10589 OnFatal (err )
90+ event .Trigger (eventType .ProcessExit , event.M {})
10691 log .Fatalf ("listen: %s\n " , err )
10792 }
10893 quit := make (chan os.Signal , 1 )
@@ -119,18 +104,6 @@ func RunServer() {
119104}
120105
121106func InitDatabase () {
122- // // 打印数据库类型和连接信息
123- // if flags.DatabaseType == "mysql" {
124- // log.Printf("使用 MySQL 数据库连接: %s@%s:%s/%s",
125- // flags.DatabaseUser, flags.DatabaseHost, flags.DatabasePort, flags.DatabaseName)
126- // log.Printf("环境变量配置: [KOMARI_DB_TYPE=%s] [KOMARI_DB_HOST=%s] [KOMARI_DB_PORT=%s] [KOMARI_DB_USER=%s] [KOMARI_DB_NAME=%s]",
127- // os.Getenv("KOMARI_DB_TYPE"), os.Getenv("KOMARI_DB_HOST"), os.Getenv("KOMARI_DB_PORT"),
128- // os.Getenv("KOMARI_DB_USER"), os.Getenv("KOMARI_DB_NAME"))
129- // } else {
130- // log.Printf("使用 SQLite 数据库文件: %s", flags.DatabaseFile)
131- // log.Printf("环境变量配置: [KOMARI_DB_TYPE=%s] [KOMARI_DB_FILE=%s]",
132- // os.Getenv("KOMARI_DB_TYPE"), os.Getenv("KOMARI_DB_FILE"))
133- // }
134107 var count int64 = 0
135108 if dbcore .GetDBInstance ().Model (& models.User {}).Count (& count ); count == 0 {
136109 user , passwd , err := accounts .CreateDefaultAdminAccount ()
@@ -144,12 +117,10 @@ func InitDatabase() {
144117// #region 定时任务
145118func DoScheduledWork () {
146119 tasks .ReloadPingSchedule ()
147- d_notification .ReloadLoadNotificationSchedule ()
148120
149121 //records.DeleteRecordBefore(time.Now().Add(-time.Hour * 24 * 30))
150122
151123 records .CompactRecord ()
152- ScheduledEventTasksInit ()
153124
154125 event .On (eventType .SchedulerEvery30Minutes , event .ListenerFunc (func (e event.Event ) error {
155126 cfg , err := conf .GetWithV1Format ()
@@ -183,12 +154,10 @@ func DoScheduledWork() {
183154
184155func OnShutdown () {
185156 auditlog .Log ("" , "" , "server is shutting down" , "info" )
186- cloudflared .Kill ()
187157}
188158
189159func OnFatal (err error ) {
190160 auditlog .Log ("" , "" , "server encountered a fatal error: " + err .Error (), "error" )
191- cloudflared .Kill ()
192161}
193162
194163func ScheduledEventTasksInit () {
@@ -198,22 +167,17 @@ func ScheduledEventTasksInit() {
198167 every1h := time .NewTicker (1 * time .Hour )
199168 every1d := time .NewTicker (24 * time .Hour )
200169 for {
201- var err error = nil
202- var e event.Event
203170 select {
204171 case <- every1m .C :
205- err , e = event .Trigger (eventType .SchedulerEveryMinute , event.M {"interval" : "1m" })
172+ event .Async (eventType .SchedulerEveryMinute , event.M {"interval" : "1m" })
206173 case <- every5m .C :
207- err , e = event .Trigger (eventType .SchedulerEvery5Minutes , event.M {"interval" : "5m" })
174+ event .Async (eventType .SchedulerEvery5Minutes , event.M {"interval" : "5m" })
208175 case <- every30m .C :
209- err , e = event .Trigger (eventType .SchedulerEvery30Minutes , event.M {"interval" : "30m" })
176+ event .Async (eventType .SchedulerEvery30Minutes , event.M {"interval" : "30m" })
210177 case <- every1h .C :
211- err , e = event .Trigger (eventType .SchedulerEveryHour , event.M {"interval" : "1h" })
178+ event .Async (eventType .SchedulerEveryHour , event.M {"interval" : "1h" })
212179 case <- every1d .C :
213- err , e = event .Trigger (eventType .SchedulerEveryDay , event.M {"interval" : "1d" })
214- }
215- if err != nil {
216- slog .Warn ("Scheduled task error:" , "error" , err , "event" , e )
180+ event .Async (eventType .SchedulerEveryDay , event.M {"interval" : "1d" })
217181 }
218182 }
219183}
0 commit comments