Skip to content

Commit 70b118b

Browse files
Merge branch 'main' into lauren/BCDA-9401
2 parents e29cd39 + bc3301b commit 70b118b

File tree

4 files changed

+125
-12
lines changed

4 files changed

+125
-12
lines changed

ssas/constants/constants.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const TokenEndpoint = "/token"
1313

1414
const HeaderApplicationJSON = "application/json"
1515

16-
const Application = "ssas"
16+
const Application string = "ssas"
1717

1818
// Sets requesting SGA on admin endpoint requests into context
1919
type CtxSGAKeyType string

ssas/logger.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,27 @@ func SetupLogger() {
1818
logInstance := logrus.New()
1919
logInstance.SetFormatter(&logrus.JSONFormatter{TimestampFormat: time.RFC3339Nano})
2020

21-
filePath, success := os.LookupEnv("SSAS_LOG")
22-
if success {
23-
/* #nosec -- 0664 permissions required for Splunk ingestion */
24-
file, err := os.OpenFile(filePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0664)
25-
26-
if err == nil {
27-
logInstance.SetOutput(file)
21+
if os.Getenv("LOG_TO_STD_OUT") != "true" {
22+
filePath, success := os.LookupEnv("SSAS_LOG")
23+
if success {
24+
/* #nosec -- 0664 permissions required for Splunk ingestion */
25+
file, err := os.OpenFile(filePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0664)
26+
27+
if err == nil {
28+
logInstance.SetOutput(file)
29+
} else {
30+
logInstance.Info("Failed to open SSAS log file; using default stderr")
31+
}
2832
} else {
29-
logInstance.Info("Failed to open SSAS log file; using default stderr")
33+
logInstance.Info("No SSAS log location provided; using default stderr")
3034
}
31-
} else {
32-
logInstance.Info("No SSAS log location provided; using default stderr")
3335
}
3436

3537
Logger = logInstance.WithFields(logrus.Fields{
3638
"application": constants.Application,
3739
"environment": os.Getenv("DEPLOYMENT_TARGET"),
40+
"log_type": "ssas",
41+
"source_app": "bcda",
3842
"version": constants.Version,
3943
})
4044
}
@@ -46,6 +50,8 @@ func defaultLogger() logrus.FieldLogger {
4650
return logInstance.WithFields(logrus.Fields{
4751
"application": constants.Application,
4852
"environment": os.Getenv("DEPLOYMENT_TARGET"),
53+
"log_type": "ssas",
54+
"source_app": "bcda",
4955
"version": constants.Version,
5056
})
5157
}

ssas/logger_test.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package ssas
2+
3+
import (
4+
"encoding/json"
5+
"io"
6+
"os"
7+
"strings"
8+
"testing"
9+
"time"
10+
11+
"github.com/CMSgov/bcda-ssas-app/ssas/constants"
12+
"github.com/pborman/uuid"
13+
"github.com/sirupsen/logrus"
14+
"github.com/sirupsen/logrus/hooks/test"
15+
"github.com/stretchr/testify/assert"
16+
)
17+
18+
func TestSetupLogger(t *testing.T) {
19+
env := uuid.New()
20+
oldEnvVal := os.Getenv("DEPLOYMENT_TARGET")
21+
os.Setenv("DEPLOYMENT_TARGET", env)
22+
oldLogVal := os.Getenv("LOG_TO_STD_OUT")
23+
os.Unsetenv("LOG_TO_STD_OUT")
24+
t.Cleanup(func() {
25+
os.Setenv("DEPLOYMENT_TARGET", oldEnvVal)
26+
os.Setenv("LOG_TO_STD_OUT", oldLogVal)
27+
})
28+
29+
logFile, err := os.CreateTemp("", "*")
30+
assert.NoError(t, err)
31+
32+
old := os.Getenv("SSAS_LOG")
33+
os.Setenv("SSAS_LOG", logFile.Name())
34+
t.Cleanup(func() {
35+
assert.NoError(t, os.Remove(logFile.Name()))
36+
assert.NoError(t, os.Setenv("SSAS_LOG", old))
37+
})
38+
39+
SetupLogger()
40+
41+
msg := uuid.New()
42+
Logger.Info(msg)
43+
44+
data, err := io.ReadAll(logFile)
45+
assert.NoError(t, err)
46+
47+
logText := strings.Split(string(data), "\n")
48+
assert.Len(t, logText, 2) // msg + new line
49+
50+
var fields logrus.Fields
51+
assert.NoError(t, json.Unmarshal([]byte(logText[0]), &fields))
52+
assert.Equal(t, constants.Application, fields["application"])
53+
assert.Equal(t, env, fields["environment"])
54+
assert.Equal(t, msg, fields["msg"])
55+
assert.Equal(t, "bcda", fields["source_app"])
56+
assert.Equal(t, constants.Version, fields["version"])
57+
_, err = time.Parse(time.RFC3339Nano, fields["time"].(string))
58+
assert.NoError(t, err)
59+
}
60+
61+
func TestSetupLogger_ToSTDOut(t *testing.T) {
62+
env := uuid.New()
63+
oldEnvVal := os.Getenv("DEPLOYMENT_TARGET")
64+
os.Setenv("DEPLOYMENT_TARGET", env)
65+
oldLogVal := os.Getenv("LOG_TO_STD_OUT")
66+
os.Unsetenv("LOG_TO_STD_OUT")
67+
t.Cleanup(func() {
68+
os.Setenv("DEPLOYMENT_TARGET", oldEnvVal)
69+
os.Setenv("LOG_TO_STD_OUT", oldLogVal)
70+
})
71+
72+
SetupLogger()
73+
testLogger := test.NewLocal(getLogger(Logger))
74+
75+
msg := uuid.New()
76+
Logger.Info(msg)
77+
78+
assert.Equal(t, 1, len(testLogger.Entries))
79+
assert.Equal(t, msg, testLogger.LastEntry().Message)
80+
assert.Equal(t, "ssas", testLogger.LastEntry().Data["log_type"])
81+
testLogger.Reset()
82+
}
83+
84+
func TestDefaultLogger(t *testing.T) {
85+
Logger := defaultLogger()
86+
testLogger := test.NewLocal(getLogger(Logger))
87+
88+
msg := uuid.New()
89+
Logger.Info(msg)
90+
91+
assert.Equal(t, 1, len(testLogger.Entries))
92+
assert.Equal(t, msg, testLogger.LastEntry().Message)
93+
assert.Equal(t, constants.Application, testLogger.LastEntry().Data["application"])
94+
assert.Equal(t, os.Getenv("DEPLOYMENT_TARGET"), testLogger.LastEntry().Data["environment"])
95+
assert.Equal(t, "ssas", testLogger.LastEntry().Data["log_type"])
96+
assert.Equal(t, "bcda", testLogger.LastEntry().Data["source_app"])
97+
assert.Equal(t, constants.Version, testLogger.LastEntry().Data["version"])
98+
}
99+
100+
// GetLogger returns the underlying implementation of the field logger
101+
func getLogger(logger logrus.FieldLogger) *logrus.Logger {
102+
if entry, ok := logger.(*logrus.Entry); ok {
103+
return entry.Logger
104+
}
105+
// Must be a *logrus.Logger
106+
return logger.(*logrus.Logger)
107+
}

ssas/systems_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ type SystemsTestSuite struct {
3232
}
3333

3434
func (s *SystemsTestSuite) SetupSuite() {
35+
SetupLogger()
3536
s.db = Connection
3637
s.logEntry = MakeTestStructuredLoggerEntry(logrus.Fields{"cms_id": "A9999", "request_id": uuid.NewUUID().String()})
37-
3838
}
3939

4040
func (s *SystemsTestSuite) AfterTest() {

0 commit comments

Comments
 (0)