Sha256: ba852329a1b5904e6eca1ceab9ad3f7361b90897428cb83c674a2ae7610a0239

Contents?: true

Size: 1.76 KB

Versions: 1

Compression:

Stored size: 1.76 KB

Contents

require_relative "mini_graphite/version"
require_relative "mini_graphite/logger"
require_relative "mini_graphite/routes_reporter"
require "benchmark"

require "socket"

module Dalia
  module MiniGraphite
    DEFAULTS = {
      :graphite_host => "graphite.host.com",
      :graphite_port => 2003,
      :statsd_host => "statsd.host.com",
      :statsd_port => 8125,
      :mock_mode => false,
      :debug_mode => false
    }

    def self.config(opts = {})
      @opts = DEFAULTS.merge(opts)
      @logger = Dalia::MiniGraphite::Logger.new(opts[:debug_mode])
      logger.debug("Initalized with opts")
      logger.debug(opts.inspect)
    end

    def self.datapoint(key, value = 1, timestamp = Time.now)
      signal = "#{key} #{value} #{timestamp.to_i}"
      logger.debug("Sending datapoint: '#{signal}'")

      send_tcp(signal) if !opts[:mock_mode]
    end

    def self.counter(key, value = 1)
      signal = "#{key}:#{value}|c"
      logger.debug("Sending counter: '#{signal}'")

      send_udp(signal) if !opts[:mock_mode]
    end

    def self.benchmark_wrapper(key, send_result = false)
      counter("#{key}.ini")

      result = nil

      time =
        Benchmark.realtime do
          result = yield
        end

      counter("#{key}.time", time * 1000)
      counter("#{key}.result", result) if send_result
      counter("#{key}.end")

      result
    end

  private

    def self.opts
      @opts
    end

    def self.logger
      @logger
    end

    def self.send_tcp(message)
      socket = TCPSocket.new(opts[:graphite_host], opts[:graphite_port])
      socket.print("#{message}\n")
      socket.close
    end

    def self.send_udp(message)
      socket = UDPSocket.new
      socket.send(message, 0, opts[:statsd_host], opts[:statsd_port])
      socket.close
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mini_graphite-0.2.1 lib/mini_graphite.rb