+ Removed the fixed shutdown time + Added the configuration for the public web server + Refactored the old web server settings + Improved the handling of shutdown handlers. It is not save! + Bugfix: The server start was no longer blocking
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package Shutdown
 | |
| 
 | |
| import (
 | |
| 	"container/list"
 | |
| 	"fmt"
 | |
| 	"github.com/SommerEngineering/Ocean/Log"
 | |
| 	LM "github.com/SommerEngineering/Ocean/Log/Meta"
 | |
| 	"os"
 | |
| )
 | |
| 
 | |
| type ShutdownHandler interface {
 | |
| 	Shutdown()
 | |
| }
 | |
| 
 | |
| func AddShutdownHandler(handler ShutdownHandler) {
 | |
| 	shutdownHandlers.PushFront(handler)
 | |
| }
 | |
| 
 | |
| func executeShutdown() {
 | |
| 	sig := <-shutdownSignal
 | |
| 	stopAllRequests = true
 | |
| 
 | |
| 	Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelWARN, LM.SeverityCritical, LM.ImpactCritical, LM.MessageNameSHUTDOWN, `The system was called to shutting down.`, sig.String(), `Call now all shutdown handlers.`)
 | |
| 	for handler := shutdownHandlers.Front(); handler != nil; handler = handler.Next() {
 | |
| 		safeCall(handler)
 | |
| 	}
 | |
| 
 | |
| 	Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelWARN, LM.SeverityCritical, LM.ImpactCritical, LM.MessageNameSHUTDOWN, `The system is shutting down now.`)
 | |
| 	Log.Flush()
 | |
| 	os.Exit(0)
 | |
| }
 | |
| 
 | |
| func safeCall(handler *list.Element) {
 | |
| 	defer func() {
 | |
| 		if err := recover(); err != nil {
 | |
| 			errObj := fmt.Errorf("%v", err)
 | |
| 			Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.SeverityNone, LM.ImpactNone, LM.MessageNameSHUTDOWN, `An error occurs for a shutdown handler.`, errObj.Error())
 | |
| 		}
 | |
| 	}()
 | |
| 
 | |
| 	h := handler.Value.(ShutdownHandler)
 | |
| 	h.Shutdown()
 | |
| }
 |