Skip to content

Commit 94f6703

Browse files
authored
Improve log parsing (#3)
1 parent e46f054 commit 94f6703

File tree

3 files changed

+56
-51
lines changed

3 files changed

+56
-51
lines changed

receiver/githubactionsreceiver/go.mod

-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ require (
2828
github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
2929
github.com/gogo/protobuf v1.3.2 // indirect
3030
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
31-
github.com/golang/protobuf v1.5.4 // indirect
3231
github.com/golang/snappy v0.0.4 // indirect
3332
github.com/google/go-github/v57 v57.0.0 // indirect
3433
github.com/google/go-querystring v1.1.0 // indirect

receiver/githubactionsreceiver/go.sum

+8-19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

receiver/githubactionsreceiver/log_event_handling.go

+48-31
Original file line numberDiff line numberDiff line change
@@ -86,49 +86,66 @@ func eventToLogs(event interface{}, config *Config, ghClient *github.Client, log
8686
jobLogsScope.Scope().Attributes().PutStr("ci.github.workflow.job.name", jobName)
8787

8888
for _, logFile := range files {
89+
if !strings.HasPrefix(logFile.Name, jobName) {
90+
continue
91+
}
8992

90-
if strings.HasPrefix(logFile.Name, jobName) {
91-
fileNameWithoutDir := strings.Replace(logFile.Name, jobName+"/", "", 1)
92-
stepNumber, _ := strconv.Atoi(strings.Split(fileNameWithoutDir, "_")[0])
93+
fileNameWithoutDir := strings.TrimPrefix(logFile.Name, jobName+"/")
94+
stepNumberStr := strings.Split(fileNameWithoutDir, "_")[0]
95+
stepNumber, err := strconv.Atoi(stepNumberStr)
96+
if err != nil {
97+
logger.Error("Invalid step number", zap.String("stepNumberStr", stepNumberStr), zap.Error(err))
98+
continue
99+
}
93100

94-
spanID, _ := generateStepSpanID(e.GetWorkflowRun().GetID(), e.GetWorkflowRun().GetRunAttempt(), jobName, int64(stepNumber))
101+
spanID, err := generateStepSpanID(e.GetWorkflowRun().GetID(), e.GetWorkflowRun().GetRunAttempt(), jobName, int64(stepNumber))
102+
if err != nil {
103+
logger.Error("Failed to generate span ID", zap.Error(err))
104+
continue
105+
}
95106

96-
ff, err := logFile.Open()
97-
if err != nil {
98-
logger.Error("Failed to open file", zap.Error(err))
99-
break
107+
ff, err := logFile.Open()
108+
if err != nil {
109+
logger.Error("Failed to open file", zap.Error(err))
110+
continue
111+
}
112+
defer ff.Close()
113+
114+
scanner := bufio.NewScanner(ff)
115+
for scanner.Scan() {
116+
lineText := scanner.Text()
117+
if lineText == "" {
118+
logger.Debug("Skipping empty line")
119+
continue
100120
}
101121

102-
scanner := bufio.NewScanner(ff)
103-
for scanner.Scan() {
104-
record := jobLogsScope.LogRecords().AppendEmpty()
105-
106-
if withTraceInfo {
107-
record.SetSpanID(spanID)
108-
record.SetTraceID(traceID)
109-
}
110-
111-
record.Attributes().PutInt("ci.github.workflow.job.step.number", int64(stepNumber))
112-
113-
now := pcommon.NewTimestampFromTime(time.Now())
114-
115-
ts, line, _ := strings.Cut(scanner.Text(), " ")
116-
parsedTime, _ := time.Parse(time.RFC3339, ts)
117-
118-
record.SetObservedTimestamp(now)
119-
record.SetTimestamp(pcommon.NewTimestampFromTime(parsedTime))
122+
ts, line, ok := strings.Cut(lineText, " ")
123+
if !ok {
124+
logger.Error("Failed to cut log line", zap.String("body", lineText))
125+
continue
126+
}
120127

121-
record.Body().SetStr(line)
128+
parsedTime, err := time.Parse(time.RFC3339, ts)
129+
if err != nil {
130+
logger.Error("Failed to parse timestamp", zap.String("timestamp", ts), zap.Error(err))
131+
continue
122132
}
123-
ff.Close()
124133

125-
if err := scanner.Err(); err != nil {
126-
logger.Error("error reading file", zap.Error(err))
134+
record := jobLogsScope.LogRecords().AppendEmpty()
135+
if withTraceInfo {
136+
record.SetSpanID(spanID)
137+
record.SetTraceID(traceID)
127138
}
139+
record.Attributes().PutInt("ci.github.workflow.job.step.number", int64(stepNumber))
140+
record.SetTimestamp(pcommon.NewTimestampFromTime(parsedTime))
141+
record.SetObservedTimestamp(pcommon.NewTimestampFromTime(time.Now()))
142+
record.Body().SetStr(line)
143+
}
128144

145+
if err := scanner.Err(); err != nil {
146+
logger.Error("Error reading file", zap.Error(err))
129147
}
130148
}
131-
132149
}
133150

134151
return &logs, nil

0 commit comments

Comments
 (0)