From 54dfd535a4c1de310107c2ea31319a74c26bcf7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Schw=C3=B6rer?= Date: Fri, 16 Dec 2022 01:07:48 +0100 Subject: [PATCH] Move parseConfOverride() to goext --- server/.gitignore | 130 +++++++-------------------------------- server/Makefile | 1 + server/config.go | 68 ++------------------ server/docs/docs.go | 50 --------------- server/docs/swagger.json | 22 ------- server/docs/swagger.yaml | 14 ----- server/go.mod | 2 +- server/go.sum | 2 + 8 files changed, 31 insertions(+), 258 deletions(-) delete mode 100644 server/docs/docs.go delete mode 100644 server/docs/swagger.json delete mode 100644 server/docs/swagger.yaml diff --git a/server/.gitignore b/server/.gitignore index e661ff2..cf5b9d2 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -9,27 +9,13 @@ DOCKER_GIT_INFO ############## -# Created by https://www.toptal.com/developers/gitignore/api/goland,macos,linux -# Edit at https://www.toptal.com/developers/gitignore?templates=goland,macos,linux - -### GoLand ### -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff .idea/**/workspace.xml .idea/**/tasks.xml .idea/**/usage.statistics.xml .idea/**/dictionaries .idea/**/shelf - -# AWS User-specific .idea/**/aws.xml - -# Generated files .idea/**/contentModel.xml - -# Sensitive or high-churn files .idea/**/dataSources/ .idea/**/dataSources.ids .idea/**/dataSources.local.xml @@ -37,123 +23,58 @@ DOCKER_GIT_INFO .idea/**/dynamic.xml .idea/**/uiDesigner.xml .idea/**/dbnavigator.xml - -# Gradle .idea/**/gradle.xml .idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/artifacts -# .idea/compiler.xml -# .idea/jarRepositories.xml -# .idea/modules.xml -# .idea/*.iml -# .idea/modules -# *.iml -# *.ipr - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin .idea/**/mongoSettings.xml +.idea/**/sonarlint/ +.idea/**/sonarIssues.xml +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ +.idea/**/azureSettings.xml -# File-based project format -*.iws +.idea/replstate.xml +.idea/sonarlint/ +.idea/httpRequests +.idea/caches/build_file_checksums.ser +.idea/$CACHE_FILE$ +.idea/codestream.xml -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin .idea_modules/ -# JIRA plugin + + + +cmake-build-*/ +*.iws +out/ atlassian-ide-plugin.xml -# Cursive Clojure plugin -.idea/replstate.xml -# SonarLint plugin -.idea/sonarlint/ -# Crashlytics plugin (for Android Studio and IntelliJ) + com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties fabric.properties -# Editor-based Rest Client -.idea/httpRequests -# Android studio 3.1+ serialized cache file -.idea/caches/build_file_checksums.ser -### GoLand Patch ### -# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 -# *.iml -# modules.xml -# .idea/misc.xml -# *.ipr - -# Sonarlint plugin -# https://plugins.jetbrains.com/plugin/7973-sonarlint -.idea/**/sonarlint/ - -# SonarQube Plugin -# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin -.idea/**/sonarIssues.xml - -# Markdown Navigator plugin -# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced -.idea/**/markdown-navigator.xml -.idea/**/markdown-navigator-enh.xml -.idea/**/markdown-navigator/ - -# Cache file creation bug -# See https://youtrack.jetbrains.com/issue/JBR-2257 -.idea/$CACHE_FILE$ - -# CodeStream plugin -# https://plugins.jetbrains.com/plugin/12206-codestream -.idea/codestream.xml - -# Azure Toolkit for IntelliJ plugin -# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij -.idea/**/azureSettings.xml - -### Linux ### *~ - -# temporary files which can be created if a process still has a handle open of a deleted file .fuse_hidden* - -# KDE directory preferences .directory - -# Linux trash folder which might appear on any partition or disk .Trash-* - -# .nfs files are created when an open file is removed but is still being accessed .nfs* -### macOS ### -# General + + + .DS_Store .AppleDouble .LSOverride - -# Icon must end with two \r Icon - - -# Thumbnails ._* - -# Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd .Spotlight-V100 @@ -161,16 +82,9 @@ Icon .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk - -### macOS Patch ### -# iCloud generated files *.icloud - -# End of https://www.toptal.com/developers/gitignore/api/goland,macos,linux diff --git a/server/Makefile b/server/Makefile index fea44fe..14a0437 100644 --- a/server/Makefile +++ b/server/Makefile @@ -6,6 +6,7 @@ NAMESPACE=$(shell git rev-parse --abbrev-ref HEAD) HASH=$(shell git rev-parse HEAD) build: swagger fmt + mkdir -p _build rm -f ./_build/scn_backend CGO_ENABLED=1 go build -v -o _build/scn_backend -tags "timetzdata sqlite_fts5 sqlite_foreign_keys" ./cmd/scnserver diff --git a/server/config.go b/server/config.go index 3b78dbc..8837ac0 100644 --- a/server/config.go +++ b/server/config.go @@ -4,10 +4,8 @@ import ( "fmt" "github.com/rs/zerolog" "github.com/rs/zerolog/log" - "gogs.mikescher.com/BlackForestBytes/goext/timeext" + "gogs.mikescher.com/BlackForestBytes/goext/confext" "os" - "reflect" - "strconv" "time" ) @@ -229,7 +227,10 @@ func getConfig(ns string) (Config, bool) { } if cfn, ok := allConfig[ns]; ok { c := cfn() - parseConfOverride(&c) + err := confext.ApplyEnvOverrides(&c) + if err != nil { + panic(err) + } return c, true } return Config{}, false @@ -254,62 +255,3 @@ func init() { Conf = cfg } - -func parseConfOverride(c *Config) { - - rval := reflect.ValueOf(c).Elem() - rtyp := rval.Type() - - for i := 0; i < rtyp.NumField(); i++ { - - rsfield := rtyp.Field(i) - rvfield := rval.Field(i) - - envkey := rsfield.Tag.Get("env") - if envkey == "" { - continue - } - - envval, efound := os.LookupEnv(envkey) - if !efound { - continue - } - - if rvfield.Kind() == reflect.String { - - rvfield.Set(reflect.ValueOf(envval)) - - fmt.Printf("[CONF] Overwrite config '%s' with '%s'\n", envkey, envval) - - } else if rvfield.Type() == reflect.TypeOf(zerolog.Level(0)) { - - envint, err := strconv.ParseInt(envval, 10, 8) - if err != nil { - panic(fmt.Sprintf("Failed to parse env-config variable '%s' to int (value := '%s')", envkey, envval)) - } - if envint < -1 || envint > 7 { - panic(fmt.Sprintf("Failed to parse zerolog-level (invalid number: %d)", envint)) - } - - lvl := zerolog.Level(envint) - - rvfield.Set(reflect.ValueOf(lvl)) - - fmt.Printf("[CONF] Overwrite config '%s' with '%s'\n", envkey, lvl.String()) - - } else if rvfield.Type() == reflect.TypeOf(time.Duration(0)) { - - dur, err := timeext.ParseDurationShortString(envval) - if err != nil { - panic(fmt.Sprintf("Failed to parse env-config variable '%s' to duration (value := '%s')", envkey, envval)) - } - - rvfield.Set(reflect.ValueOf(dur)) - - fmt.Printf("[CONF] Overwrite config '%s' with '%s'\n", envkey, dur.String()) - - } else { - panic(fmt.Sprintf("Unknown kind/type in config: [ %s | %s ]", rvfield.Kind().String(), rvfield.Type().String())) - } - } -} diff --git a/server/docs/docs.go b/server/docs/docs.go deleted file mode 100644 index b956183..0000000 --- a/server/docs/docs.go +++ /dev/null @@ -1,50 +0,0 @@ -// Package docs GENERATED BY SWAG; DO NOT EDIT -// This file was generated by swaggo/swag -package docs - -import "github.com/swaggo/swag" - -const docTemplate = `{ - "schemes": {{ marshal .Schemes }}, - "swagger": "2.0", - "info": { - "description": "{{escape .Description}}", - "title": "{{.Title}}", - "contact": {}, - "version": "{{.Version}}" - }, - "host": "{{.Host}}", - "basePath": "{{.BasePath}}", - "paths": { - "/ping": { - "get": { - "description": "asdf", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "summary": "Test request", - "operationId": "ping", - "responses": {} - } - } - } -}` - -// SwaggerInfo holds exported Swagger Info so clients can modify it -var SwaggerInfo = &swag.Spec{ - Version: "", - Host: "", - BasePath: "", - Schemes: []string{}, - Title: "", - Description: "", - InfoInstanceName: "swagger", - SwaggerTemplate: docTemplate, -} - -func init() { - swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) -} diff --git a/server/docs/swagger.json b/server/docs/swagger.json deleted file mode 100644 index 267797e..0000000 --- a/server/docs/swagger.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "contact": {} - }, - "paths": { - "/ping": { - "get": { - "description": "asdf", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "summary": "Test request", - "operationId": "ping", - "responses": {} - } - } - } -} \ No newline at end of file diff --git a/server/docs/swagger.yaml b/server/docs/swagger.yaml deleted file mode 100644 index 5ca4860..0000000 --- a/server/docs/swagger.yaml +++ /dev/null @@ -1,14 +0,0 @@ -info: - contact: {} -paths: - /ping: - get: - consumes: - - application/json - description: asdf - operationId: ping - produces: - - application/json - responses: {} - summary: Test request -swagger: "2.0" diff --git a/server/go.mod b/server/go.mod index 056e7ee..8b77d60 100644 --- a/server/go.mod +++ b/server/go.mod @@ -8,7 +8,7 @@ require ( github.com/mattn/go-sqlite3 v1.14.16 github.com/rs/zerolog v1.28.0 github.com/swaggo/swag v1.8.7 - gogs.mikescher.com/BlackForestBytes/goext v0.0.35 + gogs.mikescher.com/BlackForestBytes/goext v0.0.36 ) require ( diff --git a/server/go.sum b/server/go.sum index e3adf8e..80baced 100644 --- a/server/go.sum +++ b/server/go.sum @@ -108,6 +108,8 @@ gogs.mikescher.com/BlackForestBytes/goext v0.0.34 h1:fi6nA+7vDiAbIjs+meIo/jGXw4r gogs.mikescher.com/BlackForestBytes/goext v0.0.34/go.mod h1:/u9JtMwCP68ix4R9BJ/MT0Lm+QScmqIoyYZFKBGzv9g= gogs.mikescher.com/BlackForestBytes/goext v0.0.35 h1:K5IMnAns68D6DmkryCN8CrLcmlo9zmdeCcCN0ljP/3E= gogs.mikescher.com/BlackForestBytes/goext v0.0.35/go.mod h1:/u9JtMwCP68ix4R9BJ/MT0Lm+QScmqIoyYZFKBGzv9g= +gogs.mikescher.com/BlackForestBytes/goext v0.0.36 h1:iOUYz2NEiObCCdBnkt8DPi1N8gH5H9q6qyJQpWp36rA= +gogs.mikescher.com/BlackForestBytes/goext v0.0.36/go.mod h1:/u9JtMwCP68ix4R9BJ/MT0Lm+QScmqIoyYZFKBGzv9g= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=