Commit 75f84e7f authored by Paul Asmuth's avatar Paul Asmuth
Browse files

implemented counters at attribute in fnordmetric-core and fnordmetric-ui

parent 3610313a
Loading
Loading
Loading
Loading
+0 −0

File moved.

+1 −1
Original line number Diff line number Diff line
require 'rspec'
require 'rspec/core/rake_task'
desc "Run all examples"
task RSpec::Core::RakeTask.new('spec')
task RSpec::Core::RakeTask.new('fnordmetric-core/spec')

task :default => "spec"
+1 −0
Original line number Diff line number Diff line
@@ -136,6 +136,7 @@ require "fnordmetric/api"
require "fnordmetric/worker"
require "fnordmetric/logger"
require "fnordmetric/defaults"
require "fnordmetric/util"
require "fnordmetric/web/web"
require "fnordmetric/web/app_helpers"
require "fnordmetric/web/app"
+25 −0
Original line number Diff line number Diff line
class FnordMetric::Util

  def self.parse_time(str)
    str = str.downcase

    if (str == "now")
      Time.now.to_i
    elsif str =~ /^[0-9]+$/
      str.to_i
    elsif str =~ /^-([0-9]+)$/
      Time.now.to_i - $1.to_i
    elsif str =~ /^-([0-9]+(?:\.[0-9]+)?)s(ec(ond)?(s?))?$/
      Time.now.to_i - $1.to_f
    elsif str =~ /^-([0-9]+(?:\.[0-9]+)?)m(in(ute)?(s?))?$/
      Time.now.to_i - ($1.to_f * 60)
    elsif str =~ /^-([0-9]+(?:\.[0-9]+)?)h(our(s?))?$/
      Time.now.to_i - ($1.to_f * 3600)
    elsif str =~ /^-([0-9]+(?:\.[0-9]+)?)d(ay(s?))?$/
      Time.now.to_i - ($1.to_i * 86400)
    else 
      raise "invalid time specifiation: #{str}"
    end
  end

end
+19 −1
Original line number Diff line number Diff line
@@ -14,8 +14,26 @@ class FnordMetric::NumbersWidget < FnordMetric::Widget
  end

  def self.execute_values_for(gauge, event)
    if at = event["at"]
      _t = Time.now.to_i

      value = if at =~ /sum\((.+)\)/
        vals = gauge.values_in(FnordMetric::Util.parse_time($1).._t+gauge.tick)
        vals.values.compact.map(&:to_f).inject(&:+)
      elsif at =~ /avg\((.+)\)/
        vals = gauge.values_in(FnordMetric::Util.parse_time($1).._t+gauge.tick)
        vals.values.compact.map(&:to_f).inject(&:+) / vals.size.to_f
      else
        gauge.value_at(FnordMetric::Util.parse_time(at)).to_i
      end

      return({
        "cmd" => "values_for",
        "at" => event["at"],
        "gauge" => gauge.name,
        "value" => value })
    end

    values = {}.tap do |out|
      event["offsets"].each do |off|
        if off.to_s.starts_with?("s")
Loading