about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBen Morrison <ben@gbmor.dev>2019-05-12 04:34:06 -0400
committerBen Morrison <ben@gbmor.dev>2019-05-12 04:34:06 -0400
commit1f8b2ce166e104bca99e4a758bb658dd27d5e4d6 (patch)
tree34824b222593042ce14b6d0aa8d2b7657851cfca
parent8e7f0c90e096f04b5dbc044c5ffabd87c86848e8 (diff)
downloadgetwtxt-1f8b2ce166e104bca99e4a758bb658dd27d5e4d6.tar.gz
added stdoutLogging bool and related configuration
-rw-r--r--init.go80
-rw-r--r--main.go1
-rw-r--r--types.go7
3 files changed, 58 insertions, 30 deletions
diff --git a/init.go b/init.go
index f37968c..fdadca8 100644
--- a/init.go
+++ b/init.go
@@ -1,6 +1,7 @@
 package main
 
 import (
+	"fmt"
 	"log"
 	"os"
 	"time"
@@ -12,9 +13,10 @@ import (
 
 // command line flags
 var (
-	port      *int    = pflag.IntP("port", "p", 9001, "getwtxt will serve from this port")
-	logfile   *string = pflag.StringP("logfile", "l", "getwtxt.log", "File for logging output")
-	twtxtfile *string = pflag.StringP("twtxtfile", "f", "/var/twtxt/twtxt.txt", "Registry file for getwtxt")
+	port          *int    = pflag.IntP("port", "p", 9001, "getwtxt will serve from this port")
+	logfile       *string = pflag.StringP("logfile", "l", "getwtxt.log", "File for logging output")
+	twtxtfile     *string = pflag.StringP("twtxtfile", "f", "/var/twtxt/twtxt.txt", "Registry file for getwtxt")
+	stdoutLogging *bool   = pflag.BoolP("stdout", "o", true, "Log to stdout rather than to a file")
 )
 
 // config object
@@ -24,24 +26,23 @@ var confObj = &configuration{}
 var closelog = make(chan bool, 1)
 
 func init() {
-
+	titleScreen()
 	initConfig()
-
-	pflag.Parse()
-	viper.BindPFlags(pflag.CommandLine)
-
 	initLogging()
 }
 
 func initConfig() {
 
-	viper.SetConfigName("getwtxt")
+	pflag.Parse()
+	viper.BindPFlags(pflag.CommandLine)
 
+	viper.SetConfigName("getwtxt")
 	viper.AddConfigPath(".")
 	viper.AddConfigPath("/usr/local/getwtxt")
 	viper.AddConfigPath("/etc")
 	viper.AddConfigPath("/usr/local/etc")
 
+	log.Printf("Loading configuration ...\n")
 	if err := viper.ReadInConfig(); err != nil {
 		log.Printf("Error reading config file: %v\n", err)
 		log.Printf("Using defaults ...\n")
@@ -62,40 +63,67 @@ func initConfig() {
 	confObj.port = viper.GetInt("port")
 	confObj.logfile = viper.GetString("logfile")
 	confObj.twtxtfile = viper.GetString("twtxtfile")
+	confObj.stdoutLogging = viper.GetBool("stdoutLogging")
 }
 
 func initLogging() {
 
-	logfile, err := os.OpenFile(confObj.logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600)
-	if err != nil {
-		log.Printf("Could not open log file: %v\n", err)
-	}
+	// only open a log file if it's necessary
+	if !confObj.stdoutLogging {
 
-	// Listen for the signal to close the log file
-	// in a separate thread
-	go func() {
-		<-closelog
-		log.Printf("Closing log file ...\n")
-		err = logfile.Close()
+		logfile, err := os.OpenFile(confObj.logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600)
 		if err != nil {
-			log.Printf("Couldn't close log file: %v\n", err)
+			log.Printf("Could not open log file: %v\n", err)
 		}
-	}()
 
-	log.SetOutput(logfile)
+		// Listen for the signal to close the log file
+		// in a separate thread
+		go func() {
+			<-closelog
+			log.Printf("Closing log file ...\n")
+			err = logfile.Close()
+			if err != nil {
+				log.Printf("Couldn't close log file: %v\n", err)
+			}
+		}()
+
+		log.SetOutput(logfile)
+
+	} else {
+		log.SetOutput(os.Stdout)
+	}
 }
 
 func rebindConfig() {
 
+	// signal to close the log file then wait
+	if !confObj.stdoutLogging {
+		closelog <- true
+		time.Sleep(50 * time.Millisecond)
+	}
+
 	// reassign values to the config object
 	confObj.port = viper.GetInt("port")
 	confObj.logfile = viper.GetString("logfile")
 	confObj.twtxtfile = viper.GetString("twtxtfile")
-
-	// signal to close the log file then wait
-	closelog <- true
-	time.Sleep(50 * time.Millisecond)
+	confObj.stdoutLogging = viper.GetBool("stdoutLogging")
 
 	// reinitialize logging
 	initLogging()
 }
+
+func titleScreen() {
+	fmt.Printf(`
+	
+            _            _        _
+  __ _  ___| |___      _| |___  _| |_
+ / _  |/ _ \ __\ \ /\ / / __\ \/ / __|
+| (_| |  __/ |_ \ V  V /| |_ >  <| |_
+ \__, |\___|\__| \_/\_/  \__/_/\_\\__|
+ |___/
+             version ` + getwtxt + `
+      github.com/gbmor/getwtxt
+                GPL v3	
+			 
+`)
+}
diff --git a/main.go b/main.go
index 3611c05..ef083dc 100644
--- a/main.go
+++ b/main.go
@@ -13,7 +13,6 @@ import (
 const getwtxt = "0.1"
 
 func main() {
-	log.Printf("getwtxt " + getwtxt + "\n")
 
 	// more precise path-based routing
 	index := mux.NewRouter()
diff --git a/types.go b/types.go
index 5ca2f90..597c423 100644
--- a/types.go
+++ b/types.go
@@ -6,7 +6,8 @@ const htmlutf8 = "text/html; charset=utf8"
 
 // config object definition
 type configuration struct {
-	port      int
-	logfile   string
-	twtxtfile string
+	port          int
+	logfile       string
+	twtxtfile     string
+	stdoutLogging bool
 }