some changes
This commit is contained in:
32
api/router.go
Normal file
32
api/router.go
Normal file
@@ -0,0 +1,32 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
|
||||
"git.oblat.lv/alex/triggerssmith/internal/config"
|
||||
"github.com/go-chi/chi/v5"
|
||||
)
|
||||
|
||||
type Router struct {
|
||||
r chi.Router
|
||||
|
||||
cfg *config.Config
|
||||
}
|
||||
|
||||
func NewRouter(cfg *config.Config) *Router {
|
||||
r := chi.NewRouter()
|
||||
return &Router{
|
||||
r: r,
|
||||
cfg: cfg,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *Router) RouteHandler() chi.Router {
|
||||
r.r.Get("/", func(w http.ResponseWriter, req *http.Request) {
|
||||
http.ServeFile(w, req, filepath.Join(r.cfg.Server.StaticFilesPath, "index.html"))
|
||||
})
|
||||
fs := http.FileServer(http.Dir("static"))
|
||||
r.r.Handle("/static/*", http.StripPrefix("/static/", fs))
|
||||
return r.r
|
||||
}
|
||||
@@ -58,8 +58,13 @@ var reloadCmd = &cobra.Command{
|
||||
if err != nil {
|
||||
slog.Error("failed to find process", slog.Int("pid", *optsReloadCmd.PID), slog.String("err", err.Error()))
|
||||
}
|
||||
proc.Signal(syscall.SIGHUP)
|
||||
slog.Debug("done")
|
||||
err = proc.Signal(syscall.SIGHUP)
|
||||
if err != nil {
|
||||
slog.Error("failed to reload process", slog.Int("pid", *optsReloadCmd.PID), slog.String("err", err.Error()))
|
||||
} else {
|
||||
slog.Debug("done")
|
||||
}
|
||||
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
48
cmd/serve.go
48
cmd/serve.go
@@ -10,8 +10,10 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"git.oblat.lv/alex/triggerssmith/api"
|
||||
application "git.oblat.lv/alex/triggerssmith/internal/app"
|
||||
"git.oblat.lv/alex/triggerssmith/internal/config"
|
||||
"git.oblat.lv/alex/triggerssmith/internal/server"
|
||||
"git.oblat.lv/alex/triggerssmith/internal/vars"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
@@ -97,22 +99,24 @@ var serveCmd = &cobra.Command{
|
||||
}
|
||||
app.LoadConfiguration(cfg)
|
||||
|
||||
server := app.Server()
|
||||
mux := http.NewServeMux()
|
||||
srv := app.Server()
|
||||
//mux := http.NewServeMux()
|
||||
|
||||
// static files
|
||||
staticPath := cfg.Server.StaticFilesPath
|
||||
slog.Debug("Setting up static file server", slog.String("path", staticPath))
|
||||
fs := http.FileServer(http.Dir(staticPath))
|
||||
mux.Handle("/static/", http.StripPrefix("/static/", fs))
|
||||
handler := loggingMiddleware(mux)
|
||||
// staticPath := cfg.Server.StaticFilesPath
|
||||
// slog.Debug("Setting up static file server", slog.String("path", staticPath))
|
||||
// fs := http.FileServer(http.Dir(staticPath))
|
||||
// mux.Handle("/static/", http.StripPrefix("/static/", fs))
|
||||
// handler := loggingMiddleware(mux)
|
||||
|
||||
server.SetHandler(handler)
|
||||
server.Init()
|
||||
router := api.NewRouter(cfg)
|
||||
|
||||
srv.SetHandler(router.RouteHandler())
|
||||
srv.Init()
|
||||
|
||||
var addr = net.JoinHostPort(cfg.Server.Addr, fmt.Sprintf("%d", cfg.Server.Port))
|
||||
slog.Debug("Binding listener", slog.String("address", addr))
|
||||
err = server.Start(addr)
|
||||
err = srv.Start(addr)
|
||||
if err != nil {
|
||||
slog.Error("Failed to start server", slog.String("error", err.Error()))
|
||||
return
|
||||
@@ -133,28 +137,30 @@ var serveCmd = &cobra.Command{
|
||||
slog.Info("Configuration reloaded")
|
||||
var addr = net.JoinHostPort(cfg.Server.Addr, fmt.Sprintf("%d", cfg.Server.Port))
|
||||
slog.Debug("New configuration", slog.Any("config", cfg))
|
||||
err = server.Reload(addr)
|
||||
err = srv.Reload(addr)
|
||||
if err != nil {
|
||||
slog.Error("Failed to restart server with new configuration", slog.String("error", err.Error()))
|
||||
}
|
||||
}
|
||||
case syscall.SIGINT:
|
||||
slog.Info("Stopping server by SIGINT")
|
||||
err := server.Stop()
|
||||
if err != nil {
|
||||
slog.Error("Failed to stop server", slog.String("err", err.Error()))
|
||||
os.Exit(1)
|
||||
}
|
||||
os.Remove(vars.PID_PATH)
|
||||
_ = server.StopAll()
|
||||
//err := srv.Stop()
|
||||
// if err != nil {
|
||||
// slog.Error("Failed to stop server", slog.String("err", err.Error()))
|
||||
// os.Exit(1)
|
||||
// }
|
||||
return
|
||||
case syscall.SIGTERM:
|
||||
slog.Info("Stopping server by SIGTERM")
|
||||
err := server.Stop()
|
||||
if err != nil {
|
||||
slog.Error("Failed to stop server", slog.String("err", err.Error()))
|
||||
os.Exit(1)
|
||||
}
|
||||
os.Remove(vars.PID_PATH)
|
||||
_ = server.StopAll()
|
||||
//err := srv.Stop()
|
||||
// if err != nil {
|
||||
// slog.Error("Failed to stop server", slog.String("err", err.Error()))
|
||||
// os.Exit(1)
|
||||
// }
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
15
cmd/stop.go
15
cmd/stop.go
@@ -41,12 +41,21 @@ var stopCmd = &cobra.Command{
|
||||
}
|
||||
if *optsStopCmd.Force {
|
||||
slog.Debug("force stopping server by SIGKILL", slog.Int("pid", *optsStopCmd.PID))
|
||||
proc.Signal(syscall.SIGKILL)
|
||||
err = proc.Signal(syscall.SIGKILL)
|
||||
if err != nil {
|
||||
slog.Error("failed to reload process", slog.Int("pid", *optsReloadCmd.PID), slog.String("err", err.Error()))
|
||||
} else {
|
||||
slog.Debug("done")
|
||||
}
|
||||
} else {
|
||||
slog.Debug("stopping server", slog.Int("pid", *optsStopCmd.PID))
|
||||
proc.Signal(syscall.SIGTERM)
|
||||
err = proc.Signal(syscall.SIGTERM)
|
||||
if err != nil {
|
||||
slog.Error("failed to reload process", slog.Int("pid", *optsReloadCmd.PID), slog.String("err", err.Error()))
|
||||
} else {
|
||||
slog.Debug("done")
|
||||
}
|
||||
}
|
||||
slog.Debug("done")
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
1
go.mod
1
go.mod
@@ -9,6 +9,7 @@ require (
|
||||
|
||||
require (
|
||||
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
||||
github.com/go-chi/chi/v5 v5.2.3 // indirect
|
||||
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||
|
||||
2
go.sum
2
go.sum
@@ -7,6 +7,8 @@ github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHk
|
||||
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
||||
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
|
||||
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
|
||||
github.com/go-chi/chi/v5 v5.2.3 h1:WQIt9uxdsAbgIYgid+BpYc+liqQZGMHRaUwp0JUcvdE=
|
||||
github.com/go-chi/chi/v5 v5.2.3/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops=
|
||||
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
|
||||
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
|
||||
27
internal/server/registry.go
Normal file
27
internal/server/registry.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
type registry struct {
|
||||
lss map[string]*LiveServer
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
var reg = registry{
|
||||
lss: make(map[string]*LiveServer),
|
||||
}
|
||||
|
||||
func pushLs(ls *LiveServer) {
|
||||
reg.lss[ls.name] = ls
|
||||
}
|
||||
|
||||
func isExists(name string) bool {
|
||||
_, ok := reg.lss[name]
|
||||
return ok
|
||||
}
|
||||
|
||||
func deleteLs(name string) {
|
||||
delete(reg.lss, name)
|
||||
}
|
||||
@@ -114,7 +114,12 @@ func Create(name string) (*LiveServer, error) {
|
||||
return nil, fmt.Errorf("server name is empty")
|
||||
}
|
||||
|
||||
if isExists(name) {
|
||||
return nil, fmt.Errorf("server with this name is already exists")
|
||||
}
|
||||
|
||||
ls := &LiveServer{name: name}
|
||||
pushLs(ls)
|
||||
ls.setStatus(Status{ID: StatusStopped})
|
||||
return ls, nil
|
||||
}
|
||||
@@ -241,6 +246,17 @@ func (ls *LiveServer) stop(inst *instance) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func StopAll() (errors []error) {
|
||||
for key, ls := range reg.lss {
|
||||
slog.Debug("stopping LiveServer", slog.String("name", key))
|
||||
err := ls.Stop()
|
||||
if err != nil {
|
||||
errors = append(errors, err)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (ls *LiveServer) Stop() error {
|
||||
inst := ls.active.Load().(*instance)
|
||||
if inst == nil {
|
||||
@@ -280,6 +296,12 @@ func (ls *LiveServer) Reload(newAddr string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Close deletes [LiveServer] object from registry, and sets ls to nil
|
||||
func (ls *LiveServer) Close() {
|
||||
deleteLs(ls.name)
|
||||
ls = nil
|
||||
}
|
||||
|
||||
// package server
|
||||
|
||||
// import (
|
||||
|
||||
@@ -1 +1,10 @@
|
||||
Hiwqe
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Панель управления</title>
|
||||
<link rel="stylesheet" href="/static/style.css">
|
||||
</head>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user