Sha256: bf383347d94a61367a0601d3098e11c1e6383c14fc1ed96c38f3d12a9153a9b9

Contents?: true

Size: 1.21 KB

Versions: 1

Compression:

Stored size: 1.21 KB

Contents

module GraphiteRb
  #
  # @example:
  #   # in initialize, perhaps
  #   self.sender = GraphiteSender
  #
  #   # ... somewhere else ...
  #   sender.send( ['webserver.pages', pages_this_hour], ['webserver.errors', errors_this_hour] )
  #
  class GraphiteSender
    attr_accessor :socket

    def initialize
      open!
    end

    def open!
      begin
        warn "Connecting to server #{Settings.carbon_server} port #{Settings.carbon_port}"
        self.socket = TCPSocket.new(Settings.carbon_server, Settings.carbon_port)
      rescue StandardError => e
        Log.warn "Couldn't connect to server #{Settings.carbon_server} port #{Settings.carbon_port}: #{e.class} #{e}"
        raise e
      end
    end

    def safely &block
      begin
        block.call
      rescue StandardError => e
        Log.warn "Sleeping #{Settings.on_error_delay}: #{e.class} #{e}"
        sleep Settings.on_error_delay
        return nil
      end
    end

    def timestamp
      Time.now.to_i
    end

    def send *metrics
      now = timestamp
      message = metrics.map{|metric, val| [metric, val, now].join(" ") }.join("\n")
      safely do
        socket.puts(message)
        Log.debug "Sent:\n#{message}\n#{'-'*80}"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
graphiterb-0.0.1 lib/graphiterb/graphite_sender.rb