netuitived 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/netuitived.rb CHANGED
@@ -6,6 +6,7 @@ require 'drb/drb'
6
6
  require 'logger'
7
7
  require 'netuitived/config_manager'
8
8
  require 'netuitived/netuitive_logger'
9
+ require 'netuitived/error_logger'
9
10
  require 'netuitived/ingest_event'
10
11
  require 'netuitived/ingest_tag'
11
12
  require 'netuitived/ingest_metric'
@@ -13,39 +13,37 @@ module NetuitiveD
13
13
  end
14
14
 
15
15
  def send(uri, body)
16
- NetuitiveD::NetuitiveLogger.log.debug "post body: #{body}"
17
- req = Net::HTTP::Post.new(uri.to_s, 'Content-Type' => 'application/json')
18
- req.body = body
19
- NetuitiveD::NetuitiveLogger.log.debug 'starting post'
20
- port = if NetuitiveD::ConfigManager.port =~ /(.*)nil(.*)/
21
- nil
22
- else
23
- NetuitiveD::ConfigManager.port.to_int
24
- end
25
- NetuitiveD::NetuitiveLogger.log.debug "port: #{port}"
26
- NetuitiveD::NetuitiveLogger.log.debug "path: #{req.path}"
27
- NetuitiveD::NetuitiveLogger.log.debug "addr: #{NetuitiveD::ConfigManager.baseAddr}"
28
- response = Net::HTTP.start(NetuitiveD::ConfigManager.baseAddr.to_s, port, use_ssl: true, read_timeout: 30, open_timeout: 30) do |http|
29
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
30
- http.ssl_version = :SSLv3
31
- http.request req
16
+ NetuitiveD::ErrorLogger.guard('exception during send') do
17
+ NetuitiveD::NetuitiveLogger.log.debug "post body: #{body}"
18
+ req = Net::HTTP::Post.new(uri.to_s, 'Content-Type' => 'application/json')
19
+ req.body = body
20
+ NetuitiveD::NetuitiveLogger.log.debug 'starting post'
21
+ port = if NetuitiveD::ConfigManager.port =~ /(.*)nil(.*)/
22
+ nil
23
+ else
24
+ NetuitiveD::ConfigManager.port.to_int
25
+ end
26
+ NetuitiveD::NetuitiveLogger.log.debug "port: #{port}"
27
+ NetuitiveD::NetuitiveLogger.log.debug "path: #{req.path}"
28
+ NetuitiveD::NetuitiveLogger.log.debug "addr: #{NetuitiveD::ConfigManager.baseAddr}"
29
+ response = Net::HTTP.start(NetuitiveD::ConfigManager.baseAddr.to_s, port, use_ssl: true, read_timeout: 30, open_timeout: 30) do |http|
30
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
31
+ http.ssl_version = :SSLv3
32
+ http.request req
33
+ end
34
+ NetuitiveD::NetuitiveLogger.log.debug 'post finished'
35
+ if response.code.to_s != '202' && response.code.to_s != '200'
36
+ NetuitiveD::NetuitiveLogger.log.error "Response from submitting netuitive metrics to api
37
+ code: #{response.code}
38
+ message: #{response.message}
39
+ body: #{response.body}"
40
+ else
41
+ NetuitiveD::NetuitiveLogger.log.info "Response from submitting netuitive metrics to api
42
+ code: #{response.code}
43
+ message: #{response.message}
44
+ body: #{response.body}"
45
+ end
32
46
  end
33
- NetuitiveD::NetuitiveLogger.log.debug 'post finished'
34
- if response.code.to_s != '202' && response.code.to_s != '200'
35
- NetuitiveD::NetuitiveLogger.log.error "Response from submitting netuitive metrics to api
36
- code: #{response.code}
37
- message: #{response.message}
38
- body: #{response.body}"
39
- else
40
- NetuitiveD::NetuitiveLogger.log.info "Response from submitting netuitive metrics to api
41
- code: #{response.code}
42
- message: #{response.message}
43
- body: #{response.body}"
44
- end
45
- rescue => exception
46
- NetuitiveD::NetuitiveLogger.log.error 'error with http post: '
47
- NetuitiveD::NetuitiveLogger.log.error exception.message
48
- NetuitiveD::NetuitiveLogger.log.error exception.backtrace
49
47
  end
50
48
  end
51
49
  end
@@ -0,0 +1,20 @@
1
+ # Important! ruby rescue logic is expensive.
2
+ # This class is *intended* to be used as a catch all, because we don't want any errors to not be logged
3
+ # That *doesn't* mean we should be throwing exceptions rather than guarding against them
4
+ # From the benchmarks I've read it seems like rescues are free if no exception is thrown
5
+ module NetuitiveD
6
+ class ErrorLogger
7
+ class << self
8
+ def guard(message)
9
+ yield
10
+ rescue => e
11
+ NetuitiveD::NetuitiveLogger.log.error format_exception(e, message)
12
+ end
13
+
14
+ def format_exception(exception, *message)
15
+ message = '' unless defined? message || message.nil?
16
+ "#{message} \n\tException message: #{exception.message}\n\t Backtrace: #{exception.backtrace.join("\n\t")}"
17
+ end
18
+ end
19
+ end
20
+ end
@@ -4,37 +4,48 @@ module NetuitiveD
4
4
  @apiEmissary = apiEmissary
5
5
  end
6
6
 
7
+ def handle_events(events)
8
+ return unless events && !events.nil?
9
+ events.each { |event| handleEvent(event[:message], event[:timestamp], event[:title], event[:level], event[:source], event[:type], event[:tags]) }
10
+ end
11
+
12
+ def handle_exception_events(events)
13
+ return unless events && !events.nil?
14
+ events.each { |event| handleExceptionEvent(event[:exception], event[:klass], event[:tags]) }
15
+ end
16
+
7
17
  def handleEvent(message, timestamp, title, level, source, type, tags)
8
- NetuitiveD::NetuitiveLogger.log.debug "self: #{object_id}"
9
- NetuitiveD::NetuitiveLogger.log.debug "Thread: #{Thread.current.object_id}"
10
- NetuitiveD::NetuitiveLogger.log.debug "Received event: message:#{message}, timestamp:#{timestamp}, title:#{title}, level:#{level}, source:#{source}, type:#{type}, tags:#{tags}"
11
- event = NetuitiveD::IngestEvent.new(NetuitiveD::ConfigManager.elementName, message, timestamp, title, level, source, type, tags)
12
- events = [event]
13
- eventString = events.to_json
14
- @apiEmissary.sendEvents(eventString)
15
- rescue => e
16
- NetuitiveD::NetuitiveLogger.log.error "error in handling event: #{e.message}, backtrace: #{e.backtrace}"
18
+ NetuitiveD::ErrorLogger.guard('exception during handleEvent') do
19
+ NetuitiveD::NetuitiveLogger.log.debug "self: #{object_id}"
20
+ NetuitiveD::NetuitiveLogger.log.debug "Thread: #{Thread.current.object_id}"
21
+ NetuitiveD::NetuitiveLogger.log.debug "Received event: message:#{message}, timestamp:#{timestamp}, title:#{title}, level:#{level}, source:#{source}, type:#{type}, tags:#{tags}"
22
+ event = NetuitiveD::IngestEvent.new(NetuitiveD::ConfigManager.elementName, message, timestamp, title, level, source, type, tags)
23
+ events = [event]
24
+ eventString = events.to_json
25
+ @apiEmissary.sendEvents(eventString)
26
+ end
17
27
  end
18
28
 
19
29
  def handleExceptionEvent(exception, klass, tags = {})
20
- message = "Exception Message: #{exception[:message]}\n" if (defined? exception[:message]) && !exception[:message].nil?
21
- message ||= ''
22
- timestamp = Time.new
23
- title = 'Ruby Exception'
24
- level = 'Warning'
25
- source = 'Ruby Agent'
26
- type = 'INFO'
27
- ingest_tags = []
28
- tags [:Exception] = klass unless klass.nil?
29
- tags.each do |key, value|
30
- next if !(defined? value) || value.nil? || value == ''
31
- ingest_tags << NetuitiveD::IngestTag.new(key, value)
32
- message += "#{key}: #{value}\n"
30
+ NetuitiveD::ErrorLogger.guard('exception during handleExceptionEvent') do
31
+ message = "Exception Message: #{exception[:message]}\n" if (defined? exception[:message]) && !exception[:message].nil?
32
+ message ||= ''
33
+ timestamp = Time.new
34
+ title = 'Ruby Exception'
35
+ level = 'Warning'
36
+ source = 'Ruby Agent'
37
+ type = 'INFO'
38
+ ingest_tags = []
39
+ tags ||= {}
40
+ tags [:Exception] = klass unless klass.nil?
41
+ tags.each do |key, value|
42
+ next if !(defined? value) || value.nil? || value == ''
43
+ ingest_tags << NetuitiveD::IngestTag.new(key, value)
44
+ message += "#{key}: #{value}\n"
45
+ end
46
+ message += "Backtrace:\n\t#{exception[:backtrace]}" if (defined? exception[:backtrace]) && !exception[:backtrace].nil?
47
+ handleEvent(message, timestamp, title, level, source, type, ingest_tags)
33
48
  end
34
- message += "Backtrace:\n\t#{exception[:backtrace]}" if (defined? exception[:backtrace]) && !exception[:backtrace].nil?
35
- handleEvent(message, timestamp, title, level, source, type, ingest_tags)
36
- rescue => e
37
- NetuitiveD::NetuitiveLogger.log.error "error in exception event: #{e.message}, backtrace: #{e.backtrace}"
38
49
  end
39
50
  end
40
51
  end
@@ -12,32 +12,54 @@ module NetuitiveD
12
12
  @apiEmissary = apiEmissary
13
13
  end
14
14
 
15
+ def add_samples(samples)
16
+ return unless samples && !samples.nil?
17
+ samples.each { |sample| addSample(sample[:metric_id], sample[:val]) }
18
+ end
19
+
20
+ def add_counter_samples(samples)
21
+ return unless samples && !samples.nil?
22
+ samples.each { |sample| addCounterSample(sample[:metric_id], sample[:val]) }
23
+ end
24
+
25
+ def add_aggregate_metrics(samples)
26
+ return unless samples && !samples.nil?
27
+ samples.each { |sample| aggregateMetric(sample[:metric_id], sample[:val]) }
28
+ end
29
+
30
+ def add_aggregate_counter_metrics(samples)
31
+ return unless samples && !samples.nil?
32
+ samples.each { |sample| aggregateCounterMetric(sample[:metric_id], sample[:val]) }
33
+ end
34
+
15
35
  def sendMetrics
16
- elementString = nil
17
- addSample('netuitive.collection_interval', NetuitiveD::ConfigManager.interval)
18
- @metricMutex.synchronize do
19
- NetuitiveD::NetuitiveLogger.log.debug "self: #{object_id}"
20
- NetuitiveD::NetuitiveLogger.log.debug "Thread: #{Thread.current.object_id}"
21
- NetuitiveD::NetuitiveLogger.log.debug "metrics id: #{@metrics.object_id}"
22
- NetuitiveD::NetuitiveLogger.log.debug "samples id: #{@samples.object_id}"
23
- NetuitiveD::NetuitiveLogger.log.debug "aggregatedSamples id: #{@aggregatedSamples.object_id}"
24
- NetuitiveD::NetuitiveLogger.log.debug "metrics before send: #{@metrics.count}"
25
- NetuitiveD::NetuitiveLogger.log.debug "samples before send: #{@aggregatedSamples.count + @samples.count}"
36
+ NetuitiveD::ErrorLogger.guard('exception during sendMetrics') do
37
+ elementString = nil
38
+ addSample('netuitive.collection_interval', NetuitiveD::ConfigManager.interval)
39
+ @metricMutex.synchronize do
40
+ NetuitiveD::NetuitiveLogger.log.debug "self: #{object_id}"
41
+ NetuitiveD::NetuitiveLogger.log.debug "Thread: #{Thread.current.object_id}"
42
+ NetuitiveD::NetuitiveLogger.log.debug "metrics id: #{@metrics.object_id}"
43
+ NetuitiveD::NetuitiveLogger.log.debug "samples id: #{@samples.object_id}"
44
+ NetuitiveD::NetuitiveLogger.log.debug "aggregatedSamples id: #{@aggregatedSamples.object_id}"
45
+ NetuitiveD::NetuitiveLogger.log.debug "metrics before send: #{@metrics.count}"
46
+ NetuitiveD::NetuitiveLogger.log.debug "samples before send: #{@aggregatedSamples.count + @samples.count}"
26
47
 
27
- if @metrics.empty?
28
- NetuitiveD::NetuitiveLogger.log.info 'no netuitive metrics to report'
29
- return
30
- end
31
- aggregatedSamplesArray = @aggregatedSamples.values
32
- aggregatedSamplesArray.each do |sample|
33
- sample.timestamp = Time.new
48
+ if @metrics.empty?
49
+ NetuitiveD::NetuitiveLogger.log.info 'no netuitive metrics to report'
50
+ return
51
+ end
52
+ aggregatedSamplesArray = @aggregatedSamples.values
53
+ aggregatedSamplesArray.each do |sample|
54
+ sample.timestamp = Time.new
55
+ end
56
+ element = NetuitiveD::IngestElement.new(NetuitiveD::ConfigManager.elementName, NetuitiveD::ConfigManager.elementName, 'Ruby', nil, @metrics, @samples + aggregatedSamplesArray, nil, nil)
57
+ elements = [element]
58
+ elementString = elements.to_json
59
+ clearMetrics
34
60
  end
35
- element = NetuitiveD::IngestElement.new(NetuitiveD::ConfigManager.elementName, NetuitiveD::ConfigManager.elementName, 'Ruby', nil, @metrics, @samples + aggregatedSamplesArray, nil, nil)
36
- elements = [element]
37
- elementString = elements.to_json
38
- clearMetrics
61
+ @apiEmissary.sendElements(elementString)
39
62
  end
40
- @apiEmissary.sendElements(elementString)
41
63
  end
42
64
 
43
65
  def addSample(metricId, val)
@@ -49,32 +71,34 @@ module NetuitiveD
49
71
  end
50
72
 
51
73
  def addSampleWithType(metricId, val, type)
52
- @metricMutex.synchronize do
53
- NetuitiveD::NetuitiveLogger.log.debug 'start addSample method'
54
- NetuitiveD::NetuitiveLogger.log.debug "Thread: #{Thread.current.object_id}"
55
- NetuitiveD::NetuitiveLogger.log.debug "self: #{object_id}"
56
- NetuitiveD::NetuitiveLogger.log.debug "metrics id: #{@metrics.object_id}"
57
- NetuitiveD::NetuitiveLogger.log.debug "samples id: #{@samples.object_id}"
58
- NetuitiveD::NetuitiveLogger.log.debug "aggregatedSamples id: #{@aggregatedSamples.object_id}"
59
- NetuitiveD::NetuitiveLogger.log.debug "metrics before add: #{@metrics.count}"
60
- NetuitiveD::NetuitiveLogger.log.debug "samples before add: #{@aggregatedSamples.count + @samples.count}"
61
- if metricId.nil?
62
- NetuitiveD::NetuitiveLogger.log.info 'null metricId for addSample'
63
- return false
64
- end
65
- if val.nil?
66
- NetuitiveD::NetuitiveLogger.log.info "null value for addSample for metricId #{metricId}"
67
- return false
68
- end
69
- unless metricExists metricId
70
- NetuitiveD::NetuitiveLogger.log.info "adding new metric: #{metricId}"
71
- @metrics.push(NetuitiveD::IngestMetric.new(metricId, metricId, nil, type, nil, false))
74
+ NetuitiveD::ErrorLogger.guard('exception during addSampleWithType') do
75
+ @metricMutex.synchronize do
76
+ NetuitiveD::NetuitiveLogger.log.debug 'start addSample method'
77
+ NetuitiveD::NetuitiveLogger.log.debug "Thread: #{Thread.current.object_id}"
78
+ NetuitiveD::NetuitiveLogger.log.debug "self: #{object_id}"
79
+ NetuitiveD::NetuitiveLogger.log.debug "metrics id: #{@metrics.object_id}"
80
+ NetuitiveD::NetuitiveLogger.log.debug "samples id: #{@samples.object_id}"
81
+ NetuitiveD::NetuitiveLogger.log.debug "aggregatedSamples id: #{@aggregatedSamples.object_id}"
82
+ NetuitiveD::NetuitiveLogger.log.debug "metrics before add: #{@metrics.count}"
83
+ NetuitiveD::NetuitiveLogger.log.debug "samples before add: #{@aggregatedSamples.count + @samples.count}"
84
+ if metricId.nil?
85
+ NetuitiveD::NetuitiveLogger.log.info 'null metricId for addSample'
86
+ return false
87
+ end
88
+ if val.nil?
89
+ NetuitiveD::NetuitiveLogger.log.info "null value for addSample for metricId #{metricId}"
90
+ return false
91
+ end
92
+ unless metricExists metricId
93
+ NetuitiveD::NetuitiveLogger.log.info "adding new metric: #{metricId}"
94
+ @metrics.push(NetuitiveD::IngestMetric.new(metricId, metricId, nil, type, nil, false))
95
+ end
96
+ @samples.push(NetuitiveD::IngestSample.new(metricId, Time.new, val, nil, nil, nil, nil, nil))
97
+ NetuitiveD::NetuitiveLogger.log.info "netuitive sample added #{metricId} val: #{val}"
98
+ NetuitiveD::NetuitiveLogger.log.debug "metrics after add: #{@metrics.count}"
99
+ NetuitiveD::NetuitiveLogger.log.debug "samples after add: #{@aggregatedSamples.count + @samples.count}"
100
+ NetuitiveD::NetuitiveLogger.log.debug 'end addSample method'
72
101
  end
73
- @samples.push(NetuitiveD::IngestSample.new(metricId, Time.new, val, nil, nil, nil, nil, nil))
74
- NetuitiveD::NetuitiveLogger.log.info "netuitive sample added #{metricId} val: #{val}"
75
- NetuitiveD::NetuitiveLogger.log.debug "metrics after add: #{@metrics.count}"
76
- NetuitiveD::NetuitiveLogger.log.debug "samples after add: #{@aggregatedSamples.count + @samples.count}"
77
- NetuitiveD::NetuitiveLogger.log.debug 'end addSample method'
78
102
  end
79
103
  end
80
104
 
@@ -94,49 +118,53 @@ module NetuitiveD
94
118
  end
95
119
 
96
120
  def aggregateMetricWithType(metricId, val, type)
97
- @metricMutex.synchronize do
98
- NetuitiveD::NetuitiveLogger.log.debug 'start addSample method'
99
- NetuitiveD::NetuitiveLogger.log.debug "Thread: #{Thread.current.object_id}"
100
- NetuitiveD::NetuitiveLogger.log.debug "self: #{object_id}"
101
- NetuitiveD::NetuitiveLogger.log.debug "metrics id: #{@metrics.object_id}"
102
- NetuitiveD::NetuitiveLogger.log.debug "samples id: #{@samples.object_id}"
103
- NetuitiveD::NetuitiveLogger.log.debug "aggregatedSamples id: #{@aggregatedSamples.object_id}"
104
- NetuitiveD::NetuitiveLogger.log.debug "metrics before aggregate: #{@metrics.count}"
105
- NetuitiveD::NetuitiveLogger.log.debug "samples before aggregate: #{@aggregatedSamples.count + @samples.count}"
106
- if metricId.nil?
107
- NetuitiveD::NetuitiveLogger.log.info 'null metricId for aggregateMetric'
108
- return false
109
- end
110
- if val.nil?
111
- NetuitiveD::NetuitiveLogger.log.info "null value for aggregateMetric for metricId #{metricId}"
112
- return false
113
- end
114
- if !metricExists metricId
115
- NetuitiveD::NetuitiveLogger.log.info "adding new metric: #{metricId}"
116
- @metrics.push(NetuitiveD::IngestMetric.new(metricId, metricId, nil, type, nil, false))
117
- @aggregatedSamples[metricId.to_s] = NetuitiveD::IngestSample.new(metricId, Time.new, val, nil, nil, nil, nil, nil)
118
- else
119
- if @aggregatedSamples[metricId.to_s].nil?
120
- NetuitiveD::NetuitiveLogger.log.info "cannot aggregate metric #{metricId} that already has samples for this interval"
121
+ NetuitiveD::ErrorLogger.guard('exception during aggregateMetricWithType') do
122
+ @metricMutex.synchronize do
123
+ NetuitiveD::NetuitiveLogger.log.debug 'start addSample method'
124
+ NetuitiveD::NetuitiveLogger.log.debug "Thread: #{Thread.current.object_id}"
125
+ NetuitiveD::NetuitiveLogger.log.debug "self: #{object_id}"
126
+ NetuitiveD::NetuitiveLogger.log.debug "metrics id: #{@metrics.object_id}"
127
+ NetuitiveD::NetuitiveLogger.log.debug "samples id: #{@samples.object_id}"
128
+ NetuitiveD::NetuitiveLogger.log.debug "aggregatedSamples id: #{@aggregatedSamples.object_id}"
129
+ NetuitiveD::NetuitiveLogger.log.debug "metrics before aggregate: #{@metrics.count}"
130
+ NetuitiveD::NetuitiveLogger.log.debug "samples before aggregate: #{@aggregatedSamples.count + @samples.count}"
131
+ if metricId.nil?
132
+ NetuitiveD::NetuitiveLogger.log.info 'null metricId for aggregateMetric'
121
133
  return false
122
134
  end
123
- previousVal = @aggregatedSamples[metricId.to_s].val
124
- @aggregatedSamples[metricId.to_s].val += val
125
- NetuitiveD::NetuitiveLogger.log.info "netuitive sample aggregated #{metricId} old val: #{previousVal} new val: #{@aggregatedSamples[metricId.to_s].val}"
135
+ if val.nil?
136
+ NetuitiveD::NetuitiveLogger.log.info "null value for aggregateMetric for metricId #{metricId}"
137
+ return false
138
+ end
139
+ if !metricExists metricId
140
+ NetuitiveD::NetuitiveLogger.log.info "adding new metric: #{metricId}"
141
+ @metrics.push(NetuitiveD::IngestMetric.new(metricId, metricId, nil, type, nil, false))
142
+ @aggregatedSamples[metricId.to_s] = NetuitiveD::IngestSample.new(metricId, Time.new, val, nil, nil, nil, nil, nil)
143
+ else
144
+ if @aggregatedSamples[metricId.to_s].nil?
145
+ NetuitiveD::NetuitiveLogger.log.info "cannot aggregate metric #{metricId} that already has samples for this interval"
146
+ return false
147
+ end
148
+ previousVal = @aggregatedSamples[metricId.to_s].val
149
+ @aggregatedSamples[metricId.to_s].val += val
150
+ NetuitiveD::NetuitiveLogger.log.info "netuitive sample aggregated #{metricId} old val: #{previousVal} new val: #{@aggregatedSamples[metricId.to_s].val}"
151
+ end
152
+ NetuitiveD::NetuitiveLogger.log.debug "metrics after aggregate: #{@metrics.count}"
153
+ NetuitiveD::NetuitiveLogger.log.debug "samples after aggregate: #{@aggregatedSamples.count + @samples.count}"
154
+ NetuitiveD::NetuitiveLogger.log.debug 'end addSample method'
126
155
  end
127
- NetuitiveD::NetuitiveLogger.log.debug "metrics after aggregate: #{@metrics.count}"
128
- NetuitiveD::NetuitiveLogger.log.debug "samples after aggregate: #{@aggregatedSamples.count + @samples.count}"
129
- NetuitiveD::NetuitiveLogger.log.debug 'end addSample method'
130
156
  end
131
157
  end
132
158
 
133
159
  def clearMetrics
134
- NetuitiveD::NetuitiveLogger.log.debug 'start clearMetrics method'
135
- @metrics = []
136
- @samples = []
137
- @aggregatedSamples = {}
138
- NetuitiveD::NetuitiveLogger.log.info 'netuitive metrics cleared'
139
- NetuitiveD::NetuitiveLogger.log.debug 'end clearMetrics method'
160
+ NetuitiveD::ErrorLogger.guard('exception during clearMetrics') do
161
+ NetuitiveD::NetuitiveLogger.log.debug 'start clearMetrics method'
162
+ @metrics = []
163
+ @samples = []
164
+ @aggregatedSamples = {}
165
+ NetuitiveD::NetuitiveLogger.log.info 'netuitive metrics cleared'
166
+ NetuitiveD::NetuitiveLogger.log.debug 'end clearMetrics method'
167
+ end
140
168
  end
141
169
  end
142
170
  end
@@ -13,6 +13,30 @@ module NetuitiveD
13
13
  @metricAggregator.addSample(metricId, val)
14
14
  end
15
15
 
16
+ def add_samples(samples)
17
+ @metricAggregator.add_samples(samples)
18
+ end
19
+
20
+ def add_counter_samples(samples)
21
+ @metricAggregator.add_counter_samples(samples)
22
+ end
23
+
24
+ def add_aggregate_metrics(samples)
25
+ @metricAggregator.add_aggregate_metrics(samples)
26
+ end
27
+
28
+ def add_aggregate_counter_metrics(samples)
29
+ @metricAggregator.add_aggregate_counter_metrics(samples)
30
+ end
31
+
32
+ def add_events(events)
33
+ @eventHandler.handle_events(events)
34
+ end
35
+
36
+ def add_exception_events(events)
37
+ @eventHandler.handle_exception_events(events)
38
+ end
39
+
16
40
  def addCounterSample(metricId, val)
17
41
  @metricAggregator.addCounterSample(metricId, val)
18
42
  end
@@ -6,9 +6,11 @@ module NetuitiveD
6
6
  NetuitiveD::NetuitiveLogger.log.debug "scheduler sleeping for: #{NetuitiveD::ConfigManager.interval}"
7
7
  sleep(NetuitiveD::ConfigManager.interval)
8
8
  Thread.new do
9
- NetuitiveD::NetuitiveLogger.log.debug 'scheduler sending metrics'
10
- Netuitived.front_object.sendMetrics
11
- NetuitiveD::NetuitiveLogger.log.debug 'scheduler sent metrics'
9
+ NetuitiveD::ErrorLogger.guard('exception during schedule') do
10
+ NetuitiveD::NetuitiveLogger.log.debug 'scheduler sending metrics'
11
+ Netuitived.front_object.sendMetrics
12
+ NetuitiveD::NetuitiveLogger.log.debug 'scheduler sent metrics'
13
+ end
12
14
  end
13
15
  end
14
16
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netuitived
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-10-17 00:00:00.000000000 Z
12
+ date: 2016-10-21 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Collects metrics over a certain interval and then sends them to Netuitive
15
15
  email: jking@netuitive.com
@@ -31,6 +31,7 @@ files:
31
31
  - lib/netuitived/config_manager.rb
32
32
  - lib/netuitived/ingest_sample.rb
33
33
  - lib/netuitived/ingest_metric.rb
34
+ - lib/netuitived/error_logger.rb
34
35
  - lib/netuitived/event_handler.rb
35
36
  - config/agent.yml
36
37
  - ./LICENSE