access-watch-rails 0.0.1 → 0.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
  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: