onelinejson 0.0.8 → 0.1.0
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.
- data/.rspec +2 -0
- data/Gemfile +5 -0
- data/Rakefile +28 -1
- data/lib/onelinejson.rb +51 -37
- data/lib/onelinejson/version.rb +1 -1
- data/onelinejson.gemspec +0 -2
- data/spec/lib/onelinejson_spec.rb +79 -0
- data/spec/spec_helper.rb +24 -0
- metadata +14 -35
data/.rspec
ADDED
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1 +1,28 @@
|
|
1
|
-
require "bundler
|
1
|
+
require "bundler"
|
2
|
+
Bundler.setup
|
3
|
+
|
4
|
+
require "rake"
|
5
|
+
require "rspec/core/rake_task"
|
6
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
7
|
+
require "onelinejson/version"
|
8
|
+
|
9
|
+
task :gem => :build
|
10
|
+
task :build do
|
11
|
+
system "gem build onelinejson.gemspec"
|
12
|
+
end
|
13
|
+
|
14
|
+
task :install => :build do
|
15
|
+
system "gem install #{FILE}"
|
16
|
+
end
|
17
|
+
|
18
|
+
task :release => :build do
|
19
|
+
system "git tag -a v#{Onelinejson::VERSION} -m 'Tagging #{Onelinejson::VERSION}'"
|
20
|
+
system "git push --tags"
|
21
|
+
system "gem push onelinejson-#{Onelinejson::VERSION}.gem"
|
22
|
+
end
|
23
|
+
|
24
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
25
|
+
t.verbose = false
|
26
|
+
t.ruby_opts = "-W -I./spec -rspec_helper"
|
27
|
+
end
|
28
|
+
task :default => :spec
|
data/lib/onelinejson.rb
CHANGED
@@ -20,22 +20,23 @@ module Onelinejson
|
|
20
20
|
]
|
21
21
|
ELIP = "\xe2\x80\xa6"
|
22
22
|
LOG_MAX_LENGTH = 1900
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
23
|
+
ENTRY_MAX_LENGTH = 128
|
24
|
+
BEFORE_HOOK = lambda do |data, payload|
|
25
|
+
request = data.select{ |k,_|
|
26
|
+
[:method, :path, :format].include?(k)
|
27
|
+
}.merge(payload[:request])
|
28
|
+
response = data.select{ |k,_|
|
29
|
+
[:status, :duration, :view, :view_runtime].include?(k)
|
30
|
+
}
|
31
|
+
Onelinejson.enforce_max_json_length(
|
32
|
+
{
|
33
|
+
debug_info: payload[:debug_info] || {},
|
34
|
+
request: request,
|
35
|
+
response: response,
|
36
|
+
})
|
37
37
|
end
|
38
38
|
|
39
|
+
|
39
40
|
def self.enforce_max_json_length(hash)
|
40
41
|
return hash if JSON.dump(hash).size <= LOG_MAX_LENGTH
|
41
42
|
|
@@ -48,24 +49,50 @@ module Onelinejson
|
|
48
49
|
end
|
49
50
|
|
50
51
|
module AppControllerMethods
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
52
|
+
extend self # for testing
|
53
|
+
|
54
|
+
def trim_values(hash)
|
55
|
+
Hash[hash.map do |k, v|
|
56
|
+
if v.is_a? String
|
57
|
+
trimmed = if v.size > ENTRY_MAX_LENGTH
|
58
|
+
v[0, ENTRY_MAX_LENGTH-1] + ELIP
|
59
|
+
else
|
60
|
+
v
|
61
|
+
end
|
62
|
+
[k, trimmed]
|
63
|
+
else
|
64
|
+
[k, v]
|
65
|
+
end
|
66
|
+
end]
|
67
|
+
end
|
68
|
+
|
69
|
+
def extract_headers(headers)
|
70
|
+
if headers.respond_to?(:env)
|
71
|
+
headers.env
|
72
|
+
elsif headers.respond_to?(:to_hash)
|
73
|
+
headers.to_hash
|
57
74
|
end.select do |k, v|
|
58
75
|
k =~ /^HTTP_/ && !REJECTED_HEADERS.any? {|regex| k =~ regex}
|
59
76
|
end
|
60
|
-
|
77
|
+
end
|
78
|
+
|
79
|
+
def extract_params(params)
|
80
|
+
params.reject do |k,v|
|
61
81
|
k == 'controller' ||
|
62
82
|
k == 'action' ||
|
63
83
|
v.is_a?(ActionDispatch::Http::UploadedFile) ||
|
64
84
|
v.is_a?(Hash)
|
65
85
|
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def append_info_to_payload(payload)
|
89
|
+
super
|
66
90
|
|
91
|
+
parameters = extract_params(params)
|
92
|
+
parameters = trim_values(parameters)
|
93
|
+
headers = extract_headers(request.headers)
|
67
94
|
payload[:request] = {
|
68
|
-
params:
|
95
|
+
params: parameters,
|
69
96
|
headers: headers,
|
70
97
|
ip: request.ip,
|
71
98
|
uuid: request.env['action_dispatch.request_id'],
|
@@ -81,25 +108,12 @@ module Onelinejson
|
|
81
108
|
end
|
82
109
|
|
83
110
|
class Railtie < Rails::Railtie
|
111
|
+
puts 'FUUUU'
|
84
112
|
config.log_tags = nil
|
85
113
|
config.lograge = ActiveSupport::OrderedOptions.new
|
86
114
|
config.lograge.formatter = ::Lograge::Formatters::Json.new
|
87
115
|
config.lograge.enabled = true
|
88
|
-
config.lograge.before_format =
|
89
|
-
request = data.select{ |k,_|
|
90
|
-
[:method, :path, :format].include?(k)
|
91
|
-
}.merge(payload[:request])
|
92
|
-
response = data.select{ |k,_|
|
93
|
-
[:status, :duration, :view, :view_runtime].include?(k)
|
94
|
-
}
|
95
|
-
Onelinejson.enforce_max_json_length(
|
96
|
-
{
|
97
|
-
debug_info: payload[:debug_info] || {},
|
98
|
-
request: request,
|
99
|
-
response: response,
|
100
|
-
})
|
101
|
-
end
|
102
|
-
|
116
|
+
config.lograge.before_format = Onelinejson::BEFORE_HOOK
|
103
117
|
ActiveSupport.on_load(:action_controller) do
|
104
118
|
include AppControllerMethods
|
105
119
|
end
|
data/lib/onelinejson/version.rb
CHANGED
data/onelinejson.gemspec
CHANGED
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Onelinejson::AppControllerMethods do
|
4
|
+
describe '.trim_values' do
|
5
|
+
let(:trimmed) { Onelinejson::AppControllerMethods.trim_values(hash) }
|
6
|
+
context 'when all good' do
|
7
|
+
let(:hash) { {a: 1, b: 2} }
|
8
|
+
it 'returns eq hash' do
|
9
|
+
expect(trimmed).to eq(hash)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when entry too long' do
|
14
|
+
let(:hash) { {a: "aa"*Onelinejson::ENTRY_MAX_LENGTH} }
|
15
|
+
it 'trims entry' do
|
16
|
+
expect(trimmed[:a]).to have(Onelinejson::ENTRY_MAX_LENGTH).chars
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '.extract_headers' do
|
22
|
+
context 'when rails 3' do
|
23
|
+
it 'extracts'
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when rails 4' do
|
27
|
+
it 'extracts'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '.extract_params' do
|
32
|
+
it 'returns sanetized params'
|
33
|
+
it 'rejects controller'
|
34
|
+
it 'rejects action'
|
35
|
+
context 'when value is a file' do
|
36
|
+
it 'rejects whenfiles'
|
37
|
+
end
|
38
|
+
context 'when value is a hash' do
|
39
|
+
it 'rejects'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe Onelinejson do
|
45
|
+
describe Onelinejson::BEFORE_HOOK do
|
46
|
+
it 'works'
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '.enforce_max_json_length' do
|
50
|
+
let(:enforced) { Onelinejson.enforce_max_json_length(hash) }
|
51
|
+
context 'when all good' do
|
52
|
+
let(:hash) { {a: 1, b: 2} }
|
53
|
+
it 'returns hash' do
|
54
|
+
expect(enforced).to be(hash)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'when hash too long' do
|
59
|
+
context 'when removing params fixes it' do
|
60
|
+
let(:hash) { {a: 1, request: {
|
61
|
+
headers: 'a', params: 'b'*Onelinejson::LOG_MAX_LENGTH
|
62
|
+
}} }
|
63
|
+
it 'returns hash without params' do
|
64
|
+
expect(enforced[:request].keys).to eq([:headers])
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'when removing params and headers fixes it' do
|
69
|
+
let(:hash) { {a: 1, request: {
|
70
|
+
headers: 'a'*Onelinejson::LOG_MAX_LENGTH, params: 'b'*Onelinejson::LOG_MAX_LENGTH
|
71
|
+
}} }
|
72
|
+
it 'returns hash without params and headers' do
|
73
|
+
expect(enforced[:request].keys).to be_empty
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
3
|
+
|
4
|
+
require "bundler"
|
5
|
+
Bundler.setup
|
6
|
+
|
7
|
+
module Rails
|
8
|
+
end
|
9
|
+
|
10
|
+
require "lograge"
|
11
|
+
require "onelinejson"
|
12
|
+
require "rspec"
|
13
|
+
|
14
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
15
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
16
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
17
|
+
# loaded once.
|
18
|
+
#
|
19
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
20
|
+
RSpec.configure do |config|
|
21
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
22
|
+
|
23
|
+
config.order = 'random'
|
24
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: onelinejson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-12-
|
12
|
+
date: 2013-12-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: lograge
|
@@ -27,38 +27,6 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: bundler
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ~>
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '1.4'
|
38
|
-
type: :development
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '1.4'
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: rake
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ! '>='
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
30
|
description: Everything you need to log json oneliners
|
63
31
|
email:
|
64
32
|
- me@hans.io
|
@@ -67,6 +35,7 @@ extensions: []
|
|
67
35
|
extra_rdoc_files: []
|
68
36
|
files:
|
69
37
|
- .gitignore
|
38
|
+
- .rspec
|
70
39
|
- Gemfile
|
71
40
|
- LICENSE.txt
|
72
41
|
- README.md
|
@@ -74,6 +43,8 @@ files:
|
|
74
43
|
- lib/onelinejson.rb
|
75
44
|
- lib/onelinejson/version.rb
|
76
45
|
- onelinejson.gemspec
|
46
|
+
- spec/lib/onelinejson_spec.rb
|
47
|
+
- spec/spec_helper.rb
|
77
48
|
homepage: ''
|
78
49
|
licenses:
|
79
50
|
- MIT
|
@@ -87,16 +58,24 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
87
58
|
- - ! '>='
|
88
59
|
- !ruby/object:Gem::Version
|
89
60
|
version: '0'
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
hash: 3268962913112188005
|
90
64
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
65
|
none: false
|
92
66
|
requirements:
|
93
67
|
- - ! '>='
|
94
68
|
- !ruby/object:Gem::Version
|
95
69
|
version: '0'
|
70
|
+
segments:
|
71
|
+
- 0
|
72
|
+
hash: 3268962913112188005
|
96
73
|
requirements: []
|
97
74
|
rubyforge_project:
|
98
75
|
rubygems_version: 1.8.23
|
99
76
|
signing_key:
|
100
77
|
specification_version: 3
|
101
78
|
summary: Everything you need to log json oneliners
|
102
|
-
test_files:
|
79
|
+
test_files:
|
80
|
+
- spec/lib/onelinejson_spec.rb
|
81
|
+
- spec/spec_helper.rb
|