lib/influxer/client.rb in influxer-0.0.1 vs lib/influxer/client.rb in influxer-0.1.0
- old
+ new
@@ -1,9 +1,55 @@
require 'influxdb'
module Influxer
class Client < ::InfluxDB::Client
def initialize
+ @instrumenter = ActiveSupport::Notifications.instrumenter
super Influxer.config.database, Influxer.config.as_json.symbolize_keys!
end
+
+ def cached_query(sql)
+ log(sql) do
+ unless Influxer.config.cache == false
+ Rails.cache.fetch(normalized_cache_key(sql), cache_options(sql)) { self.query(sql) }
+ else
+ self.query(sql)
+ end
+ end
+ end
+
+ private
+
+ def log(sql)
+ return yield unless logger.debug?
+
+ _start = Time.now
+ res = yield
+ _duration = (Time.now - _start)*1000
+
+ name = "InfluxDB SQL (#{_duration.round(1)}ms)"
+
+ # bold black name and blue query string
+ msg = "\e[1m\e[30m#{name}\e[0m \e[34m#{sql}\e[0m"
+ logger.debug msg
+ res
+ end
+
+ def cache_options(sql=nil)
+ options = Influxer.config.cache.dup
+ # if sql contains 'now()' set expires to 1 minute or :cache_now_for value of config.cache if defined
+ if sql =~ /\snow\(\)/
+ options[:expires_in] = options[:cache_now_for] || 60
+ end
+ options
+ end
+
+ # add prefix; remove whitespaces
+ def normalized_cache_key(sql)
+ "influxer:#{sql.gsub(/\s*/, '')}"
+ end
+
+ def logger
+ Rails.logger
+ end
end
end
\ No newline at end of file