ridc 0.0.6 → 0.0.7

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.
@@ -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