@@ -82,108 +82,119 @@ func DiscoverTraefikAPI() (string, error) {
8282}
8383
8484func main () {
85- log .Println ("Starting Middleware Manager..." )
86-
87- var debug bool
88- flag .BoolVar (& debug , "debug" , false , "Enable debug mode" )
89- flag .Parse ()
90-
91- cfg := loadConfiguration (debug )
92-
93- if os .Getenv ("TRAEFIK_API_URL" ) == "" {
94- if discoveredURL , err := DiscoverTraefikAPI (); err == nil && discoveredURL != "" {
95- log .Printf ("Auto-discovered Traefik API URL: %s" , discoveredURL )
96- cfg .TraefikAPIURL = discoveredURL
97- }
98- }
99-
100- db , err := database .InitDB (cfg .DBPath )
101- if err != nil {
102- log .Fatalf ("Failed to initialize database: %v" , err )
103- }
104- defer db .Close ()
105-
106- configDir := cfg .ConfigDir
107- if err := config .EnsureConfigDirectory (configDir ); err != nil {
108- log .Printf ("Warning: Failed to create config directory: %v" , err )
109- }
110-
111- if err := config .SaveTemplateFile (configDir ); err != nil {
112- log .Printf ("Warning: Failed to save default middleware templates: %v" , err )
113- }
114-
115- if err := config .LoadDefaultTemplates (db ); err != nil {
116- log .Printf ("Warning: Failed to load default middleware templates: %v" , err )
117- }
118-
119- if err := config .SaveTemplateServicesFile (configDir ); err != nil {
120- log .Printf ("Warning: Failed to save default service templates: %v" , err )
121- }
122-
123- if err := config .LoadDefaultServiceTemplates (db ); err != nil {
124- log .Printf ("Warning: Failed to load default service templates: %v" , err )
125- }
126-
127- configManager , err := services .NewConfigManager (filepath .Join (configDir , "config.json" ))
128- if err != nil {
129- log .Fatalf ("Failed to initialize config manager: %v" , err )
130- }
131-
132- configManager .EnsureDefaultDataSources (cfg .PangolinAPIURL , cfg .TraefikAPIURL )
133-
134- stopChan := make (chan struct {})
135-
136- resourceWatcher , err := services .NewResourceWatcher (db , configManager )
137- if err != nil {
138- log .Fatalf ("Failed to create resource watcher: %v" , err )
139- }
140- go resourceWatcher .Start (cfg .CheckInterval )
141-
142- configGenerator := services .NewConfigGenerator (db , cfg .TraefikConfDir , configManager )
143- go configGenerator .Start (cfg .GenerateInterval )
144-
145- serverConfig := api.ServerConfig {
146- Port : cfg .Port ,
147- UIPath : cfg .UIPath ,
148- Debug : cfg .Debug ,
149- AllowCORS : cfg .AllowCORS ,
150- CORSOrigin : cfg .CORSOrigin ,
151- }
152-
153- server := api .NewServer (db .DB , serverConfig , configManager , cfg .TraefikStaticConfigPath , cfg .PluginsJSONURL )
154- go func () {
155- if err := server .Start (); err != nil {
156- log .Printf ("Server error: %v" , err )
157- close (stopChan )
158- }
159- }()
160-
161- signalChan := make (chan os.Signal , 1 )
162- signal .Notify (signalChan , os .Interrupt , syscall .SIGTERM )
163-
164- serviceWatcher , err := services .NewServiceWatcher (db , configManager )
165- if err != nil {
166- log .Printf ("Warning: Failed to create service watcher: %v" , err )
167- serviceWatcher = nil
168- } else {
169- go serviceWatcher .Start (cfg .ServiceInterval )
170- }
171-
172- select {
173- case <- signalChan :
174- log .Println ("Received shutdown signal" )
175- case <- stopChan :
176- log .Println ("Received stop signal from server" )
177- }
178-
179- log .Println ("Shutting down..." )
180- resourceWatcher .Stop ()
181- if serviceWatcher != nil {
182- serviceWatcher .Stop ()
183- }
184- configGenerator .Stop ()
185- server .Stop ()
186- log .Println ("Middleware Manager stopped" )
85+ log .Println ("Starting Middleware Manager..." )
86+
87+ var debug bool
88+ flag .BoolVar (& debug , "debug" , false , "Enable debug mode" )
89+ flag .Parse ()
90+
91+ cfg := loadConfiguration (debug )
92+
93+ if os .Getenv ("TRAEFIK_API_URL" ) == "" {
94+ if discoveredURL , err := DiscoverTraefikAPI (); err == nil && discoveredURL != "" {
95+ log .Printf ("Auto-discovered Traefik API URL: %s" , discoveredURL )
96+ cfg .TraefikAPIURL = discoveredURL
97+ }
98+ }
99+
100+ db , err := database .InitDB (cfg .DBPath )
101+ if err != nil {
102+ log .Fatalf ("Failed to initialize database: %v" , err )
103+ }
104+ defer db .Close ()
105+
106+ configDir := cfg .ConfigDir
107+ if err := config .EnsureConfigDirectory (configDir ); err != nil {
108+ log .Printf ("Warning: Failed to create config directory: %v" , err )
109+ }
110+
111+ if err := config .SaveTemplateFile (configDir ); err != nil {
112+ log .Printf ("Warning: Failed to save default middleware templates: %v" , err )
113+ }
114+
115+ if err := config .LoadDefaultTemplates (db ); err != nil {
116+ log .Printf ("Warning: Failed to load default middleware templates: %v" , err )
117+ }
118+
119+ if err := config .SaveTemplateServicesFile (configDir ); err != nil {
120+ log .Printf ("Warning: Failed to save default service templates: %v" , err )
121+ }
122+
123+ if err := config .LoadDefaultServiceTemplates (db ); err != nil {
124+ log .Printf ("Warning: Failed to load default service templates: %v" , err )
125+ }
126+
127+ // Run comprehensive database cleanup on startup
128+ log .Println ("Performing full database cleanup..." )
129+ cleanupOpts := database .DefaultCleanupOptions ()
130+ cleanupOpts .LogLevel = 2 // More verbose logging during startup
131+
132+ if err := db .PerformFullCleanup (cleanupOpts ); err != nil {
133+ log .Printf ("Warning: Database cleanup encountered issues: %v" , err )
134+ } else {
135+ log .Println ("Database cleanup completed successfully" )
136+ }
137+
138+ configManager , err := services .NewConfigManager (filepath .Join (configDir , "config.json" ))
139+ if err != nil {
140+ log .Fatalf ("Failed to initialize config manager: %v" , err )
141+ }
142+
143+ configManager .EnsureDefaultDataSources (cfg .PangolinAPIURL , cfg .TraefikAPIURL )
144+
145+ stopChan := make (chan struct {})
146+
147+ resourceWatcher , err := services .NewResourceWatcher (db , configManager )
148+ if err != nil {
149+ log .Fatalf ("Failed to create resource watcher: %v" , err )
150+ }
151+ go resourceWatcher .Start (cfg .CheckInterval )
152+
153+ configGenerator := services .NewConfigGenerator (db , cfg .TraefikConfDir , configManager )
154+ go configGenerator .Start (cfg .GenerateInterval )
155+
156+ serverConfig := api.ServerConfig {
157+ Port : cfg .Port ,
158+ UIPath : cfg .UIPath ,
159+ Debug : cfg .Debug ,
160+ AllowCORS : cfg .AllowCORS ,
161+ CORSOrigin : cfg .CORSOrigin ,
162+ }
163+
164+ server := api .NewServer (db .DB , serverConfig , configManager , cfg .TraefikStaticConfigPath , cfg .PluginsJSONURL )
165+ go func () {
166+ if err := server .Start (); err != nil {
167+ log .Printf ("Server error: %v" , err )
168+ close (stopChan )
169+ }
170+ }()
171+
172+ signalChan := make (chan os.Signal , 1 )
173+ signal .Notify (signalChan , os .Interrupt , syscall .SIGTERM )
174+
175+ serviceWatcher , err := services .NewServiceWatcher (db , configManager )
176+ if err != nil {
177+ log .Printf ("Warning: Failed to create service watcher: %v" , err )
178+ serviceWatcher = nil
179+ } else {
180+ go serviceWatcher .Start (cfg .ServiceInterval )
181+ }
182+
183+ select {
184+ case <- signalChan :
185+ log .Println ("Received shutdown signal" )
186+ case <- stopChan :
187+ log .Println ("Received stop signal from server" )
188+ }
189+
190+ log .Println ("Shutting down..." )
191+ resourceWatcher .Stop ()
192+ if serviceWatcher != nil {
193+ serviceWatcher .Stop ()
194+ }
195+ configGenerator .Stop ()
196+ server .Stop ()
197+ log .Println ("Middleware Manager stopped" )
187198}
188199
189200func loadConfiguration (debug bool ) Configuration {
0 commit comments