burden 0.1.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.
Files changed (86) hide show
  1. data/.gitignore +3 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +76 -0
  5. data/Rakefile +1 -0
  6. data/burden.gemspec +27 -0
  7. data/burden_web/.gitignore +8 -0
  8. data/burden_web/Gemfile +6 -0
  9. data/burden_web/LICENSE +22 -0
  10. data/burden_web/README.md +3 -0
  11. data/burden_web/Rakefile +29 -0
  12. data/burden_web/app/assets/javascripts/burden_web/application.js +15 -0
  13. data/burden_web/app/assets/stylesheets/burden_web/application.css +7 -0
  14. data/burden_web/app/assets/stylesheets/burden_web/foundation.min.css +1 -0
  15. data/burden_web/app/assets/stylesheets/burden_web/normalize.css +402 -0
  16. data/burden_web/app/controllers/burden_web/application_controller.rb +10 -0
  17. data/burden_web/app/controllers/burden_web/runs_controller.rb +7 -0
  18. data/burden_web/app/controllers/burden_web/tasks_controller.rb +28 -0
  19. data/burden_web/app/helpers/burden_web/application_helper.rb +14 -0
  20. data/burden_web/app/views/burden_web/runs/index.html.erb +21 -0
  21. data/burden_web/app/views/burden_web/tasks/index.html.erb +29 -0
  22. data/burden_web/app/views/layouts/burden_web/application.html.erb +16 -0
  23. data/burden_web/burden_web.gemspec +23 -0
  24. data/burden_web/config/routes.rb +6 -0
  25. data/burden_web/lib/burden_web/engine.rb +5 -0
  26. data/burden_web/lib/burden_web/version.rb +3 -0
  27. data/burden_web/lib/burden_web.rb +5 -0
  28. data/burden_web/script/rails +8 -0
  29. data/burden_web/spec/dummy/Rakefile +7 -0
  30. data/burden_web/spec/dummy/app/assets/javascripts/application.js +15 -0
  31. data/burden_web/spec/dummy/app/assets/stylesheets/application.css +13 -0
  32. data/burden_web/spec/dummy/app/controllers/application_controller.rb +3 -0
  33. data/burden_web/spec/dummy/app/helpers/application_helper.rb +2 -0
  34. data/burden_web/spec/dummy/app/mailers/.gitkeep +0 -0
  35. data/burden_web/spec/dummy/app/models/.gitkeep +0 -0
  36. data/burden_web/spec/dummy/app/views/layouts/application.html.erb +14 -0
  37. data/burden_web/spec/dummy/config/application.rb +65 -0
  38. data/burden_web/spec/dummy/config/boot.rb +10 -0
  39. data/burden_web/spec/dummy/config/database.yml +25 -0
  40. data/burden_web/spec/dummy/config/environment.rb +5 -0
  41. data/burden_web/spec/dummy/config/environments/development.rb +37 -0
  42. data/burden_web/spec/dummy/config/environments/production.rb +67 -0
  43. data/burden_web/spec/dummy/config/environments/test.rb +37 -0
  44. data/burden_web/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  45. data/burden_web/spec/dummy/config/initializers/burden.rb +6 -0
  46. data/burden_web/spec/dummy/config/initializers/inflections.rb +15 -0
  47. data/burden_web/spec/dummy/config/initializers/mime_types.rb +5 -0
  48. data/burden_web/spec/dummy/config/initializers/secret_token.rb +7 -0
  49. data/burden_web/spec/dummy/config/initializers/session_store.rb +8 -0
  50. data/burden_web/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  51. data/burden_web/spec/dummy/config/locales/en.yml +5 -0
  52. data/burden_web/spec/dummy/config/routes.rb +3 -0
  53. data/burden_web/spec/dummy/config.ru +4 -0
  54. data/burden_web/spec/dummy/db/migrate/20130607082646_create_burden_runs.rb +14 -0
  55. data/burden_web/spec/dummy/db/schema.rb +23 -0
  56. data/burden_web/spec/dummy/lib/assets/.gitkeep +0 -0
  57. data/burden_web/spec/dummy/lib/tasks/bad_failure.rake +6 -0
  58. data/burden_web/spec/dummy/lib/tasks/good_bar.rake +6 -0
  59. data/burden_web/spec/dummy/lib/tasks/good_foo.rake +6 -0
  60. data/burden_web/spec/dummy/lib/tasks/unpredictable.rake +4 -0
  61. data/burden_web/spec/dummy/log/.gitkeep +0 -0
  62. data/burden_web/spec/dummy/public/404.html +26 -0
  63. data/burden_web/spec/dummy/public/422.html +26 -0
  64. data/burden_web/spec/dummy/public/500.html +25 -0
  65. data/burden_web/spec/dummy/public/favicon.ico +0 -0
  66. data/burden_web/spec/dummy/script/rails +6 -0
  67. data/lib/burden/config.rb +31 -0
  68. data/lib/burden/statistics.rb +41 -0
  69. data/lib/burden/storage/abstract/run.rb +28 -0
  70. data/lib/burden/storage/active_record/run.rb +13 -0
  71. data/lib/burden/storage/mongo_mapper/run.rb +18 -0
  72. data/lib/burden/storage/mongoid/run.rb +18 -0
  73. data/lib/burden/storage.rb +21 -0
  74. data/lib/burden/version.rb +3 -0
  75. data/lib/burden/wrapper.rb +58 -0
  76. data/lib/burden.rb +19 -0
  77. data/lib/rails/generators/burden/install/USAGE +9 -0
  78. data/lib/rails/generators/burden/install/install_generator.rb +24 -0
  79. data/lib/rails/generators/burden/install/templates/burden_initializer.rb +4 -0
  80. data/lib/rails/generators/burden/install/templates/burden_runs_migration.rb +14 -0
  81. data/lib/rake/task.rb +9 -0
  82. data/spec/burden/wrapper_spec.rb +12 -0
  83. data/spec/passing_spec.rb +7 -0
  84. data/spec/rake/task_spec.rb +14 -0
  85. data/spec/spec_helper.rb +7 -0
  86. metadata +231 -0
@@ -0,0 +1,18 @@
1
+ module Burden
2
+ module Storage
3
+ module Mongoid
4
+ class Run
5
+ include ::Mongoid::Document
6
+
7
+ store_in collection: 'burden_runs'
8
+ field :name, type: String
9
+ field :success, type: Boolean
10
+ field :execution_time, type: Float
11
+ field :timestamp, type: Time
12
+
13
+ scope :summary, ->{ sort(timestamp: -1).group_by(&:name) }
14
+ scope :history, ->(task_name){ where(name: task_name).sort(timestamp: -1).group_by(&:name) }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ module Burden
2
+ module Storage
3
+ def run
4
+ case Burden.config.storage
5
+ when :active_record, :activerecord
6
+ require 'burden/storage/active_record/run'
7
+ Burden::Storage::ActiveRecord::Run
8
+ when :mongoid
9
+ require 'burden/storage/mongoid/run'
10
+ Burden::Storage::Mongoid::Run
11
+ when :mongo_mapper, :mongomapper
12
+ require 'burden/storage/mongo_mapper/run'
13
+ Burden::Storage::MongoMapper::Run
14
+ else
15
+ raise Exception.new("Unknown storage: #{storage}")
16
+ end
17
+ end
18
+
19
+ extend self
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ module Burden
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,58 @@
1
+ module Burden
2
+ class Wrapper
3
+ attr_reader :name, :block, :success, :exception, :execution_time, :timestamp
4
+
5
+ def initialize(name, block)
6
+ @name = name
7
+ @block = block
8
+ @success = true
9
+ @timestamp = Time.now.utc
10
+ end
11
+
12
+ def execute
13
+ return block.call if ignored?
14
+
15
+ result = measure_time do
16
+ intercept_exceptions do
17
+ block.call
18
+ end
19
+ end
20
+ save_statistics
21
+
22
+ unless success
23
+ Burden.config.trigger_failure_callback(name, execution_time, timestamp)
24
+ raise(exception)
25
+ end
26
+
27
+ Burden.config.trigger_success_callback(name, execution_time, timestamp)
28
+ result
29
+ end
30
+
31
+ private
32
+
33
+ def measure_time
34
+ t = Time.now
35
+ result = yield
36
+ @execution_time = Time.now.to_f - t.to_f
37
+ result
38
+ end
39
+
40
+ def intercept_exceptions
41
+ begin
42
+ yield
43
+ rescue => e
44
+ @success = false
45
+ @exception = e
46
+ nil
47
+ end
48
+ end
49
+
50
+ def ignored?
51
+ Burden.config.ignored_tasks.collect{ |r| (name =~ r) ? 1 : 0 }.map(&:to_i).inject(:+) != 0
52
+ end
53
+
54
+ def save_statistics
55
+ Statistics.new(name: name, success: success, execution_time: execution_time, timestamp: timestamp).save
56
+ end
57
+ end
58
+ end
data/lib/burden.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'bundler/setup'
2
+ require 'rake'
3
+ require File.expand_path('../rake/task', __FILE__)
4
+
5
+ require 'burden/config'
6
+ require 'burden/statistics'
7
+ require 'burden/storage'
8
+ require 'burden/version'
9
+ require 'burden/wrapper'
10
+
11
+ module Burden
12
+ include Config::Helper
13
+
14
+ def wrap(name, &block)
15
+ Wrapper.new(name, block).execute
16
+ end
17
+
18
+ extend self
19
+ end
@@ -0,0 +1,9 @@
1
+ Description:
2
+ Generates Burden migration and initializer
3
+
4
+ Example:
5
+ rails generate burden:install
6
+
7
+ This will create:
8
+ config/initializers/burden.rb
9
+ db/migrate/create_burden_runs.rb
@@ -0,0 +1,24 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+
4
+ module Burden
5
+ module Generators
6
+ class InstallGenerator < Rails::Generators::Base
7
+ include Rails::Generators::Migration
8
+
9
+ source_root File.expand_path('../templates', __FILE__)
10
+
11
+ def self.next_migration_number(path)
12
+ Time.now.utc.strftime('%Y%m%d%H%M%S')
13
+ end
14
+
15
+ def create_migration
16
+ migration_template 'burden_runs_migration.rb', 'db/migrate/create_burden_runs.rb'
17
+ end
18
+
19
+ def create_initializer
20
+ template 'burden_initializer.rb', 'config/initializers/burden.rb'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,4 @@
1
+ Burden.configure do |c|
2
+ c.storage = :active_record
3
+ c.ignored_tasks = [/environment/]
4
+ end
@@ -0,0 +1,14 @@
1
+ class CreateBurdenRuns < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :burden_runs do |t|
4
+ t.string :name
5
+ t.boolean :success
6
+ t.float :execution_time
7
+ t.datetime :timestamp
8
+ end
9
+ end
10
+
11
+ def self.down
12
+ drop_table :burden_runs
13
+ end
14
+ end
data/lib/rake/task.rb ADDED
@@ -0,0 +1,9 @@
1
+ module Rake
2
+ class Task
3
+ alias_method :original_execute, :execute
4
+
5
+ def execute(args)
6
+ Burden.wrap(name){ original_execute(args) }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Burden::Wrapper do
4
+ before :all do
5
+ Rake::Task.define_task('dummy_task'){}
6
+ Rake::Task['dummy_task'].invoke
7
+ end
8
+
9
+ it 'should work' do
10
+ 'YAY!'
11
+ end
12
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'nothing' do
4
+ it 'goes wrong' do
5
+ true.should be_true
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+ require 'ostruct'
3
+
4
+ describe Rake::Task do
5
+ describe '#execute' do
6
+ let(:dummy_task){ Rake::Task.new('dummy', OpenStruct.new) }
7
+
8
+ context 'for dummy task' do
9
+ subject{ dummy_task }
10
+ its(:methods){ should include :execute }
11
+ its(:methods){ should include :original_execute }
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ require 'burden'
2
+
3
+ RSpec.configure do |config|
4
+ config.formatter = :progress
5
+ config.color_enabled = true
6
+ config.tty = true
7
+ end
metadata ADDED
@@ -0,0 +1,231 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: burden
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Gregory Eremin
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ type: :runtime
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: activerecord
32
+ type: :development
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: sqlite3
48
+ type: :development
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: bundler
64
+ type: :development
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ version: '1.3'
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '1.3'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rails
80
+ type: :development
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '3.1'
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '3.1'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rspec
96
+ type: :development
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '2.0'
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '2.0'
110
+ description: Rake tasks manager and statistics collector
111
+ email:
112
+ - magnolia_fan@me.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - .gitignore
118
+ - Gemfile
119
+ - LICENSE.txt
120
+ - README.md
121
+ - Rakefile
122
+ - burden.gemspec
123
+ - burden_web/.gitignore
124
+ - burden_web/Gemfile
125
+ - burden_web/LICENSE
126
+ - burden_web/README.md
127
+ - burden_web/Rakefile
128
+ - burden_web/app/assets/javascripts/burden_web/application.js
129
+ - burden_web/app/assets/stylesheets/burden_web/application.css
130
+ - burden_web/app/assets/stylesheets/burden_web/foundation.min.css
131
+ - burden_web/app/assets/stylesheets/burden_web/normalize.css
132
+ - burden_web/app/controllers/burden_web/application_controller.rb
133
+ - burden_web/app/controllers/burden_web/runs_controller.rb
134
+ - burden_web/app/controllers/burden_web/tasks_controller.rb
135
+ - burden_web/app/helpers/burden_web/application_helper.rb
136
+ - burden_web/app/views/burden_web/runs/index.html.erb
137
+ - burden_web/app/views/burden_web/tasks/index.html.erb
138
+ - burden_web/app/views/layouts/burden_web/application.html.erb
139
+ - burden_web/burden_web.gemspec
140
+ - burden_web/config/routes.rb
141
+ - burden_web/lib/burden_web.rb
142
+ - burden_web/lib/burden_web/engine.rb
143
+ - burden_web/lib/burden_web/version.rb
144
+ - burden_web/script/rails
145
+ - burden_web/spec/dummy/Rakefile
146
+ - burden_web/spec/dummy/app/assets/javascripts/application.js
147
+ - burden_web/spec/dummy/app/assets/stylesheets/application.css
148
+ - burden_web/spec/dummy/app/controllers/application_controller.rb
149
+ - burden_web/spec/dummy/app/helpers/application_helper.rb
150
+ - burden_web/spec/dummy/app/mailers/.gitkeep
151
+ - burden_web/spec/dummy/app/models/.gitkeep
152
+ - burden_web/spec/dummy/app/views/layouts/application.html.erb
153
+ - burden_web/spec/dummy/config.ru
154
+ - burden_web/spec/dummy/config/application.rb
155
+ - burden_web/spec/dummy/config/boot.rb
156
+ - burden_web/spec/dummy/config/database.yml
157
+ - burden_web/spec/dummy/config/environment.rb
158
+ - burden_web/spec/dummy/config/environments/development.rb
159
+ - burden_web/spec/dummy/config/environments/production.rb
160
+ - burden_web/spec/dummy/config/environments/test.rb
161
+ - burden_web/spec/dummy/config/initializers/backtrace_silencers.rb
162
+ - burden_web/spec/dummy/config/initializers/burden.rb
163
+ - burden_web/spec/dummy/config/initializers/inflections.rb
164
+ - burden_web/spec/dummy/config/initializers/mime_types.rb
165
+ - burden_web/spec/dummy/config/initializers/secret_token.rb
166
+ - burden_web/spec/dummy/config/initializers/session_store.rb
167
+ - burden_web/spec/dummy/config/initializers/wrap_parameters.rb
168
+ - burden_web/spec/dummy/config/locales/en.yml
169
+ - burden_web/spec/dummy/config/routes.rb
170
+ - burden_web/spec/dummy/db/migrate/20130607082646_create_burden_runs.rb
171
+ - burden_web/spec/dummy/db/schema.rb
172
+ - burden_web/spec/dummy/lib/assets/.gitkeep
173
+ - burden_web/spec/dummy/lib/tasks/bad_failure.rake
174
+ - burden_web/spec/dummy/lib/tasks/good_bar.rake
175
+ - burden_web/spec/dummy/lib/tasks/good_foo.rake
176
+ - burden_web/spec/dummy/lib/tasks/unpredictable.rake
177
+ - burden_web/spec/dummy/log/.gitkeep
178
+ - burden_web/spec/dummy/public/404.html
179
+ - burden_web/spec/dummy/public/422.html
180
+ - burden_web/spec/dummy/public/500.html
181
+ - burden_web/spec/dummy/public/favicon.ico
182
+ - burden_web/spec/dummy/script/rails
183
+ - lib/burden.rb
184
+ - lib/burden/config.rb
185
+ - lib/burden/statistics.rb
186
+ - lib/burden/storage.rb
187
+ - lib/burden/storage/abstract/run.rb
188
+ - lib/burden/storage/active_record/run.rb
189
+ - lib/burden/storage/mongo_mapper/run.rb
190
+ - lib/burden/storage/mongoid/run.rb
191
+ - lib/burden/version.rb
192
+ - lib/burden/wrapper.rb
193
+ - lib/rails/generators/burden/install/USAGE
194
+ - lib/rails/generators/burden/install/install_generator.rb
195
+ - lib/rails/generators/burden/install/templates/burden_initializer.rb
196
+ - lib/rails/generators/burden/install/templates/burden_runs_migration.rb
197
+ - lib/rake/task.rb
198
+ - spec/burden/wrapper_spec.rb
199
+ - spec/passing_spec.rb
200
+ - spec/rake/task_spec.rb
201
+ - spec/spec_helper.rb
202
+ homepage: https://github.com/magnolia-fan/burden
203
+ licenses:
204
+ - MIT
205
+ post_install_message:
206
+ rdoc_options: []
207
+ require_paths:
208
+ - lib
209
+ required_ruby_version: !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
212
+ - - ! '>='
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ required_rubygems_version: !ruby/object:Gem::Requirement
216
+ none: false
217
+ requirements:
218
+ - - ! '>='
219
+ - !ruby/object:Gem::Version
220
+ version: '0'
221
+ requirements: []
222
+ rubyforge_project:
223
+ rubygems_version: 1.8.23
224
+ signing_key:
225
+ specification_version: 3
226
+ summary: Rake tasks manager and statistics collector
227
+ test_files:
228
+ - spec/burden/wrapper_spec.rb
229
+ - spec/passing_spec.rb
230
+ - spec/rake/task_spec.rb
231
+ - spec/spec_helper.rb