daily 0.0.3 → 0.0.4
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/app/controllers/daily_reports_controller.rb +35 -0
- data/app/controllers/daily_tables_controller.rb +24 -0
- data/app/controllers/{users_controller.rb → daily_users_controller.rb} +6 -6
- data/app/controllers/main_controller.rb +1 -1
- data/app/jobs/generate_report_job.rb +5 -1
- data/app/metrics/metric.rb +41 -0
- data/app/metrics/sql_query.rb +11 -0
- data/app/models/{report.rb → daily_report.rb} +4 -4
- data/app/models/{table.rb → daily_table.rb} +27 -17
- data/app/models/{user.rb → daily_user.rb} +3 -3
- data/app/transforms/transform.rb +2 -1
- data/app/views/daily_reports/_form.erb +14 -0
- data/app/views/{reports → daily_reports}/_list.erb +1 -1
- data/app/views/daily_reports/edit.erb +2 -0
- data/app/views/daily_reports/index.erb +3 -0
- data/app/views/{reports → daily_reports}/new.erb +0 -0
- data/app/views/daily_reports/show.erb +23 -0
- data/app/views/{tables → daily_tables}/_form.erb +5 -2
- data/app/views/{tables → daily_tables}/_list.erb +0 -0
- data/app/views/daily_tables/edit.erb +2 -0
- data/app/views/daily_tables/index.erb +3 -0
- data/app/views/{tables → daily_tables}/new.erb +0 -0
- data/app/views/daily_tables/show.erb +35 -0
- data/app/views/{users → daily_users}/_form.erb +1 -1
- data/app/views/daily_users/_items.erb +8 -0
- data/app/views/{users → daily_users}/_list.erb +0 -0
- data/app/views/daily_users/edit.erb +2 -0
- data/app/views/daily_users/index.erb +3 -0
- data/app/views/{users → daily_users}/new.erb +0 -0
- data/app/views/daily_users/show.erb +4 -0
- data/app/views/main/home.erb +1 -1
- data/config/authorization_rules.rb +11 -11
- data/config/initializers/ruport.rb +1 -2
- data/config/locales/en.yml +27 -1
- data/config/routes.rb +6 -6
- data/db/development.sqlite3 +0 -0
- data/db/migrate/20120111054115_create_table_metrics.rb +42 -0
- data/db/migrate/20120111081745_namespace_models.rb +13 -0
- data/db/schema.rb +26 -25
- data/db/test.sqlite3 +0 -0
- data/lib/daily.rb +4 -4
- data/lib/daily/activemetric.rb +5 -0
- data/lib/daily/daily_config.rb +20 -3
- data/lib/daily/version.rb +1 -1
- data/lib/{daily → engine}/engine.rb +0 -0
- data/lib/tasks/user.rake +2 -2
- metadata +63 -44
- data/app/controllers/reports_controller.rb +0 -35
- data/app/controllers/tables_controller.rb +0 -20
- data/app/views/reports/_form.erb +0 -14
- data/app/views/reports/edit.erb +0 -2
- data/app/views/reports/index.erb +0 -3
- data/app/views/reports/show.erb +0 -23
- data/app/views/tables/edit.erb +0 -2
- data/app/views/tables/index.erb +0 -3
- data/app/views/tables/show.erb +0 -35
- data/app/views/users/_items.erb +0 -8
- data/app/views/users/edit.erb +0 -2
- data/app/views/users/index.erb +0 -3
- data/app/views/users/show.erb +0 -4
@@ -0,0 +1,35 @@
|
|
1
|
+
class DailyReportsController < InheritedResources::Base
|
2
|
+
nested_belongs_to :daily_table, :optional => true
|
3
|
+
filter_resource_access :nested_in => :daily_table, :additional_member => :generate
|
4
|
+
|
5
|
+
def create
|
6
|
+
build_resource.user = current_user
|
7
|
+
create! do |success, failure|
|
8
|
+
success.all { redirect_to daily_table_daily_report_path(@daily_report.table, @daily_report)}
|
9
|
+
failure.all { render :new }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def update
|
14
|
+
update! do |success, failure|
|
15
|
+
success.all { redirect_to daily_table_daily_report_path(@daily_report.table, @daily_report)}
|
16
|
+
failure.all { render :edit }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def generate
|
21
|
+
@daily_report.queue_now!
|
22
|
+
redirect_to daily_table_daily_report_path(@daily_report.table, @daily_report)
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
# methods to make declarative_authorization allow optional table
|
28
|
+
def load_daily_table
|
29
|
+
@daily_table ||= load_parent_controller_object(:daily_table) if params[:daily_table_id]
|
30
|
+
@daily_table # loaded by inherited_resources if there
|
31
|
+
end
|
32
|
+
def new_daily_report_for_collection
|
33
|
+
@daily_report ||= @daily_table ? new_controller_object_for_collection : DailyReport.new
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class DailyTablesController < InheritedResources::Base
|
2
|
+
filter_resource_access
|
3
|
+
|
4
|
+
def new
|
5
|
+
build_resource.metric = "SqlQuery"
|
6
|
+
new!
|
7
|
+
end
|
8
|
+
|
9
|
+
def create
|
10
|
+
build_resource.user = current_user
|
11
|
+
create!
|
12
|
+
end
|
13
|
+
|
14
|
+
def update
|
15
|
+
update!
|
16
|
+
end
|
17
|
+
|
18
|
+
def show
|
19
|
+
show! do
|
20
|
+
@test_html = @daily_table.test if params[:test]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
class
|
1
|
+
class DailyUsersController < InheritedResources::Base
|
2
2
|
before_filter :user_from_current, :only => :edit
|
3
3
|
filter_resource_access
|
4
4
|
|
5
5
|
def update
|
6
|
-
params[:
|
6
|
+
params[:daily_user][:password] = nil if params[:daily_user][:password].blank?
|
7
7
|
|
8
8
|
update! do |success, failure|
|
9
9
|
success.all { redirect_after_update }
|
@@ -16,11 +16,11 @@ class UsersController < InheritedResources::Base
|
|
16
16
|
params[:id] ||= (current_user.try(:id) || 0)
|
17
17
|
end
|
18
18
|
def redirect_after_update
|
19
|
-
if @
|
20
|
-
sign_in @
|
19
|
+
if @daily_user == current_user
|
20
|
+
sign_in @daily_user, :bypass => true
|
21
21
|
redirect_to user_root_path
|
22
|
-
elsif permitted_to? :show, @
|
23
|
-
redirect_to
|
22
|
+
elsif permitted_to? :show, @daily_user
|
23
|
+
redirect_to daily_user_path(@daily_user)
|
24
24
|
else
|
25
25
|
redirect_to user_root_path
|
26
26
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class Metric
|
2
|
+
def self.metrics
|
3
|
+
DailyConfig.load_classes if Rails.env.development?
|
4
|
+
subclasses
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.display_name
|
8
|
+
name.demodulize.underscore.humanize.titleize
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.form_keys
|
12
|
+
[] # override to get more / different
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.validates_presence_of_data
|
16
|
+
@validates_presence_of_data = true
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.get_data_errors(data)
|
20
|
+
return ["can't be blank"] if @validates_presence_of_data and data.blank?
|
21
|
+
validate_data(data) || []
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.validate_data(data)
|
25
|
+
[]
|
26
|
+
end
|
27
|
+
|
28
|
+
attr_accessor :data
|
29
|
+
def initialize(data)
|
30
|
+
self.data = data
|
31
|
+
end
|
32
|
+
|
33
|
+
def setting(key, default = nil)
|
34
|
+
val = settings[key.to_sym]
|
35
|
+
val.blank? ? default : val
|
36
|
+
end
|
37
|
+
|
38
|
+
def result
|
39
|
+
raise("Metrics must override result")
|
40
|
+
end
|
41
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
class
|
1
|
+
class DailyReport < ActiveRecord::Base
|
2
2
|
include SharedBehaviors
|
3
|
-
belongs_to :user
|
4
|
-
belongs_to :table
|
5
|
-
has_many :jobs, :class_name => "::Delayed::Job"
|
3
|
+
belongs_to :user, :class_name => "DailyUser"
|
4
|
+
belongs_to :table, :class_name => "DailyTable"
|
5
|
+
has_many :jobs, :class_name => "::Delayed::Job", :foreign_key => "report_id"
|
6
6
|
|
7
7
|
has_data :formatter
|
8
8
|
|
@@ -1,24 +1,21 @@
|
|
1
|
-
class
|
1
|
+
class DailyTable < ActiveRecord::Base
|
2
2
|
include SharedBehaviors
|
3
3
|
|
4
|
-
belongs_to :user
|
5
|
-
has_many :reports
|
4
|
+
belongs_to :user, :class_name => "DailyUser"
|
5
|
+
has_many :reports, :class_name => "DailyReport", :foreign_key => "table_id"
|
6
|
+
|
7
|
+
# just easier with declarative auth to also have this one
|
8
|
+
has_many :daily_reports, :foreign_key => "table_id"
|
6
9
|
|
7
10
|
generate_guid :guid
|
8
11
|
|
9
12
|
validates_presence_of :user
|
10
13
|
validates_unique_presence_of :name
|
11
|
-
validates_stripped_presence_of :
|
12
|
-
validates_stripped_presence_of :data_type
|
14
|
+
validates_stripped_presence_of :metric
|
13
15
|
|
14
|
-
validate :
|
15
|
-
|
16
|
+
validate :metric_valid
|
16
17
|
serialize :column_names, Array
|
17
18
|
|
18
|
-
def sql?
|
19
|
-
data_type == "sql"
|
20
|
-
end
|
21
|
-
|
22
19
|
def result
|
23
20
|
fetch
|
24
21
|
end
|
@@ -48,18 +45,31 @@ class Table < ActiveRecord::Base
|
|
48
45
|
out.gsub("\n", "<br/>").html_safe
|
49
46
|
end
|
50
47
|
end
|
48
|
+
|
49
|
+
def metric_name
|
50
|
+
return "" if metric.blank?
|
51
|
+
begin
|
52
|
+
return metric.constantize.display_name
|
53
|
+
rescue Exception => e
|
54
|
+
return "#{metric} (unknown)"
|
55
|
+
end
|
56
|
+
end
|
51
57
|
|
52
58
|
protected
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
59
|
+
|
60
|
+
def metric_valid
|
61
|
+
return if metric.blank?
|
62
|
+
begin
|
63
|
+
metric.constantize.get_data_errors(metric_data).each do |message|
|
64
|
+
errors.add(:metric_data, message)
|
65
|
+
end
|
66
|
+
rescue Exception => e
|
67
|
+
errors.add(:metric, "is not known")
|
57
68
|
end
|
58
69
|
end
|
59
70
|
|
60
71
|
def fetch_data
|
61
|
-
|
62
|
-
Ruport::Data::Table.new
|
72
|
+
metric.constantize.new(metric_data).result
|
63
73
|
end
|
64
74
|
|
65
75
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class
|
1
|
+
class DailyUser < ActiveRecord::Base
|
2
2
|
# Include default devise modules. Others available are:
|
3
3
|
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
|
4
4
|
devise :database_authenticatable, :registerable,
|
@@ -7,8 +7,8 @@ class User < ActiveRecord::Base
|
|
7
7
|
# Setup accessible (or protected) attributes for your model
|
8
8
|
attr_accessible :email, :password, :password_confirmation, :remember_me
|
9
9
|
|
10
|
-
has_many :tables
|
11
|
-
has_many :reports
|
10
|
+
has_many :tables, :class_name => "DailyTable", :foreign_key => "user_id"
|
11
|
+
has_many :reports, :class_name => "DailyReport", :foreign_key => "user_id"
|
12
12
|
|
13
13
|
def role_symbols
|
14
14
|
return [] if new_record?
|
data/app/transforms/transform.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
<h3>Table: <%= link_to @daily_report.table.name, daily_table_path(@daily_report.table) %></h3>
|
2
|
+
|
3
|
+
<%= simple_form_for [@daily_report.table, @daily_report] do |f| %>
|
4
|
+
<%= f.input :name %>
|
5
|
+
<%= f.input :filename unless @daily_report.new_record? %>
|
6
|
+
|
7
|
+
<%= f.input :formatter, :collection => DailyReport.formatters %>
|
8
|
+
<%= f.input :formatter_json, :as => :text %>
|
9
|
+
|
10
|
+
<%= f.input :transform, :collection => Transform.transforms, :label_method => :display_name, :value_method => :name %>
|
11
|
+
<%= f.input :transform_json, :as => :text %>
|
12
|
+
|
13
|
+
<%= f.button :submit %>
|
14
|
+
<% end %>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<ul>
|
3
3
|
<% list.each do |report| %>
|
4
4
|
<% if permitted_to? :show, report %>
|
5
|
-
<li><%= link_to report.name,
|
5
|
+
<li><%= link_to report.name, daily_table_daily_report_path(report.table, report) %></li>
|
6
6
|
<% end %>
|
7
7
|
<% end %>
|
8
8
|
</ul>
|
File without changes
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<% title @daily_report.name %>
|
2
|
+
<h3>Table: <%= link_to @daily_report.table.name, daily_table_path(@daily_report.table) %></h3>
|
3
|
+
|
4
|
+
<% if @daily_report.file_exists? %>
|
5
|
+
<h5>URL: <%= link_to @daily_report.url(root_url), @daily_report.url(root_url) %></h5>
|
6
|
+
<% else %>
|
7
|
+
<h5>URL: <%= @daily_report.url(root_url) %></h5>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
<h6>User: <%= "#{@daily_report.user.email}" %></h6>
|
11
|
+
<h6>Running time: <%= report_time_run(@daily_report) %></h6>
|
12
|
+
<h6>Last updated: <%= report_time_ago(@daily_report) %></h6>
|
13
|
+
<h6>Next updated: <%= report_time_next(@daily_report) %></h6>
|
14
|
+
<%= button_to "Queue Update Now", generate_daily_table_daily_report_path(@daily_report.table, @daily_report) if permitted_to? :generate, @daily_report %>
|
15
|
+
|
16
|
+
<%= content_tag(:p, link_to("Edit", edit_daily_table_daily_report_path(@daily_report.table, @daily_report))) if permitted_to? :edit, @daily_report %>
|
17
|
+
|
18
|
+
<%= formatter_display(@daily_report) %>
|
19
|
+
|
20
|
+
<%= transform_display(@daily_report) %>
|
21
|
+
|
22
|
+
<hr/>
|
23
|
+
<%= report_error_html(@daily_report) %>
|
@@ -1,8 +1,11 @@
|
|
1
|
-
<%= simple_form_for @
|
1
|
+
<%= simple_form_for @daily_table do |f| %>
|
2
2
|
<%= f.input :name %>
|
3
|
-
|
3
|
+
|
4
|
+
<%= f.input :metric, :collection => Metric.metrics, :label_method => :display_name, :value_method => :name, :include_blank => false %>
|
5
|
+
<%= f.input :metric_data %>
|
4
6
|
|
5
7
|
<%= f.input :transform, :collection => Transform.transforms, :label_method => :display_name, :value_method => :name %>
|
6
8
|
<%= f.input :transform_json, :as => :text %>
|
9
|
+
|
7
10
|
<%= f.button :submit %>
|
8
11
|
<% end %>
|
File without changes
|
File without changes
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<% title @daily_table.name %>
|
2
|
+
|
3
|
+
<h3>Reports</h3>
|
4
|
+
<p><%= link_to "New report from this table", new_daily_table_daily_report_path(@daily_table) if permitted_to? :report, @daily_table %></p>
|
5
|
+
<%= render "daily_reports/list", :list => @daily_table.reports %>
|
6
|
+
|
7
|
+
<hr/>
|
8
|
+
|
9
|
+
<h6>User: <%= "#{@daily_table.user.email}" %></h6>
|
10
|
+
<h6>Type: <%= "#{@daily_table.metric_name}" %></h6>
|
11
|
+
<h6>Running time: <%= table_time_run(@daily_table) %></h6>
|
12
|
+
<%= content_tag(:p, link_to("Edit", edit_daily_table_path(@daily_table))) if permitted_to? :edit, @daily_table %>
|
13
|
+
|
14
|
+
<% if @test_html %>
|
15
|
+
<p><%= link_to "Hide Table Output", daily_table_path(@daily_table) %></p>
|
16
|
+
<%= @test_html %>
|
17
|
+
<% else %>
|
18
|
+
<p><%= link_to "See Table Output", daily_table_path(@daily_table, :test => true) %></p>
|
19
|
+
|
20
|
+
<% if @daily_table.column_names and @daily_table.column_names.size > 0 %>
|
21
|
+
<table>
|
22
|
+
<tr>
|
23
|
+
<% @daily_table.column_names.each do |name| %>
|
24
|
+
<th><%= name %></th>
|
25
|
+
<% end %>
|
26
|
+
</tr>
|
27
|
+
</table>
|
28
|
+
<% end %>
|
29
|
+
<% end %>
|
30
|
+
|
31
|
+
<hr/>
|
32
|
+
|
33
|
+
<%= simple_format(@daily_table.metric_data) %>
|
34
|
+
|
35
|
+
<%= transform_display(@daily_table) %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<h3>Tables</h3>
|
2
|
+
<p><%= link_to "New Table", new_daily_table_path if user == current_user && permitted_to?(:new, :daily_tables) %></p>
|
3
|
+
<%= render "daily_tables/list", :list => user.tables %>
|
4
|
+
|
5
|
+
<% if user.reports.size > 0 %>
|
6
|
+
<h3>Reports</h3>
|
7
|
+
<%= render "daily_reports/list", :list => user.reports %>
|
8
|
+
<% end %>
|
File without changes
|
File without changes
|