Skip to content

Commit

Permalink
fix(stanza/converter): handle syslogrecevier attributes correctly (op…
Browse files Browse the repository at this point in the history
…en-telemetry#27415)

**Description:**

Syslog receiver produces attribute (`structured_data`) which is a
stringified map. This PR fixes it. See Issue for more details

**Link to tracking Issue:**
open-telemetry#27414

**Testing:**

UT

**Documentation:**

In code comments

---------

Signed-off-by: Dominik Rosiek <[email protected]>
  • Loading branch information
sumo-drosiek authored and jmsnll committed Nov 12, 2023
1 parent 35f7301 commit 1ba663f
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 9 deletions.
27 changes: 27 additions & 0 deletions .chloggen/drosiek-syslog-receiver-attributes.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Use this changelog template to create an entry for release notes.

# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: bug_fix

# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
component: syslogparser

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: return correct structure from syslog parser

# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
issues: [27414]

# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext:

# If your change doesn't affect end users or the exported elements of any package,
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
# Optional: The change log or logs in which this entry should be included.
# e.g. '[user]' or '[user, api]'
# Include 'user' if the change is relevant to end users.
# Include 'api' if there is a change to a library API.
# Default: '[user]'
change_logs: [user]
4 changes: 2 additions & 2 deletions pkg/stanza/operator/input/syslog/syslog_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ var (
"msg_id": "ID52020",
"priority": 86,
"proc_id": "23108",
"structured_data": map[string]map[string]string{
"SecureAuth@27389": {
"structured_data": map[string]interface{}{
"SecureAuth@27389": map[string]interface{}{
"PEN": "27389",
"Realm": "SecureAuth0",
"UserHostAddress": "192.168.2.132",
Expand Down
12 changes: 6 additions & 6 deletions pkg/stanza/operator/parser/syslog/data.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,8 @@ func CreateCases(basicConfig func() *Config) ([]Case, error) {
"msg_id": "ID52020",
"priority": 86,
"proc_id": "23108",
"structured_data": map[string]map[string]string{
"SecureAuth@27389": {
"structured_data": map[string]interface{}{
"SecureAuth@27389": map[string]interface{}{
"PEN": "27389",
"Realm": "SecureAuth0",
"UserHostAddress": "192.168.2.132",
Expand Down Expand Up @@ -197,8 +197,8 @@ func CreateCases(basicConfig func() *Config) ([]Case, error) {
"msg_id": "ID52020",
"priority": 86,
"proc_id": "23108",
"structured_data": map[string]map[string]string{
"SecureAuth@27389": {
"structured_data": map[string]interface{}{
"SecureAuth@27389": map[string]interface{}{
"PEN": "27389",
"Realm": "SecureAuth0",
"UserHostAddress": "192.168.2.132",
Expand Down Expand Up @@ -235,8 +235,8 @@ func CreateCases(basicConfig func() *Config) ([]Case, error) {
"msg_id": "ID52020",
"priority": 86,
"proc_id": "23108",
"structured_data": map[string]map[string]string{
"SecureAuth@27389": {
"structured_data": map[string]interface{}{
"SecureAuth@27389": map[string]interface{}{
"PEN": "27389",
"Realm": "SecureAuth0",
"UserHostAddress": "192.168.2.132",
Expand Down
18 changes: 17 additions & 1 deletion pkg/stanza/operator/parser/syslog/syslog.go
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ func (s *Parser) toSafeMap(message map[string]interface{}) (map[string]interface
delete(message, key)
continue
}
message[key] = *v
message[key] = convertMap(*v)
default:
return nil, fmt.Errorf("key %s has unknown field of type %T", key, v)
}
Expand All @@ -252,6 +252,22 @@ func (s *Parser) toSafeMap(message map[string]interface{}) (map[string]interface
return message, nil
}

// convertMap converts map[string]map[string]string to map[string]interface{}
// which is expected by stanza converter
func convertMap(data map[string]map[string]string) map[string]interface{} {
ret := map[string]interface{}{}
for key, value := range data {
ret[key] = map[string]interface{}{}
r := ret[key].(map[string]interface{})

for k, v := range value {
r[k] = v
}
}

return ret
}

func toBytes(value interface{}) ([]byte, error) {
switch v := value.(type) {
case string:
Expand Down

0 comments on commit 1ba663f

Please sign in to comment.