ridc 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,28 @@
1
+ require 'ostruct'
2
+
3
+ module Ridc
4
+ class << self
5
+ attr_writer :configuration
6
+
7
+ def configuration
8
+ @configuration ||= OpenStruct.new
9
+ end
10
+
11
+ def configure
12
+ yield(configuration)
13
+ end
14
+
15
+ def system_configured?
16
+ config = Ridc.configuration
17
+ [
18
+ config.customer_key,
19
+ config.secret_key,
20
+ config.host,
21
+ config.port,
22
+ config.application_id
23
+
24
+ ].select { |a| a.nil? }.length == 0
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ require 'rails/generators'
2
+
3
+
4
+ module Ridc
5
+
6
+ class ConfigurationGenerator < Rails::Generators::Base
7
+ argument :application_token
8
+
9
+ desc "This generator creates Rails Intelligence system initializer"
10
+ def create_configuration_file
11
+ initializer "rails_intelligence.rb" do
12
+ <<-EOS
13
+ Ridc.configure do |config|
14
+ config.customer_key = "customerKey1"
15
+ config.secret_key = "secret1"
16
+ config.host = "railsintelligence.com"
17
+ config.port = "8080"
18
+ config.application_id = "appplication1"
19
+ end
20
+ EOS
21
+ end
22
+ end
23
+ end
24
+ end
25
+
@@ -0,0 +1,21 @@
1
+ require 'rails'
2
+
3
+ class Ridc::LogReporter
4
+
5
+ attr_reader :original
6
+
7
+ def initialize(original_logger)
8
+ @original = original_logger
9
+ end
10
+
11
+ def method_missing(m, *args, &block)
12
+ if %w{debug info warn error fatal}.include?(m.to_s)
13
+ event = {
14
+ "logger_severity" => m.to_s,
15
+ "logger_message" => args.join(' ')
16
+ }
17
+ Ridc.sender.load(event) if event["logger_message"].to_s.length > 0
18
+ end
19
+ @original.send(m, *args, &block)
20
+ end
21
+ end
data/lib/ridc.rb CHANGED
@@ -1,24 +1,28 @@
1
1
  require 'rails'
2
2
  require 'sender'
3
3
  require 'exception_reporter'
4
+ require 'log_reporter'
5
+ require 'configuration'
6
+ require 'configuration_generator'
4
7
 
5
8
  class Ridc::MainRailtie < Rails::Railtie
6
9
 
7
10
  initializer "rails_intelligence.configure_rails_initialization" do |app|
11
+
12
+
13
+ Rails.logger = Ridc::LogReporter.new(Rails.logger)
14
+
8
15
  ActiveSupport::Notifications.subscribe do |*args|
9
16
 
10
17
  event_payload = ActiveSupport::Notifications::Event.new *args
11
- event_session_id = Thread.current["session_id"]
12
- event_session_content = Thread.current["session_content"]
18
+
13
19
 
14
20
  event = {
15
21
  :event => event_payload,
16
- :event_session_id => event_session_id,
17
- :event_session_content => event_session_content
18
22
  }
19
23
  Ridc.sender.load(event)
20
24
  # for debugging use:
21
- # Rails.logger.debug(event.to_json)
25
+ # Rails.logger.original.debug(event.to_json)
22
26
  end
23
27
 
24
28
  ActiveSupport.on_load(:action_controller) do
@@ -29,12 +33,10 @@ class Ridc::MainRailtie < Rails::Railtie
29
33
  # for Rails >= 3.2.0
30
34
  "ActionDispatch::DebugExceptions"
31
35
  else
32
- # for Rails < 3.2.0
36
+ # for Rails < 3.2.0
33
37
  "ActionDispatch::ShowExceptions"
34
38
  end
35
- app.config.middleware.insert_after middleware_name, "Ridc::ExceptionReporter"
36
- Rails.logger.warn("yeah!")
37
- Rails.logger.warn(app.config.middleware)
39
+ app.config.middleware.insert_after middleware_name, "Ridc::ExceptionReporter"
38
40
  end
39
41
 
40
42
  module SessionToRailsIntelligenceFilter
data/lib/sender.rb CHANGED
@@ -4,24 +4,32 @@ require 'base64'
4
4
  require 'openssl'
5
5
  require 'digest/sha1'
6
6
  require 'socket'
7
+ require 'configuration'
7
8
 
8
9
  module Ridc
9
10
 
10
11
  SEND_LOOP_DELAY_S = 1
11
12
 
12
13
  def Ridc.sender
13
- Thread.current[:sender_worker] ||= Sender.new("customerKey1" , "secret1", "railsintelligence.com", 8080)
14
+
15
+ Thread.current[:sender_worker] ||= Sender.new(
16
+ Ridc.configuration.customer_key ,
17
+ Ridc.configuration.secret_key,
18
+ Ridc.configuration.host,
19
+ Ridc.configuration.port,
20
+ Ridc.configuration.application_id)
14
21
  end
15
22
 
16
23
  class Sender
17
24
 
18
- def initialize(customer_key, secret_key, host, port)
25
+ def initialize(customer_key, secret_key, host, port, application_id)
19
26
  @queue = Queue.new
20
27
  @worker_mutex = Mutex.new
28
+ @application_id = application_id
21
29
  @customer_key = customer_key
22
30
  @secret_key = secret_key
23
31
  @host = host
24
- @port = port
32
+ @port = port.to_s.to_i
25
33
  @my_public_ip = my_first_public_ipv4
26
34
  @my_private_ip = my_first_private_ipv4
27
35
  @my_hostname = Socket.gethostname
@@ -31,9 +39,20 @@ module Ridc
31
39
  end
32
40
 
33
41
  def load(event)
34
- Rails.logger.info("loaded")
42
+ event[:event_session_id] = Thread.current["session_id"]
43
+ event[:event_session_content] = Thread.current["session_content"]
44
+ event[:time] = Time.now.utc.to_i
45
+ body = {
46
+ "customerKey" => @customer_key,
47
+ "signature" => sign_with_secret_key(event.to_json),
48
+ "event" => event,
49
+ "hostname" => @my_hostname,
50
+ "public_ip_v4" => @my_public_ip,
51
+ "private_ip_v4" => @my_private_ip,
52
+ "environment" => @environment
53
+ }
35
54
 
36
- @queue << event
55
+ @queue << body
37
56
  @worker_mutex.synchronize do
38
57
  if @sender_started
39
58
  check_sender_thread
@@ -54,33 +73,22 @@ module Ridc
54
73
 
55
74
  def send_all_events
56
75
  loop do
57
- event = @queue.pop(true)
58
-
59
- unless event.nil?
60
- send(event)
76
+ body = @queue.pop(true)
77
+ unless body.nil?
78
+ send_request(body)
61
79
  else
62
80
  sleep(SEND_LOOP_DELAY_S)
63
81
  end
64
82
  end
65
83
  end
66
84
 
67
- def send(event)
68
- req = Net::HTTP::Post.new("/events", initheader = {'Content-Type' => 'application/json'})
69
-
70
- Rails.logger.info("sending")
71
- body = {
72
- "customerKey" => @customer_key,
73
- "signature" => sign_with_secret_key(event.to_json),
74
- "event" => event,
75
- "hostname" => @my_hostname,
76
- "public_ip_v4" => @my_public_ip,
77
- "private_ip_v4" => @my_private_ip,
78
- "environment" => @environment
79
- }.to_json
80
-
81
- req.body = body
85
+ def send_request(body)
86
+ req = Net::HTTP::Post.new("/events", initheader = {'Content-Type' => 'application/json'})
87
+ req.body = body.to_json
82
88
  response = Net::HTTP.new(@host, @port).start { |http| http.request(req) }
83
89
  return response
90
+ rescue Exception => e
91
+ Rails.logger.original.error(e)
84
92
  end
85
93
 
86
94
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ridc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -23,6 +23,9 @@ files:
23
23
  - lib/ridc.rb
24
24
  - lib/sender.rb
25
25
  - lib/exception_reporter.rb
26
+ - lib/log_reporter.rb
27
+ - lib/configuration.rb
28
+ - lib/configuration_generator.rb
26
29
  homepage: http://www.railsintelligence.com
27
30
  licenses:
28
31
  - MIT