@@ -15,25 +15,41 @@ import (
1515 "os"
1616 "os/signal"
1717 "path"
18+ "strconv"
1819 "syscall"
1920 "time"
2021)
2122
23+ var debug bool
24+
25+ func debugLog (format string , a ... any ) {
26+ if debug {
27+ log .Printf (format , a ... )
28+ }
29+ }
30+
2231func main () {
2332 // Setup logging prefix & log that we've started
2433 extensionName := path .Base (os .Args [0 ])
2534 log .SetPrefix (fmt .Sprintf ("[%s] " , extensionName ))
26- log .Println ("Started..." )
2735
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" )
3241 }
42+
43+ // Get API url & API token from env vars
3344 firetailApiToken := os .Getenv ("FIRETAIL_API_TOKEN" )
3445 if firetailApiToken == "" {
3546 log .Fatal ("FIRETAIL_API_TOKEN not set" )
3647 }
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+ }
3753
3854 // Create a context with which we'll perform all our actions & make a channel to receive
3955 // SIGTERM and SIGINT events & spawn a goroutine to call cancel() when we get one
@@ -42,8 +58,7 @@ func main() {
4258 signal .Notify (sigs , syscall .SIGTERM , syscall .SIGINT )
4359 go func () {
4460 s := <- sigs
45- log .Println ("Received" , s )
46- log .Println ("Exiting" )
61+ debugLog ("Received signal '%s'. Exiting..." , s .String ())
4762 cancel ()
4863 }()
4964
@@ -63,40 +78,41 @@ func main() {
6378 select {
6479 case logBytes , open := <- logQueue :
6580 if ! open {
66- log . Println ( "queue channel closed, readFromLogsQueue exiting..." )
81+ debugLog ( "Queue channel closed, logQueue recevier routine exiting..." )
6782 return
6883 }
6984
7085 // Unmarshal the bytes into a LogMessages
7186 var logMessages logsapi.LogMessages
7287 err := json .Unmarshal ([]byte (logBytes ), & logMessages )
7388 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 ())
7590 }
7691
7792 // Extract any firetail records from the log messages
7893 firetailRecords , errs := firetail .ExtractFiretailRecords (logMessages )
7994 // Log any errs, but still continue as it's possible not all failed
8095 if errs != nil {
81- log . Println ("Errs extracting firetail records: " , errs .Error ())
96+ debugLog ("Errs extracting firetail records, errs: %s " , errs .Error ())
8297 }
8398 // If there's no firetail records, then all failed or there were none, so there's nothing to do
8499 if len (firetailRecords ) == 0 {
85- log . Println ("No firetail records extracted. Continuing..." )
100+ debugLog ("No firetail records extracted. Continuing..." )
86101 continue
87102 }
88103
89104 // Send the Firetail records to Firetail SaaS
105+ debugLog ("Sending %d record(s) to Firetail..." , len (firetailRecords ))
90106 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 )
92108 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 ())
94110 }
95111
96112 // Check if logMessages contains a message of type logsapi.RuntimeDone - if it does, this routine needs to exit.
97113 for _ , logMessage := range logMessages {
98114 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..." )
100116 return
101117 }
102118 }
@@ -109,14 +125,14 @@ func main() {
109125 // Create a Logs API agent
110126 logsApiAgent , err := agent .NewHttpAgent (logQueue )
111127 if err != nil {
112- log .Println (err )
128+ log .Fatal (err . Error () )
113129 }
114130
115131 // Subscribe to the logs API. Logs start being delivered only after the subscription happens.
116132 agentID := extensionClient .ExtensionID
117133 err = logsApiAgent .Init (agentID )
118134 if err != nil {
119- log .Println (err )
135+ log .Fatal (err . Error () )
120136 }
121137
122138 // This for loop will block until invoke or shutdown event is received or cancelled via the context
@@ -125,11 +141,10 @@ func main() {
125141 case <- ctx .Done ():
126142 return
127143 default :
128- log . Println ( " Waiting for event..." )
144+ debugLog ( " Waiting for event..." )
129145 res , err := extensionClient .NextEvent (ctx ) // This is a blocking call
130146 if err != nil {
131- log .Println ("Error:" , err )
132- log .Println ("Exiting" )
147+ log .Fatal (err .Error ())
133148 return
134149 }
135150
0 commit comments