netuitive_ruby_api 0.9.8 → 1.0.1

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/README.md CHANGED
@@ -1,21 +1,29 @@
1
- # netuitive_ruby_api
2
- An easy interface to communicate with the netuitive ruby daemon netuitived(https://rubygems.org/gems/netuitived)
1
+ Netuitive Ruby API
2
+ ===================
3
3
 
4
- Requirements:
5
- netuitived must be running
4
+ The Netuitive Ruby API provides an easy interface to communicate with the Netuitive Ruby daemon [NetuitiveD](https://rubygems.org/gems/netuitived). NetuitiveD is meant to work in conjunction with NetuitiveD and the [netuitive_rails_agent](https://rubygems.org/gems/netuitive_rails_agent) gem to help [Netuitive](https://www.netuitive.com) monitor your Ruby applications.
6
5
 
7
- How to install using gem:
6
+ For more information on the Netuitive Ruby API, see our Ruby agent [help docs](https://help.netuitive.com/Content/Misc/Datasources/new_ruby_datasource.htm), or contact Netuitive support at [support@netuitive.com](mailto:support@netuitive.com).
8
7
 
9
- run the command:
8
+ Requirements
9
+ -------------
10
10
 
11
- gem install netuitive_ruby_api
11
+ [NetuitiveD](https://github.com/Netuitive/netuitived) must be installed and running.
12
12
 
13
- How to use:
13
+ Installing the Netuitive Ruby API
14
+ ----------------------------------
15
+
16
+ `gem install netuitive_ruby_api`
17
+
18
+ Using the Netuitive Ruby API
19
+ -----------------------------
14
20
 
15
21
  Single sample example:
16
- NetuitiveRubyAPI::netuitivedServer.addSample("metric.name", [metric value])
22
+
23
+ NetuitiveRubyAPI::netuitivedServer.addSample("metric.name", [metric value])
17
24
 
18
25
  Add the aggregation value to the existing value for the metric for this interval:
19
- NetuitiveRubyAPI::netuitivedServer.aggregateMetric("metric.name", [aggregation value])
20
26
 
21
- Aggregation may be confusing but at its heart it's a simple concept. It's basically a sum of the aggregation values over the course of a single interval; it's useful for datasets like the number of requests per minute.
27
+ NetuitiveRubyAPI::netuitivedServer.aggregateMetric("metric.name", [aggregation value])
28
+
29
+ An aggregation value is the sum of metric values over the course of a single interval. Aggregation can be quite useful for datasets like the number of requests per minute.
data/config/agent.yml CHANGED
@@ -1,4 +1,7 @@
1
1
  #all are configurable using environment variables
2
+ logLocation: #absolute path of log file. leave blank for default location in the gem directory. environment variable: NETUITIVE_RUBY_LOG_LOCATION
3
+ logAge: daily #Number of old log files to keep, or frequency of rotation (daily, weekly or monthly). environment variable: NETUITIVE_RUBY_LOG_AGE
4
+ logSize: #Maximum logfile size in bytes (only applies when shift_age is a number). environment variable: NETUITIVE_RUBY_LOG_SIZE
2
5
  debugLevel: info #options (in ascending order of debugness) are: error, info, debug. environment variable: NETUITIVE_RUBY_DEBUG_LEVEL
3
6
  netuitivedAddr: localhost #environment variable: NETUITIVE_RUBY_NETUITIVED_ADDR
4
7
  netuitivedPort: 8875 #environment variable: NETUITIVE_RUBY_NETUITIVED_PORT
@@ -1,17 +1,78 @@
1
- require 'netuitive/ruby_config_manager'
1
+ require 'yaml'
2
+ require 'logger'
2
3
  require 'drb/drb'
4
+ require 'netuitive_ruby_api/config_manager'
5
+ require 'netuitive_ruby_api/netuitive_logger'
6
+
3
7
  class NetuitiveRubyAPI
4
- class << self
5
- def setup(server)
6
- @@netuitivedServer=server
7
- end
8
-
9
- def netuitivedServer
10
- return @@netuitivedServer
11
- end
12
- end
8
+ class << self
9
+ def setup(server)
10
+ @@netuitivedServer = server
11
+ end
12
+
13
+ def netuitivedServer
14
+ @@netuitivedServer
15
+ end
16
+
17
+ def send_metrics
18
+ server_interaction { netuitivedServer.sendMetrics }
19
+ end
20
+
21
+ def add_sample(metric_id, val)
22
+ server_interaction { netuitivedServer.addSample(metric_id, val) }
23
+ end
24
+
25
+ def add_counter_sample(metric_id, val)
26
+ server_interaction { netuitivedServer.addCounterSample(metric_id, val) }
27
+ end
28
+
29
+ def aggregate_metric(metric_id, val)
30
+ server_interaction { netuitivedServer.aggregateMetric(metric_id, val) }
31
+ end
32
+
33
+ def aggregate_counter_metric(metric_id, val)
34
+ server_interaction { netuitivedServer.aggregateCounterMetric(metric_id, val) }
35
+ end
36
+
37
+ def clear_metrics
38
+ server_interaction { netuitivedServer.clearMetrics }
39
+ end
40
+
41
+ def interval
42
+ netuitivedServer.interval # synchronous for return value
43
+ end
44
+
45
+ def event(message, timestamp = Time.new, title = 'Ruby Event', level = 'Info', source = 'Ruby Agent', type = 'INFO', tags = nil)
46
+ server_interaction { netuitivedServer.event(message, timestamp, title, level, source, type, tags) }
47
+ end
48
+
49
+ def exception_event(exception, klass = nil, tags = nil)
50
+ server_interaction do
51
+ hash = { message: exception.message }
52
+ hash[:backtrace] = exception.backtrace.join("\n\t") if (defined? exception.backtrace) && !exception.backtrace.nil?
53
+ netuitivedServer.exceptionEvent(hash, klass, tags)
54
+ end
55
+ end
56
+
57
+ def stop_server
58
+ server_interaction { netuitivedServer.stopServer }
59
+ end
60
+
61
+ def server_interaction
62
+ Thread.new do
63
+ begin
64
+ yield
65
+ rescue => e
66
+ NetuitiveRubyApi::NetuitiveLogger.log.error "unable to connect to netuitived: message:#{e.message} backtrace:#{e.backtrace}"
67
+ end
68
+ end
69
+ end
70
+ end
13
71
  end
14
- ConfigManager::setup
15
- SERVER_URI="druby://#{ConfigManager.netuitivedAddr}:#{ConfigManager.netuitivedPort}"
72
+
73
+ NetuitiveRubyApi::ConfigManager.load_config
74
+ NetuitiveRubyApi::NetuitiveLogger.setup
75
+ NetuitiveRubyApi::ConfigManager.read_config
76
+ SERVER_URI = "druby://#{NetuitiveRubyApi::ConfigManager.netuitivedAddr}:#{NetuitiveRubyApi::ConfigManager.netuitivedPort}".freeze
16
77
  DRb.start_service
17
- NetuitiveRubyAPI.setup(DRbObject.new_with_uri(SERVER_URI))
78
+ NetuitiveRubyAPI.setup(DRbObject.new_with_uri(SERVER_URI))
@@ -0,0 +1,76 @@
1
+ module NetuitiveRubyApi
2
+ class ConfigManager
3
+ class << self
4
+ attr_reader :netuitivedAddr
5
+
6
+ attr_reader :netuitivedPort
7
+
8
+ attr_reader :data
9
+
10
+ def property(name, var, default = nil)
11
+ prop = ENV[var]
12
+ prop = data[name] if prop.nil? || (prop == '')
13
+ return prop unless prop.nil? || (prop == '')
14
+ default
15
+ end
16
+
17
+ def boolean_property(name, var)
18
+ prop = ENV[var].nil? ? nil : ENV[var].dup
19
+ if prop.nil? || (prop == '')
20
+ prop = data[name]
21
+ else
22
+ prop.strip!
23
+ prop = prop.casecmp('true').zero?
24
+ end
25
+ prop
26
+ end
27
+
28
+ def float_property(name, var)
29
+ prop = ENV[var].nil? ? nil : ENV[var]
30
+ if prop.nil? || (prop == '')
31
+ data[name].to_f
32
+ else
33
+ prop.to_f
34
+ end
35
+ end
36
+
37
+ def string_list_property(name, var)
38
+ list = []
39
+ prop = ENV[var].nil? ? nil : ENV[var].dup
40
+ if prop.nil? || (prop == '')
41
+ list = data[name] if !data[name].nil? && data[name].is_a?(Array)
42
+ else
43
+ list = prop.split(',')
44
+ end
45
+ list.each(&:strip!) unless list.empty?
46
+ list
47
+ end
48
+
49
+ def load_config
50
+ gem_root = File.expand_path('../../..', __FILE__)
51
+ @data = YAML.load_file "#{gem_root}/config/agent.yml"
52
+ end
53
+
54
+ def read_config
55
+ @netuitivedAddr = property('netuitivedAddr', 'NETUITIVE_RUBY_NETUITIVED_ADDR')
56
+ @netuitivedPort = property('netuitivedPort', 'NETUITIVE_RUBY_NETUITIVED_PORT')
57
+ debugLevelString = property('debugLevel', 'NETUITIVE_RUBY_DEBUG_LEVEL')
58
+ NetuitiveRubyApi::NetuitiveLogger.log.level = if debugLevelString == 'error'
59
+ Logger::ERROR
60
+ elsif debugLevelString == 'info'
61
+ Logger::INFO
62
+ elsif debugLevelString == 'debug'
63
+ Logger::DEBUG
64
+ else
65
+ Logger::ERROR
66
+ end
67
+ NetuitiveRubyApi::NetuitiveLogger.log.info "port: #{@netuitivedPort}"
68
+ NetuitiveRubyApi::NetuitiveLogger.log.info "addr: #{@netuitivedAddr}"
69
+ NetuitiveRubyApi::NetuitiveLogger.log.debug "read config file. Results:
70
+ netuitivedAddr: #{@netuitivedAddr}
71
+ netuitivedPort: #{@netuitivedPort}
72
+ debugLevel: #{debugLevelString}"
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,49 @@
1
+ require 'logger'
2
+ module NetuitiveRubyApi
3
+ class CheaterLogger
4
+ attr_accessor :level
5
+ def debug(message)
6
+ end
7
+
8
+ def error(message)
9
+ end
10
+
11
+ def info(message)
12
+ end
13
+ end
14
+
15
+ class NetuitiveLogger
16
+ class << self
17
+ attr_reader :log
18
+ def setup
19
+ file = NetuitiveRubyApi::ConfigManager.property('logLocation', 'NETUITIVE_RUBY_LOG_LOCATION', "#{File.expand_path('../../..', __FILE__)}/log/netuitive.log")
20
+ age = NetuitiveRubyApi::ConfigManager.property('logAge', 'NETUITIVE_RUBY_LOG_AGE', 'daily')
21
+ age = format_age(age)
22
+ size = NetuitiveRubyApi::ConfigManager.property('logSize', 'NETUITIVE_RUBY_LOG_SIZE', 1_000_000)
23
+ size = format_size(size)
24
+ @log = Logger.new(file, age, size)
25
+ rescue => e
26
+ puts "netuitive unable to open log file. error: #{e.message}, backtrace: #{e.backtrace}"
27
+ @log = NetuitiveRubyApi::CheaterLogger.new
28
+ end
29
+
30
+ def format_age(age)
31
+ return 'daily' if age.nil?
32
+ begin
33
+ Integer(age)
34
+ rescue
35
+ age
36
+ end
37
+ end
38
+
39
+ def format_size(size)
40
+ return 1_000_000 if size.nil?
41
+ begin
42
+ Integer(size)
43
+ rescue
44
+ size
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netuitive_ruby_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.8
4
+ version: 1.0.1
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: 2015-12-10 00:00:00.000000000 Z
12
+ date: 2016-10-17 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Allows for easy submittion of metrics to Netuitive
15
15
  email: jking@netuitive.com
@@ -17,8 +17,8 @@ executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
- - lib/netuitive/ruby_config_manager.rb
21
- - lib/netuitive/netuitive_ruby_logger.rb
20
+ - lib/netuitive_ruby_api/netuitive_logger.rb
21
+ - lib/netuitive_ruby_api/config_manager.rb
22
22
  - lib/netuitive_ruby_api.rb
23
23
  - config/agent.yml
24
24
  - ./LICENSE
@@ -1,24 +0,0 @@
1
- require 'logger'
2
- class CheaterLogger
3
- attr_accessor :level
4
- def debug(message)
5
- end
6
- def error(message)
7
- end
8
- def info(message)
9
- end
10
- end
11
-
12
- class NetuitiveLogger
13
- begin
14
- @@log = Logger.new("#{File.expand_path("../../..", __FILE__)}/log/netuitive.log",'daily', 10)
15
- rescue
16
- puts "netuitive unable to open log file"
17
- @@log = CheaterLogger.new
18
- end
19
- class << self
20
- def log
21
- return @@log
22
- end
23
- end
24
- end
@@ -1,50 +0,0 @@
1
- require 'netuitive/netuitive_ruby_logger'
2
- require 'yaml'
3
- class ConfigManager
4
-
5
- class << self
6
- def setup()
7
- readConfig()
8
- end
9
-
10
- def netuitivedAddr
11
- @@netuitivedAddr
12
- end
13
-
14
- def netuitivedPort
15
- @@netuitivedPort
16
- end
17
-
18
- def readConfig()
19
- gem_root= File.expand_path("../../..", __FILE__)
20
- data=YAML.load_file "#{gem_root}/config/agent.yml"
21
- @@netuitivedAddr=ENV["NETUITIVE_RUBY_NETUITIVED_ADDR"]
22
- if(@@netuitivedAddr == nil or @@netuitivedAddr == "")
23
- @@netuitivedAddr=data["netuitivedAddr"]
24
- end
25
- @@netuitivedPort=ENV["NETUITIVE_RUBY_NETUITIVED_PORT"]
26
- if(@@netuitivedPort == nil or @@netuitivedPort == "")
27
- @@netuitivedPort=data["netuitivedPort"]
28
- end
29
- debugLevelString=ENV["NETUITIVE_RUBY_DEBUG_LEVEL"]
30
- if(debugLevelString == nil or debugLevelString == "")
31
- debugLevelString=data["debugLevel"]
32
- end
33
- NetuitiveLogger.log.info "port: #{@@netuitivedPort}"
34
- NetuitiveLogger.log.info "addr: #{@@netuitivedAddr}"
35
- if debugLevelString == "error"
36
- NetuitiveLogger.log.level = Logger::ERROR
37
- elsif debugLevelString == "info"
38
- NetuitiveLogger.log.level = Logger::INFO
39
- elsif debugLevelString == "debug"
40
- NetuitiveLogger.log.level = Logger::DEBUG
41
- else
42
- NetuitiveLogger.log.level = Logger::ERROR
43
- end
44
- NetuitiveLogger.log.debug "read config file. Results:
45
- netuitivedAddr: #{@@netuitivedAddr}
46
- netuitivedPort: #{@@netuitivedPort}
47
- debugLevel: #{debugLevelString}"
48
- end
49
- end
50
- end