Commit d5337194fc2e75020e4a9558a3ae0a09921d9580

Authored by Stephen Crosby
1 parent 47085886
Exists in master and in 1 other branch production

purge old migrations

Refs #921

By now, hopefully all our users have upgraded at least up to v0.3.0 and
run migrations there which would include all but one migration at this
point. Users who are upgrading from an older version of Errbit should
check out v0.4.0, run migrations and then continue on from there.

This is the migration plan going forward and its documented in the
upgrade section of the README file.
@@ -9,6 +9,7 @@ gem 'actionpack', RAILS_VERSION @@ -9,6 +9,7 @@ gem 'actionpack', RAILS_VERSION
9 gem 'railties', RAILS_VERSION 9 gem 'railties', RAILS_VERSION
10 10
11 gem 'mongoid', '5.0.0.beta' 11 gem 'mongoid', '5.0.0.beta'
  12 +gem 'mongoid_rails_migrations'
12 13
13 gem 'devise' 14 gem 'devise'
14 gem 'haml' 15 gem 'haml'
@@ -184,6 +184,11 @@ GEM @@ -184,6 +184,11 @@ GEM
184 mongoid (>= 3.0.1) 184 mongoid (>= 3.0.1)
185 rake 185 rake
186 rspec (>= 2.14) 186 rspec (>= 2.14)
  187 + mongoid_rails_migrations (1.0.1)
  188 + activesupport (>= 3.2.0)
  189 + bundler (>= 1.0.0)
  190 + rails (>= 3.2.0)
  191 + railties (>= 3.2.0)
187 multi_json (1.11.2) 192 multi_json (1.11.2)
188 multi_xml (0.5.5) 193 multi_xml (0.5.5)
189 multipart-post (2.0.0) 194 multipart-post (2.0.0)
@@ -211,7 +216,6 @@ GEM @@ -211,7 +216,6 @@ GEM
211 omniauth-oauth2 (1.3.1) 216 omniauth-oauth2 (1.3.1)
212 oauth2 (~> 1.0) 217 oauth2 (~> 1.0)
213 omniauth (~> 1.2) 218 omniauth (~> 1.2)
214 - optionable (0.2.0)  
215 origin (2.1.1) 219 origin (2.1.1)
216 orm_adapter (0.5.0) 220 orm_adapter (0.5.0)
217 pjax_rails (0.4.0) 221 pjax_rails (0.4.0)
@@ -423,6 +427,7 @@ DEPENDENCIES @@ -423,6 +427,7 @@ DEPENDENCIES
423 meta_request 427 meta_request
424 mongoid (= 5.0.0.beta) 428 mongoid (= 5.0.0.beta)
425 mongoid-rspec 429 mongoid-rspec
  430 + mongoid_rails_migrations
426 omniauth-github 431 omniauth-github
427 pjax_rails 432 pjax_rails
428 poltergeist 433 poltergeist
@@ -195,7 +195,13 @@ rake assets:precompile @@ -195,7 +195,13 @@ rake assets:precompile
195 195
196 This will ensure that your application stays up to date with any schema changes. 196 This will ensure that your application stays up to date with any schema changes.
197 197
198 -### Upgrading errbit from version 0.3 to 0.4 198 +### Upgrading errbit beyond v0.4.0
  199 +
  200 +* You must have already run migrations at least up to v0.3.0. Check to
  201 + make sure you're schema version is at least 20131011155638 by running rake
  202 + db:version before you upgrade beyond v0.4.0
  203 +
  204 +### Upgrading errbit from v0.3.0 to v0.4.0
199 205
200 * All configuration is now done through the environment. See 206 * All configuration is now done through the environment. See
201 [configuration](docs/configuration.md) 207 [configuration](docs/configuration.md)
db/migrate/20110422152027_move_notices_to_separate_collection.rb
@@ -1,38 +0,0 @@ @@ -1,38 +0,0 @@
1 -class MoveNoticesToSeparateCollection < Mongoid::Migration  
2 - def self.up  
3 - errs_coll = connection["errs"]  
4 -  
5 - # copy embedded Notices into a separate collection  
6 - errs = errs_coll.find.select(notices: 1)  
7 - errs.each do |err|  
8 - next unless err['notices']  
9 -  
10 - # This Err was created after the Problem->Err->Notice redesign  
11 - next if err['app_id'].nil? or err['problem_id']  
12 -  
13 - e = Err.find(err['_id'])  
14 - # disable email notifications  
15 - old_notify = e.app.notify_on_errs?  
16 - e.app.update_attribute(:notify_on_errs, false)  
17 - puts "Copying notices for Err #{err['_id']}"  
18 - err['notices'].each do |notice|  
19 - e.notices.create!(notice)  
20 - end  
21 - e.app.update_attribute(:notify_on_errs, old_notify)  
22 - errs_coll.find({ "_id" => err['_id']}).update({ "$unset" => { "notices" => 1}})  
23 - end  
24 - (  
25 - Problem.where(:environment => '') |  
26 - Problem.where(:environment => nil) |  
27 - Problem.where(:environment => {})  
28 - ).each {|pr|  
29 - pr.update_attributes(:environment => 'old')  
30 - }  
31 - Rake::Task["errbit:db:update_notices_count"].invoke  
32 - Rake::Task["errbit:db:update_problem_attrs"].invoke  
33 - end  
34 -  
35 - def self.down  
36 - end  
37 -end  
38 -  
db/migrate/20110812135951_move_issue_trackers_to_sti.rb
@@ -1,36 +0,0 @@ @@ -1,36 +0,0 @@
1 -class MoveIssueTrackersToSti < Mongoid::Migration  
2 - def self.up  
3 - App.all.each do |app|  
4 - # Update all embedded issue trackers to use STI patterns.  
5 - # All issue trackers now subclass the IssueTracker model,  
6 - # and their class is stored in the '_type' field, which is  
7 - # also aliased to 'type'.  
8 - tracker = app.attributes['issue_tracker']  
9 - if tracker && tracker['issue_tracker_type']  
10 - tracker['_type'] = case tracker['issue_tracker_type']  
11 - when 'lighthouseapp'; "IssueTrackers::LighthouseTracker"  
12 - when 'redmine'; "IssueTrackers::RedmineTracker"  
13 - when 'pivotal'; "IssueTrackers::PivotalLabsTracker"  
14 - when 'fogbugz'; "IssueTrackers::FogbugzTracker"  
15 - when 'mingle'; "IssueTrackers::MingleTracker"  
16 - else; nil  
17 - end  
18 -  
19 - if tracker['issue_tracker_type'] == "none"  
20 - App.collection.where({ _id: app.id }).update({  
21 - "$unset" => { :issue_tracker => 1 }  
22 - })  
23 - else  
24 - tracker.delete('issue_tracker_type')  
25 - App.collection.where({ _id: app.id }).update({  
26 - "$set" => { :issue_tracker => tracker }  
27 - })  
28 - end  
29 - end  
30 - end  
31 - end  
32 -  
33 - def self.down  
34 - end  
35 -end  
36 -  
db/migrate/20110905134638_link_errs_to_problems.rb
@@ -1,33 +0,0 @@ @@ -1,33 +0,0 @@
1 -class LinkErrsToProblems < Mongoid::Migration  
2 - def self.up  
3 - puts "== Migrating from Errs to Problems..."  
4 -  
5 - puts "==== Copy err.klass to notice.klass..."  
6 - Notice.all.each do |notice|  
7 - if notice.err && (klass = notice.err['klass'])  
8 - notice.update_attribute(:klass, klass)  
9 - end  
10 - end  
11 -  
12 - puts "==== Create a Problem for each Err..."  
13 - Err.all.each do |err|  
14 - if err['app_id'] && app = App.where(:_id => err['app_id']).first  
15 - err.problem = app.problems.create(:_id => err.id)  
16 - err.problem.resolve! if err.resolved  
17 - # don't bother checking err for issue link, if it ain't got one the NoMethodError  
18 - # is raised, else this works fine.  
19 - err.problem.update_attribute(:issue_link, err.issue_link) rescue NoMethodError  
20 - err.save  
21 - end  
22 - end  
23 -  
24 - puts "==== Updating problem cached attributes..."  
25 - Rake::Task["errbit:db:update_problem_attrs"].invoke  
26 - puts "==== Updating notice counts..."  
27 - Rake::Task["errbit:db:update_notices_count"].invoke  
28 - end  
29 -  
30 - def self.down  
31 - end  
32 -end  
33 -  
db/migrate/20111019163257_add_problem_comments_count.rb
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -class AddProblemCommentsCount < Mongoid::Migration  
2 - def self.up  
3 - Problem.all.each do |problem|  
4 - problem.update_attributes(:comments_count => problem.comments.count)  
5 - end  
6 - end  
7 -  
8 - def self.down  
9 - end  
10 -end  
db/migrate/20111102173347_cache_problem_statistics_fix.rb
@@ -1,33 +0,0 @@ @@ -1,33 +0,0 @@
1 -class CacheProblemStatisticsFix < Mongoid::Migration  
2 - def self.up  
3 - Problem.all.each do |problem|  
4 - messages = {}  
5 - hosts = {}  
6 - user_agents = {}  
7 - problem.notices.each do |notice|  
8 - messages = count_attribute(messages, notice.message)  
9 - hosts = count_attribute(hosts, notice.host)  
10 - user_agents = count_attribute(user_agents, notice.user_agent_string)  
11 - end  
12 - problem.update_attributes(:messages => messages, :hosts => hosts, :user_agents => user_agents)  
13 - end  
14 - end  
15 -  
16 - def self.down  
17 - Problem.all.each do |problem|  
18 - problem.update_attributes(:messages => {}, :hosts => {}, :user_agents => {})  
19 - end  
20 - end  
21 -  
22 - private  
23 - def self.count_attribute(counter, value)  
24 - index = Digest::MD5.hexdigest(value.to_s)  
25 - if counter[index].nil?  
26 - counter[index] = {'value' => value, 'count' => 1}  
27 - else  
28 - counter[index]['count'] += 1  
29 - end  
30 - counter  
31 - end  
32 -  
33 -end  
db/migrate/20120530005915_rename_klass_to_error_class.rb
@@ -1,13 +0,0 @@ @@ -1,13 +0,0 @@
1 -class RenameKlassToErrorClass < Mongoid::Migration  
2 - def self.up  
3 - [Problem, Err, Notice].each do |model|  
4 - model.collection.find.update({'$rename' => {'klass' => 'error_class'}}, :multi => true, :safe => true)  
5 - end  
6 - end  
7 -  
8 - def self.down  
9 - [Problem, Err, Notice].each do |model|  
10 - model.collection.find.update({'$rename' => {'error_class' => 'klass'}}, :multi => true, :safe => true)  
11 - end  
12 - end  
13 -end  
db/migrate/20120603112130_change_github_url_to_github_repo.rb
@@ -1,30 +0,0 @@ @@ -1,30 +0,0 @@
1 -class ChangeGithubUrlToGithubRepo < Mongoid::Migration  
2 - def self.normalize_github_repo(repo)  
3 - return if repo.blank?  
4 - github_host = URI.parse(Errbit::Config.github_url).host  
5 - github_host = Regexp.escape(github_host)  
6 - repo.strip!  
7 - repo.sub!(/(git@|https?:\/\/)#{github_host}(\/|:)/, '')  
8 - repo.sub!(/\.git$/, '')  
9 - repo  
10 - end  
11 -  
12 - def self.up  
13 - App.collection.find.update({'$rename' => {'github_url' => 'github_repo'}}, :multi => true, :safe => true)  
14 - App.all.each do |app|  
15 - normalized_repo = self.normalize_github_repo(app.attributes['github_repo'])  
16 - App.collection.where({ _id: app.id }).update({  
17 - "$set" => { :github_repo => normalized_repo }  
18 - })  
19 - end  
20 - end  
21 -  
22 - def self.down  
23 - App.collection.find.update({'$rename' => {'github_repo' => 'github_url'}}, :multi => true, :safe => true)  
24 - App.all.each do |app|  
25 - unless app.github_repo.include?("github.com")  
26 - app.update_attribute :github_url, "https://github.com/" << app.github_url  
27 - end  
28 - end  
29 - end  
30 -end  
db/migrate/20120605091105_set_issue_type_on_problems.rb
@@ -1,12 +0,0 @@ @@ -1,12 +0,0 @@
1 -class SetIssueTypeOnProblems < Mongoid::Migration  
2 - def self.up  
3 - Problem.all.each do |p|  
4 - if p.issue_link.present? && p.app.issue_tracker_configured?  
5 - p.update_attribute :issue_type, p.app.issue_tracker.label  
6 - end  
7 - end  
8 - end  
9 -  
10 - def self.down  
11 - end  
12 -end  
db/migrate/20120822195841_set_first_notice_at_on_problems.rb
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -class SetFirstNoticeAtOnProblems < Mongoid::Migration  
2 - def self.up  
3 - Problem.all.each do |problem|  
4 - problem.update_attribute :first_notice_at, problem.notices.order_by([:created_at, :asc]).first.try(:created_at)  
5 - end  
6 - end  
7 -  
8 - def self.down  
9 - end  
10 -end  
db/migrate/20120829034812_ensure_that_problems_last_notice_at_is_not_nil.rb
@@ -1,23 +0,0 @@ @@ -1,23 +0,0 @@
1 -class EnsureThatProblemsLastNoticeAtIsNotNil < Mongoid::Migration  
2 - def self.up  
3 - Problem.where("$or" => [{:last_notice_at => nil}, {:first_notice_at => nil}]).each do |problem|  
4 - first_notice = problem.notices.order_by([:created_at, :asc]).first  
5 -  
6 - # Destroy problems with no notices  
7 - if first_notice.nil?  
8 - problem.destroy  
9 - next  
10 - end  
11 -  
12 - last_notice = problem.notices.order_by([:created_at, :asc]).last  
13 -  
14 - problem.update_attributes!({  
15 - :first_notice_at => first_notice.created_at,  
16 - :last_notice_at => last_notice.created_at  
17 - })  
18 - end  
19 - end  
20 -  
21 - def self.down  
22 - end  
23 -end  
db/migrate/20121003223358_extract_backtraces.rb
@@ -1,16 +0,0 @@ @@ -1,16 +0,0 @@
1 -class ExtractBacktraces < Mongoid::Migration  
2 - def self.up  
3 - say "It could take long time (hours if you have many Notices)"  
4 - Notice.unscoped.where(backtrace_id: nil).each do |notice|  
5 - next if notice.backtrace.present? || notice['backtrace'].nil?  
6 - backtrace = Backtrace.find_or_create(:raw => notice['backtrace'] || [])  
7 - notice.unset(:backtrace)  
8 - notice.backtrace = backtrace  
9 - notice.save!  
10 - end  
11 - say "run `db.repairDatabase()` (in mongodb console) to recover deleted space"  
12 - end  
13 -  
14 - def self.down  
15 - end  
16 -end  
db/migrate/20121005142110_regenerate_err_fingerprints.rb
@@ -1,15 +0,0 @@ @@ -1,15 +0,0 @@
1 -class RegenerateErrFingerprints < Mongoid::Migration  
2 - def self.up  
3 - Err.all.each do |err|  
4 - if err.notices.any? && err.problem  
5 - err.update_attribute(  
6 - :fingerprint,  
7 - Fingerprint::Sha1.generate(err.notices.first, err.app.api_key)  
8 - )  
9 - end  
10 - end  
11 - end  
12 -  
13 - def self.down  
14 - end  
15 -end  
db/migrate/20130208135718_allow_custom_xmpp_on_gtalk.rb.rb
@@ -1,17 +0,0 @@ @@ -1,17 +0,0 @@
1 -class AllowCustomXmppOnGtalk < Mongoid::Migration  
2 - def self.up  
3 - App.all.each do |app|  
4 - if app.notification_service and app.notification_service._type.include?("Gtalk")  
5 - user_id = app.notification_service.room_id  
6 - app.notification_service.update_attributes(:service => 'talk.google.com',  
7 - :service_url => "http://www.google.com/talk/",  
8 - :user_id => user_id,  
9 - :room_id => nil)  
10 -  
11 - end  
12 - end  
13 - end  
14 -  
15 - def self.down  
16 - end  
17 -end  
db/migrate/20130212112719_add_interval_field_for_notifications.rb
@@ -1,12 +0,0 @@ @@ -1,12 +0,0 @@
1 -class AddIntervalFieldForNotifications < Mongoid::Migration  
2 - def self.up  
3 - App.all.each do |app|  
4 - if app.notification_service  
5 - app.notification_service.update_attributes(:notify_at_notices => [0])  
6 - end  
7 - end  
8 - end  
9 -  
10 - def self.down  
11 - end  
12 -end  
db/migrate/20131011155638_extract_issue_tracker.rb
@@ -1,46 +0,0 @@ @@ -1,46 +0,0 @@
1 -class ExtractIssueTracker < Mongoid::Migration  
2 -  
3 - TRACKER_MAPPING = {  
4 - 'ErrbitTracPlugin::IssueTracker' => 'trac',  
5 - 'IssueTrackers::BitbucketIssuesTracker' => 'bitbucket',  
6 - 'IssueTrackers::FogbugzTracker' => 'fogbugz',  
7 - 'IssueTrackers::GithubIssuesTracker' => 'github',  
8 - 'IssueTrackers::GitlabTracker' => 'gitlab',  
9 - 'IssueTrackers::JiraTracker' => 'jira',  
10 - 'IssueTrackers::LighthouseTracker' => 'lighthouse',  
11 - 'IssueTrackers::PivotalLabsTracker' => 'pivotal',  
12 - 'IssueTrackers::RedmineTracker' => 'redmine',  
13 - 'IssueTrackers::UnfuddleTracker' => 'unfuddle'  
14 - }  
15 -  
16 - def self.up  
17 - App.all.each do |app|  
18 - next unless app.attributes['issue_tracker'].present?  
19 - next unless app.attributes['issue_tracker']['_type'].present?  
20 -  
21 - options = app['issue_tracker'].dup  
22 - options.delete('_type')  
23 - options.delete('_id')  
24 -  
25 - _type = app.attributes['issue_tracker']['_type']  
26 - updated_at = options.delete('updated_at')  
27 - created_at = options.delete('created_at')  
28 -  
29 - if TRACKER_MAPPING.include?(_type)  
30 - tracker = {  
31 - 'type_tracker' => TRACKER_MAPPING[_type],  
32 - 'options' => options,  
33 - 'updated_at' => updated_at,  
34 - 'created_at' => created_at  
35 - }  
36 -  
37 - App.collection.where({ _id: app.id }).update({  
38 - "$set" => { :issue_tracker => tracker }  
39 - })  
40 - end  
41 - end  
42 - end  
43 -  
44 - def self.down  
45 - end  
46 -end  
db/migrate/20131206152837_add_min_app_version_to_apps.rb
@@ -1,5 +0,0 @@ @@ -1,5 +0,0 @@
1 -class AddMinAppVersionToApps < Mongoid::Migration  
2 - def change  
3 - add_column :apps, :current_app_version, :string  
4 - end  
5 -end  
6 \ No newline at end of file 0 \ No newline at end of file