mountain-goat 0.1.8 → 1.0.0
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/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
|