class Statlysis::Configuration
Constants
- DelegateMethods
Attributes
database_opts[RW]
variables
default_time_columns[RW]
variables
default_time_zone[RW]
variables
is_skip_database_index[RW]
sequel[RW]
variables
tablename_default_pre[RW]
variables
Public Instance Methods
always(source, opts = {})
click to toggle source
# File lib/statlysis/configuration.rb, line 71 def always source, opts = {}; timely source, {:time_unit => false, :time_column => false}.merge(opts) end
check_set_database()
click to toggle source
# File lib/statlysis/configuration.rb, line 67 def check_set_database; raise "Please setup database first" if sequel.nil? end
daily(source, opts = {})
click to toggle source
# File lib/statlysis/configuration.rb, line 69 def daily source, opts = {}; timely source, {:time_unit => :day}.merge(opts) end
hotest_items(key, id_to_score_and_time_hash = {}) { |id_to_score_and_time_hash| ... }
click to toggle source
TODO 为什么一层proc的话会直接执行的
# File lib/statlysis/configuration.rb, line 81 def hotest_items key, id_to_score_and_time_hash = {} _p = proc { if block_given? (proc do id_to_score_and_time_hash = Hash.new yield id_to_score_and_time_hash id_to_score_and_time_hash end) else (proc { id_to_score_and_time_hash }) end} self.hotest_crons.push HotestItems.new(key, _p) end
hourly(source, opts = {})
click to toggle source
# File lib/statlysis/configuration.rb, line 70 def hourly source, opts = {}; timely source, {:time_unit => :hour}.merge(opts) end
lastest_visits(source, opts)
click to toggle source
the real requirement is to compute lastest items group by special pattens, like user_id, url prefix, …
# File lib/statlysis/configuration.rb, line 74 def lastest_visits source, opts self.check_set_database opts.reverse_merge! :time_column => :created_at self.realtime_crons.push LastestVisits.new(source, opts) end
set_database(obj)
click to toggle source
# File lib/statlysis/configuration.rb, line 34 def set_database obj self.database_opts = case obj when Hash obj when Symbol, String YAML.load_file(Rails.root.join("config/database.yml"))[Rails.env].merge('database' => obj.to_s) else raise "Statlysis#set_database only support symbol or hash params" end raise "database_opts should not be blank" if self.database_opts.blank? # sqlite dont support regular creating database in mysql style self.sequel = if (self.database_opts['adapter'].match(/sqlite/) && self.database_opts['database'].match(/\A:memory:\Z/)) # only for test envrionment Sequel.sqlite else # create database, copied from http://stackoverflow.com/a/14435522/595618 require 'mysql2' mysql2_client = Mysql2::Client.new(self.database_opts.except('database')) mysql2_client.query("CREATE DATABASE IF NOT EXISTS #{self.database_opts['database']}") Sequel.connect(self.database_opts) end # 初始化键值model ["#{self.tablename_default_pre}_single_kvs", "#{self.tablename_default_pre}_single_kv_histories"].each do |tn| Utils.setup_pattern_table_and_model tn end return self end
set_default_time_zone(zone;)
click to toggle source
# File lib/statlysis/configuration.rb, line 65 def set_default_time_zone zone; self.default_time_zone = zone; return self; end
set_tablename_default_pre(str;)
click to toggle source
# File lib/statlysis/configuration.rb, line 66 def set_tablename_default_pre str; self.tablename_default_pre = str.to_s; return self end
similar_items(model_name, id_to_text_hash = {}) { |id_to_text_hash| ... }
click to toggle source
TODO support mongoid
# File lib/statlysis/configuration.rb, line 96 def similar_items model_name, id_to_text_hash = {} _p = if block_given? (proc do id_to_text_hash = Hash.new {|hash, key| hash[key] = "" } yield id_to_text_hash id_to_text_hash end) else (proc { id_to_text_hash }) end self.similar_crons.push Similar.new(model_name, _p) end
update_time_columns(*columns)
click to toggle source
会在自动拼接统计数据库表名时去除这些时间字段
# File lib/statlysis/configuration.rb, line 28 def update_time_columns *columns self.default_time_columns ||= [:created_at, :updated_at] columns.each {|column| self.default_time_columns.push column } self.default_time_columns = self.default_time_columns.uniq end
Private Instance Methods
timely(source, opts)
click to toggle source
# File lib/statlysis/configuration.rb, line 112 def timely source, opts self.check_set_database opts.reverse_merge! :time_column => :created_at, :time_unit => :day, :sum_columns => [], :group_by_columns => [], :group_concat_columns => [] opts.each {|k, v| opts[k] = v.map(&:to_sym) if (Timely::SqlColumns - [:group_by_columns]).include?(k) } # Sequel use symbol as column names # e.g. convert [:user_id] to [{:column_name => :user_id, :type => :integer}] if (opts[:group_by_columns].first || {})[:type].blank? opts[:group_by_columns] = opts[:group_by_columns].map {|i| {:column_name => i.to_sym, :type => :integer} } end t = Timely.new source, opts self.send("#{opts[:time_unit] || 'always'}_crons").push t end