canvas_sync 0.23.4 → 0.24.0.beta1

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 (206) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -4
  3. data/lib/canvas_sync/processors/provisioning_report_processor.rb +1 -0
  4. data/lib/canvas_sync/version.rb +1 -1
  5. data/lib/canvas_sync.rb +6 -4
  6. data/spec/canvas_sync/canvas_sync_spec.rb +11 -11
  7. data/spec/canvas_sync/live_events/process_event_job_spec.rb +1 -0
  8. data/spec/{dummy → internal}/app/models/application_record.rb +1 -0
  9. data/spec/{dummy → internal}/app/models/content_migration.rb +0 -0
  10. data/spec/{dummy → internal}/app/models/course.rb +0 -1
  11. data/spec/{dummy → internal}/app/models/course_nickname.rb +0 -0
  12. data/spec/{dummy → internal}/app/models/learning_outcome.rb +0 -0
  13. data/spec/{dummy → internal}/app/services/live_events/assignment_event.rb +0 -0
  14. data/spec/{dummy → internal}/app/services/live_events/course_event.rb +0 -0
  15. data/spec/{dummy → internal}/app/services/live_events/course_section_event.rb +0 -0
  16. data/spec/{dummy → internal}/app/services/live_events/enrollment_event.rb +0 -0
  17. data/spec/{dummy → internal}/app/services/live_events/grade_event.rb +0 -0
  18. data/spec/{dummy → internal}/app/services/live_events/module_event.rb +0 -0
  19. data/spec/{dummy → internal}/app/services/live_events/module_item_event.rb +0 -0
  20. data/spec/{dummy → internal}/app/services/live_events/submission_event.rb +0 -0
  21. data/spec/{dummy → internal}/app/services/live_events/syllabus_event.rb +0 -0
  22. data/spec/{dummy → internal}/app/services/live_events/user_event.rb +0 -0
  23. data/spec/internal/bin/rails +9 -0
  24. data/spec/internal/config/database.yml +5 -0
  25. data/spec/internal/config/routes.rb +5 -0
  26. data/spec/internal/config/storage.yml +3 -0
  27. data/spec/{dummy/db/migrate/20220926221926_create_users.rb → internal/db/migrate/20250912205136_create_users.rb} +0 -0
  28. data/spec/{dummy/db/migrate/20201016181346_create_pseudonyms.rb → internal/db/migrate/20250912205137_create_pseudonyms.rb} +0 -0
  29. data/spec/{dummy/db/migrate/20200415171620_create_groups.rb → internal/db/migrate/20250912205139_create_groups.rb} +0 -0
  30. data/spec/{dummy/db/migrate/20200416214248_create_group_memberships.rb → internal/db/migrate/20250912205140_create_group_memberships.rb} +0 -0
  31. data/spec/{dummy/db/migrate/20190702203622_create_accounts.rb → internal/db/migrate/20250912205141_create_accounts.rb} +0 -0
  32. data/spec/{dummy/db/migrate/20190702203623_create_terms.rb → internal/db/migrate/20250912205142_create_terms.rb} +0 -0
  33. data/spec/{dummy/db/migrate/20190702203625_create_sections.rb → internal/db/migrate/20250912205144_create_sections.rb} +0 -0
  34. data/spec/{dummy/db/migrate/20190702203626_create_assignments.rb → internal/db/migrate/20250912205145_create_assignments.rb} +0 -0
  35. data/spec/{dummy/db/migrate/20190702203627_create_submissions.rb → internal/db/migrate/20250912205146_create_submissions.rb} +0 -0
  36. data/spec/{dummy/db/migrate/20190927204545_create_roles.rb → internal/db/migrate/20250912205147_create_roles.rb} +2 -2
  37. data/spec/{dummy/db/migrate/20190927204546_create_admins.rb → internal/db/migrate/20250912205148_create_admins.rb} +0 -0
  38. data/spec/{dummy/db/migrate/20190702203630_create_assignment_groups.rb → internal/db/migrate/20250912205149_create_assignment_groups.rb} +0 -0
  39. data/spec/{dummy/db/migrate/20190702203631_create_context_modules.rb → internal/db/migrate/20250912205150_create_context_modules.rb} +0 -0
  40. data/spec/{dummy/db/migrate/20190702203632_create_context_module_items.rb → internal/db/migrate/20250912205151_create_context_module_items.rb} +0 -0
  41. data/spec/{dummy/db/migrate/20210907233329_create_user_observers.rb → internal/db/migrate/20250912205152_create_user_observers.rb} +0 -0
  42. data/spec/{dummy/db/migrate/20210907233330_create_grading_periods.rb → internal/db/migrate/20250912205153_create_grading_periods.rb} +0 -0
  43. data/spec/{dummy/db/migrate/20211001184920_create_grading_period_groups.rb → internal/db/migrate/20250912205154_create_grading_period_groups.rb} +0 -0
  44. data/spec/{dummy/db/migrate/20220308072643_create_content_migrations.rb → internal/db/migrate/20250912205155_create_content_migrations.rb} +0 -0
  45. data/spec/{dummy/db/migrate/20220712210559_create_learning_outcomes.rb → internal/db/migrate/20250912205156_create_learning_outcomes.rb} +0 -0
  46. data/spec/{dummy/db/migrate/20240523101010_create_learning_outcome_results.rb → internal/db/migrate/20250912205157_create_learning_outcome_results.rb} +0 -0
  47. data/spec/{dummy/db/migrate/20240510094100_create_rubric_associations.rb → internal/db/migrate/20250912205160_create_rubric_associations.rb} +0 -0
  48. data/spec/{dummy/db/migrate/20240510101100_create_rubric_assessments.rb → internal/db/migrate/20250912205161_create_rubric_assessments.rb} +0 -0
  49. data/spec/{dummy/db/migrate/20240828161300_create_course_progresses.rb → internal/db/migrate/20250912205162_create_course_progresses.rb} +0 -0
  50. data/spec/internal/db/schema.rb +6 -0
  51. data/spec/spec_helper.rb +8 -4
  52. metadata +182 -372
  53. data/lib/canvas_sync/job_batches/batch.rb +0 -595
  54. data/lib/canvas_sync/job_batches/callback.rb +0 -135
  55. data/lib/canvas_sync/job_batches/chain_builder.rb +0 -247
  56. data/lib/canvas_sync/job_batches/compat/active_job.rb +0 -108
  57. data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/css/styles.less +0 -182
  58. data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/js/batch_tree.js +0 -108
  59. data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/js/util.js +0 -2
  60. data/lib/canvas_sync/job_batches/compat/sidekiq/web/helpers.rb +0 -41
  61. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_batch_tree.erb +0 -6
  62. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_batches_table.erb +0 -44
  63. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_common.erb +0 -13
  64. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_jobs_table.erb +0 -21
  65. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_pagination.erb +0 -26
  66. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/batch.erb +0 -81
  67. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/batches.erb +0 -23
  68. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/pool.erb +0 -137
  69. data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/pools.erb +0 -47
  70. data/lib/canvas_sync/job_batches/compat/sidekiq/web.rb +0 -218
  71. data/lib/canvas_sync/job_batches/compat/sidekiq.rb +0 -149
  72. data/lib/canvas_sync/job_batches/compat.rb +0 -20
  73. data/lib/canvas_sync/job_batches/context_hash.rb +0 -157
  74. data/lib/canvas_sync/job_batches/hier_batch_ids.lua +0 -25
  75. data/lib/canvas_sync/job_batches/jobs/base_job.rb +0 -5
  76. data/lib/canvas_sync/job_batches/jobs/concurrent_batch_job.rb +0 -20
  77. data/lib/canvas_sync/job_batches/jobs/managed_batch_job.rb +0 -175
  78. data/lib/canvas_sync/job_batches/jobs/serial_batch_job.rb +0 -20
  79. data/lib/canvas_sync/job_batches/pool.rb +0 -254
  80. data/lib/canvas_sync/job_batches/pool_refill.lua +0 -47
  81. data/lib/canvas_sync/job_batches/redis_model.rb +0 -67
  82. data/lib/canvas_sync/job_batches/redis_script.rb +0 -161
  83. data/lib/canvas_sync/job_batches/schedule_callback.lua +0 -14
  84. data/lib/canvas_sync/job_batches/status.rb +0 -89
  85. data/lib/canvas_sync/job_uniqueness/compat/active_job.rb +0 -75
  86. data/lib/canvas_sync/job_uniqueness/compat/sidekiq.rb +0 -135
  87. data/lib/canvas_sync/job_uniqueness/compat.rb +0 -20
  88. data/lib/canvas_sync/job_uniqueness/configuration.rb +0 -25
  89. data/lib/canvas_sync/job_uniqueness/job_uniqueness.rb +0 -47
  90. data/lib/canvas_sync/job_uniqueness/lock_context.rb +0 -199
  91. data/lib/canvas_sync/job_uniqueness/locksmith.rb +0 -92
  92. data/lib/canvas_sync/job_uniqueness/on_conflict/base.rb +0 -32
  93. data/lib/canvas_sync/job_uniqueness/on_conflict/log.rb +0 -13
  94. data/lib/canvas_sync/job_uniqueness/on_conflict/null_strategy.rb +0 -9
  95. data/lib/canvas_sync/job_uniqueness/on_conflict/raise.rb +0 -11
  96. data/lib/canvas_sync/job_uniqueness/on_conflict/reject.rb +0 -21
  97. data/lib/canvas_sync/job_uniqueness/on_conflict/reschedule.rb +0 -20
  98. data/lib/canvas_sync/job_uniqueness/on_conflict.rb +0 -62
  99. data/lib/canvas_sync/job_uniqueness/strategy/base.rb +0 -107
  100. data/lib/canvas_sync/job_uniqueness/strategy/until_and_while_executing.rb +0 -35
  101. data/lib/canvas_sync/job_uniqueness/strategy/until_executed.rb +0 -20
  102. data/lib/canvas_sync/job_uniqueness/strategy/until_executing.rb +0 -20
  103. data/lib/canvas_sync/job_uniqueness/strategy/until_expired.rb +0 -16
  104. data/lib/canvas_sync/job_uniqueness/strategy/while_executing.rb +0 -26
  105. data/lib/canvas_sync/job_uniqueness/strategy.rb +0 -27
  106. data/lib/canvas_sync/job_uniqueness/unique_job_common.rb +0 -79
  107. data/spec/dummy/README.rdoc +0 -1
  108. data/spec/dummy/Rakefile +0 -6
  109. data/spec/dummy/app/services/live_events/assignment_created_event.rb +0 -12
  110. data/spec/dummy/app/services/live_events/assignment_updated_event.rb +0 -12
  111. data/spec/dummy/app/services/live_events/base_event.rb +0 -52
  112. data/spec/dummy/app/services/live_events/course_created_event.rb +0 -12
  113. data/spec/dummy/app/services/live_events/course_section_created_event.rb +0 -12
  114. data/spec/dummy/app/services/live_events/course_section_updated_event.rb +0 -12
  115. data/spec/dummy/app/services/live_events/course_updated_event.rb +0 -12
  116. data/spec/dummy/app/services/live_events/enrollment_created_event.rb +0 -12
  117. data/spec/dummy/app/services/live_events/enrollment_updated_event.rb +0 -12
  118. data/spec/dummy/app/services/live_events/grade_changed_event.rb +0 -12
  119. data/spec/dummy/app/services/live_events/module_created_event.rb +0 -12
  120. data/spec/dummy/app/services/live_events/module_item_created_event.rb +0 -12
  121. data/spec/dummy/app/services/live_events/module_item_updated_event.rb +0 -12
  122. data/spec/dummy/app/services/live_events/module_updated_event.rb +0 -12
  123. data/spec/dummy/app/services/live_events/submission_created_event.rb +0 -12
  124. data/spec/dummy/app/services/live_events/submission_updated_event.rb +0 -12
  125. data/spec/dummy/app/services/live_events/syllabus_updated_event.rb +0 -12
  126. data/spec/dummy/app/services/live_events/user_created_event.rb +0 -12
  127. data/spec/dummy/app/services/live_events/user_updated_event.rb +0 -12
  128. data/spec/dummy/bin/rails +0 -4
  129. data/spec/dummy/config/application.rb +0 -39
  130. data/spec/dummy/config/boot.rb +0 -5
  131. data/spec/dummy/config/database.yml +0 -25
  132. data/spec/dummy/config/environment.rb +0 -5
  133. data/spec/dummy/config/environments/development.rb +0 -41
  134. data/spec/dummy/config/environments/test.rb +0 -44
  135. data/spec/dummy/config/initializers/assets.rb +0 -11
  136. data/spec/dummy/config/initializers/session_store.rb +0 -3
  137. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  138. data/spec/dummy/config/routes.rb +0 -3
  139. data/spec/dummy/config/secrets.yml +0 -22
  140. data/spec/dummy/config.ru +0 -4
  141. data/spec/dummy/db/schema.rb +0 -563
  142. data/spec/job_batching/batch_spec.rb +0 -531
  143. data/spec/job_batching/callback_spec.rb +0 -38
  144. data/spec/job_batching/compat/active_job_spec.rb +0 -107
  145. data/spec/job_batching/compat/sidekiq_spec.rb +0 -127
  146. data/spec/job_batching/context_hash_spec.rb +0 -54
  147. data/spec/job_batching/flow_spec.rb +0 -82
  148. data/spec/job_batching/integration/fail_then_succeed.rb +0 -42
  149. data/spec/job_batching/integration/integration.rb +0 -57
  150. data/spec/job_batching/integration/nested.rb +0 -88
  151. data/spec/job_batching/integration/simple.rb +0 -47
  152. data/spec/job_batching/integration/workflow.rb +0 -134
  153. data/spec/job_batching/integration_helper.rb +0 -50
  154. data/spec/job_batching/pool_spec.rb +0 -161
  155. data/spec/job_batching/status_spec.rb +0 -76
  156. data/spec/job_batching/support/base_job.rb +0 -14
  157. data/spec/job_batching/support/sample_callback.rb +0 -2
  158. data/spec/job_uniqueness/compat/active_job_spec.rb +0 -49
  159. data/spec/job_uniqueness/compat/sidekiq_spec.rb +0 -68
  160. data/spec/job_uniqueness/lock_context_spec.rb +0 -106
  161. data/spec/job_uniqueness/on_conflict/log_spec.rb +0 -11
  162. data/spec/job_uniqueness/on_conflict/raise_spec.rb +0 -10
  163. data/spec/job_uniqueness/on_conflict/reschedule_spec.rb +0 -63
  164. data/spec/job_uniqueness/on_conflict_spec.rb +0 -16
  165. data/spec/job_uniqueness/spec_helper.rb +0 -17
  166. data/spec/job_uniqueness/strategy/base_spec.rb +0 -100
  167. data/spec/job_uniqueness/strategy/until_and_while_executing_spec.rb +0 -48
  168. data/spec/job_uniqueness/strategy/until_executed_spec.rb +0 -23
  169. data/spec/job_uniqueness/strategy/until_executing_spec.rb +0 -23
  170. data/spec/job_uniqueness/strategy/until_expired_spec.rb +0 -23
  171. data/spec/job_uniqueness/strategy/while_executing_spec.rb +0 -33
  172. data/spec/job_uniqueness/support/lock_strategy.rb +0 -28
  173. data/spec/job_uniqueness/support/on_conflict.rb +0 -24
  174. data/spec/job_uniqueness/support/test_worker.rb +0 -19
  175. data/spec/job_uniqueness/unique_job_common_spec.rb +0 -45
  176. /data/spec/{dummy → internal}/app/models/account.rb +0 -0
  177. /data/spec/{dummy → internal}/app/models/admin.rb +0 -0
  178. /data/spec/{dummy → internal}/app/models/assignment.rb +0 -0
  179. /data/spec/{dummy → internal}/app/models/assignment_group.rb +0 -0
  180. /data/spec/{dummy → internal}/app/models/assignment_override.rb +0 -0
  181. /data/spec/{dummy → internal}/app/models/context_module.rb +0 -0
  182. /data/spec/{dummy → internal}/app/models/context_module_item.rb +0 -0
  183. /data/spec/{dummy → internal}/app/models/course_progress.rb +0 -0
  184. /data/spec/{dummy → internal}/app/models/enrollment.rb +0 -0
  185. /data/spec/{dummy → internal}/app/models/grading_period.rb +0 -0
  186. /data/spec/{dummy → internal}/app/models/grading_period_group.rb +0 -0
  187. /data/spec/{dummy → internal}/app/models/group.rb +0 -0
  188. /data/spec/{dummy → internal}/app/models/group_membership.rb +0 -0
  189. /data/spec/{dummy → internal}/app/models/learning_outcome_result.rb +0 -0
  190. /data/spec/{dummy → internal}/app/models/pseudonym.rb +0 -0
  191. /data/spec/{dummy → internal}/app/models/role.rb +0 -0
  192. /data/spec/{dummy → internal}/app/models/rubric.rb +0 -0
  193. /data/spec/{dummy → internal}/app/models/rubric_assessment.rb +0 -0
  194. /data/spec/{dummy → internal}/app/models/rubric_association.rb +0 -0
  195. /data/spec/{dummy → internal}/app/models/score.rb +0 -0
  196. /data/spec/{dummy → internal}/app/models/section.rb +0 -0
  197. /data/spec/{dummy → internal}/app/models/submission.rb +0 -0
  198. /data/spec/{dummy → internal}/app/models/term.rb +0 -0
  199. /data/spec/{dummy → internal}/app/models/user.rb +0 -0
  200. /data/spec/{dummy → internal}/app/models/user_observer.rb +0 -0
  201. /data/spec/{dummy/db/migrate/20190702203621_create_courses.rb → internal/db/migrate/20250912205138_create_courses.rb} +0 -0
  202. /data/spec/{dummy/db/migrate/20190702203624_create_enrollments.rb → internal/db/migrate/20250912205143_create_enrollments.rb} +0 -0
  203. /data/spec/{dummy/db/migrate/20250319194134_create_course_nicknames.rb → internal/db/migrate/20250912205158_create_course_nicknames.rb} +0 -0
  204. /data/spec/{dummy/db/migrate/20250319194135_create_rubrics.rb → internal/db/migrate/20250912205159_create_rubrics.rb} +0 -0
  205. /data/spec/{dummy/db/migrate/20241223080202_create_assignment_overrides.rb → internal/db/migrate/20250912205163_create_assignment_overrides.rb} +0 -0
  206. /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,2 +0,0 @@
1
-
2
- export const root_url = (document.querySelector('meta[name="sidekiq-baseurl"]')).content;
@@ -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,6 +0,0 @@
1
-
2
- <div id="batch-tree" class="batch-tree">
3
- <script id="initial-data" type="application/json"><%= @tree_data.to_json %></script>
4
- </div>
5
-
6
- <script type="module" src="<%= root_path %>batches_assets/js/batch_tree.js"></script>
@@ -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">&laquo;</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) %>">&raquo;</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>