Skip to content

Commit 82d3f34

Browse files
authored
Merge pull request #5 from FireTail-io/dev
Dev
2 parents 2241270 + 43e31aa commit 82d3f34

File tree

2 files changed

+43
-21
lines changed

2 files changed

+43
-21
lines changed

go.mod

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
module firetail-lambda-extension
22

3-
go 1.15
3+
go 1.18
44

55
require (
66
github.com/aws/aws-lambda-go v1.34.1
7-
github.com/hashicorp/go-multierror v1.1.1 // indirect
7+
github.com/hashicorp/go-multierror v1.1.1
88
github.com/pkg/errors v0.9.1
99
github.com/stretchr/testify v1.7.2
1010
)
11+
12+
require (
13+
github.com/davecgh/go-spew v1.1.1 // indirect
14+
github.com/hashicorp/errwrap v1.0.0 // indirect
15+
github.com/pmezard/go-difflib v1.0.0 // indirect
16+
gopkg.in/yaml.v3 v3.0.1 // indirect
17+
)

main.go

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
2231
func 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

Comments
 (0)