Diff
Modified: trunk/Gemfile (3704 => 3705)
--- trunk/Gemfile 2013-09-11 11:13:15 UTC (rev 3704)
+++ trunk/Gemfile 2013-09-11 11:16:38 UTC (rev 3705)
@@ -30,4 +30,5 @@
gem "open_id_authentication", "~> 1.1.0"
gem "simple-rss", "~> 1.2.3"
gem "net-http-persistent", "~> 2.8"
+gem "delayed_job", "~>2.0.4"
Modified: trunk/Rakefile (3704 => 3705)
--- trunk/Rakefile 2013-09-11 11:13:15 UTC (rev 3704)
+++ trunk/Rakefile 2013-09-11 11:16:38 UTC (rev 3705)
@@ -11,6 +11,12 @@
require 'sunspot/rails/tasks'
require 'sunspot/solr/tasks'
+begin
+ gem 'delayed_job', '~>2.0.4'
+ require 'delayed/tasks'
+rescue LoadError
+ STDERR.puts "Run `rake gems:install` to install delayed_job"
+end
desc 'Rebuild Solr index'
task "myexp:refresh:solr" do
require File.dirname(__FILE__) + '/config/environment'
Modified: trunk/app/models/curation_event.rb (3704 => 3705)
--- trunk/app/models/curation_event.rb 2013-09-11 11:13:15 UTC (rev 3704)
+++ trunk/app/models/curation_event.rb 2013-09-11 11:16:38 UTC (rev 3705)
@@ -10,7 +10,7 @@
format_attribute :details
- validates_presence_of :user, :category
+ validates_presence_of :category
def label
category
Modified: trunk/app/models/workflow.rb (3704 => 3705)
--- trunk/app/models/workflow.rb 2013-09-11 11:13:15 UTC (rev 3704)
+++ trunk/app/models/workflow.rb 2013-09-11 11:16:38 UTC (rev 3705)
@@ -30,6 +30,7 @@
has_many :workflow_processors, :dependent => :destroy
has_many :workflow_ports, :dependent => :destroy
has_many :semantic_annotations, :as => :subject, :dependent => :destroy
+ has_many :curation_events, :as => :object
before_validation :check_unique_name
before_validation :apply_extracted_metadata
Modified: trunk/app/views/contributions/curation.rhtml (3704 => 3705)
--- trunk/app/views/contributions/curation.rhtml 2013-09-11 11:13:15 UTC (rev 3704)
+++ trunk/app/views/contributions/curation.rhtml 2013-09-11 11:16:38 UTC (rev 3705)
@@ -11,7 +11,11 @@
<table class="comment">
<tr>
<td class="avatar" rowspan="3">
- <%= contributor(event.user_id, 'User', true, 60) %>
+ <% if event.user %>
+ <%= contributor(event.user_id, 'User', true, 60) %>
+ <% else %>
+ System
+ <% end %>
</td>
<td class="header" height="1.2em">
<%= datetime event.created_at -%>
Added: trunk/config/initializers/service_deprecation_watcher.rb (0 => 3705)
--- trunk/config/initializers/service_deprecation_watcher.rb (rev 0)
+++ trunk/config/initializers/service_deprecation_watcher.rb 2013-09-11 11:16:38 UTC (rev 3705)
@@ -0,0 +1,12 @@
+# myExperiment: config/initializers/service_deprecation_watcher.rb
+#
+# Copyright (c) 2013 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+if ActiveRecord::Base.connection.table_exists?('delayed_jobs')
+ Delayed::Worker.backend = :active_record
+
+ unless Delayed::Job.exists?(:handler => ServiceDeprecationJob.new.to_yaml)
+ Delayed::Job.enqueue(ServiceDeprecationJob.new, 1, 5.minutes.from_now)
+ end
+end
Added: trunk/db/migrate/20130910094137_create_delayed_jobs.rb (0 => 3705)
--- trunk/db/migrate/20130910094137_create_delayed_jobs.rb (rev 0)
+++ trunk/db/migrate/20130910094137_create_delayed_jobs.rb 2013-09-11 11:16:38 UTC (rev 3705)
@@ -0,0 +1,21 @@
+class CreateDelayedJobs < ActiveRecord::Migration
+ def self.up
+ create_table :delayed_jobs, :force => true do |table|
+ table.integer :priority, :default => 0 # Allows some jobs to jump to the front of the queue
+ table.integer :attempts, :default => 0 # Provides for retries, but still fail eventually.
+ table.text :handler # YAML-encoded string of the object that will do work
+ table.text :last_error # reason for last failure (See Note below)
+ table.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future.
+ table.datetime :locked_at # Set when a client is working on this object
+ table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
+ table.string :locked_by # Who is working on this object (if locked)
+ table.timestamps
+ end
+
+ add_index :delayed_jobs, [:priority, :run_at], :name => 'delayed_jobs_priority'
+ end
+
+ def self.down
+ drop_table :delayed_jobs
+ end
+end
\ No newline at end of file
Modified: trunk/db/schema.rb (3704 => 3705)
--- trunk/db/schema.rb 2013-09-11 11:13:15 UTC (rev 3704)
+++ trunk/db/schema.rb 2013-09-11 11:16:38 UTC (rev 3705)
@@ -9,7 +9,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20130423091433) do
+ActiveRecord::Schema.define(:version => 20130910094137) do
create_table "activities", :force => true do |t|
t.string "subject_type"
@@ -216,6 +216,21 @@
t.datetime "updated_at"
end
+ create_table "delayed_jobs", :force => true do |t|
+ t.integer "priority", :default => 0
+ t.integer "attempts", :default => 0
+ t.text "handler"
+ t.text "last_error"
+ t.datetime "run_at"
+ t.datetime "locked_at"
+ t.datetime "failed_at"
+ t.string "locked_by"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
+
create_table "deprecation_events", :force => true do |t|
t.string "title"
t.datetime "date"
Added: trunk/lib/service_deprecation_job.rb (0 => 3705)
--- trunk/lib/service_deprecation_job.rb (rev 0)
+++ trunk/lib/service_deprecation_job.rb 2013-09-11 11:16:38 UTC (rev 3705)
@@ -0,0 +1,24 @@
+# myExperiment: lib/service_deprecation_job.rb
+#
+# Copyright (c) 2013 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+class ServiceDeprecationJob
+ def perform
+ Rails.logger.info("Checking for workflows with deprecated services...")
+ DeprecationEvent.all.each do |event|
+ if event.date.past?
+ event.affected_workflows.each do |workflow|
+ unless workflow.curation_events.exists?(:category => 'decommissioned services')
+ Rails.logger.info("Workflow #{workflow.id} has deprecated services (Deprecation Event #{event.id})")
+ details = "Deprecation Event #{event.id}: #{event.details}"
+ CurationEvent.create(:category => 'decommissioned services', :object => workflow, :details => details)
+ end
+ end
+ end
+ end
+
+ # Do it again
+ Delayed::Job.enqueue(ServiceDeprecationJob.new, 1, 1.day.from_now)
+ end
+end
\ No newline at end of file
Added: trunk/script/delayed_job (0 => 3705)
--- trunk/script/delayed_job (rev 0)
+++ trunk/script/delayed_job 2013-09-11 11:16:38 UTC (rev 3705)
@@ -0,0 +1,5 @@
+#!/usr/bin/env ruby
+
+require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
+require 'delayed/command'
+Delayed::Command.new(ARGV).daemonize
Property changes on: trunk/script/delayed_job
___________________________________________________________________
Added: svn:executable