Skip to content

Commit

Permalink
first try at live oai conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
bensinober committed Mar 1, 2013
1 parent 2656da6 commit 5dfd2ad
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 8 deletions.
32 changes: 27 additions & 5 deletions api.rb
Expand Up @@ -227,7 +227,7 @@ def logger
optional :from, type: DateTime, desc: "From Date"
optional :until, type: DateTime, desc: "To Date"
optional :start_time, type: Time, desc: "Time to schedule"
optional :tags, type: String, desc: "Tag string"
optional :tag, type: String, desc: "Tag string"
end
put "/harvest" do
content_type 'json'
Expand Down Expand Up @@ -291,26 +291,48 @@ def logger
end # end oai namespace

resource :scheduler do
desc "test scheduler"
desc "all jobs"
get "/" do
content_type 'json'
jobs = Scheduler.find_all_jobs
{ :jobs => jobs }
end

# list running jobs
desc "running jobs"
get "/running_jobs" do
content_type 'json'
jobs = Scheduler.find_running_jobs
{ :jobs => jobs }
result = Scheduler.find_running_jobs
jobs = []
result.each do |job|
jobs.push({:job_id => job.job_id,
:scheduler => job.scheduler,
:start_time => job.t,
:last_job_thread => job.last_job_thread,
:params => job.params,
:block => job.block,
:schedule_info => job.schedule_info,
:run_time => job.last})
end
{ :result => result, :jobs => jobs }
end

desc "find jobs"
get "/find_jobs" do
content_type 'json'
jobs = Scheduler.find_jobs_by_tag('conversion')
{ :jobs => jobs }
{ :result => result, :jobs => jobs }
end

desc "run test job"
put "/test" do
content_type 'json'
result = Scheduler.dummyjob :start_time => params[:id].to_i,
:from => params[:from] ||= Date.today.prev_day.to_s,
:until => params[:until] ||= Date.today.to_s
{ :result => result }
end


end # end mapping namespace

Expand Down
6 changes: 5 additions & 1 deletion app.rb
Expand Up @@ -87,9 +87,13 @@ def protected! ; halt [ 401, 'Not Authorized' ] unless admin? ; end
slim :harvest, :locals => {:library => session[:library]}
end

get '/status' do
# status on running/scheduled jobs
slim :status, :locals => {:library => session[:library]}
end

get '/repository' do
# Misc. repository settings
#session[:repository] = Repo.new('repository.yml')
session[:repository] = SETTINGS["repository"]
slim :repository, :locals => {:library => session[:library], :repo => session[:repository]}
end
Expand Down
8 changes: 8 additions & 0 deletions config_scheduler.ru
@@ -0,0 +1,8 @@
require File.expand_path(File.dirname(__FILE__) + "/scheduler")
log = File.new("logs/development.log", "a+")
$stdout.reopen(log)
$stderr.reopen(log)

$stderr.sync = true
$stdout.sync = true
run Scheduler.new
24 changes: 22 additions & 2 deletions scheduler.rb
Expand Up @@ -15,11 +15,22 @@ def logger
logger = Logger.new(File.expand_path("../logs/scheduler_#{ENV['RACK_ENV']}.log", __FILE__))
end

def dummyjob(params={})
params[:start_time] ||= Time.now
params[:tag] ||= "dummyjob"
job_id = self.scheduler.at params[:start_time], :tags => params[:tag] do
10.times do
puts "testing..."
sleep 3
end
end
end

### OAI harvest jobs ###

def start_oai_harvest(params={})
params[:start_time] ||= Time.now
params[:tags] ||= "oaiharvest"
params[:tag] ||= "oaiharvest"
job_id = self.scheduler.at params[:start_time], :tags => params[:tag] do
timing_start = Time.now

Expand Down Expand Up @@ -56,6 +67,7 @@ def convert_oai_records(oairecords, library)
rdf = RDFModeler.new(library.id, marc)
rdf.set_type(library.config['resource']['type'])
rdf.convert
write_record(rdf, library) # schedule writing
rdfrecords << rdf.statements
end
else
Expand All @@ -66,10 +78,18 @@ def convert_oai_records(oairecords, library)
end
end

def write_record(rdf, library)
job_id = self.scheduler.at Time.now , :tags => "saving" do
FileUtils.mkdir_p File.join(File.dirname(__FILE__), 'db', "#{library.id}")
file = File.open(File.join(File.dirname(__FILE__), 'db', "#{library.id}", 'test.nt'), 'a+')
rdf.write_record
file.write(rdf.rdf)
end
end
# start schedule, default every five minutes
def schedule(cron, params={})
params[:frequency] ||= "*/5 * * * *"
params[:tags] ||= "test"
params[:tag] ||= "test"
cron_id = self.scheduler.cron params[:frequency], :tags => params[:tag] do
puts cron if cron # run script here
end
Expand Down
1 change: 1 addition & 0 deletions views/_header.slim
Expand Up @@ -29,6 +29,7 @@ html
a[href="/oai"]: li[class="header"] oai
a[href="/convert"]: li[class="header"] convert
a[href="/harvest"]: li[class="header"] harvest
a[href="/status"]: li[class="header"] status
a[href="/repository"]: li[class="header"] repository
a[href="/about"]: li[class="header"] about
a[href="/logout"]: li[class="header"] log out
Expand Down
50 changes: 50 additions & 0 deletions views/status.slim
@@ -0,0 +1,50 @@
== render :slim, :'_header', :locals => {:library => library}
// Main file for status on jobs
div class="main"
// This form contains OAI-PMH harvester settings
h2 MARC2RDF status
- if !library
pre No library selected, you must go to <a href="/libraries">libraries</a> and select or create one first
- else
h3 Status on running jobs:
button[type="button" id="run_test_job" class="gen" style="margin-left:48px"] = "Run test job"
button[type="button" id="update_status" class="gen" style="margin-left:48px"] = "Update status"

// The status div
div id="status" class="divdot inputf"
p running jobs
table id="running-jobs" class="genform"
tbody

p scheduled jobs
table id="scheduled-jobs" class="genform"
tbody

javascript:
$(document).on('ready', function () {
// ** get running jobs, populate status table
$('button#update_status').on('click', function() {
$.getJSON('/api/scheduler/running_jobs', function(data) {
var header = $('<tr><th>job_id</th><th>run_time</th><th>tags</th></tr>');
var rows = $('<tr>');
$.each(data.jobs, function(i,job){
rows.append($('<td>').text(job.job_id)).
append($('<td>').text(job.run_time)).
append($('<td>').text(job.params['tags'].join(',')));
});
$('#running-jobs tbody').html(header);
$('#running-jobs tbody').append(rows);
});
});
$('button#run_test_job').on('click', function() {
request = $.ajax({
url: '/api/scheduler/test',
type: 'PUT',
cache: false
});
});
});
== render :slim, :'_footer'

0 comments on commit 5dfd2ad

Please sign in to comment.