twiglet 3.0.1 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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