Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.project
14 changes: 14 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Style/ClassVars:
Enabled: false

Style/Documentation:
Enabled: false

Style/MethodName:
Enabled: false

Style/VariableName:
Enabled: false

Metrics:
Enabled: false
9 changes: 9 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
language: ruby
rvm:
- 2.2.0
install:
- gem install rubocop haml-lint
- gem install mocha
script:
- rubocop
- rake test
6 changes: 6 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
netuitive_ruby_api 1.0.0 (2016-10-17)
-------------------------
* external event support
* errors as events support
* async calls to netuitived
* wrapper methods for calls to the daemon
8 changes: 8 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
require 'rake/testtask'

Rake::TestTask.new do |t|
t.libs << 'test'
end

desc 'Run tests'
task default: :test
3 changes: 3 additions & 0 deletions config/agent.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
#all are configurable using environment variables
logLocation: #absolute path of log file. leave blank for default location in the gem directory. environment variable: NETUITIVE_RUBY_LOG_LOCATION
logAge: daily #Number of old log files to keep, or frequency of rotation (daily, weekly or monthly). environment variable: NETUITIVE_RUBY_LOG_AGE
logSize: #Maximum logfile size in bytes (only applies when shift_age is a number). environment variable: NETUITIVE_RUBY_LOG_SIZE
debugLevel: info #options (in ascending order of debugness) are: error, info, debug. environment variable: NETUITIVE_RUBY_DEBUG_LEVEL
netuitivedAddr: localhost #environment variable: NETUITIVE_RUBY_NETUITIVED_ADDR
netuitivedPort: 8875 #environment variable: NETUITIVE_RUBY_NETUITIVED_PORT
44 changes: 24 additions & 20 deletions lib/netuitive/netuitive_ruby_logger.rb
Original file line number Diff line number Diff line change
@@ -1,24 +1,28 @@
require 'logger'

class CheaterLogger
attr_accessor :level
def debug(message)
end
def error(message)
end
def info(message)
end
attr_accessor :level
def debug(message)
end

def error(message)
end

def info(message)
end
end

class NetuitiveLogger
begin
@@log = Logger.new("#{File.expand_path("../../..", __FILE__)}/log/netuitive.log",'daily', 10)
rescue
puts "netuitive unable to open log file"
@@log = CheaterLogger.new
end
class << self
def log
return @@log
end
end
end
class RubyNetuitiveLogger
class << self
attr_reader :log
def setup
file = RubyConfigManager.property('logLocation', 'NETUITIVE_RUBY_LOG_LOCATION', "#{File.expand_path('../../..', __FILE__)}/log/netuitive.log")
age = RubyConfigManager.property('logAge', 'NETUITIVE_RUBY_LOG_AGE', 'daily')
size = RubyConfigManager.property('logSize', 'NETUITIVE_RUBY_LOG_SIZE', nil)
@log = Logger.new(file, age, size)
rescue
puts 'netuitive unable to open log file'
@log = CheaterLogger.new
end
end
end
122 changes: 74 additions & 48 deletions lib/netuitive/ruby_config_manager.rb
Original file line number Diff line number Diff line change
@@ -1,50 +1,76 @@
require 'netuitive/netuitive_ruby_logger'
require 'yaml'
class ConfigManager

class << self
def setup()
readConfig()
end

def netuitivedAddr
@@netuitivedAddr
end

def netuitivedPort
@@netuitivedPort
end

def readConfig()
gem_root= File.expand_path("../../..", __FILE__)
data=YAML.load_file "#{gem_root}/config/agent.yml"
@@netuitivedAddr=ENV["NETUITIVE_RUBY_NETUITIVED_ADDR"]
if(@@netuitivedAddr == nil or @@netuitivedAddr == "")
@@netuitivedAddr=data["netuitivedAddr"]
end
@@netuitivedPort=ENV["NETUITIVE_RUBY_NETUITIVED_PORT"]
if(@@netuitivedPort == nil or @@netuitivedPort == "")
@@netuitivedPort=data["netuitivedPort"]
end
debugLevelString=ENV["NETUITIVE_RUBY_DEBUG_LEVEL"]
if(debugLevelString == nil or debugLevelString == "")
debugLevelString=data["debugLevel"]
end
NetuitiveLogger.log.info "port: #{@@netuitivedPort}"
NetuitiveLogger.log.info "addr: #{@@netuitivedAddr}"
if debugLevelString == "error"
NetuitiveLogger.log.level = Logger::ERROR
elsif debugLevelString == "info"
NetuitiveLogger.log.level = Logger::INFO
elsif debugLevelString == "debug"
NetuitiveLogger.log.level = Logger::DEBUG
else
NetuitiveLogger.log.level = Logger::ERROR
end
NetuitiveLogger.log.debug "read config file. Results:
netuitivedAddr: #{@@netuitivedAddr}
netuitivedPort: #{@@netuitivedPort}
debugLevel: #{debugLevelString}"
end
end
end
class RubyConfigManager
class << self
attr_reader :netuitivedAddr

attr_reader :netuitivedPort

attr_reader :data

def property(name, var, default = nil)
prop = ENV[var]
prop = data[name] if prop.nil? || (prop == '')
return prop unless prop.nil? || (prop == '')
default
end

def boolean_property(name, var)
prop = ENV[var].nil? ? nil : ENV[var].dup
if prop.nil? || (prop == '')
prop = data[name]
else
prop.strip!
prop = prop.casecmp('true').zero?
end
prop
end

def float_property(name, var)
prop = ENV[var].nil? ? nil : ENV[var]
if prop.nil? || (prop == '')
data[name].to_f
else
prop.to_f
end
end

def string_list_property(name, var)
list = []
prop = ENV[var].nil? ? nil : ENV[var].dup
if prop.nil? || (prop == '')
list = data[name] if !data[name].nil? && data[name].is_a?(Array)
else
list = prop.split(',')
end
list.each(&:strip!) unless list.empty?
list
end

def load_config
gem_root = File.expand_path('../../..', __FILE__)
@data = YAML.load_file "#{gem_root}/config/agent.yml"
end

def read_config
@netuitivedAddr = property('netuitivedAddr', 'NETUITIVE_RUBY_NETUITIVED_ADDR')
@netuitivedPort = property('netuitivedPort', 'NETUITIVE_RUBY_NETUITIVED_PORT')
debugLevelString = property('debugLevel', 'NETUITIVE_RUBY_DEBUG_LEVEL')
RubyNetuitiveLogger.log.level = if debugLevelString == 'error'
Logger::ERROR
elsif debugLevelString == 'info'
Logger::INFO
elsif debugLevelString == 'debug'
Logger::DEBUG
else
Logger::ERROR
end
RubyNetuitiveLogger.log.info "port: #{@netuitivedPort}"
RubyNetuitiveLogger.log.info "addr: #{@netuitivedAddr}"
RubyNetuitiveLogger.log.debug "read config file. Results:
netuitivedAddr: #{@netuitivedAddr}
netuitivedPort: #{@netuitivedPort}
debugLevel: #{debugLevelString}"
end
end
end
79 changes: 67 additions & 12 deletions lib/netuitive_ruby_api.rb
Original file line number Diff line number Diff line change
@@ -1,17 +1,72 @@
require 'netuitive/ruby_config_manager'
require 'drb/drb'
require 'netuitive/netuitive_ruby_logger'

class NetuitiveRubyAPI
class << self
def setup(server)
@@netuitivedServer=server
end

def netuitivedServer
return @@netuitivedServer
end
end
class << self
def setup(server)
@@netuitivedServer = server
end

def netuitivedServer
@@netuitivedServer
end

def send_metrics
server_interaction { netuitivedServer.sendMetrics }
end

def add_sample(metric_id, val)
server_interaction { netuitivedServer.addSample(metric_id, val) }
end

def add_counter_sample(metric_id, val)
server_interaction { netuitivedServer.addCounterSample(metric_id, val) }
end

def aggregate_metric(metric_id, val)
server_interaction { netuitivedServer.aggregateMetric(metric_id, val) }
end

def aggregate_counter_metric(metric_id, val)
server_interaction { netuitivedServer.aggregateCounterMetric(metric_id, val) }
end

def clear_metrics
server_interaction { netuitivedServer.clearMetrics }
end

def interval
netuitivedServer.interval # synchronous for return value
end

def event(message, timestamp = Time.new, title = 'Ruby Event', level = 'Info', source = 'Ruby Agent', type = 'INFO', tags = nil)
server_interaction { netuitivedServer.event(message, timestamp, title, level, source, type, tags) }
end

def exception_event(exception, klass = nil, tags = nil)
server_interaction { netuitivedServer.exceptionEvent(exception, klass, tags) }
end

def stop_server
server_interaction { netuitivedServer.stopServer }
end

def server_interaction
Thread.new do
begin
yield
rescue => e
RubyNetuitiveLogger.log.error "unable to connect to netuitived: message:#{e.message} backtrace:#{e.backtrace}"
end
end
end
end
end
ConfigManager::setup
SERVER_URI="druby://#{ConfigManager.netuitivedAddr}:#{ConfigManager.netuitivedPort}"

RubyConfigManager.load_config
RubyNetuitiveLogger.setup
RubyConfigManager.read_config
SERVER_URI = "druby://#{RubyConfigManager.netuitivedAddr}:#{RubyConfigManager.netuitivedPort}".freeze
DRb.start_service
NetuitiveRubyAPI.setup(DRbObject.new_with_uri(SERVER_URI))
NetuitiveRubyAPI.setup(DRbObject.new_with_uri(SERVER_URI))
10 changes: 5 additions & 5 deletions netuitive_ruby_api.gemspec
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
Gem::Specification.new do |s|
s.name = 'netuitive_ruby_api'
s.version = '0.9.8'
s.date = '2015-12-10'
s.version = '1.0.0'
s.date = '2016-10-17'
s.summary = "Interface for Netuitive's metric ingest API"
s.description = "Allows for easy submittion of metrics to Netuitive"
s.authors = ["John King"]
s.description = 'Allows for easy submittion of metrics to Netuitive'
s.authors = ['John King']
s.email = '[email protected]'
files = Dir['lib/**/*.{rb}'] + Dir['lib/*.{rb}'] + Dir['config/*.{yml}'] + Dir['./LICENSE'] + Dir['log/*'] + Dir['./README.md']
s.files = files
s.homepage =
'http://rubygems.org/gems/netuitive_ruby_api'
s.license = 'Apache v2.0'
s.license = 'Apache v2.0'
s.required_ruby_version = '>= 1.9.0'
end
Loading