canvas_sync 0.23.5 → 0.24.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.
- checksums.yaml +4 -4
- data/Rakefile +2 -4
- data/lib/canvas_sync/version.rb +1 -1
- data/lib/canvas_sync.rb +6 -4
- data/spec/canvas_sync/canvas_sync_spec.rb +11 -11
- data/spec/canvas_sync/live_events/process_event_job_spec.rb +1 -0
- data/spec/{dummy → internal}/app/models/application_record.rb +1 -0
- data/spec/{dummy → internal}/app/models/content_migration.rb +0 -0
- data/spec/{dummy → internal}/app/models/course.rb +0 -1
- data/spec/{dummy → internal}/app/models/course_nickname.rb +0 -0
- data/spec/{dummy → internal}/app/models/learning_outcome.rb +0 -0
- data/spec/{dummy → internal}/app/services/live_events/assignment_event.rb +0 -0
- data/spec/{dummy → internal}/app/services/live_events/course_event.rb +0 -0
- data/spec/{dummy → internal}/app/services/live_events/course_section_event.rb +0 -0
- data/spec/{dummy → internal}/app/services/live_events/enrollment_event.rb +0 -0
- data/spec/{dummy → internal}/app/services/live_events/grade_event.rb +0 -0
- data/spec/{dummy → internal}/app/services/live_events/module_event.rb +0 -0
- data/spec/{dummy → internal}/app/services/live_events/module_item_event.rb +0 -0
- data/spec/{dummy → internal}/app/services/live_events/submission_event.rb +0 -0
- data/spec/{dummy → internal}/app/services/live_events/syllabus_event.rb +0 -0
- data/spec/{dummy → internal}/app/services/live_events/user_event.rb +0 -0
- data/spec/internal/bin/rails +9 -0
- data/spec/internal/config/database.yml +5 -0
- data/spec/internal/config/routes.rb +5 -0
- data/spec/internal/config/storage.yml +3 -0
- data/spec/{dummy/db/migrate/20220926221926_create_users.rb → internal/db/migrate/20250912205136_create_users.rb} +0 -0
- data/spec/{dummy/db/migrate/20201016181346_create_pseudonyms.rb → internal/db/migrate/20250912205137_create_pseudonyms.rb} +0 -0
- data/spec/{dummy/db/migrate/20200415171620_create_groups.rb → internal/db/migrate/20250912205139_create_groups.rb} +0 -0
- data/spec/{dummy/db/migrate/20200416214248_create_group_memberships.rb → internal/db/migrate/20250912205140_create_group_memberships.rb} +0 -0
- data/spec/{dummy/db/migrate/20190702203622_create_accounts.rb → internal/db/migrate/20250912205141_create_accounts.rb} +0 -0
- data/spec/{dummy/db/migrate/20190702203623_create_terms.rb → internal/db/migrate/20250912205142_create_terms.rb} +0 -0
- data/spec/{dummy/db/migrate/20190702203625_create_sections.rb → internal/db/migrate/20250912205144_create_sections.rb} +0 -0
- data/spec/{dummy/db/migrate/20190702203626_create_assignments.rb → internal/db/migrate/20250912205145_create_assignments.rb} +0 -0
- data/spec/{dummy/db/migrate/20190702203627_create_submissions.rb → internal/db/migrate/20250912205146_create_submissions.rb} +0 -0
- data/spec/{dummy/db/migrate/20190927204545_create_roles.rb → internal/db/migrate/20250912205147_create_roles.rb} +2 -2
- data/spec/{dummy/db/migrate/20190927204546_create_admins.rb → internal/db/migrate/20250912205148_create_admins.rb} +0 -0
- data/spec/{dummy/db/migrate/20190702203630_create_assignment_groups.rb → internal/db/migrate/20250912205149_create_assignment_groups.rb} +0 -0
- data/spec/{dummy/db/migrate/20190702203631_create_context_modules.rb → internal/db/migrate/20250912205150_create_context_modules.rb} +0 -0
- data/spec/{dummy/db/migrate/20190702203632_create_context_module_items.rb → internal/db/migrate/20250912205151_create_context_module_items.rb} +0 -0
- data/spec/{dummy/db/migrate/20210907233329_create_user_observers.rb → internal/db/migrate/20250912205152_create_user_observers.rb} +0 -0
- data/spec/{dummy/db/migrate/20210907233330_create_grading_periods.rb → internal/db/migrate/20250912205153_create_grading_periods.rb} +0 -0
- data/spec/{dummy/db/migrate/20211001184920_create_grading_period_groups.rb → internal/db/migrate/20250912205154_create_grading_period_groups.rb} +0 -0
- data/spec/{dummy/db/migrate/20220308072643_create_content_migrations.rb → internal/db/migrate/20250912205155_create_content_migrations.rb} +0 -0
- data/spec/{dummy/db/migrate/20220712210559_create_learning_outcomes.rb → internal/db/migrate/20250912205156_create_learning_outcomes.rb} +0 -0
- data/spec/{dummy/db/migrate/20240523101010_create_learning_outcome_results.rb → internal/db/migrate/20250912205157_create_learning_outcome_results.rb} +0 -0
- data/spec/{dummy/db/migrate/20240510094100_create_rubric_associations.rb → internal/db/migrate/20250912205160_create_rubric_associations.rb} +0 -0
- data/spec/{dummy/db/migrate/20240510101100_create_rubric_assessments.rb → internal/db/migrate/20250912205161_create_rubric_assessments.rb} +0 -0
- data/spec/{dummy/db/migrate/20240828161300_create_course_progresses.rb → internal/db/migrate/20250912205162_create_course_progresses.rb} +0 -0
- data/spec/internal/db/schema.rb +6 -0
- data/spec/spec_helper.rb +8 -4
- metadata +182 -372
- data/lib/canvas_sync/job_batches/batch.rb +0 -595
- data/lib/canvas_sync/job_batches/callback.rb +0 -135
- data/lib/canvas_sync/job_batches/chain_builder.rb +0 -247
- data/lib/canvas_sync/job_batches/compat/active_job.rb +0 -108
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/css/styles.less +0 -182
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/js/batch_tree.js +0 -108
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/js/util.js +0 -2
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/helpers.rb +0 -41
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_batch_tree.erb +0 -6
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_batches_table.erb +0 -44
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_common.erb +0 -13
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_jobs_table.erb +0 -21
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_pagination.erb +0 -26
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/batch.erb +0 -81
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/batches.erb +0 -23
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/pool.erb +0 -137
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/pools.erb +0 -47
- data/lib/canvas_sync/job_batches/compat/sidekiq/web.rb +0 -218
- data/lib/canvas_sync/job_batches/compat/sidekiq.rb +0 -149
- data/lib/canvas_sync/job_batches/compat.rb +0 -20
- data/lib/canvas_sync/job_batches/context_hash.rb +0 -157
- data/lib/canvas_sync/job_batches/hier_batch_ids.lua +0 -25
- data/lib/canvas_sync/job_batches/jobs/base_job.rb +0 -5
- data/lib/canvas_sync/job_batches/jobs/concurrent_batch_job.rb +0 -20
- data/lib/canvas_sync/job_batches/jobs/managed_batch_job.rb +0 -175
- data/lib/canvas_sync/job_batches/jobs/serial_batch_job.rb +0 -20
- data/lib/canvas_sync/job_batches/pool.rb +0 -254
- data/lib/canvas_sync/job_batches/pool_refill.lua +0 -47
- data/lib/canvas_sync/job_batches/redis_model.rb +0 -67
- data/lib/canvas_sync/job_batches/redis_script.rb +0 -161
- data/lib/canvas_sync/job_batches/schedule_callback.lua +0 -14
- data/lib/canvas_sync/job_batches/status.rb +0 -89
- data/lib/canvas_sync/job_uniqueness/compat/active_job.rb +0 -75
- data/lib/canvas_sync/job_uniqueness/compat/sidekiq.rb +0 -135
- data/lib/canvas_sync/job_uniqueness/compat.rb +0 -20
- data/lib/canvas_sync/job_uniqueness/configuration.rb +0 -25
- data/lib/canvas_sync/job_uniqueness/job_uniqueness.rb +0 -47
- data/lib/canvas_sync/job_uniqueness/lock_context.rb +0 -199
- data/lib/canvas_sync/job_uniqueness/locksmith.rb +0 -92
- data/lib/canvas_sync/job_uniqueness/on_conflict/base.rb +0 -32
- data/lib/canvas_sync/job_uniqueness/on_conflict/log.rb +0 -13
- data/lib/canvas_sync/job_uniqueness/on_conflict/null_strategy.rb +0 -9
- data/lib/canvas_sync/job_uniqueness/on_conflict/raise.rb +0 -11
- data/lib/canvas_sync/job_uniqueness/on_conflict/reject.rb +0 -21
- data/lib/canvas_sync/job_uniqueness/on_conflict/reschedule.rb +0 -20
- data/lib/canvas_sync/job_uniqueness/on_conflict.rb +0 -62
- data/lib/canvas_sync/job_uniqueness/strategy/base.rb +0 -107
- data/lib/canvas_sync/job_uniqueness/strategy/until_and_while_executing.rb +0 -35
- data/lib/canvas_sync/job_uniqueness/strategy/until_executed.rb +0 -20
- data/lib/canvas_sync/job_uniqueness/strategy/until_executing.rb +0 -20
- data/lib/canvas_sync/job_uniqueness/strategy/until_expired.rb +0 -16
- data/lib/canvas_sync/job_uniqueness/strategy/while_executing.rb +0 -26
- data/lib/canvas_sync/job_uniqueness/strategy.rb +0 -27
- data/lib/canvas_sync/job_uniqueness/unique_job_common.rb +0 -79
- data/spec/dummy/README.rdoc +0 -1
- data/spec/dummy/Rakefile +0 -6
- data/spec/dummy/app/services/live_events/assignment_created_event.rb +0 -12
- data/spec/dummy/app/services/live_events/assignment_updated_event.rb +0 -12
- data/spec/dummy/app/services/live_events/base_event.rb +0 -52
- data/spec/dummy/app/services/live_events/course_created_event.rb +0 -12
- data/spec/dummy/app/services/live_events/course_section_created_event.rb +0 -12
- data/spec/dummy/app/services/live_events/course_section_updated_event.rb +0 -12
- data/spec/dummy/app/services/live_events/course_updated_event.rb +0 -12
- data/spec/dummy/app/services/live_events/enrollment_created_event.rb +0 -12
- data/spec/dummy/app/services/live_events/enrollment_updated_event.rb +0 -12
- data/spec/dummy/app/services/live_events/grade_changed_event.rb +0 -12
- data/spec/dummy/app/services/live_events/module_created_event.rb +0 -12
- data/spec/dummy/app/services/live_events/module_item_created_event.rb +0 -12
- data/spec/dummy/app/services/live_events/module_item_updated_event.rb +0 -12
- data/spec/dummy/app/services/live_events/module_updated_event.rb +0 -12
- data/spec/dummy/app/services/live_events/submission_created_event.rb +0 -12
- data/spec/dummy/app/services/live_events/submission_updated_event.rb +0 -12
- data/spec/dummy/app/services/live_events/syllabus_updated_event.rb +0 -12
- data/spec/dummy/app/services/live_events/user_created_event.rb +0 -12
- data/spec/dummy/app/services/live_events/user_updated_event.rb +0 -12
- data/spec/dummy/bin/rails +0 -4
- data/spec/dummy/config/application.rb +0 -39
- data/spec/dummy/config/boot.rb +0 -5
- data/spec/dummy/config/database.yml +0 -25
- data/spec/dummy/config/environment.rb +0 -5
- data/spec/dummy/config/environments/development.rb +0 -41
- data/spec/dummy/config/environments/test.rb +0 -44
- data/spec/dummy/config/initializers/assets.rb +0 -11
- data/spec/dummy/config/initializers/session_store.rb +0 -3
- data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/spec/dummy/config/routes.rb +0 -3
- data/spec/dummy/config/secrets.yml +0 -22
- data/spec/dummy/config.ru +0 -4
- data/spec/dummy/db/schema.rb +0 -563
- data/spec/job_batching/batch_spec.rb +0 -531
- data/spec/job_batching/callback_spec.rb +0 -38
- data/spec/job_batching/compat/active_job_spec.rb +0 -107
- data/spec/job_batching/compat/sidekiq_spec.rb +0 -127
- data/spec/job_batching/context_hash_spec.rb +0 -54
- data/spec/job_batching/flow_spec.rb +0 -82
- data/spec/job_batching/integration/fail_then_succeed.rb +0 -42
- data/spec/job_batching/integration/integration.rb +0 -57
- data/spec/job_batching/integration/nested.rb +0 -88
- data/spec/job_batching/integration/simple.rb +0 -47
- data/spec/job_batching/integration/workflow.rb +0 -134
- data/spec/job_batching/integration_helper.rb +0 -50
- data/spec/job_batching/pool_spec.rb +0 -161
- data/spec/job_batching/status_spec.rb +0 -76
- data/spec/job_batching/support/base_job.rb +0 -14
- data/spec/job_batching/support/sample_callback.rb +0 -2
- data/spec/job_uniqueness/compat/active_job_spec.rb +0 -49
- data/spec/job_uniqueness/compat/sidekiq_spec.rb +0 -68
- data/spec/job_uniqueness/lock_context_spec.rb +0 -106
- data/spec/job_uniqueness/on_conflict/log_spec.rb +0 -11
- data/spec/job_uniqueness/on_conflict/raise_spec.rb +0 -10
- data/spec/job_uniqueness/on_conflict/reschedule_spec.rb +0 -63
- data/spec/job_uniqueness/on_conflict_spec.rb +0 -16
- data/spec/job_uniqueness/spec_helper.rb +0 -17
- data/spec/job_uniqueness/strategy/base_spec.rb +0 -100
- data/spec/job_uniqueness/strategy/until_and_while_executing_spec.rb +0 -48
- data/spec/job_uniqueness/strategy/until_executed_spec.rb +0 -23
- data/spec/job_uniqueness/strategy/until_executing_spec.rb +0 -23
- data/spec/job_uniqueness/strategy/until_expired_spec.rb +0 -23
- data/spec/job_uniqueness/strategy/while_executing_spec.rb +0 -33
- data/spec/job_uniqueness/support/lock_strategy.rb +0 -28
- data/spec/job_uniqueness/support/on_conflict.rb +0 -24
- data/spec/job_uniqueness/support/test_worker.rb +0 -19
- data/spec/job_uniqueness/unique_job_common_spec.rb +0 -45
- /data/spec/{dummy → internal}/app/models/account.rb +0 -0
- /data/spec/{dummy → internal}/app/models/admin.rb +0 -0
- /data/spec/{dummy → internal}/app/models/assignment.rb +0 -0
- /data/spec/{dummy → internal}/app/models/assignment_group.rb +0 -0
- /data/spec/{dummy → internal}/app/models/assignment_override.rb +0 -0
- /data/spec/{dummy → internal}/app/models/context_module.rb +0 -0
- /data/spec/{dummy → internal}/app/models/context_module_item.rb +0 -0
- /data/spec/{dummy → internal}/app/models/course_progress.rb +0 -0
- /data/spec/{dummy → internal}/app/models/enrollment.rb +0 -0
- /data/spec/{dummy → internal}/app/models/grading_period.rb +0 -0
- /data/spec/{dummy → internal}/app/models/grading_period_group.rb +0 -0
- /data/spec/{dummy → internal}/app/models/group.rb +0 -0
- /data/spec/{dummy → internal}/app/models/group_membership.rb +0 -0
- /data/spec/{dummy → internal}/app/models/learning_outcome_result.rb +0 -0
- /data/spec/{dummy → internal}/app/models/pseudonym.rb +0 -0
- /data/spec/{dummy → internal}/app/models/role.rb +0 -0
- /data/spec/{dummy → internal}/app/models/rubric.rb +0 -0
- /data/spec/{dummy → internal}/app/models/rubric_assessment.rb +0 -0
- /data/spec/{dummy → internal}/app/models/rubric_association.rb +0 -0
- /data/spec/{dummy → internal}/app/models/score.rb +0 -0
- /data/spec/{dummy → internal}/app/models/section.rb +0 -0
- /data/spec/{dummy → internal}/app/models/submission.rb +0 -0
- /data/spec/{dummy → internal}/app/models/term.rb +0 -0
- /data/spec/{dummy → internal}/app/models/user.rb +0 -0
- /data/spec/{dummy → internal}/app/models/user_observer.rb +0 -0
- /data/spec/{dummy/db/migrate/20190702203621_create_courses.rb → internal/db/migrate/20250912205138_create_courses.rb} +0 -0
- /data/spec/{dummy/db/migrate/20190702203624_create_enrollments.rb → internal/db/migrate/20250912205143_create_enrollments.rb} +0 -0
- /data/spec/{dummy/db/migrate/20250319194134_create_course_nicknames.rb → internal/db/migrate/20250912205158_create_course_nicknames.rb} +0 -0
- /data/spec/{dummy/db/migrate/20250319194135_create_rubrics.rb → internal/db/migrate/20250912205159_create_rubrics.rb} +0 -0
- /data/spec/{dummy/db/migrate/20241223080202_create_assignment_overrides.rb → internal/db/migrate/20250912205163_create_assignment_overrides.rb} +0 -0
- /data/spec/{dummy/db/migrate/20250626194330_create_scores.rb → internal/db/migrate/20250912205164_create_scores.rb} +0 -0
@@ -1,108 +0,0 @@
|
|
1
|
-
import { h, Component, render } from 'https://esm.sh/preact';
|
2
|
-
import htm from 'https://esm.sh/htm';
|
3
|
-
import { root_url } from './util.js';
|
4
|
-
|
5
|
-
// Initialize htm with Preact
|
6
|
-
const html = htm.bind(h);
|
7
|
-
|
8
|
-
const StatusBlock = (props) => html`
|
9
|
-
<div class="status-block ${props.class || ''}">
|
10
|
-
${props.title && props.title + ':'}
|
11
|
-
<span class="tree-stat pending">${props.pending_count}</span>
|
12
|
-
|
|
13
|
-
<span class="tree-stat failed">${props.failed_count}</span>
|
14
|
-
|
|
15
|
-
<span class="tree-stat dead">${props.dead_count}</span>
|
16
|
-
|
|
17
|
-
<span class="tree-stat success">${props.successful_count}</span>
|
18
|
-
/
|
19
|
-
<span class="tree-stat total">${props.total_count}</span>
|
20
|
-
</div>
|
21
|
-
`
|
22
|
-
|
23
|
-
class TreeLevel extends Component {
|
24
|
-
get bid() {
|
25
|
-
return this.props.data.bid;
|
26
|
-
}
|
27
|
-
|
28
|
-
get batch() {
|
29
|
-
return this.props.data;
|
30
|
-
}
|
31
|
-
|
32
|
-
load_more = async (event) => {
|
33
|
-
event.preventDefault();
|
34
|
-
const l = this.batch.batches.items.length;
|
35
|
-
const resp = await fetch(`${root_url}batches/${this.bid}/tree?slice=${l}:${l + 5 - 1}`)
|
36
|
-
const result = await resp.json()
|
37
|
-
const newEntries = result.batches.items;
|
38
|
-
for (let ent of newEntries) {
|
39
|
-
this.batch.batches.items.push(ent)
|
40
|
-
}
|
41
|
-
this.forceUpdate()
|
42
|
-
}
|
43
|
-
|
44
|
-
toggle = (event) => {
|
45
|
-
event.preventDefault();
|
46
|
-
this.setState({ collapsed: !this.state.collapsed })
|
47
|
-
}
|
48
|
-
|
49
|
-
render() {
|
50
|
-
const { data: bd } = this.props;
|
51
|
-
|
52
|
-
let sub_entries = [];
|
53
|
-
let sub_batches = bd.batches.items;
|
54
|
-
for (let b of sub_batches) {
|
55
|
-
sub_entries.push(html`<${TreeLevel} data=${b} />`)
|
56
|
-
}
|
57
|
-
|
58
|
-
let fully_loaded = !(sub_batches.length < bd.batches.total_count);
|
59
|
-
|
60
|
-
const load_more_elem = html`<div class="load-more">
|
61
|
-
${sub_entries.length} / ${bd.batches.total_count} Items Loaded - <a href="#" onClick=${this.load_more}>Load More</a>
|
62
|
-
</div>`
|
63
|
-
|
64
|
-
return html`<div class="tree-entry tree-batch">
|
65
|
-
<div class="header">
|
66
|
-
<a class="row-toggle ${!bd.batches.total_count && 'not_applicable'}" onClick=${this.toggle} href="#">
|
67
|
-
${this.state.collapsed ? '+' : '-'}
|
68
|
-
</a>
|
69
|
-
|
70
|
-
<div class="header-inner">
|
71
|
-
<div class="main">
|
72
|
-
<span class="bid">
|
73
|
-
${bd.bid}
|
74
|
-
<a class="bid-goto" href="${root_url}batches/${bd.bid}">⇢</a>
|
75
|
-
</span>
|
76
|
-
${bd.description || (bd.status == 'deleted' && html`<i class="text-inactive">Deleted</i>`) || html`<i class="text-inactive">No Description</i>`}
|
77
|
-
</div>
|
78
|
-
|
79
|
-
<span class="status-label ${bd.status}">${bd.status}</span>
|
80
|
-
|
81
|
-
${bd.status != 'deleted' && html`
|
82
|
-
<${StatusBlock} class="job-status" title="Jobs" ...${bd.jobs} />
|
83
|
-
<${StatusBlock} class="batch-status" title="Batches" ...${bd.batches} />
|
84
|
-
`}
|
85
|
-
</div>
|
86
|
-
</div>
|
87
|
-
|
88
|
-
<div class="subitems ${this.state.collapsed ? 'hidden' : ''}">
|
89
|
-
${sub_entries}
|
90
|
-
${!fully_loaded && load_more_elem}
|
91
|
-
</div>
|
92
|
-
</div>`
|
93
|
-
}
|
94
|
-
}
|
95
|
-
|
96
|
-
class TreeRoot extends Component {
|
97
|
-
render() {
|
98
|
-
const tree_data = JSON.parse(document.querySelector('#batch-tree #initial-data').innerHTML);
|
99
|
-
return html`
|
100
|
-
<div class="tree-header">
|
101
|
-
<${StatusBlock} pending_count="pending" failed_count="failed" dead_count="dead" successful_count="successful" total_count="total" />
|
102
|
-
</div>
|
103
|
-
<${TreeLevel} data=${tree_data} />
|
104
|
-
`;
|
105
|
-
}
|
106
|
-
}
|
107
|
-
|
108
|
-
render(html`<${TreeRoot} />`, document.querySelector('#batch-tree'));
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module CanvasSync::JobBatches::Compat::Sidekiq
|
4
|
-
module Web
|
5
|
-
module Helpers
|
6
|
-
VIEW_PATH = File.expand_path("../web/views", __dir__)
|
7
|
-
|
8
|
-
module_function
|
9
|
-
|
10
|
-
def get_template(name)
|
11
|
-
File.open(File.join(VIEW_PATH, "#{name}.erb")).read
|
12
|
-
end
|
13
|
-
|
14
|
-
def drain_zset(key)
|
15
|
-
items, _ = CanvasSync::JobBatches::Batch.redis do |r|
|
16
|
-
r.multi do |r|
|
17
|
-
r.zrange(key, 0, -1)
|
18
|
-
r.zremrangebyrank(key, 0, -1)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
yield items
|
22
|
-
end
|
23
|
-
|
24
|
-
def safe_relative_time(time)
|
25
|
-
time = parse_time(time)
|
26
|
-
relative_time(time)
|
27
|
-
end
|
28
|
-
|
29
|
-
def parse_time(time)
|
30
|
-
case time
|
31
|
-
when Time
|
32
|
-
time
|
33
|
-
when Integer, Float
|
34
|
-
Time.at(time)
|
35
|
-
else
|
36
|
-
Time.parse(time.to_s)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
<table class="table table-striped table-bordered table-hover">
|
2
|
-
<thead>
|
3
|
-
<tr>
|
4
|
-
<th rowspan="2"><%= t('Started') %></th>
|
5
|
-
<th rowspan="2"><%= t('BID') %></th>
|
6
|
-
<th rowspan="2"><%= t('Description') %></th>
|
7
|
-
|
8
|
-
<th colspan="5"><%= t('Jobs') %></th>
|
9
|
-
<th colspan="4"><%= t('Sub-Batches') %></th>
|
10
|
-
</tr>
|
11
|
-
<tr>
|
12
|
-
<th><%= t('Pending') %></th>
|
13
|
-
<th><%= t('Failed') %></th>
|
14
|
-
<th><%= t('Dead') %></th>
|
15
|
-
<th><%= t('Complete') %></th>
|
16
|
-
<th><%= t('Total') %></th>
|
17
|
-
|
18
|
-
<th><%= t('Pending') %></th>
|
19
|
-
<th><%= t('Failed') %></th>
|
20
|
-
<th><%= t('Success') %></th>
|
21
|
-
<th><%= t('Total') %></th>
|
22
|
-
</tr>
|
23
|
-
</thead>
|
24
|
-
|
25
|
-
<% batches.each do |batch| %>
|
26
|
-
<% status = CanvasSync::JobBatches::Batch::Status.new(batch) %>
|
27
|
-
<tr>
|
28
|
-
<td><%= safe_relative_time(batch.created_at.to_f) %></th>
|
29
|
-
<td><a href="<%= root_path %>batches/<%= batch.bid %>"><%= batch.bid %></a></td>
|
30
|
-
<td><%= batch.description %></th>
|
31
|
-
|
32
|
-
<td><%= status.pending %></th>
|
33
|
-
<td><%= status.failures %></th>
|
34
|
-
<td><%= status.dead %></th>
|
35
|
-
<td><%= status.completed_count %></th>
|
36
|
-
<td><%= status.job_count %></th>
|
37
|
-
|
38
|
-
<td><%= status.child_count - status.successful_children_count %></th>
|
39
|
-
<td><%= status.failed_children_count %></th>
|
40
|
-
<td><%= status.successful_children_count %></th>
|
41
|
-
<td><%= status.child_count %></th>
|
42
|
-
</tr>
|
43
|
-
<% end %>
|
44
|
-
</table>
|
@@ -1,13 +0,0 @@
|
|
1
|
-
|
2
|
-
<% add_to_head do %>
|
3
|
-
<meta name="sidekiq-baseurl" content="<%= root_path %>" />
|
4
|
-
<% if dev_mode? %>
|
5
|
-
<link href="<%= root_path %>batches_assets/css/styles.less" media="screen" rel="stylesheet/less" type="text/css" />
|
6
|
-
<script async type="text/javascript" src="https://unpkg.com/less@4.1.1/dist/less.js" data-async="true"></script>
|
7
|
-
<% else %>
|
8
|
-
<link href="<%= root_path %>batches_assets/css/styles.less" media="screen" rel="stylesheet/less" type="text/css" />
|
9
|
-
<script async type="text/javascript" src="https://unpkg.com/less@4.1.1/dist/less.js" data-async="true"></script>
|
10
|
-
<%# TODO: Pre-compile LESS %>
|
11
|
-
<!-- <link href="<%= root_path %>batches_assets/css/styles.css" media="screen" rel="stylesheet" type="text/css" /> -->
|
12
|
-
<% end %>
|
13
|
-
<% end %>
|
@@ -1,21 +0,0 @@
|
|
1
|
-
<table class="table table-striped table-bordered table-hover">
|
2
|
-
<thead>
|
3
|
-
<tr>
|
4
|
-
<th><%= t('JID') %></th>
|
5
|
-
<th><%= t('Job Class') %></th>
|
6
|
-
<th><%= t('Parameters') %></th>
|
7
|
-
</tr>
|
8
|
-
</thead>
|
9
|
-
|
10
|
-
<% @jobs.each do |job_desc| %>
|
11
|
-
<tr>
|
12
|
-
<td><%= job_desc[:jid] %></td>
|
13
|
-
<td><%= job_desc['job'] %></td>
|
14
|
-
<td>
|
15
|
-
<code class="code-wrap">
|
16
|
-
<div class="args-extended"><%= job_desc['parameters'].to_json %></div>
|
17
|
-
</code>
|
18
|
-
</td>
|
19
|
-
</tr>
|
20
|
-
<% end %>
|
21
|
-
</table>
|
@@ -1,26 +0,0 @@
|
|
1
|
-
|
2
|
-
<% if @total_size > @count %>
|
3
|
-
<ul class="pagination pull-right flip">
|
4
|
-
<% _page_key = defined?(page_key) ? page_key.to_s : 'page' %>
|
5
|
-
|
6
|
-
<li class="<%= 'disabled' if @current_page == 1 %>">
|
7
|
-
<a href="<%= url %>?<%= _page_key %>=1">«</a>
|
8
|
-
</li>
|
9
|
-
<% if @current_page > 1 %>
|
10
|
-
<li>
|
11
|
-
<a href="<%= url %>?<%= (qparams(page: @current_page - 1) || '').gsub('page', _page_key) %>"><%= @current_page - 1 %></a>
|
12
|
-
</li>
|
13
|
-
<% end %>
|
14
|
-
<li class="disabled">
|
15
|
-
<a href="<%= url %>?<%= (qparams(page: @current_page) || '').gsub('page', _page_key) %>"><%= @current_page %></a>
|
16
|
-
</li>
|
17
|
-
<% if @total_size > @current_page * @count %>
|
18
|
-
<li>
|
19
|
-
<a href="<%= url %>?<%= (qparams(page: @current_page + 1) || '').gsub('page', _page_key) %>"><%= @current_page + 1 %></a>
|
20
|
-
</li>
|
21
|
-
<% end %>
|
22
|
-
<li class="<%= 'disabled' if @total_size <= @current_page * @count %>">
|
23
|
-
<a href="<%= url %>?<%= (qparams(page: (@total_size.to_f / @count).ceil) || '').gsub('page', _page_key) %>">»</a>
|
24
|
-
</li>
|
25
|
-
</ul>
|
26
|
-
<% end %>
|
@@ -1,81 +0,0 @@
|
|
1
|
-
<%= erb get_template(:_common) %>
|
2
|
-
|
3
|
-
<h3><%= t('Batch') %></h3>
|
4
|
-
<% status = CanvasSync::JobBatches::Batch::Status.new(@batch) %>
|
5
|
-
|
6
|
-
<div class="table_container">
|
7
|
-
<table class="table table-striped table-bordered table-white table-hover">
|
8
|
-
<tbody>
|
9
|
-
<tr>
|
10
|
-
<th colspan="2" scope=row><%= t('Batch') %></td>
|
11
|
-
<td><%= @batch.bid %></td>
|
12
|
-
</tr>
|
13
|
-
<tr>
|
14
|
-
<th colspan="2" scope=row><%= t('Parent') %></td>
|
15
|
-
<td>
|
16
|
-
<% if @batch.parent_bid.present? %>
|
17
|
-
<a href="<%= root_path %>batches/<%= @batch.parent_bid %>"><%= @batch.parent_bid %></a>
|
18
|
-
<% else %>
|
19
|
-
ROOT
|
20
|
-
<% end %>
|
21
|
-
</td>
|
22
|
-
</tr>
|
23
|
-
<tr>
|
24
|
-
<th colspan="2" scope=row><%= t('Started') %></td>
|
25
|
-
<td><%= safe_relative_time(@batch.created_at.to_f) %></td>
|
26
|
-
</tr>
|
27
|
-
<tr>
|
28
|
-
<th colspan="2" scope=row><%= t('Description') %></td>
|
29
|
-
<td><%= @batch.description %></td>
|
30
|
-
</tr>
|
31
|
-
<tr>
|
32
|
-
<th colspan="2" scope=row><%= t('Context') %></td>
|
33
|
-
<td>
|
34
|
-
<code class="code-wrap batch-context">
|
35
|
-
<div class="args-extended"><%= format_context(@batch) %></div>
|
36
|
-
</code>
|
37
|
-
</td>
|
38
|
-
</tr>
|
39
|
-
</tbody>
|
40
|
-
</table>
|
41
|
-
</div>
|
42
|
-
|
43
|
-
<header class="row">
|
44
|
-
<div class="col-sm-5">
|
45
|
-
<h3>
|
46
|
-
<%= t('Child Batches') %>
|
47
|
-
</h3>
|
48
|
-
</div>
|
49
|
-
</header>
|
50
|
-
|
51
|
-
<%= erb get_template(:_batch_tree), locals: { } %>
|
52
|
-
|
53
|
-
<header class="row">
|
54
|
-
<div class="col-sm-5">
|
55
|
-
<h3>
|
56
|
-
<%= t('Jobs') %>
|
57
|
-
<i>(Queued and Current)</i>
|
58
|
-
</h3>
|
59
|
-
</div>
|
60
|
-
<%
|
61
|
-
@current_page = @current_jobs_page
|
62
|
-
@total_size = @total_jobs_size
|
63
|
-
%>
|
64
|
-
<% if @jobs.any? && @total_size > @count.to_i %>
|
65
|
-
<div class="col-sm-4">
|
66
|
-
<%= erb get_template(:_pagination), locals: { url: "#{root_path}batches/#{@batch.bid}", page_key: :job_page } %>
|
67
|
-
</div>
|
68
|
-
<% end %>
|
69
|
-
</header>
|
70
|
-
|
71
|
-
<% if @jobs.any? %>
|
72
|
-
<div class="table_container">
|
73
|
-
<%= erb get_template(:_jobs_table), locals: { jobs: @jobs } %>
|
74
|
-
</div>
|
75
|
-
<% end %>
|
76
|
-
|
77
|
-
<form class="form-horizontal" action="<%= root_path %>batches/<%= @batch.bid %>" method="post">
|
78
|
-
<%= csrf_tag %>
|
79
|
-
<a class="btn btn-default" href="<%= root_path %>batches"><%= t('GoBack') %></a>
|
80
|
-
<input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSure') %>" />
|
81
|
-
</form>
|
@@ -1,23 +0,0 @@
|
|
1
|
-
<header class="row">
|
2
|
-
<div class="col-sm-5">
|
3
|
-
<h3>
|
4
|
-
<%= t('Batches') %>
|
5
|
-
</h3>
|
6
|
-
</div>
|
7
|
-
<% if @batches.any? && @total_size > @count.to_i %>
|
8
|
-
<div class="col-sm-4">
|
9
|
-
<%= erb get_template(:_pagination), locals: { url: "#{root_path}batches" } %>
|
10
|
-
</div>
|
11
|
-
<% end %>
|
12
|
-
</header>
|
13
|
-
|
14
|
-
<% if @batches.any? %>
|
15
|
-
<div class="table_container">
|
16
|
-
<%= erb get_template(:_batches_table), locals: { batches: @batches } %>
|
17
|
-
</div>
|
18
|
-
<% end %>
|
19
|
-
|
20
|
-
<form action="<%= root_path %>batches/all" method="post">
|
21
|
-
<%= csrf_tag %>
|
22
|
-
<input class="btn btn-danger btn-xs pull-right flip" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
23
|
-
</form>
|
@@ -1,137 +0,0 @@
|
|
1
|
-
<h3><%= t('Pool') %></h3>
|
2
|
-
|
3
|
-
<div class="table_container">
|
4
|
-
<table class="table table-striped table-bordered table-white table-hover">
|
5
|
-
<tbody>
|
6
|
-
<tr>
|
7
|
-
<th scope=row><%= t('PID') %></td>
|
8
|
-
<td><%= @pool.pid %></td>
|
9
|
-
</tr>
|
10
|
-
<tr>
|
11
|
-
<th scope=row><%= t('Created') %></td>
|
12
|
-
<td><%= safe_relative_time(@pool.created_at.to_f) %></td>
|
13
|
-
</tr>
|
14
|
-
<tr>
|
15
|
-
<th scope=row><%= t('Description') %></td>
|
16
|
-
<td><%= @pool.description %></td>
|
17
|
-
</tr>
|
18
|
-
<tr>
|
19
|
-
<th scope=row><%= t('Type') %></td>
|
20
|
-
<td><%= @pool.order.to_s.upcase %></td>
|
21
|
-
</tr>
|
22
|
-
<tr>
|
23
|
-
<th scope=row><%= t('Concurrency') %></td>
|
24
|
-
<td><%= @pool.concurrency %></td>
|
25
|
-
</tr>
|
26
|
-
<tr>
|
27
|
-
<th scope=row><%= t('Utilization') %></td>
|
28
|
-
<td><%= @pool.active_count %></td>
|
29
|
-
</tr>
|
30
|
-
<tr>
|
31
|
-
<th scope=row><%= t('Pending Tasks') %></td>
|
32
|
-
<td><%= @pool.pending_count %></td>
|
33
|
-
</tr>
|
34
|
-
<tr>
|
35
|
-
<th scope=row><%= t('Returned Tasks') %></td>
|
36
|
-
<td><%= @pool.complete_count %></td>
|
37
|
-
</tr>
|
38
|
-
</tbody>
|
39
|
-
</table>
|
40
|
-
</div>
|
41
|
-
|
42
|
-
<%# Queued/Active Tasks %>
|
43
|
-
<header class="row">
|
44
|
-
<div class="col-sm-5">
|
45
|
-
<h3>
|
46
|
-
<%= t('Queued/Active Tasks') %>
|
47
|
-
</h3>
|
48
|
-
</div>
|
49
|
-
</header>
|
50
|
-
|
51
|
-
<% if @active_tasks.any? %>
|
52
|
-
<div class="table_container">
|
53
|
-
<table class="table table-striped table-bordered table-hover">
|
54
|
-
<thead>
|
55
|
-
<tr>
|
56
|
-
<th><%= t('Wrapper Batch BID') %></th>
|
57
|
-
<th><%= t('Job Class') %></th>
|
58
|
-
<th><%= t('Parameters') %></th>
|
59
|
-
</tr>
|
60
|
-
</thead>
|
61
|
-
|
62
|
-
<% @active_tasks.each do |job_desc| %>
|
63
|
-
<tr>
|
64
|
-
<td><a href="<%= root_path %>batches/<%= job_desc['pool_wrapper_batch'] %>"><%= job_desc['pool_wrapper_batch'] %></a></td>
|
65
|
-
<td><%= job_desc['job'] %></td>
|
66
|
-
<td>
|
67
|
-
<code class="code-wrap">
|
68
|
-
<div class="args-extended">
|
69
|
-
<%= job_desc['args']&.to_json %>
|
70
|
-
<%= job_desc['kwargs']&.to_json %>
|
71
|
-
</div>
|
72
|
-
</code>
|
73
|
-
</td>
|
74
|
-
</tr>
|
75
|
-
<% end %>
|
76
|
-
</table>
|
77
|
-
</div>
|
78
|
-
<% end %>
|
79
|
-
|
80
|
-
<%# Pending Tasks %>
|
81
|
-
<header class="row">
|
82
|
-
<div class="col-sm-5">
|
83
|
-
<h3>
|
84
|
-
<%= t('Pending Tasks') %>
|
85
|
-
</h3>
|
86
|
-
</div>
|
87
|
-
<%
|
88
|
-
@current_page = @current_jobs_page
|
89
|
-
@total_size = @total_jobs_size
|
90
|
-
%>
|
91
|
-
<% if @jobs.any? && @total_size > @count.to_i %>
|
92
|
-
<div class="col-sm-4">
|
93
|
-
<%= erb get_template(:_pagination), locals: { url: "#{root_path}pools/#{@pool.pid}", page_key: :job_page } %>
|
94
|
-
</div>
|
95
|
-
<% end %>
|
96
|
-
</header>
|
97
|
-
|
98
|
-
<% if @jobs.any? %>
|
99
|
-
<div class="table_container">
|
100
|
-
<table class="table table-striped table-bordered table-hover">
|
101
|
-
<thead>
|
102
|
-
<tr>
|
103
|
-
<th><%= t('Job Class') %></th>
|
104
|
-
<th><%= t('Parameters') %></th>
|
105
|
-
<th><%= t('Wrapper Batch BID') %></th>
|
106
|
-
<% if @pool.order == 'priority' %>
|
107
|
-
<th><%= t('Priority') %></th>
|
108
|
-
<% end %>
|
109
|
-
</tr>
|
110
|
-
</thead>
|
111
|
-
|
112
|
-
<% @jobs.each do |job_desc| %>
|
113
|
-
<tr>
|
114
|
-
<td><%= job_desc['job'] %></td>
|
115
|
-
<td>
|
116
|
-
<code class="code-wrap">
|
117
|
-
<div class="args-extended">
|
118
|
-
<%= job_desc['args']&.to_json %>
|
119
|
-
<%= job_desc['kwargs']&.to_json %>
|
120
|
-
</div>
|
121
|
-
</code>
|
122
|
-
</td>
|
123
|
-
<td><a href="<%= root_path %>batches/<%= job_desc['pool_wrapper_batch'] %>"><%= job_desc['pool_wrapper_batch'] %></a></td>
|
124
|
-
<% if @pool.order == 'priority' %>
|
125
|
-
<td><%= job_desc['priority'] %></td>
|
126
|
-
<% end %>
|
127
|
-
</tr>
|
128
|
-
<% end %>
|
129
|
-
</table>
|
130
|
-
</div>
|
131
|
-
<% end %>
|
132
|
-
|
133
|
-
<form class="form-horizontal" action="<%= root_path %>pools/<%= @pool.pid %>" method="post">
|
134
|
-
<%= csrf_tag %>
|
135
|
-
<a class="btn btn-default" href="<%= root_path %>pools"><%= t('GoBack') %></a>
|
136
|
-
<input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSure') %>" />
|
137
|
-
</form>
|
@@ -1,47 +0,0 @@
|
|
1
|
-
<header class="row">
|
2
|
-
<div class="col-sm-5">
|
3
|
-
<h3>
|
4
|
-
<%= t('Pools') %>
|
5
|
-
</h3>
|
6
|
-
</div>
|
7
|
-
<% if @pools.any? && @total_size > @count.to_i %>
|
8
|
-
<div class="col-sm-4">
|
9
|
-
<%= erb get_template(:_pagination), locals: { url: "#{root_path}pools" } %>
|
10
|
-
</div>
|
11
|
-
<% end %>
|
12
|
-
</header>
|
13
|
-
|
14
|
-
<% if @pools.any? %>
|
15
|
-
<div class="table_container">
|
16
|
-
<table class="table table-striped table-bordered table-hover">
|
17
|
-
<thead>
|
18
|
-
<tr>
|
19
|
-
<th><%= t('Created') %></th>
|
20
|
-
<th><%= t('PID') %></th>
|
21
|
-
<th><%= t('Description') %></th>
|
22
|
-
<th><%= t('Type') %></th>
|
23
|
-
<th><%= t('Concurrency') %></th>
|
24
|
-
<th><%= t('Utilization') %></th>
|
25
|
-
<th><%= t('Pending Tasks') %></th>
|
26
|
-
</tr>
|
27
|
-
</thead>
|
28
|
-
|
29
|
-
<% @pools.each do |pool| %>
|
30
|
-
<tr>
|
31
|
-
<td><%= safe_relative_time(pool.created_at.to_f) %></th>
|
32
|
-
<td><a href="<%= root_path %>pools/<%= pool.pid %>"><%= pool.pid %></a></td>
|
33
|
-
<td><%= pool.description %></th>
|
34
|
-
<td><%= pool.order.to_s.upcase %></th>
|
35
|
-
<td><%= pool.concurrency %></th>
|
36
|
-
<td><%= pool.active_count %></th>
|
37
|
-
<td><%= pool.pending_count %></th>
|
38
|
-
</tr>
|
39
|
-
<% end %>
|
40
|
-
</table>
|
41
|
-
</div>
|
42
|
-
<% end %>
|
43
|
-
|
44
|
-
<form action="<%= root_path %>pools/all" method="post">
|
45
|
-
<%= csrf_tag %>
|
46
|
-
<input class="btn btn-danger btn-xs pull-right flip" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
47
|
-
</form>
|