access-watch-rails 0.0.1 → 0.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
  SHA1:
3
- metadata.gz: 5307a01bf8b53dd07460b8a6180efcdf5e7d3c54
4
- data.tar.gz: ccb0b9d6b348acc97772a84b5766936261a86ac2
3
+ metadata.gz: 5e91c88dd7c623aaf06d4d7392e562fd7c27b071
4
+ data.tar.gz: 795bb3aade08b62ba7689ce6d82314d98c8096f3
5
5
  SHA512:
6
- metadata.gz: f80c193c2e96e39251a3a16fdd8ad17cb953d2ffa4e7366c915c921fdf655b999abffee7a193700a9fc7deb7449722fa1174f9fdbf74cce11ae2f474b307f6d6
7
- data.tar.gz: 02c2e6f2bc6d679de2fe53316ae521bb07d358d860e9aa9288838f269bf37f582c967ef8a95255e1c72811de0eb9e32420b20fb7bc84139f3eb3e8c91d937969
6
+ metadata.gz: 4dc8314982599cc986deb772700538e2119ea0151f0cdb7479d1e8ff96426044a2cb2d842fb70a216b3f9ee6bfe9addb94ea16ea55127cee2c8a7b7eaca9c78c
7
+ data.tar.gz: 74fba29d0153dfcc9ab969f7cde738c63a9ac353b12123d7d1a5884a471efd682eb7ac27b6cc74c19bb09d7245134b8cbd36d54b9053a0cb8a307209400fc3a9
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /*.gem
11
+ **/.DS_Store
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "access_watch/rails_version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "access-watch-rails"
8
+ spec.version = AccessWatch::RAILS_VERSION
9
+ spec.authors = ["Alexis Bernard"]
10
+ spec.email = ["alexis@bernard.io"]
11
+
12
+ spec.summary = "A Rails library to log and analyse HTTP requests using the Access Watch cloud service."
13
+ spec.description = "A Rails library to log and analyse HTTP requests using the Access Watch cloud service."
14
+ spec.homepage = "https://access.watch/"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
21
+ else
22
+ raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
23
+ end
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
26
+ f.match(%r{^(test|spec|features)/})
27
+ end
28
+ spec.bindir = "exe"
29
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
+ spec.require_paths = ["lib"]
31
+
32
+ spec.add_development_dependency "bundler", "~> 1.13"
33
+ spec.add_development_dependency "rake", "~> 10.0"
34
+ spec.add_dependency "access-watch-ruby", ">= 0.0.1"
35
+ end
@@ -0,0 +1,57 @@
1
+ module AccessWatch
2
+ class Logger
3
+ attr_reader :client
4
+
5
+ def initialize(config)
6
+ @client = AccessWatch::Client.new(config)
7
+ @parameter_filter = ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters)
8
+ ActiveSupport::Notifications.subscribe("process_action.action_controller", &method(:after_http_request))
9
+ end
10
+
11
+ def after_http_request(name, start, finish, id, payload)
12
+ request = payload[:headers].instance_variable_get(:@req)
13
+ post_request(
14
+ time: start,
15
+ address: request.remote_ip,
16
+ host: request.host,
17
+ request: {
18
+ # TODO: Check if is SERVER_PROTOCOL comes from client browser
19
+ # "protocol": "HTTP/1.1",
20
+ method: payload[:method],
21
+ scheme: URI(request.original_url).scheme,
22
+ host: request.host,
23
+ port: request.port,
24
+ url: payload[:path],
25
+ headers: extract_headers(payload)
26
+ },
27
+ response: {status: payload[:status]},
28
+ )
29
+ end
30
+
31
+ #######################
32
+ ### Private methods ###
33
+ #######################
34
+
35
+ private
36
+
37
+ def post_request(data)
38
+ post_async("log".freeze, data)
39
+ end
40
+
41
+ def post_async(path, data)
42
+ Thread.new { client.post(path, data) }
43
+ end
44
+
45
+ def filter_sensitive_data(hash)
46
+ @parameter_filter ? @parameter_filter.filter(hash) : hash
47
+ end
48
+
49
+ def filter_environment_variables(hash)
50
+ hash.clone.keep_if { |key,value| key == key.upcase }
51
+ end
52
+
53
+ def extract_headers(payload)
54
+ filter_sensitive_data(filter_environment_variables(payload[:headers].env))
55
+ end
56
+ end
57
+ end
@@ -1,5 +1,6 @@
1
1
  module AccessWatch
2
- RAILS_VERSION = "0.0.1"
3
2
  end
4
3
 
5
- require "access_watch/logger"
4
+ require "access_watch"
5
+ require "access_watch/logger"§
6
+ require "access_watch/rails_version"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: access-watch-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexis Bernard
@@ -60,6 +60,9 @@ executables: []
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
+ - ".gitignore"
64
+ - access-watch-rails.gemspec
65
+ - lib/access_watch/logger.rb
63
66
  - lib/access_watch_rails.rb
64
67
  homepage: https://access.watch/
65
68
  licenses: