Skip to content

Commit 3c01112

Browse files
Merge pull request #9 from indix/rsyslog_multi_file_support
Template changes to support multiple files through rsyslog and fixed …
2 parents 950840a + e6a2574 commit 3c01112

6 files changed

Lines changed: 98 additions & 48 deletions

File tree

glide.lock

Lines changed: 13 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mesos/client.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
11
package mesos
22

3-
import "errors"
3+
import (
4+
"errors"
5+
"github.com/parnurzeal/gorequest"
6+
)
47

58
type Mesos interface {
69
SlaveState(slaveHost string) (SlaveState, error)
710
}
811

9-
type MesosClient struct {
12+
type mesosClient struct {
13+
Request *gorequest.SuperAgent
14+
}
15+
16+
func NewMesosClient() Mesos {
17+
client := new(mesosClient)
18+
client.Request = gorequest.New()
19+
return client
1020
}
1121

1222
func combineErrors(errs []error) error {

mesos/slaves.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package mesos
33
import (
44
"encoding/json"
55
"time"
6-
7-
"github.com/parnurzeal/gorequest"
86
)
97

108
type SlaveState struct {
@@ -36,9 +34,9 @@ type Executor struct {
3634
Source string `json:"source"`
3735
}
3836

39-
func (m *MesosClient) SlaveState(slaveHost string) (SlaveState, error) {
40-
request := gorequest.New()
41-
response, body, errs := request.
37+
38+
func (m *mesosClient) SlaveState(slaveHost string) (SlaveState, error) {
39+
response, body, errs := m.Request.
4240
Get(slaveHost).
4341
Timeout(10 * time.Minute).
4442
End()

rsyslog-logger.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,16 @@ const RsyslogTemplate = `
1919
# Created via marathon-logger,
2020
# PLEASE DON'T EDIT THIS FILE MANUALLY
2121
# Name - {{ .App }}
22-
# File - {{ .FileName }}
22+
# File - {{ .FileNames }}
2323
######################################
2424
2525
module(load="imfile")
26-
26+
{{range $fileName := .FileNames}}
2727
input(type="imfile"
28-
File="{{ .WorkDir }}/{{ .FileName }}"
29-
Tag="{{ .CleanAppName }} {{.TaskID}}"
28+
File="{{ $.WorkDir }}/{{$fileName}}"
29+
Tag="{{$.CleanAppName}} {{$.TaskID}} {{$fileName}}"
3030
Severity="info")
31+
{{end}}
3132
`
3233

3334
// Rsyslog backend implementation

rsyslog-logger_test.go

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,68 @@ func TestRenderRsyslogTemplate(t *testing.T) {
2222
Labels: label,
2323
TaskID: "abcdefghij",
2424
CWD: "/foo/bar",
25-
FileName: "test_file_name.txt",
25+
FileNames: []string{"test_file_name.txt"},
2626
}
2727

2828
expected := `
2929
######################################
3030
# Created via marathon-logger,
3131
# PLEASE DON'T EDIT THIS FILE MANUALLY
3232
# Name - /test.aayush.http
33-
# File - test_file_name.txt
33+
# File - [test_file_name.txt]
3434
######################################
3535
3636
module(load="imfile")
3737
3838
input(type="imfile"
3939
File="/foo/bar/abcdefghij/test_file_name.txt"
40-
Tag="test.aayush.http abcdefghij"
40+
Tag="test.aayush.http abcdefghij test_file_name.txt"
4141
Severity="info")
42+
43+
`
44+
template, err := rsyslog.render(taskInfo)
45+
assert.NoError(t, err)
46+
assert.Equal(t, expected, template)
47+
}
48+
49+
func TestRenderRsyslogTemplateForMultipleFiles(t *testing.T) {
50+
51+
hostname, err := os.Hostname()
52+
var rsyslog = Rsyslog{
53+
WorkDir: "/foo/bar",
54+
}
55+
label := map[string]string{
56+
"logs.enabled": "true",
57+
}
58+
taskInfo := TaskInfo{
59+
App: "/test.aayush.http",
60+
Hostname: hostname,
61+
Labels: label,
62+
TaskID: "abcdefghij",
63+
CWD: "/foo/bar",
64+
FileNames: []string{"test_file_name1.txt","test_file_name2.txt"},
65+
}
66+
67+
expected := `
68+
######################################
69+
# Created via marathon-logger,
70+
# PLEASE DON'T EDIT THIS FILE MANUALLY
71+
# Name - /test.aayush.http
72+
# File - [test_file_name1.txt test_file_name2.txt]
73+
######################################
74+
75+
module(load="imfile")
76+
77+
input(type="imfile"
78+
File="/foo/bar/abcdefghij/test_file_name1.txt"
79+
Tag="test.aayush.http abcdefghij test_file_name1.txt"
80+
Severity="info")
81+
82+
input(type="imfile"
83+
File="/foo/bar/abcdefghij/test_file_name2.txt"
84+
Tag="test.aayush.http abcdefghij test_file_name2.txt"
85+
Severity="info")
86+
4287
`
4388
template, err := rsyslog.render(taskInfo)
4489
assert.NoError(t, err)

task-manager.go

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ import (
1515
const LogFilesToMonitor = "logs.files"
1616

1717
type TaskInfo struct {
18-
App string
19-
Labels map[string]string
20-
TaskID string
21-
Hostname string
22-
CWD string // Current working directory of the task in the slave
23-
FileName string // Actual file name to that we need monitor for logs
24-
WorkDir string // WorkDir location of marathon-logger where we setup Symlink
18+
App string
19+
Labels map[string]string
20+
TaskID string
21+
Hostname string
22+
CWD string // Current working directory of the task in the slave
23+
FileNames []string // Actual file name to that we need monitor for logs
24+
WorkDir string // WorkDir location of marathon-logger where we setup Symlink
2525
}
2626

2727
// CleanAppName cleans the app-name string for `/` characters
@@ -54,7 +54,7 @@ func (t *TaskManager) Start() {
5454
t.AddLogs = make(chan TaskInfo)
5555
t.RemoveLogs = make(chan string)
5656
t.KnownTasks = make(map[string]time.Time)
57-
t.Client = &mesos.MesosClient{}
57+
t.Client = mesos.NewMesosClient()
5858
go t.run()
5959
fmt.Println("Task Manager Started.")
6060
fmt.Printf("Task Manager - Task's MaxHeartBeatInterval is %v\n", t.MaxTasksHeartBeatInterval)
@@ -101,18 +101,16 @@ func (t *TaskManager) run() {
101101
if executor != nil {
102102
logFiles := strings.Split(maps.GetString(task.Labels, LogFilesToMonitor, "stdout"), ",")
103103
t.KnownTasks[task.TaskID] = time.Now()
104-
for _, file := range logFiles {
105-
taskInfo := TaskInfo{
106-
App: task.App,
107-
Hostname: task.Hostname,
108-
Labels: task.Labels,
109-
TaskID: task.TaskID,
110-
CWD: executor.Directory,
111-
FileName: file,
112-
}
113-
// fmt.Printf("%v\n", taskInfo)
114-
t.AddLogs <- taskInfo
104+
taskInfo := TaskInfo{
105+
App: task.App,
106+
Hostname: task.Hostname,
107+
Labels: task.Labels,
108+
TaskID: task.TaskID,
109+
CWD: executor.Directory,
110+
FileNames: logFiles,
115111
}
112+
// fmt.Printf("%v\n", taskInfo)
113+
t.AddLogs <- taskInfo
116114
} else {
117115
log.Printf("[WARN] Couldn't find the executor that spun up the task %s", task.TaskID)
118116
}

0 commit comments

Comments
 (0)