Skip to content

Commit 9ae2b44

Browse files
committed
feat: add better logging
1 parent 1cd5598 commit 9ae2b44

9 files changed

Lines changed: 65 additions & 52 deletions

File tree

api/api.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
userconf "tsp-web/internal/user-conf"
1313

1414
"github.com/olahol/melody"
15+
log "github.com/sirupsen/logrus"
1516
)
1617

1718
var allowOriginFunc = func(r *http.Request) bool {
@@ -28,7 +29,6 @@ func Run(args args.TspWebArgs) error {
2829
fileMatcher := regexp.MustCompile(`\.[a-zA-Z]*$`)
2930
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
3031
if !fileMatcher.MatchString(r.URL.Path) {
31-
// http.ServeFile(w, r, "web/index.html")
3232
var index, _ = Static.ReadFile("web/index.html")
3333
w.Write(index)
3434
} else {
@@ -43,7 +43,6 @@ func Run(args args.TspWebArgs) error {
4343
})
4444

4545
m.HandleMessage(func(s *melody.Session, msg []byte) {
46-
fmt.Printf("got message: %s\n", msg)
4746
message := string(msg)
4847
messageSplit := strings.Split(message, ":")
4948
command := messageSplit[0]
@@ -64,7 +63,7 @@ func Run(args args.TspWebArgs) error {
6463
CommandController(args)
6564
}
6665

67-
fmt.Printf("Running server on http://0.0.0.0:%d\n", args.Port)
66+
log.Info("Running server on http://0.0.0.0:", args.Port)
6867

6968
return http.ListenAndServe(fmt.Sprintf("0.0.0.0:%d", args.Port), nil)
7069
}

api/commandController.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ package api
22

33
import (
44
"encoding/json"
5-
"fmt"
65
"net/http"
76
"tsp-web/internal/args"
87
userconf "tsp-web/internal/user-conf"
8+
9+
log "github.com/sirupsen/logrus"
910
)
1011

1112
func CommandController(args args.TspWebArgs) {
@@ -24,7 +25,7 @@ func GetCommands(args args.TspWebArgs, w http.ResponseWriter, r *http.Request) {
2425
res, err := json.Marshal(commands)
2526

2627
if err != nil {
27-
fmt.Printf("Error could not get commands: %s\n", err)
28+
log.Error(err)
2829
w.WriteHeader(http.StatusInternalServerError)
2930
return
3031
}

api/labelController.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ package api
22

33
import (
44
"encoding/json"
5-
"fmt"
65
"net/http"
76
"tsp-web/internal/args"
87
userconf "tsp-web/internal/user-conf"
8+
9+
log "github.com/sirupsen/logrus"
910
)
1011

1112
func LabelController(args args.TspWebArgs) {
@@ -29,7 +30,7 @@ func GetLabels(args args.TspWebArgs, w http.ResponseWriter, r *http.Request) {
2930
labels, err := userconf.GetLabels(args)
3031
res, err := json.Marshal(labels)
3132
if err != nil {
32-
fmt.Printf("Error creating label: %s\n", err)
33+
log.Error(err)
3334
w.WriteHeader(http.StatusInternalServerError)
3435
return
3536
}
@@ -45,7 +46,7 @@ func PostLabel(args args.TspWebArgs, w http.ResponseWriter, r *http.Request) {
4546
res, err := json.Marshal(conf.Labels)
4647

4748
if err != nil {
48-
fmt.Printf("Error creating label: %s\n", err)
49+
log.Error(err)
4950
w.WriteHeader(http.StatusInternalServerError)
5051
return
5152
}
@@ -61,7 +62,7 @@ func PutLabel(args args.TspWebArgs, w http.ResponseWriter, r *http.Request) {
6162
res, err := json.Marshal(conf.Labels)
6263

6364
if err != nil {
64-
fmt.Printf("Error updating label: %s\n", err)
65+
log.Error(err)
6566
w.WriteHeader(http.StatusInternalServerError)
6667
return
6768
}
@@ -77,7 +78,7 @@ func DeleteLabel(args args.TspWebArgs, w http.ResponseWriter, r *http.Request) {
7778
res, err := json.Marshal(conf.Labels)
7879

7980
if err != nil {
80-
fmt.Printf("Error removing label: %s\n", err)
81+
log.Error(err)
8182
w.WriteHeader(http.StatusInternalServerError)
8283
return
8384
}

api/taskSpoolerController.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ package api
22

33
import (
44
"encoding/json"
5-
"fmt"
65
"net/http"
76
"os/exec"
87
"tsp-web/internal/args"
98
taskspooler "tsp-web/internal/task-spooler"
109
userconf "tsp-web/internal/user-conf"
10+
11+
log "github.com/sirupsen/logrus"
1112
)
1213

1314
var cachedTasks []taskspooler.Task
@@ -83,7 +84,7 @@ func GetList(args args.TspWebArgs, w http.ResponseWriter, r *http.Request) {
8384

8485
res, err := json.Marshal(currentTasks)
8586
if err != nil {
86-
fmt.Printf("error marshalling tasks: %s\n", err)
87+
log.Error(err)
8788
w.WriteHeader(http.StatusInternalServerError)
8889
return
8990
}
@@ -99,7 +100,7 @@ func PostExec(args args.TspWebArgs, w http.ResponseWriter, r *http.Request) {
99100
var command ExecArg
100101
err := json.NewDecoder(r.Body).Decode(&command)
101102
if err != nil {
102-
fmt.Printf("Error decoding command: %s\n", err)
103+
log.Error(err)
103104
w.WriteHeader(http.StatusInternalServerError)
104105
return
105106
}
@@ -115,16 +116,16 @@ func PostExec(args args.TspWebArgs, w http.ResponseWriter, r *http.Request) {
115116
}
116117

117118
if foundCommand == nil {
118-
fmt.Printf("Command not found: %s\n", command.Name)
119+
log.Error("Command not found: ", command.Name)
119120
w.WriteHeader(http.StatusNotFound)
120121
return
121122
}
122123

123-
fmt.Println("Executing command from user request with args: ", args.TsBin, foundCommand.Args)
124+
log.Info("Executing command from user request with args: ", args.TsBin, foundCommand.Args)
124125
cmd := exec.Command(args.TsBin, foundCommand.Args...)
125126
out, err := cmd.Output()
126127
if err != nil {
127-
fmt.Printf("Error executing command: %s\n", err)
128+
log.Error("Error executing command: ", err)
128129
w.WriteHeader(http.StatusInternalServerError)
129130
}
130131

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ require (
88
github.com/fsnotify/fsnotify v1.6.0 // indirect
99
github.com/google/uuid v1.3.1 // indirect
1010
github.com/olahol/melody v1.1.4 // indirect
11+
github.com/sirupsen/logrus v1.9.3 // indirect
1112
golang.org/x/sys v0.0.0-20220908164124-27713097b956 // indirect
1213
gopkg.in/yaml.v3 v3.0.1 // indirect
1314
)

go.sum

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,17 @@ github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
1717
github.com/olahol/melody v1.1.4 h1:RQHfKZkQmDxI0+SLZRNBCn4LiXdqxLKRGSkT8Dyoe/E=
1818
github.com/olahol/melody v1.1.4/go.mod h1:GgkTl6Y7yWj/HtfD48Q5vLKPVoZOH+Qqgfa7CvJgJM4=
1919
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
20+
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
21+
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
2022
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
2123
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
24+
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
25+
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
2226
golang.org/x/sys v0.0.0-20220908164124-27713097b956 h1:XeJjHH1KiLpKGb6lvMiksZ9l0fVUh+AmGcm0nOMEBOY=
2327
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
2428
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
2529
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
2630
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
31+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
2732
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
2833
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

internal/args/args.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@ type TspWebArgs struct {
44
TsBin string
55
Port uint16
66
ConfigPath string
7+
LogLevel string
8+
NoColor bool
79
}

internal/user-conf/user-conf.go

Lines changed: 13 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package userconf
22

33
import (
4-
"log"
54
"os"
65
"path/filepath"
76
utils "tsp-web/internal"
87
"tsp-web/internal/args"
98

9+
log "github.com/sirupsen/logrus"
1010
"gopkg.in/yaml.v3"
1111
)
1212

@@ -43,9 +43,9 @@ type UserConf struct {
4343
var cachedConf UserConf = UserConf{}
4444

4545
func StartWatcher(args args.TspWebArgs) {
46-
log.Default().Println("Starting user conf watcher")
46+
log.Debug("Starting user conf watcher")
4747
utils.FileWatcher(func() {
48-
log.Default().Println("Reloading user conf")
48+
log.Info("User conf changed, reloading...")
4949
Load(args)
5050
}, getConfPath(args))
5151
}
@@ -55,23 +55,18 @@ func GetUserConf(args args.TspWebArgs) UserConf {
5555
}
5656

5757
func Load(args args.TspWebArgs) {
58-
conf, err := load(args)
59-
if err != nil {
60-
log.Println(err)
61-
} else {
62-
cachedConf = conf
63-
}
58+
cachedConf = load(args)
6459
}
6560

66-
func load(args args.TspWebArgs) (UserConf, error) {
61+
func load(args args.TspWebArgs) UserConf {
6762
conf := UserConf{}
6863
confPath := getConfPath(args)
6964
ensureConfExists(confPath)
7065

7166
f, err := os.Open(confPath)
7267
if err != nil {
73-
log.Println(err)
74-
return UserConf{}, err
68+
log.Error(confPath, ": ", err)
69+
return UserConf{}
7570
}
7671

7772
decoder := yaml.NewDecoder(f)
@@ -80,11 +75,11 @@ func load(args args.TspWebArgs) (UserConf, error) {
8075
defer f.Close()
8176

8277
if err != nil {
83-
log.Println(err)
84-
return UserConf{}, err
78+
log.Error(confPath, ": ", err)
79+
return UserConf{}
8580
}
8681

87-
return conf, nil
82+
return conf
8883
}
8984

9085
func writeUserConf(args args.TspWebArgs, conf UserConf) (UserConf, error) {
@@ -93,7 +88,6 @@ func writeUserConf(args args.TspWebArgs, conf UserConf) (UserConf, error) {
9388

9489
f, err := os.OpenFile(confPath, os.O_WRONLY, 0644)
9590
if err != nil {
96-
log.Println(err)
9791
return UserConf{}, err
9892
}
9993

@@ -103,7 +97,6 @@ func writeUserConf(args args.TspWebArgs, conf UserConf) (UserConf, error) {
10397
err = encoder.Encode(conf)
10498

10599
if err != nil {
106-
log.Println(err)
107100
return UserConf{}, err
108101
}
109102

@@ -113,7 +106,7 @@ func writeUserConf(args args.TspWebArgs, conf UserConf) (UserConf, error) {
113106
func getConfPath(args args.TspWebArgs) string {
114107
home, err := os.UserHomeDir()
115108
if err != nil {
116-
log.Println(err)
109+
log.Error(err)
117110
return ""
118111
}
119112

@@ -124,22 +117,11 @@ func ensureConfExists(confPath string) error {
124117
_, err := os.Stat(confPath)
125118
if os.IsNotExist(err) {
126119
err = os.MkdirAll(filepath.Dir(confPath), 0755)
127-
if err != nil {
128-
log.Println(err)
129-
return err
130-
}
131-
132120
f, err := os.Create(confPath)
133-
if err != nil {
134-
log.Println(err)
135-
return err
136-
}
137-
138-
defer f.Close()
139-
140121
_, err = f.WriteString(initialConf)
122+
141123
if err != nil {
142-
log.Println(err)
124+
log.Error(err)
143125
return err
144126
}
145127
}

main.go

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
"tsp-web/api"
1111
"tsp-web/internal/args"
1212
userconf "tsp-web/internal/user-conf"
13+
14+
log "github.com/sirupsen/logrus"
1315
)
1416

1517
//go:embed web/*
@@ -28,6 +30,8 @@ const maxPort uint64 = 65535
2830
func parseArgs() (args.TspWebArgs, error) {
2931
TsBin := flag.String("ts-bin", getenv("TSP_WEB_TS_BIN", "tsp"), "The binary for tsp")
3032
portArg := flag.Uint64("port", 3000, "The port for tsp-web")
33+
logLevel := flag.String("log-level", getenv("TSP_WEB_LOG_LEVEL", "info"), "The log level for tsp-web")
34+
noColor := flag.Bool("no-color", false, "Disable colorized output")
3135

3236
flag.Parse()
3337

@@ -37,16 +41,34 @@ func parseArgs() (args.TspWebArgs, error) {
3741

3842
Port := uint16(*portArg)
3943

40-
return args.TspWebArgs{TsBin: *TsBin, Port: Port}, nil
44+
return args.TspWebArgs{TsBin: *TsBin, Port: Port, LogLevel: *logLevel, NoColor: *noColor}, nil
45+
}
46+
47+
func setLogLevel(logLevel string) {
48+
switch logLevel {
49+
case "debug":
50+
log.SetLevel(log.DebugLevel)
51+
case "info":
52+
log.SetLevel(log.InfoLevel)
53+
case "warn":
54+
log.SetLevel(log.WarnLevel)
55+
default:
56+
log.SetLevel(log.InfoLevel)
57+
}
4158
}
4259

4360
func main() {
4461
api.Static = static
4562

4663
args, err := parseArgs()
64+
setLogLevel(args.LogLevel)
65+
log.SetFormatter(&log.TextFormatter{
66+
FullTimestamp: true,
67+
DisableColors: args.NoColor,
68+
})
4769

4870
if err != nil {
49-
fmt.Printf("%s\n", err)
71+
log.Error(err)
5072
flag.Usage()
5173
os.Exit(1)
5274
}
@@ -56,10 +78,9 @@ func main() {
5678
err = api.Run(args)
5779

5880
if errors.Is(err, http.ErrServerClosed) {
59-
fmt.Printf("server closed\n")
81+
log.Info("server closed")
6082
} else if err != nil {
61-
fmt.Printf("error starting server: %s\n", err)
62-
os.Exit(1)
83+
log.Fatal("error starting server: ", err)
6384
}
6485
os.Exit(0)
6586
}

0 commit comments

Comments
 (0)