ridc 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,6 +8,7 @@ class Ridc::ExceptionReporter
8
8
  def call(env)
9
9
  response = @app.call(env)
10
10
  rescue Exception => exception
11
+ #Rails.logger.original.info("yeah!")
11
12
  report(exception, env)
12
13
  raise exception
13
14
  end
@@ -15,14 +16,17 @@ class Ridc::ExceptionReporter
15
16
  def report(exception, environment)
16
17
  event_session_id = Thread.current["session_id"]
17
18
  event_session_content = Thread.current["session_content"]
19
+
18
20
  event = {
19
- :exception => exception.clone, # TODO signature is failing because of this,
21
+ :event_type => "exception",
22
+ :exception_class => exception.class.to_s,
23
+ :description => exception.to_s,
24
+ :backtrace => Array(exception.backtrace).join("\n").to_s,
20
25
  :environment => useful_environment_parts(environment),
21
26
  :event_session_id => event_session_id,
22
27
  :event_session_content => event_session_content
23
28
  }
24
-
25
- Ridc.sender.load(event)
29
+ Ridc.sender.add_to_queue(event)
26
30
  end
27
31
  # thanks raygun4ruby guys!
28
32
  def useful_environment_parts(env)
data/lib/log_reporter.rb CHANGED
@@ -9,13 +9,26 @@ class Ridc::LogReporter
9
9
  end
10
10
 
11
11
  def method_missing(m, *args, &block)
12
- if %w{debug info warn error fatal}.include?(m.to_s)
12
+ severities = %w{debug info warn error fatal unknown}
13
+ if severities.include?(m.to_s)
13
14
  event = {
15
+ "event_type" => "log_entry",
14
16
  "logger_severity" => m.to_s,
15
- "logger_message" => args.join(' ')
17
+ "logger_message" => args.map{ |x| x.to_s }.join(' ')
16
18
  }
17
- Ridc.sender.load(event) if event["logger_message"].to_s.length > 0
19
+
20
+ Ridc.sender.add_to_queue(event) if event["logger_message"].to_s.length > 0
21
+ elsif m.to_s == "add"
22
+
23
+ event = {
24
+ "event_type" => "log_entry",
25
+ "logger_severity" => severities[args[0]],
26
+ "logger_message" => args.map{ |x| x.to_s }.join(' ')
27
+ }
28
+ Ridc.logger.info("Logging the log!")
29
+ Ridc.sender.add_to_queue(event) if event["logger_message"].to_s.length > 0
18
30
  end
19
- @original.send(m, *args, &block)
31
+ Ridc.logger.info(m)
32
+ @original.send(m, *args, &block) unless @original.nil? # for rails.version < 4
20
33
  end
21
34
  end
data/lib/ridc.rb CHANGED
@@ -5,22 +5,80 @@ require 'log_reporter'
5
5
  require 'configuration'
6
6
  require 'configuration_generator'
7
7
 
8
- class Ridc::MainRailtie < Rails::Railtie
9
8
 
9
+ #fix for JSON gem/activesupport bug. More info: http://stackoverflow.com/questions/683989/how-do-you-deal-with-the-conflict-between-activesupportjson-and-the-json-gem
10
+
11
+ if defined?(ActiveSupport::JSON)
12
+ [Object,Array, FalseClass, Float, Hash, Integer, NilClass, String, TrueClass].each do |klass|
13
+ klass.class_eval do
14
+
15
+ alias :to_json_raisintelligence_bup :to_json
16
+ def to_json(*args)
17
+ if self.respond_to?("to_ridc_json")
18
+ to_ridc_json(*args)
19
+ else
20
+ to_json_raisintelligence_bup(*args)
21
+ end
22
+ rescue Exception => ex
23
+ return '{ "error":' + %Q{"#{self.class.to_s} - #{ex.to_s}"} + '}'
24
+ end
25
+ end
26
+ end
27
+
28
+ Hash.class_eval do
29
+ def to_ridc_json(*args)
30
+ jsonstring = "{ "
31
+ self.each_pair do |key,value|
32
+ begin
33
+ jsonstring << %Q{"#{key}":} + value.to_json + ","
34
+ rescue Exception => e
35
+ jsonstring << %Q{"#{key}":} + e.to_s.to_json + ","
36
+ end
37
+ end
38
+ jsonstring.gsub!(/,$/, " }")
39
+ return jsonstring
40
+ end
41
+ end
42
+ end
43
+
44
+
45
+
46
+ class Ridc::MainRailtie < Rails::Railtie
10
47
  initializer "rails_intelligence.configure_rails_initialization" do |app|
11
-
12
48
 
13
- Rails.logger = Ridc::LogReporter.new(Rails.logger)
49
+ Rails.logger.info("RIDC: Wrapping the rails logger!")
50
+
51
+
52
+
53
+
54
+ if Rails.version.to_i < 4
55
+ Ridc.logger = Rails.logger
56
+ Rails.logger = Ridc::LogReporter.new(Rails.logger)
57
+ else
58
+ Ridc.logger = Logger.new("#{Rails.root}/log/rails_intelligence.log")
59
+ log_reporter = Ridc::LogReporter.new(nil)
60
+ # broadcast to ridcs log reporter
61
+ Rails.logger.extend(ActiveSupport::Logger.broadcast(log_reporter))
62
+ end
14
63
 
15
- ActiveSupport::Notifications.subscribe do |*args|
16
-
17
- event_payload = ActiveSupport::Notifications::Event.new *args
18
-
64
+ # Rails.logger.original.info("RIDC: Wrapped the rails logger!")
19
65
 
20
- event = {
21
- :event => event_payload,
22
- }
23
- Ridc.sender.load(event)
66
+ ActiveSupport::Notifications.subscribe do |name, start, finish, id, payload|
67
+ # |name, start, finish, id, payload|
68
+ #event_payload = ActiveSupport::Notifications::Event.new *args
69
+ #event_payload = ActiveSupport::Notifications::Event.new |name, start, finish, id, payload|
70
+ event = {
71
+ :event_type => "notification",
72
+ :event_payload => {
73
+ :name => name,
74
+ :start => start,
75
+ :finish => finish,
76
+ :id => id,
77
+ :specific => payload
78
+ }
79
+ }
80
+
81
+ Ridc.sender.add_to_queue(event)
24
82
  # for debugging use:
25
83
  # Rails.logger.original.debug(event.to_json)
26
84
  end
data/lib/sender.rb CHANGED
@@ -6,12 +6,20 @@ require 'digest/sha1'
6
6
  require 'socket'
7
7
  require 'configuration'
8
8
 
9
+
9
10
  module Ridc
10
11
 
11
12
  SEND_LOOP_DELAY_S = 1
13
+ def Ridc.logger
14
+ @@logger
15
+ end
16
+
17
+ def Ridc.logger=(logger)
18
+ @@logger = logger
19
+ end
12
20
 
13
21
  def Ridc.sender
14
-
22
+ # Rails.logger.original.info("RIDC: Getting the sender.")
15
23
  Thread.current[:sender_worker] ||= Sender.new(
16
24
  Ridc.configuration.customer_key ,
17
25
  Ridc.configuration.secret_key,
@@ -38,11 +46,12 @@ module Ridc
38
46
  @sender_thread = nil
39
47
  end
40
48
 
41
- def load(event)
49
+ def add_to_queue(event)
50
+ # Rails.logger.original.debug("RIDC: Loading event.")
42
51
  event[:event_session_id] = Thread.current["session_id"]
43
52
  event[:event_session_content] = Thread.current["session_content"]
44
53
  event[:time] = Time.now.utc.to_i
45
- body = {
54
+ body = {
46
55
  "customerKey" => @customer_key,
47
56
  "signature" => sign_with_secret_key(event.to_json),
48
57
  "event" => event,
@@ -67,11 +76,13 @@ module Ridc
67
76
  end
68
77
 
69
78
  def start_sender_thread
79
+ # Rails.logger.original.info("RIDC: Starting sender thread.")
70
80
  @sender_thread = Thread.new { send_all_events() }
71
81
  @sender_started = true
72
82
  end
73
83
 
74
84
  def send_all_events
85
+ # Rails.logger.original.info("RIDC: Sending all events")
75
86
  loop do
76
87
  begin
77
88
  if @queue.empty?
@@ -80,8 +91,6 @@ module Ridc
80
91
  body = @queue.pop(true)
81
92
  unless body.nil?
82
93
  send_request(body)
83
- else
84
- sleep(SEND_LOOP_DELAY_S)
85
94
  end
86
95
  end
87
96
  rescue Exception => e
@@ -91,8 +100,10 @@ module Ridc
91
100
  end
92
101
 
93
102
  def send_request(body)
103
+
94
104
  req = Net::HTTP::Post.new("/events", initheader = {'Content-Type' => 'application/json'})
95
105
  req.body = body.to_json
106
+ Ridc.logger.debug("RIDC: Sending event: " + req.body)
96
107
  response = Net::HTTP.new(@host, @port).start { |http| http.request(req) }
97
108
  return response
98
109
  rescue Exception => e
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.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,8 +11,40 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
  date: 2013-12-08 00:00:00.000000000 Z
14
- dependencies: []
15
- description: ''
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: oj
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: 2.4.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: 2.4.0
31
+ - !ruby/object:Gem::Dependency
32
+ name: multi_json
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: 1.8.2
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 1.8.2
47
+ description: Data collection for our wonderful new SaaS
16
48
  email:
17
49
  - senad.uka@gmail.com
18
50
  - edin.dazdarevic@gmail.com