logstash-codec-google_appengine 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65a25d37344d2d857ced131dfbca80891278dd78
|
4
|
+
data.tar.gz: 7b0c1042da8f3905e01f7743cc1868b1c1e4bbcb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70f2f14571103eb44329f903f97b9e2e1483ecbca36954505b7b384f3f7ca04483ee7d1ca5b5208cb982390686b1ede49ff9f0f84010dc84894fbfbfcf3d73ac
|
7
|
+
data.tar.gz: 19308f459a967b1d2f7630f8b8f3ad6c633626e519384a969894b08da7991bc6422074d361412a332edac98da981c1662881dab78059ebfb4412674be474f3db
|
@@ -22,14 +22,13 @@ class LogStash::Codecs::GoogleAppengine < LogStash::Codecs::Base
|
|
22
22
|
yield LogStash::Event.new(flattenedJson)
|
23
23
|
}
|
24
24
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
rescue => e
|
26
|
+
@logger.info("Failed to process data", :error => e, :data => data)
|
27
|
+
yield LogStash::Event.new("message" => data, "tags" => ["_googleappengineparsefailure"])
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
|
33
32
|
private
|
34
33
|
|
35
34
|
def is_parse_failure(event)
|
@@ -39,6 +38,10 @@ end
|
|
39
38
|
def flatten(event)
|
40
39
|
payload = event['protoPayload']
|
41
40
|
lines = payload['line']
|
42
|
-
|
43
|
-
|
41
|
+
if lines
|
42
|
+
payload.delete('line')
|
43
|
+
lines.map { |line| payload.merge(line) }
|
44
|
+
else
|
45
|
+
[payload]
|
46
|
+
end
|
44
47
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-codec-google_appengine'
|
4
|
-
s.version = '1.
|
4
|
+
s.version = '1.3.0'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "This codec may be used to decode via inputs appengine logs"
|
7
7
|
s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
|
@@ -0,0 +1 @@
|
|
1
|
+
{"metadata":{"serviceName":"appengine.googleapis.com","zone":"us9","labels":{"appengine.googleapis.com/module_id":"default","appengine.googleapis.com/request_id":"55e80a9c00ff096e0f91589f3f0001737e73686f7070696e672d67616d652d68726400013100010103","appengine.googleapis.com/version_id":"1"},"timestamp":"2015-09-03T08:53:48.617999Z"},"protoPayload":{"@type":"type.googleapis.com/google.appengine.logging.v1.RequestLog","appId":"s~shopping-game-hrd","versionId":"1","requestId":"NTVlODBhOWMwMGZmMDk2ZTBmOTE1ODlmM2YwMDAxNzM3ZTczNjg2ZjcwNzA2OTZlNjcyZDY3NjE2ZDY1MmQ2ODcyNjQwMDAxMzEwMDAxMDEwMw==","ip":"78.55.216.42","startTime":"2015-09-03T08:53:48.617999Z","endTime":"2015-09-03T08:53:48.671351Z","latency":"0.053352s","method":"GET","resource":"/images/website/welcome/keyFeatures/objectives.jpg","httpVersion":"HTTP/1.1","status":200,"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2439.0 Safari/537.36","host":"shopping-game.small-improvements.com","instanceIndex":-1,"appEngineRelease":"1.9.25"},"insertId":"2015-09-03|01:53:50.387721-07|10.106.166.136|1292431933","log":"appengine.googleapis.com/request_log","httpRequest":{"status":200}}
|
@@ -9,30 +9,48 @@ describe LogStash::Codecs::GoogleAppengine do
|
|
9
9
|
next LogStash::Codecs::GoogleAppengine.new
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
|
13
|
+
|
14
|
+
context "#decode" do
|
15
|
+
|
16
|
+
it "should return an event from json data" do
|
17
|
+
data = File.open("spec/codecs/appengine.logs.jsonl", "rb").read
|
18
|
+
subject.decode(data) do |event|
|
19
|
+
insist { event.is_a? LogStash::Event }
|
20
|
+
insist { event["@type"] } == "type.googleapis.com/google.appengine.logging.v1.RequestLog"
|
20
21
|
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should merge the request payload with the reuest lines data" do
|
25
|
+
data = File.open("spec/codecs/appengine.logs.jsonl", "rb").read
|
26
|
+
collector = Array.new
|
27
|
+
subject.decode(data) do |event|
|
28
|
+
collector.push(event)
|
29
|
+
end
|
30
|
+
|
31
|
+
expect(collector.size).to eq(3)
|
21
32
|
|
22
|
-
|
23
|
-
|
24
|
-
subject.decode(data) do |event|
|
25
|
-
collector.push(event)
|
26
|
-
end
|
33
|
+
expect(collector[0]["@type"]).to eq("type.googleapis.com/google.appengine.logging.v1.RequestLog")
|
34
|
+
expect(collector[0]["logMessage"]).to eq("IdentityFilter logUserIdentity: [[meta]] <anonymous:true>\n")
|
27
35
|
|
28
|
-
|
36
|
+
expect(collector[1]["@type"]).to eq("type.googleapis.com/google.appengine.logging.v1.RequestLog")
|
37
|
+
expect(collector[1]["logMessage"]).to eq("HttpOnlyFilter getSession: add additional Set-Cookie with httpOnly-flag for JSESSIONID\n")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should handle logs even when they have no lines" do
|
29
41
|
|
30
|
-
|
31
|
-
expect(collector[0]["logMessage"]).to eq("IdentityFilter logUserIdentity: [[meta]] <anonymous:true>\n")
|
42
|
+
data = File.open("spec/codecs/appengine.logs-without-lines.jsonl", "rb").read
|
32
43
|
|
33
|
-
|
34
|
-
|
44
|
+
collector = Array.new
|
45
|
+
|
46
|
+
subject.decode(data) do |event|
|
47
|
+
collector.push(event)
|
35
48
|
end
|
49
|
+
|
50
|
+
expect(collector.size).to eq(1)
|
51
|
+
|
52
|
+
expect(collector[0]["@type"]).to eq("type.googleapis.com/google.appengine.logging.v1.RequestLog")
|
53
|
+
expect(collector[0]["resource"]).to eq("/images/website/welcome/keyFeatures/objectives.jpg")
|
36
54
|
end
|
37
55
|
|
38
56
|
it "falls back to plain text" do
|
@@ -46,3 +64,6 @@ describe LogStash::Codecs::GoogleAppengine do
|
|
46
64
|
insist { decoded } == true
|
47
65
|
end
|
48
66
|
end
|
67
|
+
|
68
|
+
|
69
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-codec-google_appengine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Small Improvements
|
@@ -74,6 +74,7 @@ files:
|
|
74
74
|
- lib/logstash/codecs/google_appengine.rb
|
75
75
|
- logstash-codec-google-appengine.iml
|
76
76
|
- logstash-codec-google_appengine.gemspec
|
77
|
+
- spec/codecs/appengine.logs-without-lines.jsonl
|
77
78
|
- spec/codecs/appengine.logs.jsonl
|
78
79
|
- spec/codecs/google_appengine_spec.rb
|
79
80
|
homepage: https://github.com/MichaelRuhwedel/logstash-codec-google-appengine
|
@@ -103,5 +104,6 @@ signing_key:
|
|
103
104
|
specification_version: 4
|
104
105
|
summary: This codec may be used to decode via inputs appengine logs
|
105
106
|
test_files:
|
107
|
+
- spec/codecs/appengine.logs-without-lines.jsonl
|
106
108
|
- spec/codecs/appengine.logs.jsonl
|
107
109
|
- spec/codecs/google_appengine_spec.rb
|