mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2026-10-19 16:14:39 +00:00
71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"github.com/mickael-kerjean/filestash"
|
|
"github.com/mickael-kerjean/filestash/server"
|
|
. "github.com/mickael-kerjean/filestash/server/common"
|
|
|
|
_ "github.com/mickael-kerjean/filestash/server/pkg"
|
|
_ "github.com/mickael-kerjean/filestash/server/plugin"
|
|
|
|
"github.com/mickael-kerjean/filestash/server/pkg/extension"
|
|
"github.com/mickael-kerjean/filestash/server/pkg/workflow"
|
|
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
func main() {
|
|
Run(mux.NewRouter())
|
|
}
|
|
|
|
func Run(router *mux.Router) {
|
|
check(InitLogger(), "Logger init failed. err=%s")
|
|
check(InitConfig(), "Config init failed. err=%s")
|
|
check(extension.Discovery(), "Plugin Discovery failed. err=%s")
|
|
check(extension.InitPluginList(embed.EmbedPluginList, extension.All()), "Plugin Initialisation failed. err=%s")
|
|
check(workflow.Init(), "Worklow Initialisation failure. err=%s")
|
|
if Hooks.Get.Starter() == nil {
|
|
check(ErrNotFound, "Missing starter plugin. err=%s")
|
|
}
|
|
for _, fn := range Hooks.Get.Onload() {
|
|
fn()
|
|
}
|
|
for _, obj := range Hooks.Get.HttpEndpoint() {
|
|
obj(router)
|
|
}
|
|
server.Build(router)
|
|
server.PluginRoutes(router)
|
|
if os.Getenv("DEBUG") == "true" {
|
|
server.DebugRoutes(router)
|
|
}
|
|
server.CatchAll(router)
|
|
Hooks.Get.Starter()(withSignal(), router)
|
|
for _, fn := range Hooks.Get.OnQuit() {
|
|
fn()
|
|
}
|
|
}
|
|
|
|
func check(err error, msg string) {
|
|
if err == nil {
|
|
return
|
|
}
|
|
Log.Error(msg, err.Error())
|
|
os.Exit(1)
|
|
}
|
|
|
|
func withSignal() context.Context {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
go func() {
|
|
quit := make(chan os.Signal, 1)
|
|
signal.Notify(quit, syscall.SIGTERM, syscall.SIGINT)
|
|
<-quit
|
|
cancel()
|
|
}()
|
|
return ctx
|
|
}
|