twiglet 3.0.1 → 3.0.2

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
  SHA256:
3
- metadata.gz: 65c3f0028e0ac918736f63a2475fb45231586d51256a8778d4730ebd7792675c
4
- data.tar.gz: 98d3607d5e1aad68f00d0ced7ccce24f0dba0c8b3eede84620a4a37a102a9849
3
+ metadata.gz: caa9b2047bc7a8ca268f0ba1b84a983b110234769db49c549f1d61fb21bbc730
4
+ data.tar.gz: c3eaa4009b34d4d01b4b0b7a90fc5ba1b2e760abb7b137fd92f4679c22de57ae
5
5
  SHA512:
6
- metadata.gz: '0418346dbb4f5d486062caa13b7d1859a96309d00061b3e818563c9c399601f73035e2c89c64888e168d2a040fbb96c18a47e150c505859a58c067cfe46fe76f'
7
- data.tar.gz: 9437cae3f2662746cd059a660f9e0884c5c0edd7e56de77771d81678c01f6e55006e048b50bd44f7a99d240b9a5d3527b70a15528d0f4e8711ca2e0954c73235
6
+ metadata.gz: d3ab7e57c1e99ac93349dcc2e75787e08d5f5c5fc6e242a03f286f17ae892ff38f759eacff900bbec46508fe559c5172958e1b94452e6af807e239ae195e29f2
7
+ data.tar.gz: 4c57202266f609af726de4cc9a60b38f9bcc414dbcdfb5ce26e7f39bb18ebb07f8292310a9fa6a853a49ab9a2f18d53837d77f2321c5046224884aa0b72c5f99
@@ -11,7 +11,7 @@ class RequestLogger
11
11
  [status, headers, body]
12
12
  rescue StandardError => e
13
13
  log_error(env, 500, e)
14
- [500, {}, body]
14
+ raise e
15
15
  end
16
16
 
17
17
  private
@@ -26,24 +26,41 @@ class RequestLogger
26
26
  @logger.error(fields, error)
27
27
  end
28
28
 
29
+ # https://www.elastic.co/guide/en/ecs/1.5/ecs-field-reference.html
29
30
  def get_fields(env, status)
30
31
  message = "#{env['REQUEST_METHOD']}: #{env['PATH_INFO']}"
31
32
 
32
33
  {
33
- http: {
34
- request: {
35
- method: env['REQUEST_METHOD'],
36
- server: env['SERVER_NAME'],
37
- https_enabled: env['HTTPS'],
38
- path: env['PATH_INFO'],
39
- query: env['QUERY_STRING'] # Don't log PII query params
40
- },
41
- response: {
42
- status: status,
43
- body: { bytes: env['CONTENT_LENGTH'] }
44
- }
34
+ http: http_fields(env, status),
35
+ url: url_fields(env),
36
+ client: {
37
+ ip: env['HTTP_TRUE_CLIENT_IP'] || env['REMOTE_ADDR']
38
+ },
39
+ user_agent: {
40
+ original: env['HTTP_USER_AGENT']
45
41
  },
46
42
  message: message
47
43
  }
48
44
  end
45
+
46
+ def http_fields(env, status)
47
+ {
48
+ request: {
49
+ method: env['REQUEST_METHOD'],
50
+ mime_type: env['HTTP_ACCEPT']
51
+ },
52
+ response: {
53
+ status: status
54
+ },
55
+ version: env['HTTP_VERSION']
56
+ }
57
+ end
58
+
59
+ def url_fields(env)
60
+ {
61
+ path: env['PATH_INFO'],
62
+ query: env['QUERY_STRING'],
63
+ domain: env['SERVER_NAME']
64
+ }
65
+ end
49
66
  end
@@ -1,4 +1,5 @@
1
1
  require 'minitest/autorun'
2
+ require_relative '../../lib/twiglet/logger'
2
3
  require_relative './request_logger'
3
4
  require 'rack'
4
5
 
@@ -14,23 +15,43 @@ describe RequestLogger do
14
15
  end
15
16
 
16
17
  it 'logs the request data' do
17
- request.get("/some/path?some_var=1")
18
+ request.get("/some/path?some_var=1", 'HTTP_ACCEPT' => 'application/json',
19
+ 'REMOTE_ADDR' => '0.0.0.0',
20
+ 'HTTP_VERSION' => 'HTTP/1.1',
21
+ 'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh)')
18
22
  log = JSON.parse(output.string)
19
- http_body = {
20
- "request" => {
21
- "https_enabled" => "off",
22
- "method" => "GET",
23
+
24
+ expected_log = {
25
+ "log" => { "level" => "info" },
26
+ "http" => {
27
+ "request" => {
28
+ "method" => "GET",
29
+ "mime_type" => 'application/json'
30
+ },
31
+ "response" => {
32
+ "status" => 200
33
+ },
34
+ "version" => 'HTTP/1.1'
35
+ },
36
+ "url" => {
23
37
  "path" => "/some/path",
24
38
  "query" => "some_var=1",
25
- "server" => "example.org"
39
+ "domain" => "example.org"
40
+ },
41
+ "client" => {
42
+ 'ip' => '0.0.0.0'
26
43
  },
27
- "response" => {
28
- "status" => 200,
29
- "body" => { "bytes" => "0" }
30
- }
44
+ "user_agent" => {
45
+ "original" => 'Mozilla/5.0 (Macintosh)'
46
+ },
47
+ "message" => "GET: /some/path"
31
48
  }
32
- assert_equal http_body, log["http"]
33
- assert_equal "GET: /some/path", log["message"]
49
+
50
+ assert_equal(log['log'], expected_log['log'])
51
+ assert_equal(log['http'], expected_log['http'])
52
+ assert_equal(log['url'], expected_log['url'])
53
+ assert_equal(log['user_agent'], expected_log['user_agent'])
54
+ assert_equal(log['message'], expected_log['message'])
34
55
  end
35
56
 
36
57
  it 'does not log PII' do
@@ -42,10 +63,12 @@ describe RequestLogger do
42
63
  end
43
64
 
44
65
  it 'logs an error message when a request is bad' do
45
- bad_request.get("/some/path")
66
+ -> { bad_request.get("/some/path") }.must_raise StandardError
46
67
  log = JSON.parse(output.string)
47
- assert_equal 'error', log['log']['level']
48
- assert_equal 'some exception', log['error']['message']
68
+ assert_equal log['log']['level'], 'error'
69
+ assert_equal log['error']['message'], 'some exception'
70
+ assert_equal log['error']['type'], 'StandardError'
71
+ assert_includes log['error']['stack_trace'], 'request_logger_test.rb'
49
72
  end
50
73
  end
51
74
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Twiglet
4
- VERSION = '3.0.1'
4
+ VERSION = '3.0.2'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twiglet
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simply Business
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-22 00:00:00.000000000 Z
11
+ date: 2021-01-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Like a log, only smaller.
14
14
  email:
@@ -66,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  requirements: []
69
- rubygems_version: 3.1.4
69
+ rubygems_version: 3.2.3
70
70
  signing_key:
71
71
  specification_version: 4
72
72
  summary: Twiglet