coursemology-evaluator 0.1.4 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fb396ac979a791b3d79224f80b88fa8ffb60b142
4
- data.tar.gz: d3fd4e275fea14998d7b66a61c36f935f78f85a9
3
+ metadata.gz: 81bd30cc5392032f6b0baaf8314278f48b3ae384
4
+ data.tar.gz: 135910bce96d87502a3c4b1bf80729ae35b1187a
5
5
  SHA512:
6
- metadata.gz: 3d33529e852271ea6c3a81e5e2c0732aea4614623bf550d0dc4ac40740b23d8659b9eaec7a516eedf1c7367af6563353ad9de799f7387687b917c2fce0f0b8a6
7
- data.tar.gz: 886203828c1fb1dcc2a42ede52600b23837523ad9ca41594d7322406cec834bdf3b8c8cafac77741bbcfc8e25900b12d06fe41631d5d4942cd30716525588e94
6
+ metadata.gz: 5460c5ea63f1857fa0a294a35130283e6aa3a6f76278734db13741921e881ff3cdcbae85791cf42b03596eafc8c9fe26f52329a5743e483379bdbbaee50f8366
7
+ data.tar.gz: 5db7643a681aa5e17a2c5a2a81ea7fa0ca8c7720c3498115b109a4f73a5637645c200b2a87f345fd25bcb5b433f095f348c67d407ecb0f5799417d5eed85cb08
data/README.md CHANGED
@@ -27,3 +27,26 @@ This is the evaluator program which will query Coursemology for pending evaluati
27
27
 
28
28
  3. Start the evaluator using the Procfile. You can use [foreman](https://github.com/ddollar/foreman)
29
29
  or any similar tool to generate system scripts for boot.
30
+
31
+ ### Command Line Options
32
+
33
+ #### Compulsory Options
34
+
35
+ 1. `--host`: Coursemology host to connect to
36
+ 2. `--api-user-email`: User with autograder flag set
37
+ 3. `--api-token`: Authentication token of the user
38
+
39
+ #### Optional Options
40
+
41
+ Time options are expected to be strings in [ISO8601 format](https://en.wikipedia.org/wiki/ISO_8601#Durations).
42
+
43
+ 1. `--interval`: Time interval between checks for programming allocations. As this time is
44
+ expected to be short, specify it with the time components of ISO8601 only. (Hours, minutes, seconds)
45
+ The time designator `T` must be left out.
46
+
47
+ 2. `--lifetime`: Length of time to cache Docker images. This is expected to be in the order of days.
48
+ If more granularity is needed, the time designator is required.
49
+
50
+ E.g. `1DT2H5M10S`
51
+
52
+ 3. `--one-shot`: Runs once and terminates. Primarily used for testing.
@@ -28,10 +28,11 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'vcr'
29
29
 
30
30
  spec.add_dependency 'activesupport', '~> 4.2.0', '>= 4.2.2'
31
+ spec.add_dependency 'iso8601', '~> 0.9.1'
31
32
  spec.add_dependency 'flexirest', '~> 1.2', '>= 1.2.6'
32
33
  spec.add_dependency 'faraday_middleware'
33
34
 
34
35
  spec.add_dependency 'coursemology-polyglot', '>= 0.0.3'
35
- spec.add_dependency 'docker-api', '>= 1.2.5'
36
+ spec.add_dependency 'docker-api', '>= 1.29.1'
36
37
  spec.add_dependency 'rubyzip'
37
38
  end
@@ -9,9 +9,11 @@ Docker.validate_version!
9
9
  require 'coursemology/polyglot'
10
10
  require 'coursemology/polyglot/extensions'
11
11
  require 'coursemology/evaluator/version'
12
+ require 'iso8601'
12
13
 
13
14
  module Coursemology::Evaluator
14
15
  extend ActiveSupport::Autoload
16
+ include ActiveSupport::Configurable
15
17
 
16
18
  autoload :Client
17
19
  autoload :DockerContainer
@@ -2,7 +2,8 @@
2
2
  require 'optparse'
3
3
 
4
4
  class Coursemology::Evaluator::CLI
5
- Options = Struct.new(:host, :api_token, :api_user_email, :one_shot)
5
+ Options = Struct.new(:host, :api_token, :api_user_email,
6
+ :one_shot, :poll_interval, :image_lifetime)
6
7
 
7
8
  def self.start(argv)
8
9
  new.start(argv)
@@ -14,6 +15,13 @@ class Coursemology::Evaluator::CLI
14
15
 
15
16
  def run(argv)
16
17
  options = optparse!(argv)
18
+ Coursemology::Evaluator.config.poll_interval =
19
+ ::ISO8601::Duration.new("PT#{options.poll_interval}".upcase).to_seconds
20
+
21
+ # Must include the time designator T if hours/minutes/seconds are required.
22
+ Coursemology::Evaluator.config.image_lifetime =
23
+ ::ISO8601::Duration.new("P#{options.image_lifetime}".upcase).to_seconds
24
+
17
25
  Coursemology::Evaluator::Client.initialize(options.host, options.api_user_email,
18
26
  options.api_token)
19
27
  Coursemology::Evaluator::Client.new(options.one_shot).run
@@ -27,6 +35,12 @@ class Coursemology::Evaluator::CLI
27
35
  # @return [Coursemology::Evaluator::CLI::Options]
28
36
  def optparse!(argv) # rubocop:disable Metrics/MethodLength
29
37
  options = Options.new
38
+
39
+ # default options for optional parameters
40
+ options.poll_interval = '10S'
41
+ options.image_lifetime = '1D'
42
+ options.one_shot = false
43
+
30
44
  option_parser = OptionParser.new do |parser|
31
45
  parser.banner = "Usage: #{parser.program_name} [options]"
32
46
  parser.on('-hHOST', '--host=HOST', 'Coursemology host to connect to') do |host|
@@ -41,6 +55,14 @@ class Coursemology::Evaluator::CLI
41
55
  options.api_user_email = user
42
56
  end
43
57
 
58
+ parser.on('-iINTERVAL', '--interval=INTERVAL') do |interval|
59
+ options.poll_interval = interval
60
+ end
61
+
62
+ parser.on('-lLIFETIME', '--lifetime=LIFETIME') do |lifetime|
63
+ options.image_lifetime = lifetime
64
+ end
65
+
44
66
  parser.on('-o', '--one-shot') do
45
67
  options.one_shot = true
46
68
  end
@@ -31,7 +31,7 @@ class Coursemology::Evaluator::Client
31
31
  # :nocov:
32
32
  # This sleep might not be triggered in the specs, because interruptions to the thread is
33
33
  # nondeterministically run by the OS scheduler.
34
- sleep(1.minute)
34
+ sleep(Coursemology::Evaluator.config.poll_interval)
35
35
  # :nocov:
36
36
  end
37
37
 
@@ -17,13 +17,14 @@ class Coursemology::Evaluator::DockerContainer < Docker::Container
17
17
 
18
18
  # Pulls the given image from Docker Hub.
19
19
  #
20
- # This caches images for 5 minutes, because the overhead for querying for images is quite high.
20
+ # This caches images for the specified time, because the overhead for querying
21
+ # for images is quite high.
21
22
  #
22
23
  # @param [String] image The image to pull.
23
24
  def pull_image(image)
24
25
  ActiveSupport::Notifications.instrument('pull.docker.evaluator.coursemology',
25
26
  image: image) do |payload|
26
- cached([:image, image], expires_in: 5.minutes) do
27
+ cached([:image, image], expires_in: Coursemology::Evaluator.config.image_lifetime) do
27
28
  Docker::Image.create('fromImage' => image)
28
29
  payload[:cached] = false
29
30
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  module Coursemology; end
3
3
  module Coursemology::Evaluator
4
- VERSION = '0.1.4'.freeze
4
+ VERSION = '0.1.6'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coursemology-evaluator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Low
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-03 00:00:00.000000000 Z
11
+ date: 2016-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -142,6 +142,20 @@ dependencies:
142
142
  - - ">="
143
143
  - !ruby/object:Gem::Version
144
144
  version: 4.2.2
145
+ - !ruby/object:Gem::Dependency
146
+ name: iso8601
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: 0.9.1
152
+ type: :runtime
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: 0.9.1
145
159
  - !ruby/object:Gem::Dependency
146
160
  name: flexirest
147
161
  requirement: !ruby/object:Gem::Requirement
@@ -196,14 +210,14 @@ dependencies:
196
210
  requirements:
197
211
  - - ">="
198
212
  - !ruby/object:Gem::Version
199
- version: 1.2.5
213
+ version: 1.29.1
200
214
  type: :runtime
201
215
  prerelease: false
202
216
  version_requirements: !ruby/object:Gem::Requirement
203
217
  requirements:
204
218
  - - ">="
205
219
  - !ruby/object:Gem::Version
206
- version: 1.2.5
220
+ version: 1.29.1
207
221
  - !ruby/object:Gem::Dependency
208
222
  name: rubyzip
209
223
  requirement: !ruby/object:Gem::Requirement
@@ -278,7 +292,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
278
292
  version: '0'
279
293
  requirements: []
280
294
  rubyforge_project:
281
- rubygems_version: 2.5.1
295
+ rubygems_version: 2.6.6
282
296
  signing_key:
283
297
  specification_version: 4
284
298
  summary: Coursemology programming package evaluator