Sha256: 79a0d4a0fa5dc47acead3f1f141c221388b6d35f757abce9fde8772aeacef3f7

Contents?: true

Size: 1.99 KB

Versions: 8

Compression:

Stored size: 1.99 KB

Contents

module SimpleMetrics

  module Graph
    extend self

    def minutes; Bucket[0]; end
    def hours;   Bucket[1]; end
    def day;     Bucket[2]; end
    def week;    Bucket[3]; end

    def time_range(time)
      case time
      when 'minute'
        5 * one_minute
      when 'hour'
        one_hour
      when 'day'
        one_day
      when 'week'
        one_week
      else 
        raise "Unknown time param: #{time}"
      end
    end
    
    def query_all(bucket, from, to, *targets)
      results = []
      Array(targets).each do |target|
        results << { :name => target, :data => query(bucket, from, to, target).map { |data| { :x => data.ts, :y => data.value || 0 } } }
      end
      results
    end

    def query(bucket, from, to, target)
      if wild_card_query?(target)
        result = bucket.find_all_in_ts_range_by_wildcard(from, to, target)
        result = aggregate(result, target)
        bucket.fill_gaps(from, to, result)
      elsif target.is_a?(String)
        result = bucket.find_all_in_ts_range_by_name(from, to, target)
        bucket.fill_gaps(from, to, result) 
      else
        raise ArgumentError, "Unknown target format: #{target.inspect}"
      end
    end

    private 

    def aggregate(dps, target)
      raise SimpleMetrics::DataPoint::NonMatchingTypesError if has_non_matching_types?(dps)

      tmp = {}
      dps.each do |dp|
        dp.name = target
        if tmp.key?(dp.ts)
          tmp[dp.ts] << dp
        else
          tmp[dp.ts] = [dp]
        end
      end
      tmp

      result = []
      tmp.each_pair do |ts, dps|
        result << DataPoint.aggregate_values(dps)
      end
      result
    end

    def has_non_matching_types?(dps)
      dps.group_by { |dp| dp.type }.size != 1
    end

    def one_minute
      60
    end

    def one_hour
      one_minute * 60
    end

    def one_day
      one_hour * 24
    end

    def one_week
      one_day * 7
    end

    def wild_card_query?(target)
      target.is_a?(String) && target.include?('*')
    end
  
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
simple_metrics-0.4.6 lib/simple_metrics/graph.rb
simple_metrics-0.4.5 lib/simple_metrics/graph.rb
simple_metrics-0.4.4 lib/simple_metrics/graph.rb
simple_metrics-0.4.3 lib/simple_metrics/graph.rb
simple_metrics-0.4.2 lib/simple_metrics/graph.rb
simple_metrics-0.3.6 lib/simple_metrics/graph.rb
simple_metrics-0.3.5 lib/simple_metrics/graph.rb
simple_metrics-0.3.4 lib/simple_metrics/graph.rb