informant-rails 1.1.0 → 2.0.1

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
- SHA1:
3
- metadata.gz: c1e2831661a181fd46873e1a67eea335e84ffab1
4
- data.tar.gz: 0e6f326c3373eb8716be5b09ec006dcc0a0fcce2
2
+ SHA256:
3
+ metadata.gz: 508ce7cb53f750ba6b422a41c966b1fbdd46b623dcb311c4410d80c9b3b95f2f
4
+ data.tar.gz: 28662decb01dd5ae5b943a0f099bf68eaf3bbbfd1b6cb31172eb7d1673238b24
5
5
  SHA512:
6
- metadata.gz: 0cabe2ffa1e527c286924329ae3c11740cbdeb9445a0698205c5c05157184cadff6c1c97d80b7ce6490790875f905b25f78550494b2a53974eda8946dbce9c59
7
- data.tar.gz: c4f0308b365db3ddded71bc6263a2d077038fc3c34ef843aff54d438746c8f36568b9a77963d30fc1d15e0c306c4af8d96d043b0d035a8643a4f1ab70f0c759e
6
+ metadata.gz: babd9a69b4121f59f3dae1bddc3933d33c083d2f86ad8cc95cd265b8dc7c13c795b8f6803c81764c91a0868357d27f11863bac12c9e83b55bbfbfbfb8f6f2010
7
+ data.tar.gz: ec774a339d41ba6c95f82bb37f78eb90280f4c238dcbf4b31f1a7b71abdc5c3ee05bbddeb888e99232cffdceb4a112df59de270c7963623deb130b4eb1765ed0
@@ -5,16 +5,21 @@ end
5
5
 
6
6
  module InformantRails
7
7
  autoload :Config, 'informant-rails/config'
8
- autoload :ConnectionTester, 'informant-rails/connection_tester'
8
+ autoload :Diagnostic, 'informant-rails/diagnostic'
9
9
  autoload :Client, 'informant-rails/client'
10
10
  autoload :FieldError, 'informant-rails/field_error'
11
11
  autoload :Middleware, 'informant-rails/middleware'
12
12
  autoload :Model, 'informant-rails/model'
13
- autoload :Request, 'informant-rails/request'
14
13
  autoload :ParameterFilter, 'informant-rails/parameter_filter'
15
14
  autoload :RequestTracking, 'informant-rails/request_tracking'
16
15
  autoload :ValidationTracking, 'informant-rails/validation_tracking'
17
16
  autoload :VERSION, 'informant-rails/version'
17
+
18
+ module Event
19
+ autoload :Base, 'informant-rails/event/base'
20
+ autoload :ClientInfo, 'informant-rails/event/client_info'
21
+ autoload :FormSubmission, 'informant-rails/event/form_submission'
22
+ end
18
23
  end
19
24
 
20
25
  require 'informant-rails/railtie'
@@ -3,8 +3,12 @@ require 'net/http'
3
3
  module InformantRails
4
4
  class Client
5
5
 
6
+ def self.supported_request_methods
7
+ @supported_request_methods ||= %w(POST PATCH PUT DELETE)
8
+ end
9
+
6
10
  def self.record(env)
7
- new_request.request_url = env['HTTP_REFERER'] unless env['REQUEST_METHOD'] == 'GET'
11
+ new_request if supported_request_methods.include?(env['REQUEST_METHOD'])
8
12
  end
9
13
 
10
14
  def self.record_action(controller_name, action)
@@ -35,31 +39,24 @@ module InformantRails
35
39
  Thread.current[:informant_request] = nil
36
40
  end
37
41
 
38
- def self.transmit(completed_request)
39
- Net::HTTP.start(api_endpoint.host, api_endpoint.port, use_ssl: api_endpoint.scheme == 'https') do |http|
40
- http.request(net_http_post_request(completed_request))
42
+ def self.transmit(event)
43
+ Net::HTTP.start(*event.net_http_start_arguments) do |http|
44
+ http.request(event.post_request)
41
45
  end
42
46
  end
43
47
 
44
- private
45
-
46
- def self.net_http_post_request(completed_request)
47
- Net::HTTP::Post.new(api_endpoint, {
48
- "Authorization" => ActionController::HttpAuthentication::Token.encode_credentials(Config.api_token),
49
- "Content-Type" => "application/json"
50
- }).tap { |r| r.body = { payload: completed_request }.to_json }
48
+ def self.log_client_info
49
+ transmit(InformantRails::Event::ClientInfo.new)
51
50
  end
52
51
 
52
+ private
53
+
53
54
  def self.include_model?(model)
54
55
  !Config.exclude_models.include?(model.class.to_s)
55
56
  end
56
57
 
57
58
  def self.new_request
58
- Thread.current[:informant_request] = Request.new
59
- end
60
-
61
- def self.api_endpoint
62
- @api_endpoint ||= URI("#{Config.collector_host}/api/v1/form_submissions")
59
+ Thread.current[:informant_request] = Event::FormSubmission.new
63
60
  end
64
61
 
65
62
  end
@@ -1,12 +1,12 @@
1
1
  module InformantRails
2
- class ConnectionTester
2
+ class Diagnostic
3
3
  def self.run; new.run end
4
4
 
5
5
  def run
6
6
  if Config.api_token.blank?
7
7
  Rails.logger.info missing_api_token_message
8
8
  else
9
- Client.record('HTTP_REFERER' => '/connectivity/test')
9
+ Client.record('REQUEST_METHOD' => 'POST')
10
10
  Client.record_action('Connectivity', 'test')
11
11
  Client.request.instance_variable_set('@models', [{
12
12
  name: 'TestClass',
@@ -14,7 +14,7 @@ module InformantRails
14
14
  }])
15
15
  response = Client.transmit(Client.request)
16
16
 
17
- if response.success?
17
+ if response.code == '204'
18
18
  Rails.logger.info success_message
19
19
  else
20
20
  Rails.logger.info bad_response_message(response.body)
@@ -0,0 +1,25 @@
1
+ module InformantRails::Event
2
+ class Base
3
+ def self.endpoint
4
+ raise 'Must implement'
5
+ end
6
+ def endpoint; self.class.endpoint end
7
+
8
+ def self.authorization_header_value
9
+ @authorization_header_value ||= ActionController::HttpAuthentication::Token.encode_credentials(InformantRails::Config.api_token)
10
+ end
11
+ def authorization_header_value; self.class.authorization_header_value end
12
+
13
+ def post_request
14
+ Net::HTTP::Post.new(endpoint, {
15
+ "Authorization" => authorization_header_value,
16
+ "Content-Type" => "application/json"
17
+ }).tap { |r| r.body = to_json }
18
+ end
19
+
20
+ def self.net_http_start_arguments
21
+ @net_http_start_arguments ||= [endpoint.host, endpoint.port, use_ssl: endpoint.scheme == 'https']
22
+ end
23
+ def net_http_start_arguments; self.class.net_http_start_arguments end
24
+ end
25
+ end
@@ -0,0 +1,16 @@
1
+ module InformantRails::Event
2
+ class ClientInfo < Base
3
+ def as_json(*args)
4
+ {
5
+ agent_identifier: InformantRails::Config.client_identifier,
6
+ framework_version: "rails-#{Rails.version}",
7
+ runtime_version: "ruby-#{RUBY_VERSION}",
8
+ mongoid_version: defined?(Mongoid) ? Mongoid::VERSION : nil
9
+ }
10
+ end
11
+
12
+ def self.endpoint
13
+ @endpoint ||= URI("#{InformantRails::Config.collector_host}/v2/client-info")
14
+ end
15
+ end
16
+ end
@@ -1,5 +1,5 @@
1
- module InformantRails
2
- class Request
1
+ module InformantRails::Event
2
+ class FormSubmission < Base
3
3
  attr_accessor :request_url, :filename, :action
4
4
 
5
5
  def process_model(model)
@@ -14,15 +14,15 @@ module InformantRails
14
14
 
15
15
  def as_json(*args)
16
16
  {
17
- models: models.map(&:as_json),
18
- request_url: request_url,
19
- filename: filename,
20
- action: action,
21
- client: InformantRails::Config.client_identifier,
22
- rails_version: rails_version
17
+ name: [filename, action].compact.join('#'),
18
+ models: models.map(&:as_json)
23
19
  }
24
20
  end
25
21
 
22
+ def self.endpoint
23
+ @endpoint ||= URI("#{InformantRails::Config.collector_host}/v2/form-submissions")
24
+ end
25
+
26
26
  protected
27
27
 
28
28
  def rails_version
@@ -3,22 +3,27 @@ module InformantRails
3
3
  initializer 'informant' do |config|
4
4
  Config.api_token ||= ENV['INFORMANT_API_KEY']
5
5
 
6
- if Config.enabled?
7
- config.middleware.use InformantRails::Middleware
6
+ begin
7
+ if Config.enabled?
8
+ InformantRails::Client.log_client_info
9
+ InformantRails::Config.filter_parameters = Rails.configuration.filter_parameters
8
10
 
9
- InformantRails::Config.filter_parameters = Rails.configuration.filter_parameters
11
+ config.middleware.use InformantRails::Middleware
10
12
 
11
- ActiveSupport.on_load(:action_controller) do
12
- include InformantRails::RequestTracking
13
- end
13
+ ActiveSupport.on_load(:action_controller) do
14
+ include InformantRails::RequestTracking
15
+ end
14
16
 
15
- ActiveSupport.on_load(:active_record) do
16
- include InformantRails::ValidationTracking
17
- end
17
+ ActiveSupport.on_load(:active_record) do
18
+ include InformantRails::ValidationTracking
19
+ end
18
20
 
19
- ActiveSupport.on_load(:mongoid) do
20
- include InformantRails::ValidationTracking
21
+ ActiveSupport.on_load(:mongoid) do
22
+ include InformantRails::ValidationTracking
23
+ end
21
24
  end
25
+ rescue
26
+ puts "Unable to bootstrap informant."
22
27
  end
23
28
  end
24
29
  end
@@ -1,3 +1,3 @@
1
1
  module InformantRails
2
- VERSION = '1.1.0'
2
+ VERSION = '2.0.1'
3
3
  end
@@ -0,0 +1,9 @@
1
+ namespace :informant do
2
+
3
+ desc "Verify connectivity from your app to Informant"
4
+ task :diagnostic => :environment do
5
+ Rails.logger = Logger.new(STDOUT)
6
+ InformantRails::Diagnostic.run
7
+ end
8
+
9
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: informant-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Informant, LLC
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-23 00:00:00.000000000 Z
11
+ date: 2019-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 3.0.0
19
+ version: 3.2.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 7.0.0
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: 3.0.0
29
+ version: 3.2.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 7.0.0
27
33
  description: The Informant tracks what users do wrong in your forms so you can make
28
34
  them better.
29
35
  email:
@@ -38,17 +44,19 @@ files:
38
44
  - lib/informant-rails.rb
39
45
  - lib/informant-rails/client.rb
40
46
  - lib/informant-rails/config.rb
41
- - lib/informant-rails/connection_tester.rb
47
+ - lib/informant-rails/diagnostic.rb
48
+ - lib/informant-rails/event/base.rb
49
+ - lib/informant-rails/event/client_info.rb
50
+ - lib/informant-rails/event/form_submission.rb
42
51
  - lib/informant-rails/field_error.rb
43
52
  - lib/informant-rails/middleware.rb
44
53
  - lib/informant-rails/model.rb
45
54
  - lib/informant-rails/parameter_filter.rb
46
55
  - lib/informant-rails/railtie.rb
47
- - lib/informant-rails/request.rb
48
56
  - lib/informant-rails/request_tracking.rb
49
57
  - lib/informant-rails/validation_tracking.rb
50
58
  - lib/informant-rails/version.rb
51
- - lib/tasks/test_connection.rake
59
+ - lib/tasks/diagnostic.rake
52
60
  homepage: https://www.informantapp.com
53
61
  licenses:
54
62
  - MIT
@@ -69,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
77
  version: '0'
70
78
  requirements: []
71
79
  rubyforge_project:
72
- rubygems_version: 2.6.8
80
+ rubygems_version: 2.7.8
73
81
  signing_key:
74
82
  specification_version: 4
75
83
  summary: The Informant tracks server-side validation errors and gives you metrics
@@ -1,8 +0,0 @@
1
- namespace :informant do
2
-
3
- desc "Sends a sample request from your server to Informant"
4
- task :test_connection => :environment do
5
- InformantRails::ConnectionTester.run
6
- end
7
-
8
- end