added base code

This commit is contained in:
Bryan Joshua Pedini 2024-08-17 10:27:36 +02:00
parent 0078e38e2f
commit f5faf61006
8 changed files with 172 additions and 0 deletions

4
config.yml Normal file
View File

@ -0,0 +1,4 @@
---
listen:
address: 0.0.0.0
port: 80

8
go.mod Normal file
View 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
View 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
View 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
View 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")
}

View 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
View 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
View 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,
})
}