mountain-goat 0.1.8 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +119 -48
- data/generators/mg/mg_generator.rb +17 -9
- data/generators/mg/templates/create_mountain_goat_tables.rb +61 -25
- data/generators/mg/templates/mg.rb +1 -0
- data/generators/mg/templates/mountain-goat.yml +22 -3
- data/generators/mg/templates/mountain_goat_reports.rake +17 -0
- data/generators/mg/templates/update_mountain_goat_tables.rb +104 -0
- data/lib/mountain-goat.rb +21 -12
- data/lib/mountain-goat/analytics.rb +134 -0
- data/lib/mountain-goat/controllers/{mountain_goat/mountain_goat_converts_controller.rb → mg/converts_controller.rb} +12 -11
- data/lib/mountain-goat/controllers/{mountain_goat/mountain_goat_metric_variants_controller.rb → mg/metric_variants_controller.rb} +6 -5
- data/lib/mountain-goat/controllers/{mountain_goat/mountain_goat_metrics_controller.rb → mg/metrics_controller.rb} +8 -6
- data/lib/mountain-goat/controllers/mg/mg.rb +47 -0
- data/lib/mountain-goat/controllers/{mountain_goat → mg}/mountain_goat_controller.rb +5 -42
- data/lib/mountain-goat/controllers/mg/playground_controller.rb +8 -0
- data/lib/mountain-goat/controllers/{mountain_goat/mountain_goat_rallies_controller.rb → mg/rallies_controller.rb} +4 -26
- data/lib/mountain-goat/controllers/mg/report_items_controller.rb +82 -0
- data/lib/mountain-goat/controllers/mg/reports_controller.rb +90 -0
- data/lib/mountain-goat/m_g.rb +64 -0
- data/lib/mountain-goat/metric_tracking.rb +192 -74
- data/lib/mountain-goat/models/mg/ci_meta.rb +10 -0
- data/lib/mountain-goat/models/mg/convert.rb +147 -0
- data/lib/mountain-goat/models/mg/convert_meta_type.rb +20 -0
- data/lib/mountain-goat/models/mg/cs_meta.rb +10 -0
- data/lib/mountain-goat/models/{metric.rb → mg/metric.rb} +3 -5
- data/lib/mountain-goat/models/mg/metric_variant.rb +25 -0
- data/lib/mountain-goat/models/mg/mountain_goat.rb +3 -0
- data/lib/mountain-goat/models/{rally.rb → mg/rally.rb} +4 -3
- data/lib/mountain-goat/models/mg/report.rb +11 -0
- data/lib/mountain-goat/models/mg/report_item.rb +24 -0
- data/lib/mountain-goat/models/mg/report_mailer.rb +18 -0
- data/lib/mountain-goat/public/g-bar-min.js +7 -0
- data/lib/mountain-goat/public/g-dot-min.js +7 -0
- data/lib/mountain-goat/public/g-line-min.js +7 -0
- data/lib/mountain-goat/public/g-pie-min.js +1 -0
- data/lib/mountain-goat/public/g-raphael-min.js +7 -0
- data/lib/mountain-goat/public/jqModel.css +41 -0
- data/lib/mountain-goat/public/jqModel.js +69 -0
- data/lib/mountain-goat/public/jquery.raphael.js +208 -0
- data/lib/mountain-goat/public/mg.css +135 -26
- data/lib/mountain-goat/public/mg.js +53 -1
- data/lib/mountain-goat/public/raphael-min.js +7 -0
- data/lib/mountain-goat/public/utils.js +520 -0
- data/lib/mountain-goat/switch_variant.rb +4 -4
- data/lib/mountain-goat/version.rb +1 -1
- data/lib/mountain-goat/views/mountain_goat/layouts/_pdf.html.erb +15 -0
- data/lib/mountain-goat/views/mountain_goat/layouts/mountain_goat.html.erb +17 -5
- data/lib/mountain-goat/views/mountain_goat/layouts/xhr.html.erb +2 -0
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_converts → mg/converts}/.tmp_show.html.erb.4433~ +0 -0
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_converts → mg/converts}/_convert_form.html.erb +0 -0
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_converts → mg/converts}/_convert_meta_type_form.html.erb +0 -0
- data/lib/mountain-goat/views/mountain_goat/mg/converts/edit.html.erb +13 -0
- data/lib/mountain-goat/views/mountain_goat/mg/converts/index.html.erb +25 -0
- data/lib/mountain-goat/views/mountain_goat/mg/converts/new.html.erb +13 -0
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_converts → mg/converts}/show.html.erb +3 -28
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_metric_variants → mg/metric_variants}/_metric_variant_form.html.erb +0 -4
- data/lib/mountain-goat/views/mountain_goat/mg/metric_variants/edit.html.erb +13 -0
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_metric_variants → mg/metric_variants}/index.html.erb +3 -3
- data/lib/mountain-goat/views/mountain_goat/mg/metric_variants/new.html.erb +15 -0
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_metric_variants → mg/metric_variants}/show.html.erb +4 -5
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_metrics → mg/metrics}/.tmp_show.html.erb.21270~ +0 -0
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_metrics → mg/metrics}/_metric_form.html.erb +0 -2
- data/lib/mountain-goat/views/mountain_goat/mg/metrics/edit.html.erb +13 -0
- data/lib/mountain-goat/views/mountain_goat/mg/metrics/index.html.erb +14 -0
- data/lib/mountain-goat/views/mountain_goat/mg/metrics/new.html.erb +14 -0
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_metrics → mg/metrics}/show.html.erb +7 -8
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat → mg/mountain_goat}/login.html.erb +0 -0
- data/lib/mountain-goat/views/mountain_goat/mg/playground/test.html.erb +14 -0
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_rallies → mg/rallies}/.tmp__rally.html.erb.40484~ +0 -0
- data/lib/mountain-goat/views/mountain_goat/mg/rallies/_rallies.html.erb +5 -0
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_rallies → mg/rallies}/_rallies_form.html.erb +0 -0
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_rallies → mg/rallies}/_rally.html.erb +0 -0
- data/lib/mountain-goat/views/mountain_goat/mg/rallies/edit.html.erb +13 -0
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_rallies → mg/rallies}/index.html.erb +1 -1
- data/lib/mountain-goat/views/mountain_goat/mg/rallies/new.html.erb +13 -0
- data/lib/mountain-goat/views/mountain_goat/{mountain_goat_rallies → mg/rallies}/show.html.erb +1 -1
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/_chart.html.erb +18 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/_report_item_form.html.erb +10 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/_report_item_pivot_form.html.erb +14 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/_show.html.erb +29 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/_svg_chart.html.erb +4 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/edit.html.erb +19 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/new.html.erb +17 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_mailer/report.html.erb +27 -0
- data/lib/mountain-goat/views/mountain_goat/mg/reports/_report.html.erb +22 -0
- data/lib/mountain-goat/views/mountain_goat/mg/reports/_report_form.html.erb +21 -0
- data/lib/mountain-goat/views/mountain_goat/mg/reports/_report_report_items.html.erb +5 -0
- data/lib/mountain-goat/views/mountain_goat/mg/reports/edit.html.erb +36 -0
- data/lib/mountain-goat/views/mountain_goat/mg/reports/index.html.erb +26 -0
- data/lib/mountain-goat/views/mountain_goat/mg/reports/new.html.erb +17 -0
- data/lib/mountain-goat/views/mountain_goat/mg/reports/show.html.erb +21 -0
- data/test/fixtures/{ci_metas.yml → mg_ci_metas.yml} +0 -0
- data/test/fixtures/{convert_meta_types.yml → mg_convert_meta_types.yml} +0 -0
- data/test/fixtures/{converts.yml → mg_converts.yml} +5 -0
- data/test/fixtures/{cs_metas.yml → mg_cs_metas.yml} +0 -0
- data/test/fixtures/mg_deliveries.yml +9 -0
- data/test/fixtures/{metric_variants.yml → mg_metric_variants.yml} +0 -0
- data/test/fixtures/{metrics.yml → mg_metrics.yml} +2 -3
- data/test/fixtures/{rallies.yml → mg_rallies.yml} +6 -2
- data/test/fixtures/mg_report_items.yml +13 -0
- data/test/fixtures/mg_reports.yml +15 -0
- data/test/mg_convert_test.rb +32 -0
- data/test/mg_converts_controller_test.rb +47 -0
- data/test/mg_metric_variants_controller_test.rb +46 -0
- data/test/mg_metrics_controller_test.rb +52 -0
- data/test/mg_mountain_goat_controller_test.rb +45 -0
- data/test/mg_mountain_goat_test.rb +392 -0
- data/test/mg_playground_controller_test.rb +11 -0
- data/test/mg_rallies_controller_test.rb +36 -0
- data/test/mg_report_item_test.rb +7 -0
- data/test/mg_report_items_controller_test.rb +31 -0
- data/test/mg_report_test.rb +18 -0
- data/test/mg_reports_controller_test.rb +50 -0
- data/test/test_helper.rb +203 -0
- metadata +108 -55
- data/lib/mountain-goat/models/ci_meta.rb +0 -9
- data/lib/mountain-goat/models/convert.rb +0 -70
- data/lib/mountain-goat/models/convert_meta_type.rb +0 -19
- data/lib/mountain-goat/models/cs_meta.rb +0 -9
- data/lib/mountain-goat/models/metric_variant.rb +0 -22
- data/lib/mountain-goat/views/mountain_goat/mountain_goat_converts/edit.html.erb +0 -13
- data/lib/mountain-goat/views/mountain_goat/mountain_goat_converts/index.html.erb +0 -48
- data/lib/mountain-goat/views/mountain_goat/mountain_goat_converts/new.html.erb +0 -13
- data/lib/mountain-goat/views/mountain_goat/mountain_goat_metric_variants/edit.html.erb +0 -13
- data/lib/mountain-goat/views/mountain_goat/mountain_goat_metric_variants/new.html.erb +0 -15
- data/lib/mountain-goat/views/mountain_goat/mountain_goat_metrics/edit.html.erb +0 -13
- data/lib/mountain-goat/views/mountain_goat/mountain_goat_metrics/index.html.erb +0 -14
- data/lib/mountain-goat/views/mountain_goat/mountain_goat_metrics/new.html.erb +0 -14
- data/lib/mountain-goat/views/mountain_goat/mountain_goat_rallies/_rallies.html.erb +0 -5
- data/lib/mountain-goat/views/mountain_goat/mountain_goat_rallies/edit.html.erb +0 -13
- data/lib/mountain-goat/views/mountain_goat/mountain_goat_rallies/new.html.erb +0 -13
- data/test/ocelot_converts_controller_test.rb +0 -45
- data/test/ocelot_metric_variants_controller_test.rb +0 -45
- data/test/ocelot_metrics_controller_test.rb +0 -45
- data/test/ocelot_rallies_controller_test.rb +0 -8
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
#################################################################
|
3
|
+
# Mountain Goat #
|
4
|
+
# #
|
5
|
+
# This file has been installed to add the 'mg:deliver' #
|
6
|
+
# rake task to your project. If you are not using #
|
7
|
+
# Mountain Goat Reporting, you can safely remove this file. #
|
8
|
+
# #
|
9
|
+
#################################################################
|
10
|
+
|
11
|
+
namespace :mg do
|
12
|
+
|
13
|
+
desc "deliver mountain goat reports"
|
14
|
+
task :deliver, :delivery_set, :needs => :environment do |t, args|
|
15
|
+
MG.deliver(args[:delivery_set])
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
class UpdateMountainGoatTables < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def self.up
|
4
|
+
add_column :converts, :reward, :float, :default => 1.0
|
5
|
+
add_column :metric_variants, :reward, :float
|
6
|
+
|
7
|
+
rename_table :metric_variants, :mg_metric_variants
|
8
|
+
|
9
|
+
Mg::MetricVariant.all.each do |mv|
|
10
|
+
mv.update_attribute(:reward, mv.conversions.to_f )
|
11
|
+
end
|
12
|
+
|
13
|
+
remove_column :metrics, :convert_id
|
14
|
+
remove_column :mg_metric_variants, :priority
|
15
|
+
|
16
|
+
rename_table :rallies, :mg_rallies
|
17
|
+
rename_table :metrics, :mg_metrics
|
18
|
+
rename_table :converts, :mg_converts
|
19
|
+
rename_table :cs_metas, :mg_cs_metas
|
20
|
+
rename_table :ci_metas, :mg_ci_metas
|
21
|
+
rename_table :convert_meta_types, :mg_convert_meta_types
|
22
|
+
|
23
|
+
create_table "mg_report_items", :force => true do |t|
|
24
|
+
t.integer "report_id"
|
25
|
+
t.integer "reportable_id"
|
26
|
+
t.string "reportable_type"
|
27
|
+
t.integer "order"
|
28
|
+
t.datetime "created_at"
|
29
|
+
t.datetime "updated_at"
|
30
|
+
end
|
31
|
+
|
32
|
+
create_table "mg_reports", :force => true do |t|
|
33
|
+
t.string "title"
|
34
|
+
t.text "description"
|
35
|
+
t.datetime "created_at"
|
36
|
+
t.datetime "updated_at"
|
37
|
+
t.string "delivery_set"
|
38
|
+
t.string "recipients"
|
39
|
+
end
|
40
|
+
|
41
|
+
add_column :mg_converts, :deleted_at, :datetime
|
42
|
+
add_column :mg_metrics, :deleted_at, :datetime
|
43
|
+
add_column :mg_metric_variants, :deleted_at, :datetime
|
44
|
+
add_column :mg_reports, :deleted_at, :datetime
|
45
|
+
|
46
|
+
add_column :mg_report_items, :pivot_type, :string
|
47
|
+
add_column :mg_report_items, :pivot_id, :integer
|
48
|
+
|
49
|
+
add_column :mg_report_items, :filter, :string
|
50
|
+
|
51
|
+
add_column :mg_report_items, :meta_type, :string
|
52
|
+
add_column :mg_report_items, :meta_id, :integer
|
53
|
+
|
54
|
+
add_column :mg_report_items, :extra, :string
|
55
|
+
add_column :mg_report_items, :variant, :integer
|
56
|
+
add_column :mg_report_items, :subvariant, :integer
|
57
|
+
add_column :mg_report_items, :start, :datetime
|
58
|
+
add_column :mg_report_items, :end, :datetime
|
59
|
+
add_column :mg_report_items, :size, :integer
|
60
|
+
|
61
|
+
add_column :mg_reports, :theme, :string
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.down
|
65
|
+
remove_column :mg_reports, :theme
|
66
|
+
|
67
|
+
remove_column :mg_report_items, :extra
|
68
|
+
remove_column :mg_report_items, :variant
|
69
|
+
remove_column :mg_report_items, :subvariant
|
70
|
+
remove_column :mg_report_items, :start
|
71
|
+
remove_column :mg_report_items, :end
|
72
|
+
remove_column :mg_report_items, :size
|
73
|
+
|
74
|
+
remove_column :mg_report_items, :meta_type
|
75
|
+
remove_column :mg_report_items, :meta_id
|
76
|
+
|
77
|
+
remove_column :mg_report_items, :filter
|
78
|
+
|
79
|
+
remove_column :mg_report_items, :pivot_type
|
80
|
+
remove_column :mg_report_items, :pivot_id
|
81
|
+
|
82
|
+
remove_column :mg_converts, :deleted_at
|
83
|
+
remove_column :mg_metrics, :deleted_at
|
84
|
+
remove_column :mg_metric_variants, :deleted_at
|
85
|
+
remove_column :mg_reports, :deleted_at
|
86
|
+
|
87
|
+
rename_table :mg_rallies, :rallies
|
88
|
+
rename_table :mg_metrics, :metrics
|
89
|
+
rename_table :mg_metric_variants, :metric_variants
|
90
|
+
rename_table :mg_converts, :converts
|
91
|
+
rename_table :mg_cs_metas, :cs_metas
|
92
|
+
rename_table :mg_ci_metas, :ci_metas
|
93
|
+
rename_table :mg_convert_meta_types, :convert_meta_types
|
94
|
+
|
95
|
+
add_column :metric_variants, :priority, :float
|
96
|
+
add_column :metrics, :convert_id, :integer
|
97
|
+
remove_column :metric_variants, :reward
|
98
|
+
remove_column :converts, :reward
|
99
|
+
|
100
|
+
drop_table :mg_reports
|
101
|
+
drop_table :mg_report_items
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
data/lib/mountain-goat.rb
CHANGED
@@ -6,20 +6,29 @@ require 'action_controller/routing'
|
|
6
6
|
|
7
7
|
require File.join([File.dirname(__FILE__), 'mgflotilla'])
|
8
8
|
|
9
|
-
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/
|
10
|
-
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/
|
11
|
-
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/
|
12
|
-
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/
|
13
|
-
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/
|
9
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/mg/mg'])
|
10
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/mg/mountain_goat_controller'])
|
11
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/mg/metrics_controller'])
|
12
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/mg/metric_variants_controller'])
|
13
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/mg/converts_controller'])
|
14
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/mg/rallies_controller'])
|
15
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/mg/reports_controller'])
|
16
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/mg/report_items_controller'])
|
17
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/controllers/mg/playground_controller'])
|
14
18
|
|
19
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/m_g'])
|
20
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/analytics'])
|
15
21
|
require File.join([File.dirname(__FILE__), 'mountain-goat/metric_tracking'])
|
16
|
-
require File.join([File.dirname(__FILE__), 'mountain-goat/models/metric'])
|
17
|
-
require File.join([File.dirname(__FILE__), 'mountain-goat/models/metric_variant'])
|
18
|
-
require File.join([File.dirname(__FILE__), 'mountain-goat/models/convert'])
|
19
|
-
require File.join([File.dirname(__FILE__), 'mountain-goat/models/convert_meta_type'])
|
20
|
-
require File.join([File.dirname(__FILE__), 'mountain-goat/models/cs_meta'])
|
21
|
-
require File.join([File.dirname(__FILE__), 'mountain-goat/models/ci_meta'])
|
22
|
-
require File.join([File.dirname(__FILE__), 'mountain-goat/models/rally'])
|
22
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/models/mg/metric'])
|
23
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/models/mg/metric_variant'])
|
24
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/models/mg/convert'])
|
25
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/models/mg/convert_meta_type'])
|
26
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/models/mg/cs_meta'])
|
27
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/models/mg/ci_meta'])
|
28
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/models/mg/rally'])
|
29
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/models/mg/report'])
|
30
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/models/mg/report_mailer'])
|
31
|
+
require File.join([File.dirname(__FILE__), 'mountain-goat/models/mg/report_item'])
|
23
32
|
|
24
33
|
#$VERBOSE = nil
|
25
34
|
#Dir["#{Gem.searcher.find('mountain-goat').full_gem_path}/lib/tasks/*.rake"].each { |ext| load ext }
|
@@ -0,0 +1,134 @@
|
|
1
|
+
class Analytics
|
2
|
+
#extend Garb::Model
|
3
|
+
|
4
|
+
#metrics :exits, :pageviews, :unique_pageviews
|
5
|
+
#dimensions :page_path, :date
|
6
|
+
|
7
|
+
#filters do
|
8
|
+
# contains(:page_path, '/xxx')
|
9
|
+
#end
|
10
|
+
|
11
|
+
def self.pivot(item, dimension)
|
12
|
+
item.sort! do |x,y|
|
13
|
+
#logger.warn "x: #{x.send(:date)}, y: #{y.send(:date)}"
|
14
|
+
x.send(dimension) <=> y.send(dimension)
|
15
|
+
end
|
16
|
+
|
17
|
+
item
|
18
|
+
#item.map { |res| { dimension => res.send(dimension), value => res.send(value) } }
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.insert_missing_dates_as_zero_through_today(item, dimension, start, valuemap)
|
22
|
+
#assume sorted object-- and that dates are on day-intervals
|
23
|
+
|
24
|
+
result = []
|
25
|
+
running_date = start #item[0].send(dimension)
|
26
|
+
i = 0
|
27
|
+
|
28
|
+
while running_date < ( Date.today + 1 )
|
29
|
+
if i >= item.count
|
30
|
+
break if running_date >= Date.today #skip missing data for today
|
31
|
+
result.push( { dimension => running_date }.merge(valuemap) )
|
32
|
+
else
|
33
|
+
if running_date < item[i].send(dimension)
|
34
|
+
result.push( { dimension => running_date }.merge(valuemap) )
|
35
|
+
elsif running_date == item[i].send(dimension)
|
36
|
+
map = { dimension => running_date }
|
37
|
+
valuemap.each do |dim, val|
|
38
|
+
map[dim] = item[i].send(dim)
|
39
|
+
end
|
40
|
+
result.push(map)
|
41
|
+
i += 1
|
42
|
+
else
|
43
|
+
raise "Dates dont align on time"
|
44
|
+
#running_date > item[i], we've run over the end of the list
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
running_date = running_date + 1
|
49
|
+
end
|
50
|
+
|
51
|
+
result
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.convert_date_to_javascript_time(item, dimension)
|
55
|
+
item.each do |i|
|
56
|
+
date = i.send(dimension)
|
57
|
+
i[dimension] = Time.utc(date.year, date.month, date.day).to_i * 1000
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.pivot_hash_to_titled(map)
|
62
|
+
res = []
|
63
|
+
res_titles = {}
|
64
|
+
i = 0
|
65
|
+
|
66
|
+
map.each do |k,v|
|
67
|
+
res.push( { :name => i, :val => v.to_i } )
|
68
|
+
res_titles.merge!({ i => k })
|
69
|
+
end
|
70
|
+
|
71
|
+
[res, res_titles]
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.options_for_titled_chart(h, t)
|
75
|
+
{ :collection => h, :x => :name, :y => :val }
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.options_for_pie_chart(h)
|
79
|
+
res = {}
|
80
|
+
h.each do |k, v|
|
81
|
+
res.merge!( k => { :collection => [{ :x => 1, :val => v.to_i }], :x => :x, :y => :val, :options => { :color => "##{hash_color( k )}" } })
|
82
|
+
end
|
83
|
+
res
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.options_for_line_chart(h)
|
87
|
+
res = {}
|
88
|
+
h.each do |k, v|
|
89
|
+
title = k || "Direct"
|
90
|
+
res.merge!( title => { :collection => v, :x => :x, :y => :y, :options => { :color => "##{hash_color( title )}" }} )
|
91
|
+
end
|
92
|
+
|
93
|
+
res
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
def self.hash_color(str)
|
98
|
+
s = ( ( 7.times.map { str }.join.hash ** 2 ) % 2**24 ).to_s(16)
|
99
|
+
(6 - s.length).times.map { "0" }.join << s
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.pivot_by_date(collection, start_date, end_date = Time.zone.now)
|
103
|
+
#assume sorted object-- and that dates are on day-intervals
|
104
|
+
|
105
|
+
result = {}
|
106
|
+
start_date -= 60 * 60 * 24 #no day 0??
|
107
|
+
end_date += 60 * 60 * 30 #let's just push this forward a bit..
|
108
|
+
|
109
|
+
running_date = Date.new(start_date.year, start_date.month, start_date.day) #item[0].send(dimension)
|
110
|
+
end_date = Date.new(end_date.year, end_date.month, end_date.day) #item[0].send(dimension)
|
111
|
+
indices = {}
|
112
|
+
collection.each { |source,dates| indices.merge!({ source => 0 }); result[source] = [] }
|
113
|
+
#puts indices.inspect
|
114
|
+
while running_date < end_date
|
115
|
+
collection.each do |source, value|
|
116
|
+
#Get the index in the current channel
|
117
|
+
i = indices[source]
|
118
|
+
|
119
|
+
#Otherwise, let's count the dates
|
120
|
+
v = 0
|
121
|
+
v += 1 and i += 1 while i < value.length && value[i] > running_date && value[i] < (running_date + 1)
|
122
|
+
|
123
|
+
#Store results back
|
124
|
+
indices[source] = i
|
125
|
+
result[source].push( { :x => running_date, :y => v } )
|
126
|
+
end
|
127
|
+
|
128
|
+
running_date = running_date + 1
|
129
|
+
end
|
130
|
+
|
131
|
+
#result.each { |s| s.sort }
|
132
|
+
result
|
133
|
+
end
|
134
|
+
end
|
@@ -1,9 +1,10 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
|
2
|
+
class Mg::ConvertsController < Mg
|
3
|
+
|
3
4
|
# GET /converts
|
4
5
|
# GET /converts.xml
|
5
6
|
def index
|
6
|
-
@converts = Convert.all
|
7
|
+
@converts = Mg::Convert.all
|
7
8
|
|
8
9
|
respond_to do |format|
|
9
10
|
format.html # index.html.erb
|
@@ -14,7 +15,7 @@ class MountainGoatConvertsController < MountainGoatController
|
|
14
15
|
# GET /converts/1
|
15
16
|
# GET /converts/1.xml
|
16
17
|
def show
|
17
|
-
@convert = Convert.find(params[:id])
|
18
|
+
@convert = Mg::Convert.find(params[:id])
|
18
19
|
|
19
20
|
@results_per_day = []
|
20
21
|
created_at = @convert.created_at
|
@@ -54,7 +55,7 @@ class MountainGoatConvertsController < MountainGoatController
|
|
54
55
|
# GET /converts/new
|
55
56
|
# GET /converts/new.xml
|
56
57
|
def new
|
57
|
-
@convert = Convert.new
|
58
|
+
@convert = Mg::Convert.new
|
58
59
|
|
59
60
|
respond_to do |format|
|
60
61
|
format.html # new.html.erb
|
@@ -70,11 +71,11 @@ class MountainGoatConvertsController < MountainGoatController
|
|
70
71
|
# POST /converts
|
71
72
|
# POST /converts.xml
|
72
73
|
def create
|
73
|
-
@convert = Convert.new(params[:convert])
|
74
|
+
@convert = Mg::Convert.new(params[:convert])
|
74
75
|
|
75
76
|
if @convert.save
|
76
77
|
flash[:notice] = 'Convert was successfully created.'
|
77
|
-
redirect_to
|
78
|
+
redirect_to mg_convert_url :id => @convert.id
|
78
79
|
else
|
79
80
|
render :action => "new"
|
80
81
|
end
|
@@ -83,11 +84,11 @@ class MountainGoatConvertsController < MountainGoatController
|
|
83
84
|
# PUT /converts/1
|
84
85
|
# PUT /converts/1.xml
|
85
86
|
def update
|
86
|
-
@convert = Convert.find(params[:id])
|
87
|
+
@convert = Mg::Convert.find(params[:id])
|
87
88
|
|
88
89
|
if @convert.update_attributes(params[:convert])
|
89
90
|
flash[:notice] = 'Convert was successfully updated.'
|
90
|
-
redirect_to
|
91
|
+
redirect_to mg_convert_url :id => @convert.id
|
91
92
|
else
|
92
93
|
render :action => "edit"
|
93
94
|
end
|
@@ -96,11 +97,11 @@ class MountainGoatConvertsController < MountainGoatController
|
|
96
97
|
# DELETE /converts/1
|
97
98
|
# DELETE /converts/1.xml
|
98
99
|
def destroy
|
99
|
-
@convert = Convert.find(params[:id])
|
100
|
+
@convert = Mg::Convert.find(params[:id])
|
100
101
|
@convert.destroy
|
101
102
|
|
102
103
|
respond_to do |format|
|
103
|
-
format.html { redirect_to
|
104
|
+
format.html { redirect_to mg_converts_url }
|
104
105
|
format.xml { head :ok }
|
105
106
|
end
|
106
107
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
class Mg::MetricVariantsController < Mg
|
2
3
|
|
3
4
|
# GET /metric_variants
|
4
5
|
# GET /metric_variants.xml
|
@@ -25,7 +26,7 @@ class MountainGoatMetricVariantsController < MountainGoatController
|
|
25
26
|
# GET /metric_variants/new
|
26
27
|
# GET /metric_variants/new.xml
|
27
28
|
def new
|
28
|
-
@metric = Metric.find( params[:
|
29
|
+
@metric = Metric.find( params[:metric_id] )
|
29
30
|
@metric_variant = MetricVariant.new( :metric_id => @metric.id )
|
30
31
|
|
31
32
|
respond_to do |format|
|
@@ -47,7 +48,7 @@ class MountainGoatMetricVariantsController < MountainGoatController
|
|
47
48
|
|
48
49
|
if @metric_variant.save
|
49
50
|
flash[:notice] = 'Metric variant was successfully created.'
|
50
|
-
redirect_to
|
51
|
+
redirect_to mg_metric_url :id => @metric_variant.metric.id
|
51
52
|
else
|
52
53
|
render :action => "new"
|
53
54
|
end
|
@@ -60,7 +61,7 @@ class MountainGoatMetricVariantsController < MountainGoatController
|
|
60
61
|
|
61
62
|
if @metric_variant.update_attributes(params[:metric_variant])
|
62
63
|
flash[:notice] = 'Metric variant was successfully updated.'
|
63
|
-
redirect_to
|
64
|
+
redirect_to mg_metric_url :id => @metric_variant.metric.id
|
64
65
|
else
|
65
66
|
render :action => "edit"
|
66
67
|
end
|
@@ -73,7 +74,7 @@ class MountainGoatMetricVariantsController < MountainGoatController
|
|
73
74
|
@metric_variant.destroy
|
74
75
|
|
75
76
|
respond_to do |format|
|
76
|
-
format.html { redirect_to
|
77
|
+
format.html { redirect_to mg_metric_variants_url }
|
77
78
|
format.xml { head :ok }
|
78
79
|
end
|
79
80
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
class Mg::MetricsController < Mg
|
2
3
|
|
3
4
|
# GET /metrics
|
4
5
|
# GET /metrics.xml
|
@@ -41,8 +42,7 @@ class MountainGoatMetricsController < MountainGoatController
|
|
41
42
|
# GET /metrics/new
|
42
43
|
# GET /metrics/new.xml
|
43
44
|
def new
|
44
|
-
@
|
45
|
-
@metric = Metric.new(:convert_id => @convert.id)
|
45
|
+
@metric = Metric.new
|
46
46
|
|
47
47
|
respond_to do |format|
|
48
48
|
format.html # new.html.erb
|
@@ -62,7 +62,7 @@ class MountainGoatMetricsController < MountainGoatController
|
|
62
62
|
|
63
63
|
if @metric.save
|
64
64
|
flash[:notice] = 'Metric was successfully created.'
|
65
|
-
redirect_to
|
65
|
+
redirect_to mg_metric_url :id => @metric.id
|
66
66
|
else
|
67
67
|
render :action => "new"
|
68
68
|
end
|
@@ -75,7 +75,7 @@ class MountainGoatMetricsController < MountainGoatController
|
|
75
75
|
|
76
76
|
if @metric.update_attributes(params[:metric])
|
77
77
|
flash[:notice] = 'Metric was successfully updated.'
|
78
|
-
redirect_to
|
78
|
+
redirect_to mg_metric_url :id => @metric.id
|
79
79
|
else
|
80
80
|
render :action => "edit"
|
81
81
|
end
|
@@ -88,11 +88,12 @@ class MountainGoatMetricsController < MountainGoatController
|
|
88
88
|
@metric.destroy
|
89
89
|
|
90
90
|
respond_to do |format|
|
91
|
-
format.html { redirect_to(
|
91
|
+
format.html { redirect_to(mg_metrics_url) }
|
92
92
|
format.xml { head :ok }
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
+
#TODO: This only works if we are using cookie storage? Clear session as well
|
96
97
|
def fresh_metrics
|
97
98
|
#clear metrics
|
98
99
|
#logger.warn "Headerish #{response.headers['cookie']}"
|
@@ -102,6 +103,7 @@ class MountainGoatMetricsController < MountainGoatController
|
|
102
103
|
cookies.delete cookie[0], :domain => WILD_DOMAIN
|
103
104
|
end
|
104
105
|
end
|
106
|
+
|
105
107
|
flash[:notice] = "Your metrics have been cleared from cookies."
|
106
108
|
redirect_to :back
|
107
109
|
end
|