Skip to content

Commit

Permalink
[7.17](backport #32767) allow for json/ndjson content type with chars…
Browse files Browse the repository at this point in the history
…et (#32834)

* allow for json/ndjson content type with charset (#32767)

* allow for json/ndjson content type with charset

* add '; charset=UTF-8' in integration tests

* changelog

* assessing CI

* revert correct behaviour

(cherry picked from commit b40349c)

# Conflicts:
#	x-pack/filebeat/input/awss3/input_integration_test.go

* fix backport conflicts

Co-authored-by: Andrea Spacca <[email protected]>
  • Loading branch information
mergify[bot] and Andrea Spacca authored Aug 25, 2022
1 parent 0d97755 commit a61acd3
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 8 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.next.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d
*Filebeat*

- Fix file.path field in cloudtrail fileset to use json.digestS3Object. {pull}32759[32759]
- Fix not parsing as json when `json` and `ndjson` content types have charset information in `aws-s3` input {pull}32767[32767]

*Heartbeat*

Expand Down
19 changes: 12 additions & 7 deletions x-pack/filebeat/input/awss3/input_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"io/ioutil"
"os"
"path/filepath"
"strings"
"testing"
"time"

Expand Down Expand Up @@ -86,7 +87,6 @@ file_selectors:
-
regex: 'events-array.json$'
expand_event_list_from_field: Events
content_type: application/json
include_s3_metadata:
- last-modified
- x-amz-version-id
Expand All @@ -95,7 +95,6 @@ file_selectors:
- Content-Type
-
regex: '\.(?:nd)?json(\.gz)?$'
content_type: application/json
-
regex: 'multiline.txt$'
parsers:
Expand All @@ -115,7 +114,6 @@ file_selectors:
-
regex: 'events-array.json$'
expand_event_list_from_field: Events
content_type: application/json
include_s3_metadata:
- last-modified
- x-amz-version-id
Expand All @@ -124,7 +122,6 @@ file_selectors:
- Content-Type
-
regex: '\.(?:nd)?json(\.gz)?$'
content_type: application/json
-
regex: 'multiline.txt$'
parsers:
Expand Down Expand Up @@ -324,11 +321,19 @@ func uploadS3TestFiles(t *testing.T, region, bucket string, filenames ...string)
t.Fatalf("Failed to open file %q, %v", filename, err)
}

contentType := ""
if strings.HasSuffix(filename, "ndjson") || strings.HasSuffix(filename, "ndjson.gz") {
contentType = contentTypeNDJSON + "; charset=UTF-8"
} else if strings.HasSuffix(filename, "json") || strings.HasSuffix(filename, "json.gz") {
contentType = contentTypeJSON + "; charset=UTF-8"
}

// Upload the file to S3.
result, err := uploader.Upload(&s3manager.UploadInput{
Bucket: aws.String(bucket),
Key: aws.String(filepath.Base(filename)),
Body: bytes.NewReader(data),
Bucket: aws.String(bucket),
Key: aws.String(filepath.Base(filename)),
Body: bytes.NewReader(data),
ContentType: aws.String(contentType),
})
if err != nil {
t.Fatalf("Failed to upload file %q: %v", filename, err)
Expand Down
2 changes: 1 addition & 1 deletion x-pack/filebeat/input/awss3/s3_objects.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ func (p *s3ObjectProcessor) ProcessS3Object() error {

// Process object content stream.
switch {
case contentType == contentTypeJSON || contentType == contentTypeNDJSON:
case strings.HasPrefix(contentType, contentTypeJSON) || strings.HasPrefix(contentType, contentTypeNDJSON):
err = p.readJSON(reader)
default:
err = p.readFile(reader)
Expand Down

0 comments on commit a61acd3

Please sign in to comment.