cnvrg 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/cnvrg.gemspec +2 -0
- data/lib/cnvrg/api.rb +0 -1
- data/lib/cnvrg/cli.rb +210 -24
- data/lib/cnvrg/files.rb +26 -12
- data/lib/cnvrg/helpers.rb +29 -8
- data/lib/cnvrg/job.rb +42 -0
- data/lib/cnvrg/project.rb +1 -2
- data/lib/cnvrg/version.rb +1 -1
- metadata +31 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 496681d6eef33bf3a628234cce27bc4ad7ad8ade
|
4
|
+
data.tar.gz: 3b63e71e5cbe3f12e8754ca8ed0c243c9a8e11df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea24653cfa006ea02c2702cf24219e99669e4db48c423b116f67003b00379d1ded3f2bf0badc95d74978e270129cf64fc176b3d83b88c8c72451cf035a8fe63c
|
7
|
+
data.tar.gz: 950a88a8e3bb820ac1c4bb66f81eeeb142e231a51c504d82c19ceb540835c01b2061e56536c334f8beb87ed8ec50b271934cd8fc996924ee74a98fdaf9ef2d92
|
data/cnvrg.gemspec
CHANGED
@@ -32,7 +32,9 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_runtime_dependency 'highline', '~> 1.7', '>= 1.7.8'
|
33
33
|
spec.add_runtime_dependency 'thor', '~> 0.19.0','>=0.19.1'
|
34
34
|
spec.add_runtime_dependency 'aws-sdk'
|
35
|
+
spec.add_runtime_dependency 'sucker_punch', '~> 2.0'
|
35
36
|
spec.add_runtime_dependency 'urlcrypt', '~> 0.1.1'
|
37
|
+
spec.add_runtime_dependency 'logstash-logger'
|
36
38
|
|
37
39
|
end
|
38
40
|
|
data/lib/cnvrg/api.rb
CHANGED
data/lib/cnvrg/cli.rb
CHANGED
@@ -18,6 +18,9 @@ require 'cnvrg/project'
|
|
18
18
|
require 'cnvrg/files'
|
19
19
|
require 'cnvrg/experiment'
|
20
20
|
require 'etc'
|
21
|
+
require 'logstash-logger'
|
22
|
+
require 'cnvrg/job'
|
23
|
+
require 'pry'
|
21
24
|
|
22
25
|
|
23
26
|
# DEV VERSION
|
@@ -27,13 +30,12 @@ module Cnvrg
|
|
27
30
|
|
28
31
|
INSTALLATION_URLS = {docker: "https://docs.docker.com/engine/installation/", jupyter: "http://jupyter.readthedocs.io/en/latest/install.html"}
|
29
32
|
|
33
|
+
|
30
34
|
desc 'version', 'Prints cnvrg current version'
|
31
35
|
|
32
36
|
def version
|
33
|
-
|
34
37
|
puts Cnvrg::VERSION
|
35
38
|
end
|
36
|
-
|
37
39
|
map %w(-v --version) => :version
|
38
40
|
|
39
41
|
desc 'set api url', 'set api url'
|
@@ -132,22 +134,37 @@ module Cnvrg
|
|
132
134
|
if owners.empty?
|
133
135
|
else
|
134
136
|
owners << choose_owner
|
137
|
+
chosen = false
|
138
|
+
while !chosen
|
135
139
|
choose_owner = ask("Choose default owner:\n"+owners.join("\n")+"\n")
|
140
|
+
owners_lower = owners.map{|o| o.downcase}
|
141
|
+
if !owners_lower.include? choose_owner.downcase
|
142
|
+
say "Could not find owner named #{choose_owner}", Thor::Shell::Color::RED
|
143
|
+
else
|
144
|
+
chosen = true
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
136
148
|
|
137
149
|
end
|
138
150
|
if set_owner(choose_owner, result["username"])
|
139
151
|
say "Setting default owner: #{choose_owner}", Thor::Shell::Color::GREEN
|
152
|
+
|
140
153
|
else
|
141
154
|
say "Setting default owenr has failed, logging out", Thor::Shell::Color::RED
|
155
|
+
|
142
156
|
return logout()
|
143
157
|
end
|
144
158
|
|
145
159
|
else
|
146
160
|
say "Failed to authenticate, wrong email/password", Thor::Shell::Color::RED
|
147
|
-
|
161
|
+
|
162
|
+
exit(1)
|
148
163
|
end
|
149
164
|
rescue SignalException
|
165
|
+
|
150
166
|
say "/nAborting"
|
167
|
+
logout()
|
151
168
|
exit(1)
|
152
169
|
end
|
153
170
|
end
|
@@ -168,18 +185,25 @@ module Cnvrg
|
|
168
185
|
|
169
186
|
end
|
170
187
|
|
188
|
+
|
171
189
|
desc 'me', 'Prints the current logged in user email'
|
172
190
|
|
173
|
-
def me
|
191
|
+
def me()
|
174
192
|
begin
|
175
|
-
|
193
|
+
|
194
|
+
verify_logged_in(false)
|
195
|
+
log_start(__method__,args,options)
|
176
196
|
auth = Cnvrg::Auth.new
|
177
197
|
if (email = auth.get_email)
|
178
198
|
say "Logged in as: #{email}", Thor::Shell::Color::GREEN
|
179
199
|
else
|
180
200
|
say "You're not logged in.", Thor::Shell::Color::RED
|
181
201
|
end
|
202
|
+
|
203
|
+
log_end(0)
|
182
204
|
rescue SignalException
|
205
|
+
log_end(-1)
|
206
|
+
|
183
207
|
say "/nAborting"
|
184
208
|
exit(1)
|
185
209
|
end
|
@@ -193,7 +217,8 @@ module Cnvrg
|
|
193
217
|
|
194
218
|
def new(project_name)
|
195
219
|
begin
|
196
|
-
verify_logged_in()
|
220
|
+
verify_logged_in(false)
|
221
|
+
log_start(__method__,args,options)
|
197
222
|
clean = options["clean"]
|
198
223
|
docker_image = options["docker_image"]
|
199
224
|
if !docker_image.nil? and !docker_image.empty?
|
@@ -202,6 +227,7 @@ module Cnvrg
|
|
202
227
|
say "Creating #{project_name}", Thor::Shell::Color::BLUE
|
203
228
|
if Dir.exists? project_name or File.exists? project_name
|
204
229
|
say "Conflict with dir/file #{project_name}", Thor::Shell::Color::RED
|
230
|
+
log_end(1,"conflict with dir/file #{project_name}")
|
205
231
|
exit(1)
|
206
232
|
end
|
207
233
|
|
@@ -211,13 +237,18 @@ module Cnvrg
|
|
211
237
|
@project.generate_idx
|
212
238
|
else
|
213
239
|
say "Error creating project, please contact support.", Thor::Shell::Color::RED
|
240
|
+
log_end(1,"can't create project #{project_name}")
|
241
|
+
|
214
242
|
exit(0)
|
215
243
|
end
|
216
244
|
|
217
245
|
say "created\t\tproject's tree", Thor::Shell::Color::GREEN
|
218
246
|
say "created\t\tproject's config", Thor::Shell::Color::GREEN
|
219
247
|
say "Linked directory to\t#{@project.url}", Thor::Shell::Color::GREEN
|
248
|
+
|
220
249
|
rescue SignalException
|
250
|
+
log_end(-1)
|
251
|
+
|
221
252
|
say "/nAborting"
|
222
253
|
exit(1)
|
223
254
|
end
|
@@ -229,13 +260,16 @@ module Cnvrg
|
|
229
260
|
|
230
261
|
def link
|
231
262
|
begin
|
232
|
-
verify_logged_in()
|
263
|
+
verify_logged_in(false)
|
264
|
+
log_start(__method__,args,options)
|
265
|
+
|
233
266
|
sync = options["sync"]
|
234
267
|
project_name =File.basename(Dir.getwd)
|
235
268
|
say "Linking #{project_name}", Thor::Shell::Color::BLUE
|
236
269
|
if File.directory?(Dir.getwd+"/.cnvrg")
|
237
270
|
config = YAML.load_file("#{Dir.getwd}/.cnvrg/config.yml")
|
238
271
|
say "Directory is already linked to #{config[:project_slug]}", Thor::Shell::Color::RED
|
272
|
+
|
239
273
|
exit(0)
|
240
274
|
end
|
241
275
|
if Project.link(project_name)
|
@@ -248,11 +282,16 @@ module Cnvrg
|
|
248
282
|
|
249
283
|
url = @project.url
|
250
284
|
say "#{project_name}'s location is: #{url}\n", Thor::Shell::Color::BLUE
|
285
|
+
log_end(0)
|
286
|
+
|
251
287
|
else
|
288
|
+
log_end(1,"can't link project")
|
252
289
|
say "Error linking project, please contact support.", Thor::Shell::Color::RED
|
253
290
|
exit(0)
|
254
291
|
end
|
255
292
|
rescue SignalException
|
293
|
+
log_end(-1)
|
294
|
+
|
256
295
|
say "/nAborting"
|
257
296
|
exit(1)
|
258
297
|
end
|
@@ -262,7 +301,8 @@ module Cnvrg
|
|
262
301
|
|
263
302
|
def clone(project_url)
|
264
303
|
begin
|
265
|
-
verify_logged_in()
|
304
|
+
verify_logged_in(false)
|
305
|
+
log_start(__method__,args,options)
|
266
306
|
url_parts = project_url.split("/")
|
267
307
|
project_index = Cnvrg::Helpers.look_for_in_path(project_url, "projects")
|
268
308
|
slug = url_parts[project_index+1]
|
@@ -273,6 +313,8 @@ module Cnvrg
|
|
273
313
|
project_name = response["title"]
|
274
314
|
say "Cloning #{project_name}", Thor::Shell::Color::BLUE
|
275
315
|
if Dir.exists? project_name or File.exists? project_name
|
316
|
+
log_end(1,"conflict with dir/file #{project_name}")
|
317
|
+
|
276
318
|
say "Error: Conflict with dir/file #{project_name}", Thor::Shell::Color::RED
|
277
319
|
exit(1)
|
278
320
|
end
|
@@ -302,11 +344,15 @@ module Cnvrg
|
|
302
344
|
end
|
303
345
|
end
|
304
346
|
say "Done.\nDownloaded total of #{successful_changes.size} files", Thor::Shell::Color::GREEN
|
347
|
+
log_end(0)
|
305
348
|
else
|
349
|
+
log_end(1,"can't create directory")
|
350
|
+
|
306
351
|
say "Error: Couldn't create directory: #{project_name}", Thor::Shell::Color::RED
|
307
352
|
exit(1)
|
308
353
|
end
|
309
354
|
rescue SignalException
|
355
|
+
log_end(-1)
|
310
356
|
say "/nAborting"
|
311
357
|
exit(1)
|
312
358
|
end
|
@@ -317,6 +363,7 @@ module Cnvrg
|
|
317
363
|
def status
|
318
364
|
begin
|
319
365
|
verify_logged_in()
|
366
|
+
log_start(__method__,args,options)
|
320
367
|
@project = Project.new(get_project_home)
|
321
368
|
result = @project.compare_idx["result"]
|
322
369
|
commit = result["commit"]
|
@@ -324,6 +371,7 @@ module Cnvrg
|
|
324
371
|
say "Comparing local changes with remote version:", Thor::Shell::Color::BLUE
|
325
372
|
if result["added"].empty? and result["updated_on_local"].empty? and result["updated_on_server"].empty? and result["deleted"].empty? and result["conflicts"].empty?
|
326
373
|
say "Project is up to date", Thor::Shell::Color::GREEN
|
374
|
+
log_end(0)
|
327
375
|
return true
|
328
376
|
end
|
329
377
|
if result["added"].size > 0
|
@@ -359,7 +407,9 @@ module Cnvrg
|
|
359
407
|
say "\t\tC:\t#{a}", Thor::Shell::Color::RED
|
360
408
|
end
|
361
409
|
end
|
410
|
+
log_end(0)
|
362
411
|
rescue SignalException
|
412
|
+
log_end(-1)
|
363
413
|
say "/nAborting"
|
364
414
|
exit(1)
|
365
415
|
end
|
@@ -373,6 +423,8 @@ module Cnvrg
|
|
373
423
|
|
374
424
|
begin
|
375
425
|
verify_logged_in()
|
426
|
+
log_start(__method__,args,options)
|
427
|
+
|
376
428
|
@project = Project.new(get_project_home)
|
377
429
|
|
378
430
|
@files = Cnvrg::Files.new(@project.owner, @project.slug)
|
@@ -384,6 +436,8 @@ module Cnvrg
|
|
384
436
|
commit = result["result"]["commit"]
|
385
437
|
if !link
|
386
438
|
if commit != @project.last_local_commit and !@project.last_local_commit.nil? and !result["result"]["tree"]["updated_on_server"].empty?
|
439
|
+
log_end(0)
|
440
|
+
|
387
441
|
say "Remote server has an updated version, please run `cnvrg download` first, or alternatively: `cnvrg sync`", Thor::Shell::Color::YELLOW
|
388
442
|
exit(1)
|
389
443
|
end
|
@@ -391,6 +445,7 @@ module Cnvrg
|
|
391
445
|
end
|
392
446
|
result = result["result"]["tree"]
|
393
447
|
if result["added"].empty? and result["updated_on_local"].empty? and result["deleted"].empty?
|
448
|
+
log_end(0)
|
394
449
|
say "Project is up to date", Thor::Shell::Color::GREEN
|
395
450
|
return true
|
396
451
|
end
|
@@ -427,6 +482,7 @@ module Cnvrg
|
|
427
482
|
successful_updates<< relative_path
|
428
483
|
else
|
429
484
|
@files.rollback_commit(commit_sha1)
|
485
|
+
log_end(1,"can't upload, Rolling Back all changes")
|
430
486
|
say "Couldn't upload, Rolling Back all changes.", Thor::Shell::Color::RED
|
431
487
|
exit(0)
|
432
488
|
end
|
@@ -448,13 +504,15 @@ module Cnvrg
|
|
448
504
|
end
|
449
505
|
end
|
450
506
|
end
|
507
|
+
log_end(0)
|
451
508
|
|
452
509
|
rescue SignalException
|
510
|
+
log_end(-1)
|
453
511
|
@files.rollback_commit(commit_sha1)
|
454
512
|
say "User aborted, Rolling Back all changes.", Thor::Shell::Color::RED
|
455
513
|
exit(0)
|
456
514
|
rescue => e
|
457
|
-
|
515
|
+
log_end(1,e.message)
|
458
516
|
@files.rollback_commit(commit_sha1)
|
459
517
|
say "Exception while trying to upload, Rolling back", Thor::Shell::Color::RED
|
460
518
|
exit(0)
|
@@ -467,7 +525,8 @@ module Cnvrg
|
|
467
525
|
@project.update_idx_with_files_commits!((successful_deletions+successful_updates), res["result"]["commit_time"])
|
468
526
|
|
469
527
|
@project.update_idx_with_commit!(commit_sha1)
|
470
|
-
rescue
|
528
|
+
rescue => e
|
529
|
+
log_end(1,e.message)
|
471
530
|
@files.rollback_commit(commit_sha1)
|
472
531
|
say "Couldn't commit updates, Rolling Back all changes.", Thor::Shell::Color::RED
|
473
532
|
exit(1)
|
@@ -486,14 +545,20 @@ module Cnvrg
|
|
486
545
|
say del.join("\n"), Thor::Shell::Color::GREEN
|
487
546
|
end
|
488
547
|
say "Total of #{update_count} / #{update_total} files.", Thor::Shell::Color::GREEN
|
548
|
+
log_end(0)
|
489
549
|
else
|
490
550
|
@files.rollback_commit(commit_sha1)
|
551
|
+
log_end(1, "error. Rolling Back all changes")
|
491
552
|
say "Error. Rolling Back all changes.", Thor::Shell::Color::RED
|
492
553
|
end
|
493
554
|
else
|
555
|
+
log_end(1, "error. Rolling Back all changes")
|
556
|
+
|
494
557
|
@files.rollback_commit(commit_sha1)
|
495
558
|
end
|
496
559
|
rescue SignalException
|
560
|
+
log_end(-1)
|
561
|
+
|
497
562
|
say "\nAborting",Thor::Shell::Color::BLUE
|
498
563
|
say "\nRolling back all changes",Thor::Shell::Color::BLUE
|
499
564
|
@files.rollback_commit(commit_sha1)
|
@@ -507,6 +572,7 @@ module Cnvrg
|
|
507
572
|
def download
|
508
573
|
begin
|
509
574
|
verify_logged_in()
|
575
|
+
log_start(__method__,args,options)
|
510
576
|
project_home = get_project_home
|
511
577
|
@project = Project.new(project_home)
|
512
578
|
@files = Cnvrg::Files.new(@project.owner, @project.slug)
|
@@ -516,6 +582,7 @@ module Cnvrg
|
|
516
582
|
commit = res["commit"]
|
517
583
|
if result["updated_on_server"].empty? and result["conflicts"] and result["deleted"].empty?
|
518
584
|
say "Project is up to date", Thor::Shell::Color::GREEN
|
585
|
+
log_end(0)
|
519
586
|
return true
|
520
587
|
end
|
521
588
|
update_count = 0
|
@@ -555,11 +622,14 @@ module Cnvrg
|
|
555
622
|
if update_total == successful_changes.size
|
556
623
|
# update idx with latest commit
|
557
624
|
@project.update_idx_with_commit!(commit)
|
625
|
+
|
558
626
|
say "Done. Downloaded:", Thor::Shell::Color::GREEN
|
559
627
|
say successful_changes.join("\n"), Thor::Shell::Color::GREEN
|
560
628
|
say "Total of #{successful_changes.size} / #{update_total} files.", Thor::Shell::Color::GREEN
|
629
|
+
log_end(0)
|
561
630
|
end
|
562
631
|
rescue SignalException
|
632
|
+
log_end(-1)
|
563
633
|
say "\nAborting", Thor::Shell::Color::BLUE
|
564
634
|
if successful_changes.nil?
|
565
635
|
exit(1)
|
@@ -624,11 +694,13 @@ module Cnvrg
|
|
624
694
|
method_option :upload_output, :type => :string, :aliases => ["--uo", "-uo"], :default => ""
|
625
695
|
|
626
696
|
def exec(*cmd)
|
697
|
+
# LogJob.perform_async(cmd,options)
|
698
|
+
#
|
627
699
|
log = []
|
628
700
|
cpu_average =0
|
629
701
|
memory_average = 0
|
630
702
|
verify_logged_in()
|
631
|
-
|
703
|
+
log_start(__method__,args,options)
|
632
704
|
project_home = get_project_home
|
633
705
|
@project = Project.new(project_home)
|
634
706
|
sync_before = options["sync_before"]
|
@@ -638,6 +710,7 @@ module Cnvrg
|
|
638
710
|
email_notification = options["email_notification"]
|
639
711
|
upload_output = options["upload_output"]
|
640
712
|
time_to_upload = calc_output_time(upload_output)
|
713
|
+
|
641
714
|
begin
|
642
715
|
if sync_before
|
643
716
|
# Sync before run
|
@@ -714,23 +787,23 @@ module Cnvrg
|
|
714
787
|
stderr.each do |err|
|
715
788
|
|
716
789
|
log << {time: Time.now, message: err, type: "stderr"}
|
717
|
-
puts err
|
718
790
|
end
|
719
791
|
end
|
720
792
|
|
721
793
|
rescue Errno::EIO => e
|
722
794
|
break
|
723
795
|
rescue Errno::ENOENT
|
796
|
+
log_end(1, "command #{cmd} isn't valid")
|
724
797
|
|
725
798
|
exp_success = false
|
726
799
|
|
727
800
|
say "command \"#{cmd}\" couldn't be executed, verify command is valid", Thor::Shell::Color::RED
|
728
801
|
rescue PTY::ChildExited
|
729
|
-
|
802
|
+
log_end(1, "proccess exited")
|
730
803
|
exp_success = false
|
731
804
|
say "The process exited!", Thor::Shell::Color::RED
|
732
805
|
rescue => e
|
733
|
-
|
806
|
+
log_end(1,e.message)
|
734
807
|
end
|
735
808
|
::Process.wait pid
|
736
809
|
cpu_average = cpu_total.inject(0) { |sum, el| sum + el }.to_f / cpu_total.size
|
@@ -749,6 +822,7 @@ module Cnvrg
|
|
749
822
|
exit_status = 0
|
750
823
|
else
|
751
824
|
say "Experiment has failed, your'e computer is offline", Thor::Shell::Color::RED
|
825
|
+
log_end(1,"experiment has failed,computer is offline")
|
752
826
|
exit(0)
|
753
827
|
end
|
754
828
|
else
|
@@ -756,6 +830,7 @@ module Cnvrg
|
|
756
830
|
end_commit = @project.last_local_commit
|
757
831
|
res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
|
758
832
|
say "Experiment has failed, look at the log for more details or run cnvrg exec --log", Thor::Shell::Color::RED
|
833
|
+
log_end(1,"experiment has failed")
|
759
834
|
exit(0)
|
760
835
|
end
|
761
836
|
|
@@ -772,9 +847,10 @@ module Cnvrg
|
|
772
847
|
res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
|
773
848
|
check = Helpers.checkmark()
|
774
849
|
say "#{check} Done. Experiment's result: #{Cnvrg::Helpers.remote_url}/#{@project.owner}/projects/#{@project.slug}/experiments/#{@exp.slug}", Thor::Shell::Color::GREEN
|
850
|
+
log_end(0)
|
775
851
|
end
|
776
|
-
rescue
|
777
|
-
|
852
|
+
rescue =>e
|
853
|
+
log_end(1,e.message)
|
778
854
|
say "Couldn't run #{cmd}, check your input parameters", Thor::Shell::Color::RED
|
779
855
|
exit(1)
|
780
856
|
end
|
@@ -785,6 +861,7 @@ module Cnvrg
|
|
785
861
|
end
|
786
862
|
rescue SignalException
|
787
863
|
exit_status = -1
|
864
|
+
log_end(-1)
|
788
865
|
end_commit = @project.last_local_commit
|
789
866
|
|
790
867
|
res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
|
@@ -800,7 +877,10 @@ module Cnvrg
|
|
800
877
|
method_option :image_name, :type => :string, :aliases => ["-i", "--i"], :default => ""
|
801
878
|
|
802
879
|
def run_notebook
|
880
|
+
|
803
881
|
begin
|
882
|
+
verify_logged_in(false)
|
883
|
+
log_start(__method__,args,options)
|
804
884
|
cur_path = Dir.pwd
|
805
885
|
notebook_dir = options["notebook_dir"]
|
806
886
|
if notebook_dir.empty?
|
@@ -841,6 +921,7 @@ module Cnvrg
|
|
841
921
|
try_again= false
|
842
922
|
else
|
843
923
|
say "Couldn't start notebook server", Thor::Shell::Color::RED
|
924
|
+
log_end(1, "can't start notebook server")
|
844
925
|
exit(1)
|
845
926
|
end
|
846
927
|
|
@@ -852,16 +933,19 @@ module Cnvrg
|
|
852
933
|
did_stop = system("#{docker_path} stop #{port_container}")
|
853
934
|
if !did_stop
|
854
935
|
say "Couldn't stop notebook server: #{port_container}", Thor::Shell::Color::RED
|
936
|
+
log_end(1,"can't stop notebook server")
|
855
937
|
exit(1)
|
856
938
|
|
857
939
|
end
|
858
940
|
else
|
859
941
|
logs = `#{docker_path} logs #{port_container}`
|
860
942
|
url = URI.extract(logs).reject { |x| x if !x.include? "http" }.uniq![0]
|
861
|
-
say "
|
943
|
+
say "Done, your notebook server is: #{url}", Thor::Shell::Color::BLUE
|
944
|
+
log_end(0)
|
862
945
|
exit(1)
|
863
946
|
end
|
864
947
|
else
|
948
|
+
log_end(1, "can;t start notebook server")
|
865
949
|
say "Couldn't start notebook server", Thor::Shell::Color::RED
|
866
950
|
exit(1)
|
867
951
|
|
@@ -875,13 +959,16 @@ module Cnvrg
|
|
875
959
|
check = Helpers.checkmark()
|
876
960
|
|
877
961
|
say "#{check} Notebook server started successfully, view notebook in url: #{url}", Thor::Shell::Color::GREEN
|
962
|
+
log_end(0)
|
878
963
|
else
|
879
964
|
say "Couldn't start notebook server", Thor::Shell::Color::RED
|
965
|
+
log_end(1,"can't start notebook server")
|
880
966
|
exit(1)
|
881
967
|
end
|
882
968
|
|
883
969
|
end
|
884
970
|
rescue SignalException
|
971
|
+
log_end(-1)
|
885
972
|
say "Aborting"
|
886
973
|
exit(1)
|
887
974
|
end
|
@@ -894,6 +981,8 @@ module Cnvrg
|
|
894
981
|
|
895
982
|
def install_notebook_libraries
|
896
983
|
begin
|
984
|
+
verify_logged_in(false)
|
985
|
+
log_start(__method__,args,options)
|
897
986
|
docker_path = verify_software_installed("docker")
|
898
987
|
container_id = get_container_id
|
899
988
|
say "Opening shell in notebook server\nYou can run pip install [library] to install more tools\ntype exit to finish", Thor::Shell::Color::BLUE
|
@@ -903,6 +992,7 @@ module Cnvrg
|
|
903
992
|
return commit_notebook(commit_name)
|
904
993
|
end
|
905
994
|
rescue SignalException
|
995
|
+
log_End(-1)
|
906
996
|
say "/nAborting"
|
907
997
|
exit(1)
|
908
998
|
end
|
@@ -912,6 +1002,8 @@ module Cnvrg
|
|
912
1002
|
desc 'commit_notebook', 'commit notebook changes to create a new notebook image'
|
913
1003
|
|
914
1004
|
def commit_notebook(notebook_image_name)
|
1005
|
+
verify_logged_in(false)
|
1006
|
+
log_start(__method__,args,options)
|
915
1007
|
begin
|
916
1008
|
docker_path = verify_software_installed("docker")
|
917
1009
|
|
@@ -922,12 +1014,15 @@ module Cnvrg
|
|
922
1014
|
commit_res = system("#{docker_path} commit #{container_id} #{notebook_image_name}")
|
923
1015
|
if commit_res
|
924
1016
|
checker = Helpers.checkmark()
|
1017
|
+
log_end(0)
|
925
1018
|
say "#{checker} Done.", Thor::Shell::Color::GREEN
|
926
1019
|
else
|
1020
|
+
log_End(1,"can't commit new notebook image")
|
927
1021
|
say "Couldn't commit new notebook image ", Thor::Shell::Color::RED
|
928
1022
|
|
929
1023
|
end
|
930
1024
|
rescue SignalException
|
1025
|
+
log_end(-1)
|
931
1026
|
say "/nAborting"
|
932
1027
|
exit(1)
|
933
1028
|
end
|
@@ -936,6 +1031,8 @@ module Cnvrg
|
|
936
1031
|
desc 'upload_notebook', 'commit notebook changes to create a new notebook image'
|
937
1032
|
|
938
1033
|
def upload_image(image_name)
|
1034
|
+
verify_logged_in(false)
|
1035
|
+
log_start(__method__,args,options)
|
939
1036
|
docker_path = verify_software_installed("docker")
|
940
1037
|
owner = Cnvrg::CLI.get_owner()
|
941
1038
|
# verify image exist
|
@@ -950,11 +1047,14 @@ module Cnvrg
|
|
950
1047
|
if !(File.exist? path or File.exist? path+"gz")
|
951
1048
|
saveRes = system("#{docker_path} save #{image_name}>#{path}")
|
952
1049
|
if !saveRes
|
1050
|
+
log_End(1, "can't create tar file from image")
|
953
1051
|
say "Couldn't create tar file from image", Thor::Shell::Color::RED
|
954
1052
|
exit(1)
|
955
1053
|
end
|
956
1054
|
gzipRes = system("gzip -f #{path}")
|
957
1055
|
if !gzipRes
|
1056
|
+
log_End(1, "can't create tar file from image")
|
1057
|
+
|
958
1058
|
say "Couldn't create tar file from image", Thor::Shell::Color::RED
|
959
1059
|
exit(1)
|
960
1060
|
end
|
@@ -971,14 +1071,20 @@ module Cnvrg
|
|
971
1071
|
File.delete(path)
|
972
1072
|
checks = Helpers.checkmark()
|
973
1073
|
say "#{checks} Done", Thor::Shell::Color::GREEN
|
1074
|
+
log_end(0)
|
974
1075
|
else
|
975
1076
|
say "Couldn't upload image", Thor::Shell::Color::RED
|
1077
|
+
log_end(1, "can't create upload imag")
|
1078
|
+
|
976
1079
|
end
|
977
1080
|
else
|
978
1081
|
say "Couldn't create image file for: #{image_name}", Thor::Shell::Color::RED
|
1082
|
+
log_end(1, "can't create upload imag")
|
979
1083
|
exit(1)
|
980
1084
|
end
|
981
1085
|
rescue SignalException
|
1086
|
+
log_end(-1)
|
1087
|
+
|
982
1088
|
say "Couldn't upload image file for: #{image_name}", Thor::Shell::Color::RED
|
983
1089
|
exit(1)
|
984
1090
|
end
|
@@ -990,6 +1096,8 @@ module Cnvrg
|
|
990
1096
|
|
991
1097
|
def download_image(image_name)
|
992
1098
|
begin
|
1099
|
+
verify_logged_in(false)
|
1100
|
+
log_start(__method__,args,options)
|
993
1101
|
owner = Cnvrg::CLI.get_owner()
|
994
1102
|
|
995
1103
|
notebooks_res = Cnvrg::API.request("users/#{owner}/images/" + "find", 'POST', {image_name: image_name})
|
@@ -1030,16 +1138,20 @@ module Cnvrg
|
|
1030
1138
|
if res
|
1031
1139
|
checks = Helpers.checkmark()
|
1032
1140
|
say "#{checks} Done", Thor::Shell::Color::GREEN
|
1141
|
+
log_end(0)
|
1033
1142
|
return true
|
1034
1143
|
else
|
1035
1144
|
say "Couldn't download image #{image_name}", Thor::Shell::Color::RED
|
1145
|
+
log_end(1,"can't download image")
|
1036
1146
|
return false
|
1037
1147
|
end
|
1038
1148
|
rescue Interrupt
|
1149
|
+
log_end(-1)
|
1039
1150
|
say "The user has exited to process, aborting", Thor::Shell::Color::BLUE
|
1040
1151
|
exit(1)
|
1041
1152
|
end
|
1042
1153
|
rescue SignalException
|
1154
|
+
log_end(-1)
|
1043
1155
|
say "/nAborting"
|
1044
1156
|
exit(1)
|
1045
1157
|
end
|
@@ -1049,6 +1161,9 @@ module Cnvrg
|
|
1049
1161
|
desc 'list_images', 'lists all custom images you can pull'
|
1050
1162
|
|
1051
1163
|
def list_images
|
1164
|
+
begin
|
1165
|
+
verify_logged_in(false)
|
1166
|
+
log_start(__method__,args,options)
|
1052
1167
|
owner = Cnvrg::CLI.get_owner()
|
1053
1168
|
res = Cnvrg::API.request("users/#{owner}/images/list", 'GET')
|
1054
1169
|
if Cnvrg::CLI.is_response_success(res)
|
@@ -1062,7 +1177,15 @@ module Cnvrg
|
|
1062
1177
|
printf "%-20s %-20s %-30s %-20s\n", u["name"], version, update_at, created_by
|
1063
1178
|
end
|
1064
1179
|
end
|
1180
|
+
log_end(0)
|
1065
1181
|
return res["result"]["images"]
|
1182
|
+
rescue SignalException
|
1183
|
+
log_end(-1)
|
1184
|
+
say "/nAborting"
|
1185
|
+
exit(1)
|
1186
|
+
end
|
1187
|
+
|
1188
|
+
|
1066
1189
|
end
|
1067
1190
|
|
1068
1191
|
|
@@ -1070,19 +1193,24 @@ module Cnvrg
|
|
1070
1193
|
|
1071
1194
|
def pull_image(image_name)
|
1072
1195
|
begin
|
1196
|
+
verify_logged_in(false)
|
1197
|
+
log_start(__method__,args,options)
|
1073
1198
|
|
1074
1199
|
if download_image(image_name)
|
1075
1200
|
path = Dir.pwd+"/#{owner}_#{image_name}.tar.gz"
|
1076
1201
|
loadRes = system("docker load < #{path}")
|
1077
1202
|
if loadRes.include? "Loaded image"
|
1078
1203
|
say loadRes, Thor::Shell::Color::GREEN
|
1204
|
+
log_end(0)
|
1079
1205
|
else
|
1080
1206
|
say loadRes, Thor::Shell::Color::RED
|
1207
|
+
log_end(1,loadRes)
|
1081
1208
|
end
|
1082
1209
|
|
1083
1210
|
end
|
1084
1211
|
rescue SignalException
|
1085
1212
|
say "\nAborting"
|
1213
|
+
log_end(-1)
|
1086
1214
|
exit(1)
|
1087
1215
|
end
|
1088
1216
|
|
@@ -1157,20 +1285,39 @@ module Cnvrg
|
|
1157
1285
|
end
|
1158
1286
|
|
1159
1287
|
end
|
1288
|
+
def log_start(command,args="", options={})
|
1289
|
+
begin
|
1290
|
+
$LOG.info "----"
|
1291
|
+
$LOG.info ruby_version: RUBY_VERSION, os: Cnvrg::Helpers.os(), cli_version:Cnvrg::VERSION
|
1292
|
+
$LOG.info command:command,args:args,options:options
|
1293
|
+
rescue
|
1294
|
+
end
|
1295
|
+
end
|
1296
|
+
def log_end(exit_status=0, error=nil)
|
1297
|
+
begin
|
1298
|
+
if exit_status==1
|
1299
|
+
$LOG.error exit_status:exit_status, error:error
|
1300
|
+
else
|
1301
|
+
$LOG.info exit_status:exit_status
|
1302
|
+
end
|
1303
|
+
rescue
|
1304
|
+
end
|
1305
|
+
end
|
1160
1306
|
|
1161
1307
|
def self.is_response_success(response, should_exit=true)
|
1162
1308
|
if response.nil?
|
1163
|
-
if Cnvrg::Helpers.internet_connection?
|
1309
|
+
if !Cnvrg::Helpers.internet_connection?
|
1310
|
+
# Cnvrg::CLI.log_end(1,"no internet connection")
|
1164
1311
|
say("<%= color('Error:You seems to be offline', RED) %>")
|
1165
1312
|
else
|
1166
1313
|
say("<%= color('Error', RED) %>")
|
1167
1314
|
end
|
1168
1315
|
elsif response["status"]!= 200
|
1169
1316
|
error = response['message']
|
1317
|
+
# Cnvrg::CLI.log_end(1, error)
|
1170
1318
|
if response["status"] == 500
|
1171
1319
|
say("<%= color('Server Error', RED) %>")
|
1172
1320
|
else
|
1173
|
-
puts response
|
1174
1321
|
say("<%= color('Error:#{error}', RED) %>")
|
1175
1322
|
end
|
1176
1323
|
|
@@ -1221,8 +1368,39 @@ module Cnvrg
|
|
1221
1368
|
return false
|
1222
1369
|
end
|
1223
1370
|
end
|
1371
|
+
def log_handler
|
1372
|
+
begin
|
1373
|
+
date = DateTime.now.strftime("%m_%d_%Y")
|
1374
|
+
logfile = File.expand_path('~') +"/.cnvrg/log_#{date}.log"
|
1375
|
+
if !File.exist? logfile
|
1376
|
+
FileUtils.touch([logfile])
|
1377
|
+
yesterday = get_start_day-86399
|
1378
|
+
date = yesterday.strftime("%m_%d_%Y")
|
1379
|
+
|
1380
|
+
logfile_old = File.expand_path('~') +"/.cnvrg/log_#{date}.log"
|
1381
|
+
count = 0
|
1382
|
+
while not File.exist? logfile_old and count <60
|
1383
|
+
yesterday = yesterday - 86399
|
1384
|
+
date = yesterday.strftime("%m_%d_%Y")
|
1385
|
+
logfile_old = File.expand_path('~') +"/.cnvrg/log_#{date}.log"
|
1386
|
+
count+=1
|
1387
|
+
end
|
1388
|
+
@files = Cnvrg::Files.new(Cnvrg::CLI.get_owner, "")
|
1389
|
+
@files.upload_log_file(logfile_old,"log_#{date}.log",yesterday)
|
1390
|
+
FileUtils.remove logfile_old
|
1391
|
+
|
1392
|
+
|
1393
|
+
end
|
1394
|
+
$LOG = LogStashLogger.new(type: :file, path: logfile, sync: true)
|
1395
|
+
rescue => e
|
1396
|
+
# puts e
|
1397
|
+
end
|
1398
|
+
end
|
1399
|
+
|
1224
1400
|
|
1225
|
-
|
1401
|
+
|
1402
|
+
def verify_logged_in(in_dir=true)
|
1403
|
+
log_handler()
|
1226
1404
|
auth = Cnvrg::Auth.new
|
1227
1405
|
unless auth.is_logged_in?
|
1228
1406
|
say 'You\'re not logged in', Thor::Shell::Color::RED
|
@@ -1231,7 +1409,7 @@ module Cnvrg
|
|
1231
1409
|
end
|
1232
1410
|
|
1233
1411
|
if !Helpers.internet_connection?
|
1234
|
-
wait_offline = agree "Seems like you're offline, wait until your'
|
1412
|
+
wait_offline = agree "Seems like you're offline, wait until your' back online?",limited_to: ['y', 'n'], default: 'n'
|
1235
1413
|
if wait_offline
|
1236
1414
|
say "Waiting until your'e online..", Thor::Shell::Color::BLUE
|
1237
1415
|
while !Cnvrg::Helpers.internet_connection?
|
@@ -1245,13 +1423,21 @@ module Cnvrg
|
|
1245
1423
|
config = YAML.load_file(File.expand_path('~')+"/.cnvrg/config.yml")
|
1246
1424
|
version_date = config.to_h[:version_last_check]
|
1247
1425
|
next_day = get_start_day+ 86399
|
1248
|
-
if (version_date..next_day).cover?(Time.now)
|
1249
|
-
return true
|
1250
|
-
else
|
1426
|
+
if not (version_date..next_day).cover?(Time.now)
|
1251
1427
|
if should_update_version()
|
1252
1428
|
say "There is a new version, run gem update cnvrg", Thor::Shell::Color::BLUE
|
1253
1429
|
end
|
1254
1430
|
end
|
1431
|
+
if in_dir
|
1432
|
+
current_dir = Dir.pwd
|
1433
|
+
if not Dir.exist? current_dir+"/.cnvrg"
|
1434
|
+
say "You're not in a cnvrg project directory",Thor::Shell::Color::RED
|
1435
|
+
exit(0)
|
1436
|
+
|
1437
|
+
end
|
1438
|
+
end
|
1439
|
+
|
1440
|
+
|
1255
1441
|
|
1256
1442
|
end
|
1257
1443
|
|
data/lib/cnvrg/files.rb
CHANGED
@@ -2,7 +2,6 @@ require 'mimemagic'
|
|
2
2
|
require 'aws-sdk'
|
3
3
|
require 'URLcrypt'
|
4
4
|
|
5
|
-
|
6
5
|
module Cnvrg
|
7
6
|
class Files
|
8
7
|
|
@@ -24,13 +23,12 @@ module Cnvrg
|
|
24
23
|
commit_sha1: commit_sha1, file_name: file_name,
|
25
24
|
file_size: file_size, file_content_type: content_type})
|
26
25
|
if Cnvrg::CLI.is_response_success(upload_resp, false)
|
26
|
+
path = upload_resp["result"]["path"]
|
27
27
|
if file_size.to_f>= Cnvrg::Files::LARGE_FILE.to_f
|
28
28
|
s3_res = upload_large_files_s3(upload_resp, absolute_path)
|
29
29
|
else
|
30
|
-
path = upload_resp["result"]["path"]
|
31
30
|
s3_res = upload_small_files_s3(path, absolute_path, content_type)
|
32
31
|
end
|
33
|
-
|
34
32
|
if s3_res
|
35
33
|
Cnvrg::API.request(@base_resource + "update_s3", 'POST', {path: path, commit_id: upload_resp["result"]["commit_id"],
|
36
34
|
blob_id: upload_resp["result"]["id"]})
|
@@ -39,6 +37,23 @@ module Cnvrg
|
|
39
37
|
end
|
40
38
|
return false
|
41
39
|
end
|
40
|
+
def upload_log_file(absolute_path, relative_path,log_date)
|
41
|
+
file_name = File.basename relative_path
|
42
|
+
file_size = File.size(absolute_path).to_f
|
43
|
+
content_type = "text/x-log"
|
44
|
+
upload_resp = Cnvrg::API.request("/users/#{@owner}/" + "upload_cli_log", 'POST_FILE', {absolute_path: absolute_path, relative_path: relative_path,
|
45
|
+
file_name: file_name,log_date:log_date,
|
46
|
+
file_size: file_size, file_content_type: content_type})
|
47
|
+
if Cnvrg::CLI.is_response_success(upload_resp, false)
|
48
|
+
path = upload_resp["result"]["path"]
|
49
|
+
s3_res = upload_small_files_s3(path, absolute_path, "text/plain")
|
50
|
+
end
|
51
|
+
if s3_res
|
52
|
+
return true
|
53
|
+
end
|
54
|
+
return false
|
55
|
+
|
56
|
+
end
|
42
57
|
|
43
58
|
def upload_image(absolute_path, image_name, owner)
|
44
59
|
file_name = File.basename absolute_path
|
@@ -100,16 +115,16 @@ module Cnvrg
|
|
100
115
|
body = response.read_body
|
101
116
|
end
|
102
117
|
URLcrypt::key = [body].pack('H*')
|
103
|
-
|
104
118
|
s3 = Aws::S3::Resource.new(
|
105
119
|
:access_key_id => URLcrypt.decrypt(upload_resp["result"]["sts_a"]),
|
106
120
|
:secret_access_key => URLcrypt.decrypt(upload_resp["result"]["sts_s"]),
|
107
121
|
:session_token => URLcrypt.decrypt(upload_resp["result"]["sts_st"]),
|
108
122
|
:region => URLcrypt.decrypt(upload_resp["result"]["region"]))
|
109
|
-
|
110
|
-
|
123
|
+
resp = s3.bucket(URLcrypt.decrypt(upload_resp["result"]["bucket"])).
|
124
|
+
object(upload_resp["result"]["path"]+"/"+File.basename(file_path)).
|
125
|
+
upload_file(file_path)
|
111
126
|
return resp
|
112
|
-
rescue =>
|
127
|
+
rescue =>e
|
113
128
|
puts e
|
114
129
|
return false
|
115
130
|
|
@@ -118,9 +133,9 @@ module Cnvrg
|
|
118
133
|
|
119
134
|
end
|
120
135
|
|
121
|
-
def upload_small_files_s3(
|
122
|
-
url = URI.parse(
|
123
|
-
file = File.open(
|
136
|
+
def upload_small_files_s3(url_path, file_path, content_type)
|
137
|
+
url = URI.parse(url_path)
|
138
|
+
file = File.open(file_path, "rb")
|
124
139
|
body = file.read
|
125
140
|
begin
|
126
141
|
Net::HTTP.start(url.host) do |http|
|
@@ -131,8 +146,7 @@ module Cnvrg
|
|
131
146
|
return true
|
132
147
|
rescue Interrupt
|
133
148
|
return false
|
134
|
-
rescue
|
135
|
-
puts e
|
149
|
+
rescue
|
136
150
|
return false
|
137
151
|
end
|
138
152
|
end
|
data/lib/cnvrg/helpers.rb
CHANGED
@@ -2,18 +2,20 @@ module Cnvrg
|
|
2
2
|
module Helpers
|
3
3
|
|
4
4
|
extend self
|
5
|
+
|
5
6
|
def checkmark
|
6
7
|
checkmark = "\u2713"
|
7
8
|
return checkmark.encode('utf-8')
|
8
|
-
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
11
|
+
def internet_connection?
|
12
|
+
begin
|
13
|
+
true if open("http://www.google.com/")
|
14
|
+
rescue
|
15
|
+
false
|
16
16
|
end
|
17
|
+
end
|
18
|
+
|
17
19
|
def remote_url
|
18
20
|
home_dir = File.expand_path('~')
|
19
21
|
config = ""
|
@@ -30,7 +32,24 @@ module Cnvrg
|
|
30
32
|
if !config or config.empty? or config.to_h[:api].nil?
|
31
33
|
return "https://cnvrg.io"
|
32
34
|
else
|
33
|
-
return config.to_h[:api].gsub("/api","")
|
35
|
+
return config.to_h[:api].gsub("/api", "")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def os
|
40
|
+
|
41
|
+
if windows?
|
42
|
+
return "windows"
|
43
|
+
elsif mac?
|
44
|
+
return "mac"
|
45
|
+
elsif ubuntu?
|
46
|
+
return "ubuntu"
|
47
|
+
elsif linux?
|
48
|
+
|
49
|
+
return "linux"
|
50
|
+
else
|
51
|
+
|
52
|
+
return "N/A"
|
34
53
|
end
|
35
54
|
end
|
36
55
|
|
@@ -45,10 +64,12 @@ module Cnvrg
|
|
45
64
|
def linux?
|
46
65
|
not mac? and not windows?
|
47
66
|
end
|
67
|
+
|
48
68
|
def ubuntu?
|
49
69
|
unix = `cat /etc/lsb-release`.downcase!
|
50
70
|
return unix.include? "ubuntu"
|
51
71
|
end
|
72
|
+
|
52
73
|
def cnvrgignore_content
|
53
74
|
%{
|
54
75
|
# cnvrg ignore: Ignore the following directories and files
|
data/lib/cnvrg/job.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'mimemagic'
|
2
|
+
require 'aws-sdk'
|
3
|
+
require 'URLcrypt'
|
4
|
+
require 'pry'
|
5
|
+
|
6
|
+
require 'sucker_punch'
|
7
|
+
module Cnvrg
|
8
|
+
|
9
|
+
class LogJob
|
10
|
+
include SuckerPunch::Job
|
11
|
+
|
12
|
+
def perform(upload_resp, file_path)
|
13
|
+
begin
|
14
|
+
sts_path = upload_resp["result"]["path_sts"]
|
15
|
+
uri = URI.parse(sts_path)
|
16
|
+
http_object = Net::HTTP.new(uri.host, uri.port)
|
17
|
+
http_object.use_ssl = true if uri.scheme == 'https'
|
18
|
+
request = Net::HTTP::Get.new(sts_path)
|
19
|
+
body = ""
|
20
|
+
http_object.start do |http|
|
21
|
+
response = http.request request
|
22
|
+
body = response.read_body
|
23
|
+
end
|
24
|
+
URLcrypt::key = [body].pack('H*')
|
25
|
+
s3 = Aws::S3::Resource.new(
|
26
|
+
:access_key_id => URLcrypt.decrypt(upload_resp["result"]["sts_a"]),
|
27
|
+
:secret_access_key => URLcrypt.decrypt(upload_resp["result"]["sts_s"]),
|
28
|
+
:session_token => URLcrypt.decrypt(upload_resp["result"]["sts_st"]),
|
29
|
+
:region => URLcrypt.decrypt(upload_resp["result"]["region"]))
|
30
|
+
resp = s3.bucket(URLcrypt.decrypt(upload_resp["result"]["bucket"])).
|
31
|
+
object(upload_resp["result"]["path"]+"/"+File.basename(file_path)).
|
32
|
+
upload_file(file_path)
|
33
|
+
return resp
|
34
|
+
rescue =>e
|
35
|
+
puts e
|
36
|
+
return false
|
37
|
+
|
38
|
+
end
|
39
|
+
return true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/cnvrg/project.rb
CHANGED
@@ -134,8 +134,7 @@ module Cnvrg
|
|
134
134
|
File.open(".cnvrg/config.yml", "w+") { |f| f.write config.to_yaml }
|
135
135
|
File.open(".cnvrgignore", "w+") { |f| f.write cnvrgignore }
|
136
136
|
File.open("README.md", "w+") { |f| f.write cnvrgreadme }
|
137
|
-
rescue
|
138
|
-
puts e
|
137
|
+
rescue
|
139
138
|
return false
|
140
139
|
end
|
141
140
|
return true
|
data/lib/cnvrg/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cnvrg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yochay Ettun
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-01-
|
12
|
+
date: 2017-01-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -217,6 +217,20 @@ dependencies:
|
|
217
217
|
- - ">="
|
218
218
|
- !ruby/object:Gem::Version
|
219
219
|
version: '0'
|
220
|
+
- !ruby/object:Gem::Dependency
|
221
|
+
name: sucker_punch
|
222
|
+
requirement: !ruby/object:Gem::Requirement
|
223
|
+
requirements:
|
224
|
+
- - "~>"
|
225
|
+
- !ruby/object:Gem::Version
|
226
|
+
version: '2.0'
|
227
|
+
type: :runtime
|
228
|
+
prerelease: false
|
229
|
+
version_requirements: !ruby/object:Gem::Requirement
|
230
|
+
requirements:
|
231
|
+
- - "~>"
|
232
|
+
- !ruby/object:Gem::Version
|
233
|
+
version: '2.0'
|
220
234
|
- !ruby/object:Gem::Dependency
|
221
235
|
name: urlcrypt
|
222
236
|
requirement: !ruby/object:Gem::Requirement
|
@@ -231,6 +245,20 @@ dependencies:
|
|
231
245
|
- - "~>"
|
232
246
|
- !ruby/object:Gem::Version
|
233
247
|
version: 0.1.1
|
248
|
+
- !ruby/object:Gem::Dependency
|
249
|
+
name: logstash-logger
|
250
|
+
requirement: !ruby/object:Gem::Requirement
|
251
|
+
requirements:
|
252
|
+
- - ">="
|
253
|
+
- !ruby/object:Gem::Version
|
254
|
+
version: '0'
|
255
|
+
type: :runtime
|
256
|
+
prerelease: false
|
257
|
+
version_requirements: !ruby/object:Gem::Requirement
|
258
|
+
requirements:
|
259
|
+
- - ">="
|
260
|
+
- !ruby/object:Gem::Version
|
261
|
+
version: '0'
|
234
262
|
description: A CLI tool for interacting with cnvrg.io.
|
235
263
|
email:
|
236
264
|
- info@cnvrg.io
|
@@ -248,6 +276,7 @@ files:
|
|
248
276
|
- lib/cnvrg/experiment.rb
|
249
277
|
- lib/cnvrg/files.rb
|
250
278
|
- lib/cnvrg/helpers.rb
|
279
|
+
- lib/cnvrg/job.rb
|
251
280
|
- lib/cnvrg/project.rb
|
252
281
|
- lib/cnvrg/runner.rb
|
253
282
|
- lib/cnvrg/version.rb
|