statlysis 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -0
- data/Guardfile +14 -0
- data/README.markdown +77 -27
- data/Rakefile +1 -1
- data/lib/statlysis.rb +59 -101
- data/lib/statlysis/clock.rb +3 -3
- data/lib/statlysis/common.rb +4 -16
- data/lib/statlysis/configuration.rb +97 -2
- data/lib/statlysis/constants.rb +10 -0
- data/lib/statlysis/cron.rb +40 -42
- data/lib/statlysis/cron/count.rb +16 -58
- data/lib/statlysis/cron/count/dimensions.rb +7 -0
- data/lib/statlysis/cron/count/timely.rb +63 -0
- data/lib/statlysis/cron/top.rb +4 -104
- data/lib/statlysis/cron/top/hotest_items.rb +47 -0
- data/lib/statlysis/cron/top/lastest_visits.rb +53 -0
- data/lib/statlysis/cron_set.rb +26 -0
- data/lib/statlysis/dataset.rb +6 -0
- data/lib/statlysis/javascript/count.rb +3 -3
- data/lib/statlysis/multiple_dataset.rb +69 -0
- data/lib/statlysis/multiple_dataset/active_record.rb +36 -0
- data/lib/statlysis/multiple_dataset/mongoid.rb +54 -0
- data/lib/statlysis/rake.rb +6 -5
- data/lib/statlysis/similar.rb +11 -11
- data/lib/statlysis/timeseries.rb +12 -9
- data/lib/statlysis/utils.rb +40 -0
- data/statlysis.gemspec +13 -3
- data/test/config/database.yml +9 -0
- data/test/config/mongoid.yml +36 -0
- data/test/data/.gitkeep +0 -0
- data/test/data/code_gists_20130724.csv +1459 -0
- data/test/helper.rb +41 -3
- data/test/migrate/1_active_record.rb +8 -0
- data/test/models/.gitkeep +0 -0
- data/test/models/code_gist.rb +5 -0
- data/test/models/eoe_log.rb +53 -0
- data/test/test_daily_count.rb +22 -0
- data/test/test_mapreduce.rb +0 -13
- data/test/test_single_log_in_multiple_collections.rb +22 -0
- data/test/test_statlysis.rb +5 -50
- data/test/test_timeseries.rb +46 -0
- metadata +133 -12
- data/Gemfile.lock +0 -110
- data/LICENSE.txt +0 -20
- data/test/models/company.rb +0 -12
- data/test/models/employee.rb +0 -14
data/test/helper.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require File.join(ENV['HOME'], 'utils/ruby/irb') rescue nil
|
1
2
|
require 'rubygems'
|
2
3
|
require 'bundler'
|
3
4
|
begin
|
@@ -9,9 +10,46 @@ rescue Bundler::BundlerError => e
|
|
9
10
|
end
|
10
11
|
require 'test/unit'
|
11
12
|
|
12
|
-
$LOAD_PATH.unshift
|
13
|
-
$LOAD_PATH.unshift
|
13
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
14
|
+
$LOAD_PATH.unshift File.dirname(__FILE__) # test dirs
|
15
|
+
|
16
|
+
# load mongoid setup
|
17
|
+
require 'mongoid'
|
18
|
+
Mongoid.load!(File.expand_path("../config/mongoid.yml", __FILE__), :production)
|
19
|
+
Mongoid.default_session.collections.select {|c| c.name !~ /system/ }.each(&:drop) # delete lastest data
|
20
|
+
|
14
21
|
require 'statlysis'
|
15
22
|
|
16
|
-
|
23
|
+
# load rails
|
24
|
+
def Rails.root; Pathname.new(File.expand_path('../.', __FILE__)) end
|
25
|
+
require 'sqlite3'
|
26
|
+
|
27
|
+
# load ActiveRecord setup
|
28
|
+
Statlysis.set_database :statlysis
|
29
|
+
Statlysis.config.is_skip_database_index = true
|
30
|
+
ActiveRecord::Base.establish_connection(Statlysis.config.database_opts.merge("adapter" => "sqlite3"))
|
31
|
+
Dir[File.expand_path("../migrate/*.rb", __FILE__).to_s].each { |f| require f }
|
32
|
+
Dir[File.expand_path("../models/*.rb", __FILE__).to_s].each { |f| require f }
|
33
|
+
|
34
|
+
# load basic test data
|
35
|
+
# copied from http://stackoverflow.com/questions/4410794/ruby-on-rails-import-data-from-a-csv-file/4410880#4410880
|
36
|
+
require 'csv'
|
37
|
+
csv = CSV.parse(File.read(File.expand_path('../data/code_gists_20130724.csv', __FILE__)), :headers => true) # data from code.eoe.cn
|
38
|
+
csv.each {|row| CodeGist.create!(row.to_hash) }
|
39
|
+
|
40
|
+
|
41
|
+
Statlysis.setup do
|
42
|
+
hourly EoeLog, :time_column => :t
|
43
|
+
|
44
|
+
daily CodeGist
|
45
|
+
|
46
|
+
[EoeLog,
|
47
|
+
EoeLog.where(:do => 3),
|
48
|
+
Mongoid[/multiple_log_2013[0-9]{4}/],
|
49
|
+
Mongoid[/multiple_log_2013[0-9]{4}/].where(:ui => {"$ne" => 0})
|
50
|
+
].each do |s|
|
51
|
+
daily s, :time_column => :t
|
52
|
+
end
|
53
|
+
cron = Statlysis.daily['mul'][1]
|
54
|
+
require 'pry-debugger';binding.pry
|
17
55
|
end
|
File without changes
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
class EoeLog
|
4
|
+
include Mongoid::Document
|
5
|
+
|
6
|
+
field :ii, :type => Integer, :default => 0 # ip_int, request.remote_ip
|
7
|
+
field :do, :type => Integer, :default => 1 # request.domain
|
8
|
+
field :fp, :type => String, :default => '' # request.original_fullpath
|
9
|
+
field :ui, :type => Integer, :default => 0 # user_id
|
10
|
+
field :re, :type => String, :default => '' # refer
|
11
|
+
|
12
|
+
field :t, :type => DateTime, :default => Statlysis::DateTime1970 # timestamp
|
13
|
+
|
14
|
+
# request.headers['HTTP_USER_AGENT']
|
15
|
+
field :br, :type => Integer, :default => 0 # browser name
|
16
|
+
field :bv, :type => String, :default => '' # browser version
|
17
|
+
field :bo, :type => Integer, :default => 0 # os
|
18
|
+
|
19
|
+
index({t: -1, ui: 1}, {:background => true})
|
20
|
+
end
|
21
|
+
EoeLog.create
|
22
|
+
|
23
|
+
|
24
|
+
# Setup a single log that combined by multiple collections
|
25
|
+
{'07' => 1..31, '08' => 1..12}.map do |month, day_range|
|
26
|
+
day_range.map do |day|
|
27
|
+
# define model dynamically, e.g. MultipleLog20130729
|
28
|
+
date_str = "2013#{month}#{day.to_s.rjust(2, '0')}"
|
29
|
+
collection_class_name = "MultipleLog#{date_str}"
|
30
|
+
collection_name = collection_class_name.sub("MultipleLog", "multiple_log_")
|
31
|
+
|
32
|
+
# NOTE: Object.const_set(name, Class.new {}) cause failed with error 16256: "Invalid ns [statlysis_mongoid_test.]",
|
33
|
+
# and cann't Mongoid.create data
|
34
|
+
eval("
|
35
|
+
class #{collection_class_name}
|
36
|
+
include Mongoid::Document
|
37
|
+
self.default_collection_name = #{collection_name.to_json}
|
38
|
+
field :t, :type => DateTime
|
39
|
+
field :url, :type => String
|
40
|
+
index({t: -1}, {:background => true})
|
41
|
+
end
|
42
|
+
")
|
43
|
+
|
44
|
+
collection_class = collection_class_name.constantize
|
45
|
+
t = Time.zone.parse(date_str)
|
46
|
+
1.upto(day) do |i|
|
47
|
+
puts "#{month} #{day_range} #{day} #{i}" if ENV['DEBUG']
|
48
|
+
collection_class.create :t => (t.to_time+rand(60*60*24-1)).to_datetime, :url => '/'
|
49
|
+
end
|
50
|
+
|
51
|
+
collection_class.count
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'helper'
|
4
|
+
|
5
|
+
class TestDailyCount < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@output = Statlysis.daily['code_gist'].first.output
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_timely
|
11
|
+
o = @output.map {|i| i[:timely_c] }
|
12
|
+
r = (o - [5,11,0,1,8,2,3,4,16,10,26,13,7,9,20,15,30,33,14,6,12,17,19,59,65,84,62,114,69,52,61,67,154,70]).reject(&:zero?).blank?
|
13
|
+
assert_equal r, true
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_totally
|
17
|
+
o = @output.map {|i| i[:totally_c] }
|
18
|
+
r = (o - [5,16,17,25,27,30,34,36,37,53,55,56,57,59,60,64,66,67,68,70,71,73,74,75,80,90,116,129,136,145,165,185,200,230,234,235,236,237,270,273,274,288,299,304,305,312,327,337,345,359,374,380,392,418,435,446,452,463,466,473,493,506,512,520,525,545,549,553,558,577,636,701,785,805,867,981,1050,1102,1163,1230,1384,1454,1455,1457,1458]).reject(&:zero?).blank?
|
19
|
+
assert_equal r, true
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/test/test_mapreduce.rb
CHANGED
@@ -2,21 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'helper'
|
4
4
|
|
5
|
-
Mongoid.connect_to "mongoid-mapreduce-test"
|
6
|
-
Dir["#{File.dirname(__FILE__)}/models/*.rb"].each { |f| require f }
|
7
|
-
Mongoid.default_session.collections.select {|c| c.name !~ /system/ }.each(&:drop)
|
8
|
-
|
9
5
|
class TestMapReduce < Test::Unit::TestCase
|
10
|
-
include Statlysis
|
11
|
-
|
12
6
|
def setup
|
13
|
-
# copied from git://github.com/joe1chen/mongoid-mapreduce.git
|
14
|
-
@aapl = Company.create :name => 'Apple', :market => 'Technology', :quote => 401.82, :shares => 972_090_000
|
15
|
-
@msft = Company.create :name => 'Microsoft', :market => 'Technology', :quote => 25.06, :shares => 8_380_000_000
|
16
|
-
@sbux = Company.create :name => 'Starbucks', :market => 'Food', :quote => 38.60, :shares => 746_010_000
|
17
|
-
Employee.create :name => 'Alan', :division => 'Software', :age => 30, :awards => 5, :rooms => [1,2], :active => true, :company => @aapl
|
18
|
-
Employee.create :name => 'Bob', :division => 'Software', :age => 30, :awards => 4, :rooms => [3,4,5], :active => true, :company => @aapl
|
19
|
-
Employee.create :name => 'Chris', :division => 'Hardware', :age => 30, :awards => 3, :rooms => [1,2,3,4], :active => false, :company => @aapl
|
20
7
|
end
|
21
8
|
|
22
9
|
def test_hotest_items_mapreduce
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'helper'
|
4
|
+
|
5
|
+
class TestSingleLogInMultipleCollections < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@output = Statlysis.daily['multi'].first.output
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_timely
|
11
|
+
o = @output.map {|i| i[:timely_c] }[0..30]
|
12
|
+
r = (o - [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]).reject(&:zero?).blank?
|
13
|
+
assert_equal r, true
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_totally
|
17
|
+
o = @output.map {|i| i[:totally_c] }[0..30]
|
18
|
+
r = (o - [1,3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153,171,190,210,231,253,276,300,325,351,378,406,435,465,496]).reject(&:zero?).blank?
|
19
|
+
assert_equal r, true
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/test/test_statlysis.rb
CHANGED
@@ -2,54 +2,15 @@
|
|
2
2
|
|
3
3
|
require 'helper'
|
4
4
|
|
5
|
-
def Rails.root; Pathname.new(ENV['RAILS_ROOT'] || "#{Dir.pwd}/../..") end
|
6
|
-
raise "Please setup RAILS_ROOT shell env first!" if not File.exists?(Rails.root.join("config/database.yml"))
|
7
|
-
|
8
5
|
class TestStatlysis < Test::Unit::TestCase
|
9
|
-
include Statlysis
|
10
|
-
|
11
6
|
def setup
|
12
|
-
|
13
|
-
@dt = DateTime.parse "20121221 +0800"
|
14
|
-
@dt1 = DateTime.parse "20111221 +0800"
|
15
|
-
@dt2 = DateTime.parse "20121221 +0800"
|
16
|
-
Statlysis.set_database :statlysis
|
17
|
-
@old_datetime = DateTime.parse("20130105")
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_parse_datetime
|
21
|
-
assert_equal [@dt], TimeSeries.parse(@dt), "抽取单个时间没通过"
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_parse_special_datetime
|
25
|
-
assert_equal 1, TimeSeries.parse(DateTime.parse('2012122110')).length, "抽取单个时间没通过"
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_parse_range_in_hour
|
29
|
-
# (@dt2 - @dt1).to_i == 366
|
30
|
-
assert_equal 24, TimeSeries.parse(@dt1..(@dt1+1.day-1.second), :unit => :hour).length, "抽取小时的时间范围没通过"
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_parse_range_in_day
|
34
|
-
# (@dt2 - @dt1).to_i == 366
|
35
|
-
assert_equal 366, TimeSeries.parse(@dt1..(@dt2-1.second)).length, "抽取天的时间范围没通过"
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_parse_range_in_week
|
39
|
-
# (@dt2 - @dt1).to_i / 7.0 == 52.285714285714285
|
40
|
-
assert_equal 53, TimeSeries.parse(@dt1..(@dt2-1.second), :unit => :week).length, "抽取周的时间范围没通过"
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_parse_range_in_201212_week
|
44
|
-
w1 = DateTime.parse "20121201 +0800"
|
45
|
-
w2 = DateTime.parse "20121231 +0800"
|
46
|
-
assert_equal 6, TimeSeries.parse(w1..w2, :unit => :week).length, "2012十二月应该有六周"
|
7
|
+
@old_datetime = Time.zone.parse("20130105")
|
47
8
|
end
|
48
9
|
|
49
10
|
def test_setup_count_stat_table
|
50
11
|
eval("class CodeGist < ActiveRecord::Base; end")
|
51
12
|
t = Statlysis::Timely.new CodeGist.where(:user_id => 470700), :time_column => :created_at, :time_unit => :day
|
52
|
-
t.
|
13
|
+
t.setup_stat_model
|
53
14
|
is_created = Statlysis.sequel.table_exists?(t.stat_table_name)
|
54
15
|
Statlysis.sequel.drop_table t.stat_table_name
|
55
16
|
|
@@ -58,19 +19,13 @@ class TestStatlysis < Test::Unit::TestCase
|
|
58
19
|
|
59
20
|
def test_setup_lastest_visits_stat_table
|
60
21
|
tn = 'st_blog_lastest_visits_tests'
|
61
|
-
lv = Statlysis::LastestVisits.new
|
62
|
-
|
22
|
+
lv = Statlysis::LastestVisits.new EoeLog, :stat_table_name => tn, :test => true, :default_time => @old_datetime
|
23
|
+
h = Statlysis::Utils.setup_pattern_table_and_model tn
|
24
|
+
lv.stat_model = h[:model]
|
63
25
|
is_sequel_model = lv.stat_model.respond_to?(:count)
|
64
26
|
Statlysis.sequel.drop_table tn
|
65
27
|
|
66
28
|
assert(is_sequel_model, "统计表#{lv.stat_table_name}没有成功创建")
|
67
29
|
end
|
68
30
|
|
69
|
-
def test_clock_set_time
|
70
|
-
clock = Statlysis::Clock.new "mvj3", Time.now
|
71
|
-
clock.update @old_datetime
|
72
|
-
update_old_time = (@old_datetime != clock.current)
|
73
|
-
assert(update_old_time, "Can't update old time")
|
74
|
-
end
|
75
|
-
|
76
31
|
end
|
data/test/test_timeseries.rb
CHANGED
@@ -3,4 +3,50 @@
|
|
3
3
|
require 'helper'
|
4
4
|
|
5
5
|
class TestTimeSeries < Test::Unit::TestCase
|
6
|
+
include Statlysis
|
7
|
+
|
8
|
+
def setup
|
9
|
+
super
|
10
|
+
@dt = Time.zone.parse "20121221 +0800"
|
11
|
+
@dt1 = Time.zone.parse "20111221 +0800"
|
12
|
+
@dt2 = Time.zone.parse "20121221 +0800"
|
13
|
+
@old_datetime = Time.zone.parse("20130105")
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_parse_datetime
|
17
|
+
assert_equal [@dt], TimeSeries.parse(@dt), "抽取单个时间没通过"
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_parse_special_datetime
|
21
|
+
assert_equal 1, TimeSeries.parse(Time.zone.parse('2012122110')).length, "抽取单个时间没通过"
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_parse_range_in_hour
|
25
|
+
# (@dt2 - @dt1).to_i == 366
|
26
|
+
assert_equal 24, TimeSeries.parse(@dt1..(@dt1+1.day-1.second), :unit => :hour).length, "抽取小时的时间范围没通过"
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_parse_range_in_day
|
30
|
+
# (@dt2 - @dt1).to_i == 366
|
31
|
+
assert_equal 366, TimeSeries.parse(@dt1..(@dt2-1.second)).length, "抽取天的时间范围没通过"
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_parse_range_in_week
|
35
|
+
# (@dt2 - @dt1).to_i / 7.0 == 52.285714285714285
|
36
|
+
assert_equal 53, TimeSeries.parse(@dt1..(@dt2-1.second), :unit => :week).length, "抽取周的时间范围没通过"
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_parse_range_in_201212_week
|
40
|
+
w1 = Time.zone.parse "20121201 +0800"
|
41
|
+
w2 = Time.zone.parse "20121231 +0800"
|
42
|
+
assert_equal 6, TimeSeries.parse(w1..w2, :unit => :week).length, "2012十二月应该有六周"
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_clock_set_time
|
46
|
+
clock = Statlysis::Clock.new "parse_EoeLog", Time.now
|
47
|
+
clock.update @old_datetime
|
48
|
+
update_old_time = (@old_datetime != clock.current)
|
49
|
+
assert(update_old_time, "Can't update old time")
|
50
|
+
end
|
51
|
+
|
6
52
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: statlysis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-07-
|
12
|
+
date: 2013-07-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
requirements:
|
67
67
|
- - ! '>='
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
69
|
+
version: 3.0.0
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -74,7 +74,7 @@ dependencies:
|
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
77
|
+
version: 3.0.0
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
79
|
name: activerecord
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -155,7 +155,103 @@ dependencies:
|
|
155
155
|
- - ! '>='
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '0'
|
158
|
-
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: bson_ext
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :runtime
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: origin
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
type: :runtime
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: short_inspect
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ! '>='
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0'
|
198
|
+
type: :runtime
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ! '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
206
|
+
- !ruby/object:Gem::Dependency
|
207
|
+
name: sqlite3
|
208
|
+
requirement: !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
210
|
+
requirements:
|
211
|
+
- - ! '>='
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '0'
|
214
|
+
type: :development
|
215
|
+
prerelease: false
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ! '>='
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '0'
|
222
|
+
- !ruby/object:Gem::Dependency
|
223
|
+
name: pry-debugger
|
224
|
+
requirement: !ruby/object:Gem::Requirement
|
225
|
+
none: false
|
226
|
+
requirements:
|
227
|
+
- - ! '>='
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
none: false
|
234
|
+
requirements:
|
235
|
+
- - ! '>='
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: '0'
|
238
|
+
- !ruby/object:Gem::Dependency
|
239
|
+
name: guard-test
|
240
|
+
requirement: !ruby/object:Gem::Requirement
|
241
|
+
none: false
|
242
|
+
requirements:
|
243
|
+
- - ! '>='
|
244
|
+
- !ruby/object:Gem::Version
|
245
|
+
version: '0'
|
246
|
+
type: :development
|
247
|
+
prerelease: false
|
248
|
+
version_requirements: !ruby/object:Gem::Requirement
|
249
|
+
none: false
|
250
|
+
requirements:
|
251
|
+
- - ! '>='
|
252
|
+
- !ruby/object:Gem::Version
|
253
|
+
version: '0'
|
254
|
+
description: Statistical & Analysis in Ruby DSL
|
159
255
|
email: mvjome@gmail.com
|
160
256
|
executables: []
|
161
257
|
extensions: []
|
@@ -164,33 +260,52 @@ files:
|
|
164
260
|
- .document
|
165
261
|
- .gitignore
|
166
262
|
- Gemfile
|
167
|
-
-
|
168
|
-
- LICENSE.txt
|
263
|
+
- Guardfile
|
169
264
|
- README.markdown
|
170
265
|
- Rakefile
|
171
266
|
- lib/statlysis.rb
|
172
267
|
- lib/statlysis/clock.rb
|
173
268
|
- lib/statlysis/common.rb
|
174
269
|
- lib/statlysis/configuration.rb
|
270
|
+
- lib/statlysis/constants.rb
|
175
271
|
- lib/statlysis/cron.rb
|
176
272
|
- lib/statlysis/cron/count.rb
|
273
|
+
- lib/statlysis/cron/count/dimensions.rb
|
274
|
+
- lib/statlysis/cron/count/timely.rb
|
177
275
|
- lib/statlysis/cron/top.rb
|
276
|
+
- lib/statlysis/cron/top/hotest_items.rb
|
277
|
+
- lib/statlysis/cron/top/lastest_visits.rb
|
278
|
+
- lib/statlysis/cron_set.rb
|
279
|
+
- lib/statlysis/dataset.rb
|
178
280
|
- lib/statlysis/formula.rb
|
179
281
|
- lib/statlysis/javascript/count.rb
|
180
282
|
- lib/statlysis/map_reduce.rb
|
283
|
+
- lib/statlysis/multiple_dataset.rb
|
284
|
+
- lib/statlysis/multiple_dataset/active_record.rb
|
285
|
+
- lib/statlysis/multiple_dataset/mongoid.rb
|
181
286
|
- lib/statlysis/rake.rb
|
182
287
|
- lib/statlysis/results.rb
|
183
288
|
- lib/statlysis/similar.rb
|
184
289
|
- lib/statlysis/timeseries.rb
|
290
|
+
- lib/statlysis/utils.rb
|
185
291
|
- statlysis.gemspec
|
292
|
+
- test/config/database.yml
|
293
|
+
- test/config/mongoid.yml
|
294
|
+
- test/data/.gitkeep
|
295
|
+
- test/data/code_gists_20130724.csv
|
186
296
|
- test/helper.rb
|
187
|
-
- test/
|
188
|
-
- test/models
|
297
|
+
- test/migrate/1_active_record.rb
|
298
|
+
- test/models/.gitkeep
|
299
|
+
- test/models/code_gist.rb
|
300
|
+
- test/models/eoe_log.rb
|
301
|
+
- test/test_daily_count.rb
|
189
302
|
- test/test_mapreduce.rb
|
303
|
+
- test/test_single_log_in_multiple_collections.rb
|
190
304
|
- test/test_statlysis.rb
|
191
305
|
- test/test_timeseries.rb
|
192
306
|
homepage: https://github.com/eoecn/statlysis
|
193
|
-
licenses:
|
307
|
+
licenses:
|
308
|
+
- MIT
|
194
309
|
post_install_message:
|
195
310
|
rdoc_options: []
|
196
311
|
require_paths:
|
@@ -201,16 +316,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
201
316
|
- - ! '>='
|
202
317
|
- !ruby/object:Gem::Version
|
203
318
|
version: '0'
|
319
|
+
segments:
|
320
|
+
- 0
|
321
|
+
hash: 59716176471030881
|
204
322
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
205
323
|
none: false
|
206
324
|
requirements:
|
207
325
|
- - ! '>='
|
208
326
|
- !ruby/object:Gem::Version
|
209
327
|
version: '0'
|
328
|
+
segments:
|
329
|
+
- 0
|
330
|
+
hash: 59716176471030881
|
210
331
|
requirements: []
|
211
332
|
rubyforge_project:
|
212
|
-
rubygems_version: 1.8.
|
333
|
+
rubygems_version: 1.8.23
|
213
334
|
signing_key:
|
214
335
|
specification_version: 3
|
215
|
-
summary:
|
336
|
+
summary: Statistical & Analysis in Ruby DSL
|
216
337
|
test_files: []
|