~starkingdoms/starkingdoms

e36f9087f62db5f554de869952d35abb18ebe3b9 — core 2 years ago 7223c99
new API base
A starkingdoms-api/.gitignore => starkingdoms-api/.gitignore +1 -0
@@ 0,0 1,1 @@
config.yml
\ No newline at end of file

A starkingdoms-api/cmd/starkingdoms-api/main.go => starkingdoms-api/cmd/starkingdoms-api/main.go +52 -0
@@ 0,0 1,52 @@
package main

import (
	"flag"
	"fmt"
	"github.com/sirupsen/logrus"
	starkingdoms_api "gitlab.com/starkingdoms.tk/starkingdoms.tk/starkingdoms-api"
	"net/http"
	"os"
)

func main() {
	configPath := flag.String("config", "config.yml", "File to load configuration file from")
	printUsage := flag.Bool("help", false, "Show command line usage")

	flag.Parse()

	if *printUsage {
		flag.Usage()
		os.Exit(0)
	}

	c, err := starkingdoms_api.LoadConfig(*configPath)

	if err != nil {
		fmt.Printf("failed to load config: %s", err)
		os.Exit(1)
	}

	if c.Logging.Format == "json" {
		logrus.SetFormatter(&logrus.JSONFormatter{})
	}
	logrus.SetLevel(c.Logging.Level)

	logrus.WithFields(logrus.Fields{
		"host": c.Server.Host,
		"port": c.Server.Port,
	}).Info("starting http listener")

	http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) {
		logrus.WithFields(logrus.Fields{
			"remote": r.RemoteAddr,
		}).Info("GET /ping")

		_, err := fmt.Fprintf(w, "pong")
		if err != nil {
			logrus.Error(err)
		}
	})

	logrus.Error(http.ListenAndServe(c.Server.Host+":"+c.Server.Port, nil))
}

A starkingdoms-api/config.go => starkingdoms-api/config.go +40 -0
@@ 0,0 1,40 @@
package starkingdoms_api

import (
	"github.com/sirupsen/logrus"
	"gopkg.in/yaml.v3"
	"os"
)

type Config struct {
	Server struct {
		Host string `yaml:"host"`
		Port string `yaml:"port"`
	} `yaml:"server"`
	Logging struct {
		Format string       `yaml:"format"`
		Level  logrus.Level `yaml:"level"`
	} `yaml:"logging"`
}

func LoadConfig(path string) (*Config, error) {
	f, err := os.Open(path)
	if err != nil {
		return nil, err
	}

	var cfg Config
	decoder := yaml.NewDecoder(f)

	err = decoder.Decode(&cfg)
	if err != nil {
		return nil, err
	}

	err = f.Close()
	if err != nil {
		return nil, err
	}

	return &cfg, nil
}

A starkingdoms-api/go.mod => starkingdoms-api/go.mod +9 -0
@@ 0,0 1,9 @@
module gitlab.com/starkingdoms.tk/starkingdoms.tk/starkingdoms-api

go 1.21.3

require (
	github.com/sirupsen/logrus v1.9.3 // indirect
	golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
	gopkg.in/yaml.v3 v3.0.1 // indirect
)

A starkingdoms-api/go.sum => starkingdoms-api/go.sum +13 -0
@@ 0,0 1,13 @@
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=