added base code
This commit is contained in:
parent
0078e38e2f
commit
f5faf61006
4
config.yml
Normal file
4
config.yml
Normal file
@ -0,0 +1,4 @@
|
||||
---
|
||||
listen:
|
||||
address: 0.0.0.0
|
||||
port: 80
|
8
go.mod
Normal file
8
go.mod
Normal file
@ -0,0 +1,8 @@
|
||||
module git.bjphoster.com/source/yaskm
|
||||
|
||||
go 1.22.2
|
||||
|
||||
require (
|
||||
github.com/gorilla/mux v1.8.1
|
||||
gopkg.in/yaml.v2 v2.4.0
|
||||
)
|
6
go.sum
Normal file
6
go.sum
Normal file
@ -0,0 +1,6 @@
|
||||
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
||||
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
42
main.go
Normal file
42
main.go
Normal file
@ -0,0 +1,42 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
)
|
||||
|
||||
var APP_VERSION string = "latest"
|
||||
var COMMIT_ID string = "undefined"
|
||||
var ws *WebServer
|
||||
|
||||
func main() {
|
||||
// Create a channel to receive the OS signals
|
||||
sc := make(chan os.Signal, 1)
|
||||
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
// Initialize the WebService structure
|
||||
ws = new(WebServer)
|
||||
ws.Initialize()
|
||||
|
||||
// Start the WebService
|
||||
go ws.Start()
|
||||
|
||||
// Wait for a signal
|
||||
<-sc
|
||||
fmt.Println("Shutting down...")
|
||||
|
||||
// Create a context with a timeout for graceful shutdown
|
||||
shCtx, shCancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer shCancel()
|
||||
|
||||
// Shutdown the HTTP server
|
||||
err := ws.HTTPServer.Shutdown(shCtx)
|
||||
if err != nil {
|
||||
fmt.Printf("Server shutdown error: %s", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
7
routes.go
Normal file
7
routes.go
Normal file
@ -0,0 +1,7 @@
|
||||
package main
|
||||
|
||||
import "github.com/gorilla/mux"
|
||||
|
||||
func (s *WebServer) Routes(r *mux.Router) {
|
||||
r.HandleFunc("/version", handleVersion).Methods("GET")
|
||||
}
|
12
templates/html/version.html
Normal file
12
templates/html/version.html
Normal file
@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>{{.Name}}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Version: {{.Version}}<br />
|
||||
Commit ID: {{.CommitId}}
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
67
type_webserver.go
Normal file
67
type_webserver.go
Normal file
@ -0,0 +1,67 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
type WebServer struct {
|
||||
HTTPServer *http.Server
|
||||
Listen WSListen `yaml:"listen"`
|
||||
}
|
||||
|
||||
type WSListen struct {
|
||||
Address string `yaml:"address"`
|
||||
Port string `yaml:"port"`
|
||||
}
|
||||
|
||||
func (s *WebServer) Initialize() {
|
||||
// Initialize default values
|
||||
s.Listen = WSListen{
|
||||
Address: "0.0.0.0",
|
||||
Port: "80",
|
||||
}
|
||||
|
||||
// Attempt to read the config file
|
||||
configFile, err := os.ReadFile("config.yml")
|
||||
if err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
// File does not exist, log and use default config
|
||||
fmt.Println("Config file not found, using default settings.")
|
||||
} else {
|
||||
// Some other error occurred when trying to read the file, exit
|
||||
fmt.Println("Error reading config file:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
} else {
|
||||
// If the file exists, unmarshal it into the ServiceSettings struct
|
||||
err = yaml.Unmarshal(configFile, &s)
|
||||
if err != nil {
|
||||
fmt.Println("Error parsing config file:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *WebServer) Start() error {
|
||||
// Create a new MUX router and an HTTP server
|
||||
r := mux.NewRouter()
|
||||
s.HTTPServer = &http.Server{
|
||||
Addr: s.Listen.Address + ":" + s.Listen.Port,
|
||||
Handler: r,
|
||||
}
|
||||
|
||||
// Associate the various handlers (routes)
|
||||
s.Routes(r)
|
||||
|
||||
// Start the server
|
||||
fmt.Println("Listening on", s.Listen.Address+":"+s.Listen.Port)
|
||||
err := s.HTTPServer.ListenAndServe()
|
||||
|
||||
// Return error, or nil
|
||||
return err
|
||||
}
|
26
version.go
Normal file
26
version.go
Normal file
@ -0,0 +1,26 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"html/template"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
//go:embed templates/html/version.html
|
||||
var versionTemplate string
|
||||
|
||||
func handleVersion(w http.ResponseWriter, r *http.Request) {
|
||||
type SiteInfo struct {
|
||||
CommitId string
|
||||
Name string
|
||||
Version string
|
||||
}
|
||||
|
||||
tmpl, _ := template.New("version.html").Parse(versionTemplate)
|
||||
// Return (write) the version to the response body
|
||||
tmpl.Execute(w, SiteInfo{
|
||||
CommitId: COMMIT_ID,
|
||||
Name: "YASKM",
|
||||
Version: APP_VERSION,
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue
Block a user