Skip to content

Commit

Permalink
mv server to internal
Browse files Browse the repository at this point in the history
  • Loading branch information
mattkasun committed Apr 17, 2024
1 parent 491e25d commit 7161d86
Show file tree
Hide file tree
Showing 53 changed files with 162 additions and 161 deletions.
111 changes: 2 additions & 109 deletions app/plexus-server/main.go
Original file line number Diff line number Diff line change
@@ -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()
}
34 changes: 0 additions & 34 deletions app/plexus-server/server.go

This file was deleted.

File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion app/plexus-server/broker.go → internal/server/broker.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"context"
Expand Down
2 changes: 1 addition & 1 deletion app/plexus-server/config.go → internal/server/config.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"crypto/tls"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"testing"
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
2 changes: 1 addition & 1 deletion app/plexus-server/keys.go → internal/server/keys.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"encoding/base64"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"bytes"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"errors"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"net"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"bytes"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"encoding/json"
Expand Down
2 changes: 1 addition & 1 deletion app/plexus-server/page.go → internal/server/page.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"log/slog"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"bytes"
Expand Down
2 changes: 1 addition & 1 deletion app/plexus-server/peers.go → internal/server/peers.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"encoding/json"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"errors"
Expand Down
2 changes: 1 addition & 1 deletion app/plexus-server/router.go → internal/server/router.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"crypto/rand"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"io"
Expand Down
142 changes: 142 additions & 0 deletions internal/server/server.go
Original file line number Diff line number Diff line change
@@ -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)
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"fmt"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package server

import (
"errors"
Expand Down
Loading

0 comments on commit 7161d86

Please sign in to comment.