diff --git a/app/plexus-agent/cmd/drop.go b/app/plexus-agent/cmd/drop.go index 4ff3907..16d4f7f 100644 --- a/app/plexus-agent/cmd/drop.go +++ b/app/plexus-agent/cmd/drop.go @@ -19,7 +19,7 @@ import ( "fmt" "github.com/devilcove/plexus" - "github.com/devilcove/plexus/agent" + "github.com/devilcove/plexus/internal/agent" "github.com/spf13/cobra" ) diff --git a/app/plexus-agent/cmd/join.go b/app/plexus-agent/cmd/join.go index 9eb9620..76e949f 100644 --- a/app/plexus-agent/cmd/join.go +++ b/app/plexus-agent/cmd/join.go @@ -19,7 +19,7 @@ import ( "fmt" "github.com/devilcove/plexus" - "github.com/devilcove/plexus/agent" + "github.com/devilcove/plexus/internal/agent" "github.com/spf13/cobra" ) diff --git a/app/plexus-agent/cmd/leave.go b/app/plexus-agent/cmd/leave.go index d23a2d9..7afbf34 100644 --- a/app/plexus-agent/cmd/leave.go +++ b/app/plexus-agent/cmd/leave.go @@ -19,7 +19,7 @@ import ( "fmt" "github.com/devilcove/plexus" - "github.com/devilcove/plexus/agent" + "github.com/devilcove/plexus/internal/agent" "github.com/spf13/cobra" ) diff --git a/app/plexus-agent/cmd/loglevel.go b/app/plexus-agent/cmd/loglevel.go index 7d22ce7..250fbec 100644 --- a/app/plexus-agent/cmd/loglevel.go +++ b/app/plexus-agent/cmd/loglevel.go @@ -20,7 +20,7 @@ import ( "strings" "github.com/devilcove/plexus" - "github.com/devilcove/plexus/agent" + "github.com/devilcove/plexus/internal/agent" "github.com/spf13/cobra" ) diff --git a/app/plexus-agent/cmd/register.go b/app/plexus-agent/cmd/register.go index 273446d..e8d4cb5 100644 --- a/app/plexus-agent/cmd/register.go +++ b/app/plexus-agent/cmd/register.go @@ -19,7 +19,7 @@ import ( "fmt" "github.com/devilcove/plexus" - "github.com/devilcove/plexus/agent" + "github.com/devilcove/plexus/internal/agent" "github.com/spf13/cobra" ) diff --git a/app/plexus-agent/cmd/reload.go b/app/plexus-agent/cmd/reload.go index 893f36d..f0c00ab 100644 --- a/app/plexus-agent/cmd/reload.go +++ b/app/plexus-agent/cmd/reload.go @@ -19,7 +19,7 @@ import ( "fmt" "github.com/devilcove/plexus" - "github.com/devilcove/plexus/agent" + "github.com/devilcove/plexus/internal/agent" "github.com/spf13/cobra" ) diff --git a/app/plexus-agent/cmd/reset.go b/app/plexus-agent/cmd/reset.go index f14c4f9..9254fc5 100644 --- a/app/plexus-agent/cmd/reset.go +++ b/app/plexus-agent/cmd/reset.go @@ -19,7 +19,7 @@ import ( "fmt" "github.com/devilcove/plexus" - "github.com/devilcove/plexus/agent" + "github.com/devilcove/plexus/internal/agent" "github.com/spf13/cobra" ) diff --git a/app/plexus-agent/cmd/root.go b/app/plexus-agent/cmd/root.go index 70bce63..b42eec2 100644 --- a/app/plexus-agent/cmd/root.go +++ b/app/plexus-agent/cmd/root.go @@ -22,7 +22,7 @@ import ( "os" "runtime/debug" - "github.com/devilcove/plexus/agent" + "github.com/devilcove/plexus/internal/agent" "github.com/spf13/cobra" "github.com/spf13/viper" ) diff --git a/app/plexus-agent/cmd/run.go b/app/plexus-agent/cmd/run.go index 0135099..feccb5a 100644 --- a/app/plexus-agent/cmd/run.go +++ b/app/plexus-agent/cmd/run.go @@ -18,7 +18,7 @@ package cmd import ( "fmt" - "github.com/devilcove/plexus/agent" + "github.com/devilcove/plexus/internal/agent" "github.com/spf13/cobra" ) diff --git a/app/plexus-agent/cmd/status.go b/app/plexus-agent/cmd/status.go index 984d7e7..5b053cc 100644 --- a/app/plexus-agent/cmd/status.go +++ b/app/plexus-agent/cmd/status.go @@ -23,7 +23,7 @@ import ( "time" "github.com/devilcove/plexus" - "github.com/devilcove/plexus/agent" + "github.com/devilcove/plexus/internal/agent" "github.com/kr/pretty" "github.com/spf13/cobra" "github.com/vishvananda/netlink" diff --git a/app/plexus-agent/cmd/version.go b/app/plexus-agent/cmd/version.go index e883c23..a01203d 100644 --- a/app/plexus-agent/cmd/version.go +++ b/app/plexus-agent/cmd/version.go @@ -21,7 +21,7 @@ import ( "strings" "github.com/devilcove/plexus" - "github.com/devilcove/plexus/agent" + "github.com/devilcove/plexus/internal/agent" "github.com/spf13/cobra" ) diff --git a/app/plexus-server/main.go b/app/plexus-server/main.go index d2498c2..9822f22 100644 --- a/app/plexus-server/main.go +++ b/app/plexus-server/main.go @@ -1,114 +1,7 @@ package main -import ( - "context" - "crypto/tls" - "log/slog" - "net/http" - "os" - "os/signal" - "sync" - "syscall" - - "github.com/devilcove/boltdb" - "github.com/nats-io/nats-server/v2/server" - "github.com/nats-io/nats.go" -) - -var ( - newDevice chan string - brokerfail chan int - webfail chan int - natServer *server.Server - natsOptions *server.Options - natsConn *nats.Conn - eConn *nats.EncodedConn -) +import "github.com/devilcove/plexus/internal/server" func main() { - tlsConfig, err := configureServer() - if err != nil { - slog.Error("unable to configure server", "error", err) - os.Exit(1) - } - defer boltdb.Close() - wg := sync.WaitGroup{} - quit := make(chan os.Signal, 1) - reset := make(chan os.Signal, 1) - brokerfail = make(chan int, 1) - webfail = make(chan int, 1) - newDevice = make(chan string, 1) - signal.Notify(quit, syscall.SIGTERM, os.Interrupt) - signal.Notify(reset, syscall.SIGHUP) - ctx, cancel := context.WithCancel(context.Background()) - start(ctx, &wg, tlsConfig) - for { - select { - case <-quit: - slog.Info("Shutting down...") - cancel() - wg.Wait() - return - case <-reset: - slog.Info("reset...") - cancel() - wg.Wait() - ctx, cancel = context.WithCancel(context.Background()) - start(ctx, &wg, tlsConfig) - case <-brokerfail: - slog.Error("error running broker .... shutting down") - cancel() - wg.Wait() - os.Exit(1) - case <-webfail: - slog.Error("error running web .... shutting down") - cancel() - wg.Wait() - os.Exit(2) - } - } -} - -func start(ctx context.Context, wg *sync.WaitGroup, tls *tls.Config) { - wg.Add(2) - go web(ctx, wg, tls) - go broker(ctx, wg, tls) -} - -func web(ctx context.Context, wg *sync.WaitGroup, tls *tls.Config) { - defer wg.Done() - slog.Info("Starting web server...") - router := setupRouter() - server := http.Server{ - Addr: ":" + config.Port, - Handler: router, - } - if config.Secure { - if tls == nil { - slog.Error("secure set but tls nil") - webfail <- 1 - } - server.TLSConfig = tls - server.Addr = ":443" - go func() { - if err := server.ListenAndServeTLS("", ""); err != nil && err != http.ErrServerClosed { - slog.Error("https server", "error", err) - webfail <- 1 - } - }() - } else { - go func() { - if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { - slog.Error("http server", "error", err) - webfail <- 1 - } - }() - } - slog.Info("web server started") - <-ctx.Done() - slog.Info("shutting down web server") - if err := server.Shutdown(ctx); err != nil { - slog.Error("http server shutdown", "error", err.Error()) - } - slog.Info("http server shutdown") + server.Run() } diff --git a/app/plexus-server/server.go b/app/plexus-server/server.go deleted file mode 100644 index 714833e..0000000 --- a/app/plexus-server/server.go +++ /dev/null @@ -1,34 +0,0 @@ -package main - -import ( - "log/slog" - "net/http" - "os/exec" - "strings" - - "github.com/devilcove/plexus" - "github.com/gin-gonic/gin" -) - -func getServer(c *gin.Context) { - server := struct { - LogLevel string - Logs []string - }{ - LogLevel: config.Verbosity, - } - cmd := exec.Command("/usr/bin/journalctl", "-eu", "plexus-server", "--no-pager", "-n", "25", "-r") - out, err := cmd.CombinedOutput() - if err != nil { - slog.Error("journalctl", "error", err) - } - logs := string(out) - server.Logs = strings.Split(logs, "\n") - c.HTML(http.StatusOK, "server", server) -} - -func setLogLevel(c *gin.Context) { - config.Verbosity = c.Param("level") - plexus.SetLogging(config.Verbosity) - getServer(c) -} diff --git a/agent/broker.go b/internal/agent/broker.go similarity index 100% rename from agent/broker.go rename to internal/agent/broker.go diff --git a/agent/config.go b/internal/agent/config.go similarity index 100% rename from agent/config.go rename to internal/agent/config.go diff --git a/agent/daemon.go b/internal/agent/daemon.go similarity index 100% rename from agent/daemon.go rename to internal/agent/daemon.go diff --git a/agent/handlers.go b/internal/agent/handlers.go similarity index 100% rename from agent/handlers.go rename to internal/agent/handlers.go diff --git a/agent/interface.go b/internal/agent/interface.go similarity index 100% rename from agent/interface.go rename to internal/agent/interface.go diff --git a/agent/join_test.go b/internal/agent/join_test.go similarity index 100% rename from agent/join_test.go rename to internal/agent/join_test.go diff --git a/agent/models.go b/internal/agent/models.go similarity index 100% rename from agent/models.go rename to internal/agent/models.go diff --git a/agent/networks.go b/internal/agent/networks.go similarity index 100% rename from agent/networks.go rename to internal/agent/networks.go diff --git a/agent/nftables.go b/internal/agent/nftables.go similarity index 100% rename from agent/nftables.go rename to internal/agent/nftables.go diff --git a/agent/nftables_test.go b/internal/agent/nftables_test.go similarity index 100% rename from agent/nftables_test.go rename to internal/agent/nftables_test.go diff --git a/agent/publish.go b/internal/agent/publish.go similarity index 100% rename from agent/publish.go rename to internal/agent/publish.go diff --git a/agent/register.go b/internal/agent/register.go similarity index 100% rename from agent/register.go rename to internal/agent/register.go diff --git a/app/plexus-server/assets/css/brands.min.css b/internal/server/assets/css/brands.min.css similarity index 100% rename from app/plexus-server/assets/css/brands.min.css rename to internal/server/assets/css/brands.min.css diff --git a/app/plexus-server/assets/css/fontawesome.min.css b/internal/server/assets/css/fontawesome.min.css similarity index 100% rename from app/plexus-server/assets/css/fontawesome.min.css rename to internal/server/assets/css/fontawesome.min.css diff --git a/app/plexus-server/assets/css/solid.min.css b/internal/server/assets/css/solid.min.css similarity index 100% rename from app/plexus-server/assets/css/solid.min.css rename to internal/server/assets/css/solid.min.css diff --git a/app/plexus-server/assets/webfonts/fa-brands-400.woff2 b/internal/server/assets/webfonts/fa-brands-400.woff2 similarity index 100% rename from app/plexus-server/assets/webfonts/fa-brands-400.woff2 rename to internal/server/assets/webfonts/fa-brands-400.woff2 diff --git a/app/plexus-server/assets/webfonts/fa-regular-400.woff2 b/internal/server/assets/webfonts/fa-regular-400.woff2 similarity index 100% rename from app/plexus-server/assets/webfonts/fa-regular-400.woff2 rename to internal/server/assets/webfonts/fa-regular-400.woff2 diff --git a/app/plexus-server/assets/webfonts/fa-solid-900.woff2 b/internal/server/assets/webfonts/fa-solid-900.woff2 similarity index 100% rename from app/plexus-server/assets/webfonts/fa-solid-900.woff2 rename to internal/server/assets/webfonts/fa-solid-900.woff2 diff --git a/app/plexus-server/broker.go b/internal/server/broker.go similarity index 99% rename from app/plexus-server/broker.go rename to internal/server/broker.go index 99de5ba..62f3ed6 100644 --- a/app/plexus-server/broker.go +++ b/internal/server/broker.go @@ -1,4 +1,4 @@ -package main +package server import ( "context" diff --git a/app/plexus-server/config.go b/internal/server/config.go similarity index 99% rename from app/plexus-server/config.go rename to internal/server/config.go index edcefba..e351b9d 100644 --- a/app/plexus-server/config.go +++ b/internal/server/config.go @@ -1,4 +1,4 @@ -package main +package server import ( "crypto/tls" diff --git a/app/plexus-server/config_test.go b/internal/server/config_test.go similarity index 97% rename from app/plexus-server/config_test.go rename to internal/server/config_test.go index 02f543f..7007dbe 100644 --- a/app/plexus-server/config_test.go +++ b/internal/server/config_test.go @@ -1,4 +1,4 @@ -package main +package server import ( "testing" diff --git a/app/plexus-server/html/about.html b/internal/server/html/about.html similarity index 100% rename from app/plexus-server/html/about.html rename to internal/server/html/about.html diff --git a/app/plexus-server/html/content.html b/internal/server/html/content.html similarity index 100% rename from app/plexus-server/html/content.html rename to internal/server/html/content.html diff --git a/app/plexus-server/html/error.html b/internal/server/html/error.html similarity index 100% rename from app/plexus-server/html/error.html rename to internal/server/html/error.html diff --git a/app/plexus-server/html/header.html b/internal/server/html/header.html similarity index 100% rename from app/plexus-server/html/header.html rename to internal/server/html/header.html diff --git a/app/plexus-server/html/keys.html b/internal/server/html/keys.html similarity index 100% rename from app/plexus-server/html/keys.html rename to internal/server/html/keys.html diff --git a/app/plexus-server/html/layout.html b/internal/server/html/layout.html similarity index 100% rename from app/plexus-server/html/layout.html rename to internal/server/html/layout.html diff --git a/app/plexus-server/html/login.html b/internal/server/html/login.html similarity index 100% rename from app/plexus-server/html/login.html rename to internal/server/html/login.html diff --git a/app/plexus-server/html/networks.html b/internal/server/html/networks.html similarity index 100% rename from app/plexus-server/html/networks.html rename to internal/server/html/networks.html diff --git a/app/plexus-server/html/peers.html b/internal/server/html/peers.html similarity index 100% rename from app/plexus-server/html/peers.html rename to internal/server/html/peers.html diff --git a/app/plexus-server/html/relay.html b/internal/server/html/relay.html similarity index 100% rename from app/plexus-server/html/relay.html rename to internal/server/html/relay.html diff --git a/app/plexus-server/html/router.html b/internal/server/html/router.html similarity index 100% rename from app/plexus-server/html/router.html rename to internal/server/html/router.html diff --git a/app/plexus-server/html/server.html b/internal/server/html/server.html similarity index 100% rename from app/plexus-server/html/server.html rename to internal/server/html/server.html diff --git a/app/plexus-server/html/sidebar.html b/internal/server/html/sidebar.html similarity index 100% rename from app/plexus-server/html/sidebar.html rename to internal/server/html/sidebar.html diff --git a/app/plexus-server/html/users.html b/internal/server/html/users.html similarity index 100% rename from app/plexus-server/html/users.html rename to internal/server/html/users.html diff --git a/app/plexus-server/images/attribution.txt b/internal/server/images/attribution.txt similarity index 100% rename from app/plexus-server/images/attribution.txt rename to internal/server/images/attribution.txt diff --git a/app/plexus-server/images/connect-green.svg b/internal/server/images/connect-green.svg similarity index 100% rename from app/plexus-server/images/connect-green.svg rename to internal/server/images/connect-green.svg diff --git a/app/plexus-server/images/connect-red.svg b/internal/server/images/connect-red.svg similarity index 100% rename from app/plexus-server/images/connect-red.svg rename to internal/server/images/connect-red.svg diff --git a/app/plexus-server/images/global_network.png b/internal/server/images/global_network.png similarity index 100% rename from app/plexus-server/images/global_network.png rename to internal/server/images/global_network.png diff --git a/app/plexus-server/images/global_network.svg b/internal/server/images/global_network.svg similarity index 100% rename from app/plexus-server/images/global_network.svg rename to internal/server/images/global_network.svg diff --git a/app/plexus-server/images/icon.svg b/internal/server/images/icon.svg similarity index 100% rename from app/plexus-server/images/icon.svg rename to internal/server/images/icon.svg diff --git a/app/plexus-server/images/network-green.svg b/internal/server/images/network-green.svg similarity index 100% rename from app/plexus-server/images/network-green.svg rename to internal/server/images/network-green.svg diff --git a/app/plexus-server/images/network-orange.svg b/internal/server/images/network-orange.svg similarity index 100% rename from app/plexus-server/images/network-orange.svg rename to internal/server/images/network-orange.svg diff --git a/app/plexus-server/images/network-red.svg b/internal/server/images/network-red.svg similarity index 100% rename from app/plexus-server/images/network-red.svg rename to internal/server/images/network-red.svg diff --git a/app/plexus-server/images/network-yellow.svg b/internal/server/images/network-yellow.svg similarity index 100% rename from app/plexus-server/images/network-yellow.svg rename to internal/server/images/network-yellow.svg diff --git a/app/plexus-server/images/plexus.png b/internal/server/images/plexus.png similarity index 100% rename from app/plexus-server/images/plexus.png rename to internal/server/images/plexus.png diff --git a/app/plexus-server/images/plexus.svg b/internal/server/images/plexus.svg similarity index 100% rename from app/plexus-server/images/plexus.svg rename to internal/server/images/plexus.svg diff --git a/app/plexus-server/keys.go b/internal/server/keys.go similarity index 99% rename from app/plexus-server/keys.go rename to internal/server/keys.go index 274029e..942d210 100644 --- a/app/plexus-server/keys.go +++ b/internal/server/keys.go @@ -1,4 +1,4 @@ -package main +package server import ( "encoding/base64" diff --git a/app/plexus-server/keys_test.go b/internal/server/keys_test.go similarity index 99% rename from app/plexus-server/keys_test.go rename to internal/server/keys_test.go index 994c72f..6aa763d 100644 --- a/app/plexus-server/keys_test.go +++ b/internal/server/keys_test.go @@ -1,4 +1,4 @@ -package main +package server import ( "bytes" diff --git a/app/plexus-server/nathandlers.go b/internal/server/nathandlers.go similarity index 99% rename from app/plexus-server/nathandlers.go rename to internal/server/nathandlers.go index 1cda38e..70eb519 100644 --- a/app/plexus-server/nathandlers.go +++ b/internal/server/nathandlers.go @@ -1,4 +1,4 @@ -package main +package server import ( "errors" diff --git a/app/plexus-server/nathandlers_test.go b/internal/server/nathandlers_test.go similarity index 98% rename from app/plexus-server/nathandlers_test.go rename to internal/server/nathandlers_test.go index 6c88f26..82c5ab2 100644 --- a/app/plexus-server/nathandlers_test.go +++ b/internal/server/nathandlers_test.go @@ -1,4 +1,4 @@ -package main +package server import ( "net" diff --git a/app/plexus-server/network_test.go b/internal/server/network_test.go similarity index 99% rename from app/plexus-server/network_test.go rename to internal/server/network_test.go index 4f633d2..df9d62a 100644 --- a/app/plexus-server/network_test.go +++ b/internal/server/network_test.go @@ -1,4 +1,4 @@ -package main +package server import ( "bytes" diff --git a/app/plexus-server/networks.go b/internal/server/networks.go similarity index 99% rename from app/plexus-server/networks.go rename to internal/server/networks.go index ad1d1e9..d36069a 100644 --- a/app/plexus-server/networks.go +++ b/internal/server/networks.go @@ -1,4 +1,4 @@ -package main +package server import ( "encoding/json" diff --git a/app/plexus-server/page.go b/internal/server/page.go similarity index 99% rename from app/plexus-server/page.go rename to internal/server/page.go index 7ec990a..a03a708 100644 --- a/app/plexus-server/page.go +++ b/internal/server/page.go @@ -1,4 +1,4 @@ -package main +package server import ( "log/slog" diff --git a/app/plexus-server/page_test.go b/internal/server/page_test.go similarity index 99% rename from app/plexus-server/page_test.go rename to internal/server/page_test.go index b1113b7..535cc8a 100644 --- a/app/plexus-server/page_test.go +++ b/internal/server/page_test.go @@ -1,4 +1,4 @@ -package main +package server import ( "bytes" diff --git a/app/plexus-server/peers.go b/internal/server/peers.go similarity index 99% rename from app/plexus-server/peers.go rename to internal/server/peers.go index 2e13692..58e427e 100644 --- a/app/plexus-server/peers.go +++ b/internal/server/peers.go @@ -1,4 +1,4 @@ -package main +package server import ( "encoding/json" diff --git a/app/plexus-server/publish.go b/internal/server/publish.go similarity index 97% rename from app/plexus-server/publish.go rename to internal/server/publish.go index b7e630c..06a3598 100644 --- a/app/plexus-server/publish.go +++ b/internal/server/publish.go @@ -1,4 +1,4 @@ -package main +package server import ( "errors" diff --git a/app/plexus-server/router.go b/internal/server/router.go similarity index 99% rename from app/plexus-server/router.go rename to internal/server/router.go index 21f25df..fb47b32 100644 --- a/app/plexus-server/router.go +++ b/internal/server/router.go @@ -1,4 +1,4 @@ -package main +package server import ( "crypto/rand" diff --git a/app/plexus-server/router_test.go b/internal/server/router_test.go similarity index 98% rename from app/plexus-server/router_test.go rename to internal/server/router_test.go index d1c9d3a..935507a 100644 --- a/app/plexus-server/router_test.go +++ b/internal/server/router_test.go @@ -1,4 +1,4 @@ -package main +package server import ( "io" diff --git a/internal/server/server.go b/internal/server/server.go new file mode 100644 index 0000000..d17ed69 --- /dev/null +++ b/internal/server/server.go @@ -0,0 +1,142 @@ +package server + +import ( + "context" + "crypto/tls" + "log/slog" + "net/http" + "os" + "os/exec" + "os/signal" + "strings" + "sync" + "syscall" + + "github.com/devilcove/boltdb" + "github.com/devilcove/plexus" + "github.com/gin-gonic/gin" + "github.com/nats-io/nats-server/v2/server" + "github.com/nats-io/nats.go" +) + +var ( + newDevice chan string + brokerfail chan int + webfail chan int + natServer *server.Server + natsOptions *server.Options + natsConn *nats.Conn + eConn *nats.EncodedConn +) + +// Run - run the server +func Run() { + tlsConfig, err := configureServer() + if err != nil { + slog.Error("unable to configure server", "error", err) + os.Exit(1) + } + defer boltdb.Close() + wg := sync.WaitGroup{} + quit := make(chan os.Signal, 1) + reset := make(chan os.Signal, 1) + brokerfail = make(chan int, 1) + webfail = make(chan int, 1) + newDevice = make(chan string, 1) + signal.Notify(quit, syscall.SIGTERM, os.Interrupt) + signal.Notify(reset, syscall.SIGHUP) + ctx, cancel := context.WithCancel(context.Background()) + start(ctx, &wg, tlsConfig) + for { + select { + case <-quit: + slog.Info("Shutting down...") + cancel() + wg.Wait() + return + case <-reset: + slog.Info("reset...") + cancel() + wg.Wait() + ctx, cancel = context.WithCancel(context.Background()) + start(ctx, &wg, tlsConfig) + case <-brokerfail: + slog.Error("error running broker .... shutting down") + cancel() + wg.Wait() + os.Exit(1) + case <-webfail: + slog.Error("error running web .... shutting down") + cancel() + wg.Wait() + os.Exit(2) + } + } +} + +func start(ctx context.Context, wg *sync.WaitGroup, tls *tls.Config) { + wg.Add(2) + go web(ctx, wg, tls) + go broker(ctx, wg, tls) +} + +func web(ctx context.Context, wg *sync.WaitGroup, tls *tls.Config) { + defer wg.Done() + slog.Info("Starting web server...") + router := setupRouter() + server := http.Server{ + Addr: ":" + config.Port, + Handler: router, + } + if config.Secure { + if tls == nil { + slog.Error("secure set but tls nil") + webfail <- 1 + } + server.TLSConfig = tls + server.Addr = ":443" + go func() { + if err := server.ListenAndServeTLS("", ""); err != nil && err != http.ErrServerClosed { + slog.Error("https server", "error", err) + webfail <- 1 + } + }() + } else { + go func() { + if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { + slog.Error("http server", "error", err) + webfail <- 1 + } + }() + } + slog.Info("web server started") + <-ctx.Done() + slog.Info("shutting down web server") + if err := server.Shutdown(ctx); err != nil { + slog.Error("http server shutdown", "error", err.Error()) + } + slog.Info("http server shutdown") +} + +func getServer(c *gin.Context) { + server := struct { + LogLevel string + Logs []string + }{ + LogLevel: config.Verbosity, + } + cmd := exec.Command("/usr/bin/journalctl", "-eu", "plexus-server", "--no-pager", "-n", "25", "-r") + out, err := cmd.CombinedOutput() + if err != nil { + slog.Error("journalctl", "error", err) + } + logs := string(out) + server.Logs = strings.Split(logs, "\n") + c.HTML(http.StatusOK, "server", server) +} + +func setLogLevel(c *gin.Context) { + config.Verbosity = c.Param("level") + plexus.SetLogging(config.Verbosity) + getServer(c) +} diff --git a/app/plexus-server/subnetrouter.go b/internal/server/subnetrouter.go similarity index 99% rename from app/plexus-server/subnetrouter.go rename to internal/server/subnetrouter.go index aaf6014..0782a04 100644 --- a/app/plexus-server/subnetrouter.go +++ b/internal/server/subnetrouter.go @@ -1,4 +1,4 @@ -package main +package server import ( "fmt" diff --git a/app/plexus-server/subnetrouter_test.go b/internal/server/subnetrouter_test.go similarity index 99% rename from app/plexus-server/subnetrouter_test.go rename to internal/server/subnetrouter_test.go index 7b43d0c..6da0a4e 100644 --- a/app/plexus-server/subnetrouter_test.go +++ b/internal/server/subnetrouter_test.go @@ -1,4 +1,4 @@ -package main +package server import ( "errors" diff --git a/app/plexus-server/users.go b/internal/server/users.go similarity index 99% rename from app/plexus-server/users.go rename to internal/server/users.go index 9dc3f00..e659f38 100644 --- a/app/plexus-server/users.go +++ b/internal/server/users.go @@ -1,4 +1,4 @@ -package main +package server import ( "encoding/json"