adding 'container_region' to kvmeta

This commit is contained in:
Gavi Hirsch 2019-08-15 17:19:54 -07:00
parent 4f8bee913e
commit 510f7123f2
3 changed files with 73 additions and 33 deletions

18
Gopkg.lock generated
View file

@ -4,7 +4,10 @@
[[projects]]
branch = "master"
name = "github.com/Clever/syslogparser"
packages = [".","rfc3164"]
packages = [
".",
"rfc3164"
]
revision = "fb28ad3e4340c046323b7beba685a72fd12ecbe8"
[[projects]]
@ -25,7 +28,10 @@
[[projects]]
name = "github.com/stretchr/testify"
packages = ["assert"]
packages = [
"assert",
"require"
]
revision = "69483b4bd14f5845b5a1e55bca19e954e827f1d0"
version = "v1.1.4"
@ -57,7 +63,11 @@
[[projects]]
name = "gopkg.in/Clever/kayvee-go.v6"
packages = [".","logger","router"]
packages = [
".",
"logger",
"router"
]
revision = "096364e316a52652d3493be702d8105d8d01db84"
version = "v6.6.0"
@ -69,6 +79,6 @@
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
inputs-digest = "12add425987f6b506139be39923e5dababe3a0337b5d8f81bf5722c55c58b52e"
inputs-digest = "4699293f3632dd38561ff60477aa7cc1ecaadc5808b974d017099e2189679286"
solver-name = "gps-cdcl"
solver-version = 1

View file

@ -404,6 +404,7 @@ func ParseAndEnhance(line string, env string) (map[string]interface{}, error) {
// docker-events app.
forceEnv := ""
forceApp := ""
forceRegion := ""
forceTask := ""
if cEnv, ok := out["container_env"]; ok {
forceEnv = cEnv.(string)
@ -411,10 +412,13 @@ func ParseAndEnhance(line string, env string) (map[string]interface{}, error) {
if cApp, ok := out["container_app"]; ok {
forceApp = cApp.(string)
}
if cRegion, ok := out["container_region"]; ok {
forceRegion = cRegion.(string)
}
if cTask, ok := out["container_task"]; ok {
forceTask = cTask.(string)
}
meta, err := getContainerMeta(programname, forceEnv, forceApp, forceTask)
meta, err := getContainerMeta(programname, forceEnv, forceApp, forceRegion, forceTask)
if err == nil {
for k, v := range meta {
out[k] = v
@ -425,24 +429,26 @@ func ParseAndEnhance(line string, env string) (map[string]interface{}, error) {
}
const containerMeta = `([a-z0-9-]+)--([a-z0-9-]+)\/` + // env--app
`arn%3Aaws%3Aecs%3Aus-(west|east)-[1-2]%3A[0-9]{12}%3Atask%2F` + // ARN cruft
`arn%3Aaws%3Aecs%3A(us-(west|east)-[1-2])%3A[0-9]{12}%3Atask%2F` + // ARN cruft
`([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|[a-z0-9]{32})` // task-id (ECS, both EC2 and Fargate)
var containerMetaRegex = regexp.MustCompile(containerMeta)
func getContainerMeta(programname, forceEnv, forceApp, forceTask string) (map[string]string, error) {
func getContainerMeta(programname, forceEnv, forceApp, forceRegion, forceTask string) (map[string]string, error) {
if programname == "" {
return map[string]string{}, fmt.Errorf("no programname")
}
env := ""
app := ""
region := ""
task := ""
matches := containerMetaRegex.FindAllStringSubmatch(programname, 1)
if len(matches) == 1 {
env = matches[0][1]
app = matches[0][2]
task = matches[0][4]
region = matches[0][3]
task = matches[0][5]
}
if forceEnv != "" {
@ -451,17 +457,21 @@ func getContainerMeta(programname, forceEnv, forceApp, forceTask string) (map[st
if forceApp != "" {
app = forceApp
}
if forceRegion != "" {
region = forceRegion
}
if forceTask != "" {
task = forceTask
}
if env == "" || app == "" || task == "" {
if env == "" || app == "" || region == "" || task == "" {
return map[string]string{}, fmt.Errorf("unable to get one or more of env/app/task")
}
return map[string]string{
"container_env": env,
"container_app": app,
"container_task": task,
"container_env": env,
"container_app": app,
"container_region": region,
"container_task": task,
}, nil
}

View file

@ -243,6 +243,7 @@ func TestParseAndEnhance(t *testing.T) {
"env": "deploy-env",
"container_env": "env",
"container_app": "app",
"container_region": "us-west-1",
"container_task": "abcd1234-1a3b-1a3b-1234-d76552f4b7ef",
},
ExpectedError: nil,
@ -262,6 +263,7 @@ func TestParseAndEnhance(t *testing.T) {
"env": "deploy-env",
"container_env": "env",
"container_app": "force-app",
"container_region": "us-west-1",
"container_task": "abcd1234-1a3b-1a3b-1234-d76552f4b7ef",
},
ExpectedError: nil,
@ -278,6 +280,7 @@ func TestParseAndEnhance(t *testing.T) {
"decoder_msg_type": "syslog",
"container_env": "env",
"container_app": "app",
"container_region": "us-west-1",
"container_task": "abcd1234-1a3b-1a3b-1234-d76552f4b7ef",
},
ExpectedError: nil,
@ -303,6 +306,7 @@ func TestParseAndEnhance(t *testing.T) {
"env": "deploy-env",
"container_env": "env",
"container_app": "app",
"container_region": "us-west-1",
"container_task": "abcd1234-1a3b-1a3b-1234-d76552f4b7ef",
"nested": map[string]interface{}{"a": "b"},
},
@ -341,57 +345,73 @@ func TestGetContainerMeta(t *testing.T) {
t.Log("Must have a programname to get container meta")
programname := ""
_, err := getContainerMeta(programname, "", "", "")
_, err := getContainerMeta(programname, "", "", "", "")
assert.Error(err)
t.Log("Can parse a programname")
programname = `env1--app2/arn%3Aaws%3Aecs%3Aus-west-1%3A589690932525%3Atask%2Fabcd1234-1a3b-1a3b-1234-d76552f4b7ef`
meta, err := getContainerMeta(programname, "", "", "")
meta, err := getContainerMeta(programname, "", "", "", "")
assert.NoError(err)
assert.Equal(map[string]string{
"container_env": "env1",
"container_app": "app2",
"container_task": "abcd1234-1a3b-1a3b-1234-d76552f4b7ef",
"container_env": "env1",
"container_app": "app2",
"container_region": "us-west-1",
"container_task": "abcd1234-1a3b-1a3b-1234-d76552f4b7ef",
}, meta)
t.Log("Can override just 'env'")
overrideEnv := "force-env"
meta, err = getContainerMeta(programname, overrideEnv, "", "")
meta, err = getContainerMeta(programname, overrideEnv, "", "", "")
assert.NoError(err)
assert.Equal(map[string]string{
"container_env": overrideEnv,
"container_app": "app2",
"container_task": "abcd1234-1a3b-1a3b-1234-d76552f4b7ef",
"container_env": overrideEnv,
"container_app": "app2",
"container_region": "us-west-1",
"container_task": "abcd1234-1a3b-1a3b-1234-d76552f4b7ef",
}, meta)
t.Log("Can override just 'app'")
overrideApp := "force-app"
meta, err = getContainerMeta(programname, "", overrideApp, "")
meta, err = getContainerMeta(programname, "", overrideApp, "", "")
assert.NoError(err)
assert.Equal(map[string]string{
"container_env": "env1",
"container_app": overrideApp,
"container_task": "abcd1234-1a3b-1a3b-1234-d76552f4b7ef",
"container_env": "env1",
"container_app": overrideApp,
"container_region": "us-west-1",
"container_task": "abcd1234-1a3b-1a3b-1234-d76552f4b7ef",
}, meta)
t.Log("Can override just 'region'")
overrideRegion := "force-region"
meta, err = getContainerMeta(programname, "", "", overrideRegion, "")
assert.NoError(err)
assert.Equal(map[string]string{
"container_env": "env1",
"container_app": "app2",
"container_region": overrideRegion,
"container_task": "abcd1234-1a3b-1a3b-1234-d76552f4b7ef",
}, meta)
t.Log("Can override just 'task'")
overrideTask := "force-task"
meta, err = getContainerMeta(programname, "", "", overrideTask)
meta, err = getContainerMeta(programname, "", "", "", overrideTask)
assert.NoError(err)
assert.Equal(map[string]string{
"container_env": "env1",
"container_app": "app2",
"container_task": overrideTask,
"container_env": "env1",
"container_app": "app2",
"container_region": "us-west-1",
"container_task": overrideTask,
}, meta)
t.Log("Can override all fields")
programname = `env--app/arn%3Aaws%3Aecs%3Aus-west-1%3A999988887777%3Atask%2Fabcd1234-1a3b-1a3b-1234-d76552f4b7ef`
meta, err = getContainerMeta(programname, overrideEnv, overrideApp, overrideTask)
meta, err = getContainerMeta(programname, overrideEnv, overrideApp, overrideRegion, overrideTask)
assert.NoError(err)
assert.Equal(map[string]string{
"container_env": overrideEnv,
"container_app": overrideApp,
"container_task": overrideTask,
"container_env": overrideEnv,
"container_app": overrideApp,
"container_region": overrideRegion,
"container_task": overrideTask,
}, meta)
}