basic webserver
This commit is contained in:
parent
d3f40ee087
commit
f93dd223d6
22
cmd/root.go
22
cmd/root.go
@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"git.bloy.org/mike/hasshelper/web"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
"go.uber.org/zap"
|
||||
@ -16,18 +17,22 @@ var rootCmd = &cobra.Command{
|
||||
var logger *zap.Logger
|
||||
var err error
|
||||
if viper.GetString("deployment") == "prod" {
|
||||
logger, err = zap.NewProduction()
|
||||
logger, err = zap.NewProduction(zap.WithCaller(false))
|
||||
} else {
|
||||
logger, err = zap.NewDevelopment()
|
||||
logger, err = zap.NewDevelopment(zap.WithCaller(false))
|
||||
}
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
logger.Sugar().With("version", viper.GetString("version")).Info("HASSHelper startup")
|
||||
exitchan := make(chan bool)
|
||||
web.Run(logger, exitchan)
|
||||
<-exitchan // run the main command until one of the goroutines is done
|
||||
},
|
||||
}
|
||||
|
||||
// Execute will kick off cobra's processing of the root command
|
||||
func Execute() {
|
||||
viper.SetDefault("Version", "1.2.3")
|
||||
if err := rootCmd.Execute(); err != nil {
|
||||
@ -45,4 +50,17 @@ func init() {
|
||||
|
||||
func initConfig() {
|
||||
viper.AutomaticEnv()
|
||||
expected_config := []string{
|
||||
"deployment",
|
||||
"image_dir",
|
||||
"version",
|
||||
"webserver_port",
|
||||
}
|
||||
for _, key := range expected_config {
|
||||
if !viper.IsSet(key) {
|
||||
fmt.Fprintf(os.Stderr, "Missing configuration value: %s\n", key)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
fmt.Println(viper.AllSettings())
|
||||
}
|
||||
|
||||
@ -45,6 +45,9 @@ func main() {
|
||||
fmt.Sprintf("package %s", pkgName),
|
||||
"// Code generated automatically. DO NOT EDIT",
|
||||
"",
|
||||
fmt.Sprintf(
|
||||
"// %s is the generated version based on the current git revision",
|
||||
varName),
|
||||
fmt.Sprintf("const %s = \"%s\"", varName, versionStr),
|
||||
}
|
||||
file, err := os.Create(fileName)
|
||||
|
||||
3
main.go
3
main.go
@ -1,3 +1,4 @@
|
||||
// Package main for the hasshelper application command
|
||||
package main
|
||||
|
||||
import (
|
||||
@ -6,6 +7,8 @@ import (
|
||||
)
|
||||
|
||||
//go:generate go run ./gen_version.go -p cmd -f cmd/git_version.go
|
||||
|
||||
// main
|
||||
func main() {
|
||||
cmd.Execute()
|
||||
}
|
||||
|
||||
@ -1,10 +1,14 @@
|
||||
{
|
||||
daemon +sigterm: godoc -index -play
|
||||
}
|
||||
.git/**/* gen_version.go {
|
||||
prep: go mod tidy
|
||||
prep: go generate
|
||||
}
|
||||
|
||||
**/*.go {
|
||||
**/*.go .env {
|
||||
prep: go mod tidy
|
||||
prep: go test @dirmods
|
||||
prep: go build
|
||||
daemon +sigterm: ./hasshelper
|
||||
}
|
||||
|
||||
38
web/server.go
Normal file
38
web/server.go
Normal file
@ -0,0 +1,38 @@
|
||||
package web
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"github.com/spf13/viper"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type configObj struct {
|
||||
logger *zap.Logger
|
||||
port int
|
||||
imageDir string
|
||||
}
|
||||
|
||||
var config = configObj{}
|
||||
|
||||
// Run starts up the webserver part of hasshelper. It writes to exitch if
|
||||
// the webserver ends unexpectedly. Config values will be read from viper.
|
||||
func Run(rootLogger *zap.Logger, exitch chan bool) {
|
||||
config.logger = rootLogger.Named("web")
|
||||
config.port = viper.GetInt("webserver_port")
|
||||
config.imageDir = viper.GetString("image_dir")
|
||||
addr := fmt.Sprintf(":%d", config.port)
|
||||
http.Handle("/", http.FileServer(http.FS(os.DirFS("."))))
|
||||
var logger = config.logger.Sugar()
|
||||
|
||||
logger.Infow("Webserver startup", "port", config.port)
|
||||
|
||||
if err := http.ListenAndServe(addr, nil); err != nil {
|
||||
logger.Errorf("Webserver fatal error: %s", err)
|
||||
} else {
|
||||
logger.Info("webserver shutting down")
|
||||
}
|
||||
exitch <- true
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user