netuitived 1.0.1 → 1.1.0

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