added base code
This commit is contained in:
		
							
								
								
									
										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,
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user