netuitived 0.9.3 → 0.9.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 056b8a4954f8939a44f70aa80713dd1cff4b0649
4
- data.tar.gz: 61138cad5231443e3946b7300da0399e3e189350
3
+ metadata.gz: 271aaf503bc348eb7535765a23b5eab9ea281c42
4
+ data.tar.gz: 027dfde32ce851a332d10551aabe18f8a9f8ac27
5
5
  SHA512:
6
- metadata.gz: 552f6551d9f13347adef3491fcb96dff51629bf3fd2f626c4d5a6173e063aeacb17bcd11804400d901f9acc7d8b53b7ef8cac2f20eb683a312d56bb8f166bab0
7
- data.tar.gz: 0e62a18b0075c13752a88ed89cc1ef8793ef938c951e7fedeb20905b2d108825166d78fb7b55b1a33c82ee114cee42ec5503ca686bfb9582f1c30ff493ece6b6
6
+ metadata.gz: 03268b422fd9e8a5f9df25efb5f60b2c764c3c6b4d4960e8db733b35c40cd28ec686949fb19d059866ab0963e861100cfa0632dc60b37e76f346c19a26bdd163
7
+ data.tar.gz: 84207609a064ae447dd14b6c3a3e40eb9503d6e1fcc1b2a60e4036c2d5d514407dfcce6b7101d0c19cd8e25faf56c952d2d15b0226dfd5ca746827d70f157924
data/bin/netuitived ADDED
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+ require 'yaml'
3
+ gem_root= File.expand_path("../..", __FILE__)
4
+ data=YAML.load_file "#{gem_root}/config/agent.yml"
5
+ if ARGV[0] == "start"
6
+ written = false
7
+ elementName=ENV["NETUITIVED_ELEMENT_NAME"]
8
+ if(elementName == nil or elementName == "")
9
+ elementName = data["elementName"]
10
+ if(elementName == "elementName" or elementName == "")
11
+ puts "please enter an element name: "
12
+ elementName = STDIN.gets.chomp
13
+ data["elementName"] = elementName
14
+ written = true
15
+ end
16
+ end
17
+ apiId=ENV["NETUITIVED_API_ID"]
18
+ if(apiId == nil or apiId == "")
19
+ apiId = data["apiId"]
20
+ if(apiId == "apiId" or apiId == "")
21
+ puts "please enter an api key: "
22
+ apiId = STDIN.gets.chomp
23
+ data["apiId"] = apiId
24
+ written = true
25
+ end
26
+ end
27
+ if written
28
+ File.open("#{gem_root}/config/agent.yml", 'w') {|f| f.write data.to_yaml }
29
+ end
30
+ require 'netuitived'
31
+ elsif ARGV[0] == "stop"
32
+ require 'drb/drb'
33
+ netuitivedAddr=data["netuitivedAddr"]
34
+ netuitivedPort=data["netuitivedPort"]
35
+ SERVER_URI="druby://#{netuitivedAddr}:#{netuitivedPort}"
36
+ DRb.start_service
37
+ DRbObject.new_with_uri(SERVER_URI).stopServer
38
+ else
39
+ puts "invalid option. options are: start, stop"
40
+ end
data/config/agent.yml CHANGED
@@ -1,9 +1,10 @@
1
- apiId: [apiId] #apiId for the datasources. found in the datasources section in the netuitive ui
2
- baseAddr: "api.app.netuitive.com" #where to send the data. in most cases use the default
3
- port: nil #in most cases this will be nil
4
- elementName: [elementName] #name of the element to assign metrics to in netuitive. if unsure, just use the name of your app
5
- debugLevel: error #options (in ascending order of debugness) are: error, info, debug
6
- netuitivedAddr: "localhost"
7
- netuitivedPort: 8875
8
- interval: 60
1
+ #all are configurable using environment variables
2
+ apiId: apiId #apiId for the datasources. found in the datasources section in the netuitive ui. environment variable: NETUITIVED_API_ID
3
+ baseAddr: "api.app.netuitive.com" #where to send the data. in most cases use the default. environment variable: NETUITIVED_BASE_ADDR
4
+ port: nil #in most cases this will be nil. environment variable: NETUITIVED_PORT
5
+ elementName: elementName #name of the element to assign metrics to in netuitive. if unsure, just use the name of your app. environment variable: NETUITIVED_ELEMENT_NAME
6
+ debugLevel: error #options (in ascending order of debugness) are: error, info, debug. environment variable: NETUITIVED_DEBUG_LEVEL
7
+ netuitivedAddr: "localhost" #environment variable: NETUITIVED_NETUITIVED_ADDR
8
+ netuitivedPort: 8875 #environment variable: NETUITIVED_NETUITIVED_PORT
9
+ interval: 60 #environment variable: NETUITIVED_INTERVAL
9
10
 
@@ -1,16 +1,13 @@
1
1
  require 'net/http'
2
2
  require 'json'
3
3
  require 'netuitive/netuitived_config_manager'
4
+ require 'netuitive/netuitived_logger'
4
5
  class APIEmissary
5
6
  def sendElements(elementString)
6
- if ConfigManager.isDebug?
7
- puts elementString
8
- end
7
+ NetuitiveLogger.log.debug elementString
9
8
  req = Net::HTTP::Post.new("/ingest/#{ConfigManager.apiId}", initheader = {'Content-Type' =>'application/json'})
10
9
  req.body = elementString
11
- if ConfigManager.isDebug?
12
- puts "starting post"
13
- end
10
+ NetuitiveLogger.log.debug "starting post"
14
11
  if ConfigManager.port =~ /(.*)nil(.*)/
15
12
  port = nil
16
13
  else
@@ -21,11 +18,14 @@ class APIEmissary
21
18
  http.ssl_version = :SSLv3
22
19
  http.request req
23
20
  end
24
- if ConfigManager.isDebug?
25
- puts "post finished"
26
- end
27
- if (response.code != "202" and ConfigManager.isError?) or (ConfigManager.isInfo?)
28
- puts "Response from submitting netuitive metrics to api
21
+ NetuitiveLogger.log.debug "post finished"
22
+ if (response.code != "202")
23
+ NetuitiveLogger.log.error "Response from submitting netuitive metrics to api
24
+ code: #{response.code}
25
+ message: #{response.message}
26
+ body: #{response.body}"
27
+ else
28
+ NetuitiveLogger.log.info "Response from submitting netuitive metrics to api
29
29
  code: #{response.code}
30
30
  message: #{response.message}
31
31
  body: #{response.body}"
@@ -3,6 +3,7 @@ require 'netuitive/ingest_metric'
3
3
  require 'netuitive/ingest_sample'
4
4
  require 'netuitive/ingest_element'
5
5
  require 'netuitive/netuitived_config_manager'
6
+ require 'netuitive/netuitived_logger'
6
7
 
7
8
  class MetricAggregator
8
9
 
@@ -17,20 +18,16 @@ class MetricAggregator
17
18
  def sendMetrics()
18
19
  elementString=nil
19
20
  @metricMutex.synchronize{
20
- if ConfigManager.isDebug?
21
- puts "self: #{self.object_id}"
22
- puts "Thread: #{Thread.current.object_id}"
23
- puts "metrics id: #{@metrics.object_id}"
24
- puts "samples id: #{@samples.object_id}"
25
- puts "aggregatedSamples id: #{@aggregatedSamples.object_id}"
26
- puts "metrics before send: #{@metrics.count}"
27
- puts "samples before send: #{@aggregatedSamples.count + @samples.count}"
28
- end
21
+ NetuitiveLogger.log.debug "self: #{self.object_id}"
22
+ NetuitiveLogger.log.debug "Thread: #{Thread.current.object_id}"
23
+ NetuitiveLogger.log.debug "metrics id: #{@metrics.object_id}"
24
+ NetuitiveLogger.log.debug "samples id: #{@samples.object_id}"
25
+ NetuitiveLogger.log.debug "aggregatedSamples id: #{@aggregatedSamples.object_id}"
26
+ NetuitiveLogger.log.debug "metrics before send: #{@metrics.count}"
27
+ NetuitiveLogger.log.debug "samples before send: #{@aggregatedSamples.count + @samples.count}"
29
28
 
30
29
  if @metrics.empty?
31
- if ConfigManager.isInfo?
32
- puts "no netuitive metrics to report"
33
- end
30
+ NetuitiveLogger.log.info "no netuitive metrics to report"
34
31
  return
35
32
  end
36
33
  aggregatedSamplesArray = @aggregatedSamples.values
@@ -47,31 +44,23 @@ class MetricAggregator
47
44
 
48
45
  def addSample(metricId, val)
49
46
  @metricMutex.synchronize{
50
- if ConfigManager.isDebug?
51
- puts "start addSample method"
52
- puts "Thread: #{Thread.current.object_id}"
53
- puts "self: #{self.object_id}"
54
- puts "metrics id: #{@metrics.object_id}"
55
- puts "samples id: #{@samples.object_id}"
56
- puts "aggregatedSamples id: #{@aggregatedSamples.object_id}"
57
- puts "metrics before add: #{@metrics.count}"
58
- puts "samples before add: #{@aggregatedSamples.count + @samples.count}"
59
- end
47
+ NetuitiveLogger.log.debug "start addSample method"
48
+ NetuitiveLogger.log.debug "Thread: #{Thread.current.object_id}"
49
+ NetuitiveLogger.log.debug "self: #{self.object_id}"
50
+ NetuitiveLogger.log.debug "metrics id: #{@metrics.object_id}"
51
+ NetuitiveLogger.log.debug "samples id: #{@samples.object_id}"
52
+ NetuitiveLogger.log.debug "aggregatedSamples id: #{@aggregatedSamples.object_id}"
53
+ NetuitiveLogger.log.debug "metrics before add: #{@metrics.count}"
54
+ NetuitiveLogger.log.debug "samples before add: #{@aggregatedSamples.count + @samples.count}"
60
55
  if not metricExists metricId
61
- if ConfigManager.isInfo?
62
- puts "adding new metric: #{metricId}"
63
- end
56
+ NetuitiveLogger.log.info "adding new metric: #{metricId}"
64
57
  @metrics.push(IngestMetric.new(metricId, metricId, nil, "custom", nil, false))
65
58
  end
66
59
  @samples.push(IngestSample.new(metricId, Time.new, val, nil, nil, nil, nil, nil))
67
- if ConfigManager.isInfo?
68
- puts "netuitive sample added #{metricId} val: #{val}"
69
- end
70
- if ConfigManager.isDebug?
71
- puts "metrics after add: #{@metrics.count}"
72
- puts "samples after add: #{@aggregatedSamples.count + @samples.count}"
73
- puts "end addSample method"
74
- end
60
+ NetuitiveLogger.log.info "netuitive sample added #{metricId} val: #{val}"
61
+ NetuitiveLogger.log.debug "metrics after add: #{@metrics.count}"
62
+ NetuitiveLogger.log.debug "samples after add: #{@aggregatedSamples.count + @samples.count}"
63
+ NetuitiveLogger.log.debug "end addSample method"
75
64
  }
76
65
  end
77
66
 
@@ -86,49 +75,35 @@ class MetricAggregator
86
75
 
87
76
  def aggregateMetric(metricId, val)
88
77
  @metricMutex.synchronize{
89
- if ConfigManager.isDebug?
90
- puts "start addSample method"
91
- puts "Thread: #{Thread.current.object_id}"
92
- puts "self: #{self.object_id}"
93
- puts "metrics id: #{@metrics.object_id}"
94
- puts "samples id: #{@samples.object_id}"
95
- puts "aggregatedSamples id: #{@aggregatedSamples.object_id}"
96
- puts "metrics before aggregate: #{@metrics.count}"
97
- puts "samples before aggregate: #{@aggregatedSamples.count + @samples.count}"
98
- end
78
+ NetuitiveLogger.log.debug "start addSample method"
79
+ NetuitiveLogger.log.debug "Thread: #{Thread.current.object_id}"
80
+ NetuitiveLogger.log.debug "self: #{self.object_id}"
81
+ NetuitiveLogger.log.debug "metrics id: #{@metrics.object_id}"
82
+ NetuitiveLogger.log.debug "samples id: #{@samples.object_id}"
83
+ NetuitiveLogger.log.debug "aggregatedSamples id: #{@aggregatedSamples.object_id}"
84
+ NetuitiveLogger.log.debug "metrics before aggregate: #{@metrics.count}"
85
+ NetuitiveLogger.log.debug "samples before aggregate: #{@aggregatedSamples.count + @samples.count}"
99
86
  if not metricExists metricId
100
- if ConfigManager.isInfo?
101
- puts "adding new metric: #{metricId}"
102
- end
87
+ NetuitiveLogger.log.info "adding new metric: #{metricId}"
103
88
  @metrics.push(IngestMetric.new(metricId, metricId, nil, "custom", nil, false))
104
89
  @aggregatedSamples["#{metricId}"]=IngestSample.new(metricId, Time.new, val, nil, nil, nil, nil, nil)
105
90
  else
106
91
  previousVal = @aggregatedSamples["#{metricId}"].val
107
92
  @aggregatedSamples["#{metricId}"].val+=val
108
- if ConfigManager.isInfo?
109
- puts "netuitive sample aggregated #{metricId} old val: #{previousVal} new val: #{@aggregatedSamples["#{metricId}"].val}"
110
- end
111
- end
112
- if ConfigManager.isDebug?
113
- puts "metrics after aggregate: #{@metrics.count}"
114
- puts "samples after aggregate: #{@aggregatedSamples.count + @samples.count}"
115
- puts "end addSample method"
93
+ NetuitiveLogger.log.info "netuitive sample aggregated #{metricId} old val: #{previousVal} new val: #{@aggregatedSamples["#{metricId}"].val}"
116
94
  end
95
+ NetuitiveLogger.log.debug "metrics after aggregate: #{@metrics.count}"
96
+ NetuitiveLogger.log.debug "samples after aggregate: #{@aggregatedSamples.count + @samples.count}"
97
+ NetuitiveLogger.log.debug "end addSample method"
117
98
  }
118
99
  end
119
100
 
120
101
  def clearMetrics
121
- if ConfigManager.isDebug?
122
- puts "start clearMetrics method"
123
- end
102
+ NetuitiveLogger.log.debug "start clearMetrics method"
124
103
  @metrics=Array.new
125
104
  @samples=Array.new
126
105
  @aggregatedSamples=Hash.new
127
- if ConfigManager.isInfo?
128
- puts "netuitive metrics cleared"
129
- end
130
- if ConfigManager.isDebug?
131
- puts "end clearMetrics method"
132
- end
106
+ NetuitiveLogger.log.info "netuitive metrics cleared"
107
+ NetuitiveLogger.log.debug "end clearMetrics method"
133
108
  end
134
109
  end
@@ -1,11 +1,9 @@
1
1
  require 'yaml'
2
+ require 'netuitive/netuitived_logger'
2
3
  class ConfigManager
3
4
 
4
5
  class << self
5
6
  def setup()
6
- @@error=0
7
- @@info=1
8
- @@debug=2
9
7
  readConfig()
10
8
  end
11
9
 
@@ -37,57 +35,58 @@ class ConfigManager
37
35
  @@interval
38
36
  end
39
37
 
40
- def isDebug?
41
- if @@debugLevel >= @@debug
42
- return true
43
- end
44
- return false
45
- end
46
-
47
- def isInfo?
48
- if @@debugLevel >= @@info
49
- return true
50
- end
51
- return false
52
- end
53
-
54
- def isError?
55
- if @@debugLevel >= @@error
56
- return true
57
- end
58
- return false
59
- end
60
-
61
38
  def readConfig()
62
39
  gem_root= File.expand_path("../../..", __FILE__)
63
40
  data=YAML.load_file "#{gem_root}/config/agent.yml"
64
- @@apiId=data["apiId"]
65
- @@baseAddr=data["baseAddr"]
66
- @@port=data["port"]
67
- @@elementName=data["elementName"]
68
- @@netuitivedAddr=data["netuitivedAddr"]
69
- @@netuitivedPort=data["netuitivedPort"]
70
- @@interval=data["interval"]
71
- puts "port: #{@@netuitivedPort}"
72
- puts "addr: #{@@netuitivedAddr}"
73
- debugLevelString=data["debugLevel"]
41
+ @@apiId=ENV["NETUITIVED_API_ID"]
42
+ if(@@apiId == nil or @@apiId == "")
43
+ @@apiId=data["apiId"]
44
+ end
45
+ @@baseAddr=ENV["NETUITIVED_BASE_ADDR"]
46
+ if(@@baseAddr == nil or @@baseAddr == "")
47
+ @@baseAddr=data["baseAddr"]
48
+ end
49
+ @@port=ENV["NETUITIVED_PORT"]
50
+ if(@@port == nil or @@port == "")
51
+ @@port=data["port"]
52
+ end
53
+ @@elementName=ENV["NETUITIVED_ELEMENT_NAME"]
54
+ if(@@elementName == nil or @@elementName == "")
55
+ @@elementName=data["elementName"]
56
+ end
57
+ @@netuitivedAddr=ENV["NETUITIVED_NETUITIVED_ADDR"]
58
+ if(@@netuitivedAddr == nil or @@netuitivedAddr == "")
59
+ @@netuitivedAddr=data["netuitivedAddr"]
60
+ end
61
+ @@netuitivedPort=ENV["NETUITIVED_NETUITIVED_PORT"]
62
+ if(@@netuitivedPort == nil or @@netuitivedPort == "")
63
+ @@netuitivedPort=data["netuitivedPort"]
64
+ end
65
+ @@interval=ENV["NETUITIVED_INTERVAL"]
66
+ if(@@interval == nil or @@interval == "")
67
+ @@interval=data["interval"]
68
+ end
69
+ debugLevelString=ENV["NETUITIVED_DEBUG_LEVEL"]
70
+ if(debugLevelString == nil or debugLevelString == "")
71
+ debugLevelString=data["debugLevel"]
72
+ end
73
+ NetuitiveLogger.log.info "port: #{@@netuitivedPort}"
74
+ NetuitiveLogger.log.info "addr: #{@@netuitivedAddr}"
74
75
  if debugLevelString == "error"
75
- @@debugLevel=@@error
76
+ NetuitiveLogger.log.level = Logger::ERROR
76
77
  elsif debugLevelString == "info"
77
- @@debugLevel=@@info
78
+ NetuitiveLogger.log.level = Logger::INFO
78
79
  elsif debugLevelString == "debug"
79
- @@debugLevel=@@debug
80
+ NetuitiveLogger.log.level = Logger::DEBUG
80
81
  else
81
- @@debugLevel=@@error
82
+ NetuitiveLogger.log.level = Logger::ERROR
82
83
  end
83
- if isDebug?
84
- puts "read config file. Results:
84
+ NetuitiveLogger.log.debug "read config file. Results:
85
85
  apiId: #{apiId}
86
86
  baseAddr: #{baseAddr}
87
87
  port: #{port}
88
88
  elementName: #{elementName}
89
89
  debugLevel: #{debugLevelString}"
90
- end
91
90
  end
92
91
  end
93
92
  end
@@ -0,0 +1,23 @@
1
+ require 'logger'
2
+ class NetuitiveLogger
3
+ begin
4
+ @@log = Logger.new("#{File.expand_path("../../..", __FILE__)}/log/netuitive.log",'daily', 10)
5
+ rescue
6
+ puts "netuitive unable to open log file"
7
+ @@log = CheaterLogger.new
8
+ end
9
+ class << self
10
+ def log
11
+ return @@log
12
+ end
13
+ end
14
+ end
15
+
16
+ class CheaterLogger
17
+ def debug(message)
18
+ end
19
+ def error(message)
20
+ end
21
+ def info(message)
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  require 'netuitive/metric_aggregator'
2
-
2
+ require 'netuitive/netuitived_logger'
3
3
  class NetuitivedServer
4
4
 
5
5
  def initialize()
@@ -22,5 +22,19 @@ class NetuitivedServer
22
22
  @metricAggregator.clearMetrics
23
23
  end
24
24
 
25
+ def stopServer
26
+ Thread.new do
27
+ exitProcess
28
+ end
29
+ end
30
+
31
+ def exitProcess
32
+ sleep(1)
33
+ NetuitiveLogger.log.info "stopping netuitived"
34
+ Process.exit!(true)
35
+ end
36
+
37
+ private :exitProcess
38
+
25
39
  end
26
40
 
data/log/netuitive.log ADDED
File without changes
metadata CHANGED
@@ -1,18 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netuitived
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - John King
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-03 00:00:00.000000000 Z
11
+ date: 2015-11-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Collects metrics over a certain interval and then sends them to Netuitive
14
14
  email: jking@netuitive.com
15
- executables: []
15
+ executables:
16
+ - netuitived
16
17
  extensions: []
17
18
  extra_rdoc_files: []
18
19
  files:
@@ -24,11 +25,14 @@ files:
24
25
  - lib/netuitive/ingest_tag.rb
25
26
  - lib/netuitive/metric_aggregator.rb
26
27
  - lib/netuitive/netuitived_config_manager.rb
28
+ - lib/netuitive/netuitived_logger.rb
27
29
  - lib/netuitive/netuitived_server.rb
28
30
  - lib/netuitive/scheduler.rb
29
31
  - lib/netuitived.rb
30
32
  - config/agent.yml
31
33
  - "./LICENSE"
34
+ - log/netuitive.log
35
+ - bin/netuitived
32
36
  homepage: http://rubygems.org/gems/netuitived
33
37
  licenses:
34
38
  - Apache v2.0