Jump To …

configuration.rb

require 'core_ext/hash'
require 'sys/uname'
require 'timeout'

module Fozzie

Fozzie configuration allows assignment of global properties that will be used within the Fozzie codebase.

  class Configuration
    include Sys

    attr_accessor :env, :config_path, :host, :port, :appname, :namespaces, :timeout

    def initialize(args = {})
      merge_and_assign_config(args)
      self.origin_name
    end

Returns the prefix for any stat requested to be registered

    def data_prefix
      s = [appname, origin_name, env].collect do |s|
        s.empty? ? nil : s.gsub('.', '-')
      end.compact.join('.').strip
      (s.empty? ? nil : s)
    end

Returns the origin name of the current machine to register the stat against

    def origin_name
      @origin_name ||= Uname.uname.nodename
    end

    private

Handle the merging of the given configuaration, and the default config.

    def merge_and_assign_config(args = {})
      arg = self.class.default_configuration.merge(args.symbolize_keys)
      arg.merge!(config_from_yaml(arg))
      arg.each {|a,v| self.send("#{a}=", v) if self.respond_to?(a.to_sym) }

      arg
    end

Default configuration settings

    def self.default_configuration
      {
        :host        => '127.0.0.1',
        :port        => 8125,
        :config_path => '',
        :env         => (ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development'),
        :appname     => '',
        :namespaces  => %w{Stats S Statistics Warehouse},
        :timeout     => 0.5
      }.dup
    end

Loads the configuration from YAML, if possible

    def config_from_yaml(args)
      fp = full_config_path(args[:config_path])
      return {} unless File.exists?(fp)
      cnf = YAML.load(File.open(fp))[args[:env]]
      (cnf.kind_of?(Hash)) ? cnf.symbolize_keys : {}
    end

Returns the absolute file path for the Fozzie configuration, relative to the given path

    def full_config_path(path)
      File.expand_path('config/fozzie.yml', path)
    end

  end

end