cuboid 0.2.11 → 0.2.13

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
  SHA256:
3
- metadata.gz: c89df73b039d72a4e7ba39d3bd4061ccb6a7725db1283499a7f0f267b2b871b2
4
- data.tar.gz: c9e8eb873600484f75d0ef20acb7e97bdf77275dc494c204fd6acea1c0164cce
3
+ metadata.gz: 6ead3ec0a010bda785e92188f13865859de5804c715d6dae6f8e776128b48b6b
4
+ data.tar.gz: 947a1bf5fc9e352d2ef4900d1978eced4e000da8f31d363ee84ba6583b8e6ac2
5
5
  SHA512:
6
- metadata.gz: 25a3cb88bc17702e1f6a1f5fd7a53ef3505a61100978449cf19430434ca03ea050b774c798b097b2d4506a825953d86b7ed1fe121324202dc580594a0701ae35
7
- data.tar.gz: 7492bd6c97cffaff9657584a2c960f62af6f83ef960fbbf6115a8e40ff95acd79833bc9f0a9b8ab8e657952c05cb6ae132f032a3a7bd256a90880c5f5266791b
6
+ metadata.gz: e3ded914a1ba511dbde6c0bf6c1a21e02b46ccf0d06c09ed7c9c048da86a4dd1b2e0c793cc76a8c40a0293b892b2b70e8e514717520df9fb16448b5c2157caa8
7
+ data.tar.gz: 575d197f5ddb1135eef2a296b316e83613d420f191630094ef15b780698d3900ac746ab1225618e7c451fe52c66fccabb2aca569238e515a8ad58594caaa30e5
data/cuboid.gemspec CHANGED
@@ -31,31 +31,31 @@ Gem::Specification.new do |s|
31
31
  # latest one.
32
32
  s.add_dependency 'bundler'
33
33
 
34
- s.add_dependency 'concurrent-ruby', '~> 1.2.3'
35
- s.add_dependency 'concurrent-ruby-ext', '~> 1.2.3'
34
+ s.add_dependency 'concurrent-ruby', '~> 1.3.4'
35
+ s.add_dependency 'concurrent-ruby-ext', '~> 1.3.4'
36
36
 
37
37
  # For compressing/decompressing system state archives.
38
- s.add_dependency 'rubyzip', '~> 2.3.2'
38
+ s.add_dependency 'rubyzip', '~> 2.4.1'
39
39
 
40
- s.add_dependency 'childprocess', '~> 5.0.0'
40
+ s.add_dependency 'childprocess', '~> 5.1.0'
41
41
 
42
42
  # RPC serialization.
43
- s.add_dependency 'msgpack', '~> 1.7.2'
43
+ s.add_dependency 'msgpack', '~> 1.7.5'
44
44
 
45
45
  # Web server
46
- s.add_dependency 'puma', '~> 6.4.2'
46
+ s.add_dependency 'puma', '~> 6.5.0'
47
47
 
48
- s.add_dependency 'rack', '2.2.3.1'
48
+ s.add_dependency 'rack', '2.2.9'
49
49
  s.add_dependency 'rack-test'
50
50
 
51
51
  # REST API
52
- s.add_dependency 'sinatra', '2.2.0'
53
- s.add_dependency 'sinatra-contrib', '2.2.0'
52
+ s.add_dependency 'sinatra', '2.2.3'
53
+ s.add_dependency 'sinatra-contrib', '2.2.3'
54
54
 
55
55
  # RPC client/server implementation.
56
56
  s.add_dependency 'toq', '~> 0.1.0'
57
57
 
58
- s.add_dependency 'vmstat', '~> 2.3.0'
58
+ s.add_dependency 'vmstat', '~> 2.3.1'
59
59
  s.add_dependency 'sys-proctable', '~> 1.3.0'
60
60
 
61
61
  s.description = <<DESCRIPTION
@@ -32,6 +32,23 @@ module Instances
32
32
  json id: instance.token
33
33
  end
34
34
 
35
+ app.post '/instances/restore' do
36
+ max_utilization! if !agent && System.max_utilization?
37
+
38
+ options = ::JSON.load( request.body.read ) || {}
39
+
40
+ instance = get_instance
41
+ max_utilization! if !instance
42
+
43
+ handle_error proc { instance.shutdown } do
44
+ instance.restore!( options['session'] )
45
+ end
46
+
47
+ instances[instance.token] = instance
48
+
49
+ json id: instance.token
50
+ end
51
+
35
52
  # Progress
36
53
  app.get '/instances/:instance' do
37
54
  ensure_instance!
@@ -106,6 +123,14 @@ module Instances
106
123
  end
107
124
  end
108
125
 
126
+ app.put '/instances/:instance/abort' do
127
+ ensure_instance!
128
+
129
+ instance_for( params[:instance] ) do |instance|
130
+ json instance.abort!
131
+ end
132
+ end
133
+
109
134
  # Abort/shutdown
110
135
  app.delete '/instances/:instance' do
111
136
  ensure_instance!
@@ -44,7 +44,7 @@ class ApplicationWrapper
44
44
  # `true` If the system is scanning, `false` if {#run} hasn't been called
45
45
  # yet or if the scan has finished.
46
46
  def busy?
47
- ![:ready, :done, :suspended].include?( @application.status ) &&
47
+ ![:ready, :done, :suspended, :aborted].include?( @application.status ) &&
48
48
  !!@extended_running
49
49
  end
50
50
 
@@ -58,6 +58,7 @@ class ApplicationWrapper
58
58
  # Start the scan -- we can't block the RPC server so we're using a Thread.
59
59
  Thread.new do
60
60
  @application.run
61
+ @extended_running = false
61
62
  end
62
63
 
63
64
  true
@@ -66,10 +67,10 @@ class ApplicationWrapper
66
67
  def clean_up
67
68
  return false if @rpc_cleaned_up
68
69
 
70
+ @application.clean_up
71
+
69
72
  @rpc_cleaned_up = true
70
73
  @extended_running = false
71
-
72
- @application.clean_up
73
74
  end
74
75
 
75
76
  # @param [Integer] starting_line
@@ -109,7 +110,7 @@ class ApplicationWrapper
109
110
 
110
111
  data = {
111
112
  status: status,
112
- busy: running?,
113
+ busy: @extended_running,
113
114
  application: @application.class.to_s,
114
115
  seed: Utilities.random_seed,
115
116
  agent_url: Cuboid::Options.agent.url,
@@ -103,8 +103,15 @@ class Instance
103
103
  # @see #suspend
104
104
  # @see #snapshot_path
105
105
  def restore!( snapshot )
106
+ # If the instance isn't clean bail out now.
107
+ return false if busy? || @called
108
+
109
+ @called = @run_initializing = true
110
+
106
111
  Thread.new do
107
- @application.restore!( snapshot ).run
112
+ @application.restore!( snapshot )
113
+ @application.run
114
+ @run_initializing = false
108
115
  end
109
116
 
110
117
  true
@@ -140,6 +140,7 @@ class Application
140
140
  def aborted
141
141
  @abort = false
142
142
  @status = :aborted
143
+ @running = false
143
144
  nil
144
145
  end
145
146
 
data/lib/version CHANGED
@@ -1 +1 @@
1
- 0.2.11
1
+ 0.2.13
@@ -251,6 +251,26 @@ describe Cuboid::Rest::Server do
251
251
  end
252
252
  end
253
253
 
254
+ describe 'POST /instances/restore' do
255
+ let(:tpl_url) { '/instances/restore' }
256
+
257
+ it 'creates an instance from a restores session'
258
+
259
+ context 'when given invalid options' do
260
+ it 'returns a 500'
261
+
262
+ it 'does not list the instance on the index'
263
+ end
264
+
265
+ context 'when the system is at max utilization' do
266
+ it 'returns a 503'
267
+ end
268
+
269
+ context 'when a Agent has been set' do
270
+ it 'uses it'
271
+ end
272
+ end
273
+
254
274
  describe 'GET /instances/:instance' do
255
275
  let(:tpl_url) { '/instances/%s' }
256
276
 
@@ -567,7 +587,59 @@ describe Cuboid::Rest::Server do
567
587
  end
568
588
  end
569
589
  end
570
-
590
+
591
+ describe 'PUT /instances/:instance/abort' do
592
+ let(:tpl_url) { '/instances/%s/abort' }
593
+
594
+ before do
595
+ @id = create_instance
596
+ end
597
+
598
+ it 'aborts the instance' do
599
+ put url
600
+ expect(response_code).to eq 200
601
+
602
+ get "/instances/#{id}"
603
+ expect(['aborting', 'aborted']).to include response_data['status']
604
+ end
605
+
606
+ context 'when passed a non-existent id' do
607
+ let(:id) { non_existent_id }
608
+
609
+ it 'returns 404' do
610
+ put url
611
+ expect(response_code).to eq 404
612
+ end
613
+ end
614
+
615
+ context 'when the instance is from the Scheduler' do
616
+ before do
617
+ put '/scheduler/url', scheduler.url
618
+ end
619
+
620
+ it 'includes it' do
621
+ @id = scheduler.push( options )
622
+ sleep 0.1 while scheduler.running.empty?
623
+
624
+ put url
625
+ expect(response_code).to eq 200
626
+
627
+ get "/instances/#{id}"
628
+ expect(['aborting', 'aborted']).to include response_data['status']
629
+ end
630
+
631
+ context 'when the instance completes' do
632
+ it 'is removed' do
633
+ @id = scheduler.push( options )
634
+ sleep 0.1 while scheduler.completed.empty?
635
+
636
+ put url
637
+ expect(response_code).to be 404
638
+ end
639
+ end
640
+ end
641
+ end
642
+
571
643
  describe 'DELETE /instances/:instance' do
572
644
  let(:tpl_url) { '/instances/%s' }
573
645
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cuboid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.11
4
+ version: 0.2.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tasos Laskos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-03 00:00:00.000000000 Z
11
+ date: 2025-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -44,98 +44,98 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.2.3
47
+ version: 1.3.4
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.2.3
54
+ version: 1.3.4
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: concurrent-ruby-ext
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.2.3
61
+ version: 1.3.4
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.2.3
68
+ version: 1.3.4
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rubyzip
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 2.3.2
75
+ version: 2.4.1
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 2.3.2
82
+ version: 2.4.1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: childprocess
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 5.0.0
89
+ version: 5.1.0
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 5.0.0
96
+ version: 5.1.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: msgpack
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 1.7.2
103
+ version: 1.7.5
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 1.7.2
110
+ version: 1.7.5
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: puma
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 6.4.2
117
+ version: 6.5.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 6.4.2
124
+ version: 6.5.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rack
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - '='
130
130
  - !ruby/object:Gem::Version
131
- version: 2.2.3.1
131
+ version: 2.2.9
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - '='
137
137
  - !ruby/object:Gem::Version
138
- version: 2.2.3.1
138
+ version: 2.2.9
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rack-test
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -156,28 +156,28 @@ dependencies:
156
156
  requirements:
157
157
  - - '='
158
158
  - !ruby/object:Gem::Version
159
- version: 2.2.0
159
+ version: 2.2.3
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - '='
165
165
  - !ruby/object:Gem::Version
166
- version: 2.2.0
166
+ version: 2.2.3
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: sinatra-contrib
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - '='
172
172
  - !ruby/object:Gem::Version
173
- version: 2.2.0
173
+ version: 2.2.3
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - '='
179
179
  - !ruby/object:Gem::Version
180
- version: 2.2.0
180
+ version: 2.2.3
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: toq
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -198,14 +198,14 @@ dependencies:
198
198
  requirements:
199
199
  - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: 2.3.0
201
+ version: 2.3.1
202
202
  type: :runtime
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: 2.3.0
208
+ version: 2.3.1
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: sys-proctable
211
211
  requirement: !ruby/object:Gem::Requirement