@@ -15,25 +15,41 @@ import (
15
15
"os"
16
16
"os/signal"
17
17
"path"
18
+ "strconv"
18
19
"syscall"
19
20
"time"
20
21
)
21
22
23
+ var debug bool
24
+
25
+ func debugLog (format string , a ... any ) {
26
+ if debug {
27
+ log .Printf (format , a ... )
28
+ }
29
+ }
30
+
22
31
func main () {
23
32
// Setup logging prefix & log that we've started
24
33
extensionName := path .Base (os .Args [0 ])
25
34
log .SetPrefix (fmt .Sprintf ("[%s] " , extensionName ))
26
- log .Println ("Started..." )
27
35
28
- // Get API url & API token from env vars
29
- firetailApiUrl := os .Getenv ("FIRETAIL_API_URL" )
30
- if firetailApiUrl == "" {
31
- log .Fatal ("FIRETAIL_API_URL not set" )
36
+ // Check if we're running in DEBUG mode
37
+ debugEnv := os .Getenv ("FIRETAIL_EXTENSION_DEBUG" )
38
+ if isDebug , err := strconv .ParseBool (debugEnv ); err == nil && isDebug {
39
+ debug = true
40
+ debugLog ("Firetail extension starting in debug mode" )
32
41
}
42
+
43
+ // Get API url & API token from env vars
33
44
firetailApiToken := os .Getenv ("FIRETAIL_API_TOKEN" )
34
45
if firetailApiToken == "" {
35
46
log .Fatal ("FIRETAIL_API_TOKEN not set" )
36
47
}
48
+ firetailApiUrl := os .Getenv ("FIRETAIL_API_URL" )
49
+ if firetailApiUrl == "" {
50
+ firetailApiUrl = "https://api.logging.eu-west-1.sandbox.firetail.app/logs/bulk"
51
+ debugLog ("FIRETAIL_API_URL not set, defaulting to %s" , firetailApiUrl )
52
+ }
37
53
38
54
// Create a context with which we'll perform all our actions & make a channel to receive
39
55
// SIGTERM and SIGINT events & spawn a goroutine to call cancel() when we get one
@@ -42,8 +58,7 @@ func main() {
42
58
signal .Notify (sigs , syscall .SIGTERM , syscall .SIGINT )
43
59
go func () {
44
60
s := <- sigs
45
- log .Println ("Received" , s )
46
- log .Println ("Exiting" )
61
+ debugLog ("Received signal '%s'. Exiting..." , s .String ())
47
62
cancel ()
48
63
}()
49
64
@@ -63,40 +78,41 @@ func main() {
63
78
select {
64
79
case logBytes , open := <- logQueue :
65
80
if ! open {
66
- log . Println ( "queue channel closed, readFromLogsQueue exiting..." )
81
+ debugLog ( "Queue channel closed, logQueue recevier routine exiting..." )
67
82
return
68
83
}
69
84
70
85
// Unmarshal the bytes into a LogMessages
71
86
var logMessages logsapi.LogMessages
72
87
err := json .Unmarshal ([]byte (logBytes ), & logMessages )
73
88
if err != nil {
74
- log . Println ("Err unmarshalling logBytes into logsapi.LogMessages, err:" , err .Error ())
89
+ debugLog ("Err unmarshalling logBytes into logsapi.LogMessages, err: %s " , err .Error ())
75
90
}
76
91
77
92
// Extract any firetail records from the log messages
78
93
firetailRecords , errs := firetail .ExtractFiretailRecords (logMessages )
79
94
// Log any errs, but still continue as it's possible not all failed
80
95
if errs != nil {
81
- log . Println ("Errs extracting firetail records: " , errs .Error ())
96
+ debugLog ("Errs extracting firetail records, errs: %s " , errs .Error ())
82
97
}
83
98
// If there's no firetail records, then all failed or there were none, so there's nothing to do
84
99
if len (firetailRecords ) == 0 {
85
- log . Println ("No firetail records extracted. Continuing..." )
100
+ debugLog ("No firetail records extracted. Continuing..." )
86
101
continue
87
102
}
88
103
89
104
// Send the Firetail records to Firetail SaaS
105
+ debugLog ("Sending %d record(s) to Firetail..." , len (firetailRecords ))
90
106
recordsSent , err := firetail .SendRecordsToSaaS (firetailRecords , firetailApiUrl , firetailApiToken )
91
- log . Printf ("Sent %d record(s) to Firetail.\n " , recordsSent )
107
+ debugLog ("Sent %d record(s) to Firetail." , recordsSent )
92
108
if err != nil {
93
- log . Println ("Err sending record(s) to Firetail SaaS, err:" , err .Error ())
109
+ debugLog ("Err sending record(s) to Firetail SaaS, err: %s " , err .Error ())
94
110
}
95
111
96
112
// Check if logMessages contains a message of type logsapi.RuntimeDone - if it does, this routine needs to exit.
97
113
for _ , logMessage := range logMessages {
98
114
if logMessage .Type == string (logsapi .RuntimeDone ) {
99
- log . Println ("Found log message of type logsapi.RuntimeDone, logQueue receiver routine exiting..." )
115
+ debugLog ("Found log message of type logsapi.RuntimeDone, logQueue receiver routine exiting..." )
100
116
return
101
117
}
102
118
}
@@ -109,14 +125,14 @@ func main() {
109
125
// Create a Logs API agent
110
126
logsApiAgent , err := agent .NewHttpAgent (logQueue )
111
127
if err != nil {
112
- log .Println (err )
128
+ log .Fatal (err . Error () )
113
129
}
114
130
115
131
// Subscribe to the logs API. Logs start being delivered only after the subscription happens.
116
132
agentID := extensionClient .ExtensionID
117
133
err = logsApiAgent .Init (agentID )
118
134
if err != nil {
119
- log .Println (err )
135
+ log .Fatal (err . Error () )
120
136
}
121
137
122
138
// This for loop will block until invoke or shutdown event is received or cancelled via the context
@@ -125,11 +141,10 @@ func main() {
125
141
case <- ctx .Done ():
126
142
return
127
143
default :
128
- log . Println ( " Waiting for event..." )
144
+ debugLog ( " Waiting for event..." )
129
145
res , err := extensionClient .NextEvent (ctx ) // This is a blocking call
130
146
if err != nil {
131
- log .Println ("Error:" , err )
132
- log .Println ("Exiting" )
147
+ log .Fatal (err .Error ())
133
148
return
134
149
}
135
150
0 commit comments