cnvrg 0.0.1530000 → 0.0.1540000
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/cnvrg.gemspec +2 -0
- data/lib/cnvrg/api.rb +7 -4
- data/lib/cnvrg/cli.rb +796 -619
- data/lib/cnvrg/datafiles.rb +16 -2
- data/lib/cnvrg/files.rb +31 -6
- data/lib/cnvrg/helpers.rb +7 -0
- data/lib/cnvrg/project.rb +0 -1
- data/lib/cnvrg/version.rb +1 -3
- metadata +18 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 021cf92b7a10351f3e2b5dffb061acbba7e335e2
         | 
| 4 | 
            +
              data.tar.gz: 087dac2c6aacf82f7ca15c9e51f4858e7cfd1035
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 34b286d7d0c4e9c3d93acc09c3f857674d0b75f575730bfa7bae48b8fa5396cf631714b53bb7c99b48d5e7603925574011cef44801e235e208b2992fcf9ef2bb
         | 
| 7 | 
            +
              data.tar.gz: 44dacf68e883b199b0ceabc6921a5c1d853155942d8ad5dadb207effeb4e7096ae54e61edf819ca2385a5142b1b49a274648da7ab259faac5da721d4dd154e1c
         | 
    
        data/cnvrg.gemspec
    CHANGED
    
    | @@ -34,6 +34,8 @@ Gem::Specification.new do |spec| | |
| 34 34 | 
             
                spec.add_runtime_dependency 'aws-sdk'
         | 
| 35 35 | 
             
                spec.add_runtime_dependency 'sucker_punch', '~> 2.0'
         | 
| 36 36 | 
             
                spec.add_runtime_dependency 'urlcrypt', '~> 0.1.1'
         | 
| 37 | 
            +
                spec.add_runtime_dependency 'parallel', '~> 1.12.0'
         | 
| 38 | 
            +
                
         | 
| 37 39 | 
             
                spec.add_runtime_dependency 'logstash-logger', '~> 0.22.1'
         | 
| 38 40 | 
             
                spec.add_runtime_dependency 'launchy', '~> 2.4'
         | 
| 39 41 | 
             
                spec.add_runtime_dependency 'docker-api', '~> 1.33'
         | 
    
        data/lib/cnvrg/api.rb
    CHANGED
    
    | @@ -81,14 +81,17 @@ module Cnvrg | |
| 81 81 |  | 
| 82 82 | 
             
                            # what if windows?
         | 
| 83 83 | 
             
                            # data[:file] = Faraday::UploadIO.new(data[:absolute_path], content_type)
         | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 84 | 
            +
                              file_base = File.basename(data[:relative_path])
         | 
| 85 | 
            +
                                temp_path = File.expand_path('~')+"/.cnvrg/tmp_files/#{file_base}"
         | 
| 86 | 
            +
                                FileUtils.touch(temp_path)
         | 
| 87 | 
            +
             | 
| 88 | 
            +
             | 
| 87 89 | 
             
                            data[:file] = Faraday::UploadIO.new("#{temp_path}", "plain/text")
         | 
| 88 90 |  | 
| 89 91 | 
             
                            response = conn.post "#{endpoint_uri}/#{resource}", data
         | 
| 90 92 |  | 
| 91 | 
            -
                            FileUtils. | 
| 93 | 
            +
                            FileUtils.rm_rf(temp_path)
         | 
| 94 | 
            +
             | 
| 92 95 |  | 
| 93 96 | 
             
                            if parse_request == true
         | 
| 94 97 | 
             
                                JSON.parse(response.body)
         | 
    
        data/lib/cnvrg/cli.rb
    CHANGED
    
    | @@ -1,5 +1,7 @@ | |
| 1 1 | 
             
            #!/usr/bin/env ruby
         | 
| 2 2 | 
             
            require "pty"
         | 
| 3 | 
            +
            require 'etc'
         | 
| 4 | 
            +
            require 'parallel'
         | 
| 3 5 | 
             
            require "open4"
         | 
| 4 6 | 
             
            require 'netrc'
         | 
| 5 7 | 
             
            require 'net/http'
         | 
| @@ -22,7 +24,6 @@ require 'cnvrg/dataset' | |
| 22 24 | 
             
            require 'cnvrg/datafiles'
         | 
| 23 25 | 
             
            require 'cnvrg/data'
         | 
| 24 26 | 
             
            require 'cnvrg/ssh'
         | 
| 25 | 
            -
            require 'etc'
         | 
| 26 27 | 
             
            require 'logstash-logger'
         | 
| 27 28 | 
             
            require 'cnvrg/job'
         | 
| 28 29 | 
             
            require 'docker'
         | 
| @@ -35,6 +36,7 @@ require 'active_support/all' | |
| 35 36 | 
             
            require 'thor'
         | 
| 36 37 | 
             
            require 'pathname'
         | 
| 37 38 | 
             
            require 'enumerator'
         | 
| 39 | 
            +
            require 'ruby-progressbar'
         | 
| 38 40 |  | 
| 39 41 | 
             
            class Thor
         | 
| 40 42 | 
             
              module Base
         | 
| @@ -143,6 +145,10 @@ module Cnvrg | |
| 143 145 | 
             
                INSTALLATION_URLS = {docker: "https://docs.docker.com/engine/installation/", jupyter: "http://jupyter.readthedocs.io/en/latest/install.html"}
         | 
| 144 146 | 
             
                IP="localhost"
         | 
| 145 147 | 
             
                PORT=7654
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                ParallelThreads ||= 10
         | 
| 150 | 
            +
                ParallelProcesses ||= Parallel.processor_count
         | 
| 151 | 
            +
             | 
| 146 152 | 
             
                class << self
         | 
| 147 153 | 
             
                  # Hackery.Take the run method away from Thor so that we can redefine it.
         | 
| 148 154 | 
             
                  def is_thor_reserved_word?(word, type)
         | 
| @@ -203,11 +209,11 @@ module Cnvrg | |
| 203 209 | 
             
                    end
         | 
| 204 210 | 
             
                    config = YAML.load_file(home_dir+"/.cnvrg/config.yml")
         | 
| 205 211 | 
             
                    owner = config.to_h[:owner]
         | 
| 206 | 
            -
                    compression_path = | 
| 212 | 
            +
                    compression_path = "#{File.expand_path('~')}/.cnvrg/tmp"
         | 
| 207 213 |  | 
| 208 214 | 
             
                    say "Setting default api to be: #{url}", Thor::Shell::Color::BLUE
         | 
| 209 215 | 
             
                    if config.empty?
         | 
| 210 | 
            -
                      config = {owner: "", username: "", version_last_check: get_start_day(), api: url,compression_path: compression_path | 
| 216 | 
            +
                      config = {owner: "", username: "", version_last_check: get_start_day(), api: url, compression_path: compression_path}
         | 
| 211 217 | 
             
                    else
         | 
| 212 218 | 
             
                      if !config.to_h[:compression_path].nil?
         | 
| 213 219 | 
             
                        compression_path = config.to_h[:compression_path]
         | 
| @@ -215,7 +221,7 @@ module Cnvrg | |
| 215 221 | 
             
                      config = {owner: config.to_h[:owner], username: config.to_h[:username], version_last_check: config.to_h[:version_last_check], api: url, compression_path: compression_path}
         | 
| 216 222 | 
             
                    end
         | 
| 217 223 | 
             
                    res = Cnvrg::API.request("/users/#{owner}/custom_api", 'POST', {custom_api: url})
         | 
| 218 | 
            -
                    if Cnvrg::CLI.is_response_success(res,false)
         | 
| 224 | 
            +
                    if Cnvrg::CLI.is_response_success(res, false)
         | 
| 219 225 |  | 
| 220 226 | 
             
                      checks = Helpers.checkmark
         | 
| 221 227 |  | 
| @@ -249,8 +255,8 @@ module Cnvrg | |
| 249 255 | 
             
                    end
         | 
| 250 256 | 
             
                    config = YAML.load_file(home_dir+"/.cnvrg/config.yml")
         | 
| 251 257 |  | 
| 252 | 
            -
                    compression_path = | 
| 253 | 
            -
                    config = {owner: owner, username: current_user, version_last_check: get_start_day(), api: url,compression_path:compression_path}
         | 
| 258 | 
            +
                    compression_path = "#{home_dir}/.cnvrg/tmp"
         | 
| 259 | 
            +
                    config = {owner: owner, username: current_user, version_last_check: get_start_day(), api: url, compression_path: compression_path}
         | 
| 254 260 | 
             
                    File.open(home_dir+"/.cnvrg/config.yml", "w+") { |f| f.write config.to_yaml }
         | 
| 255 261 | 
             
                    say "Done"
         | 
| 256 262 | 
             
                  rescue
         | 
| @@ -326,12 +332,12 @@ module Cnvrg | |
| 326 332 | 
             
                end
         | 
| 327 333 |  | 
| 328 334 | 
             
                desc 'set_compression_path', 'set compression path'
         | 
| 329 | 
            -
                method_option :reset, :type => :boolean, :aliases => ["-r","--reset"], :default => false
         | 
| 335 | 
            +
                method_option :reset, :type => :boolean, :aliases => ["-r", "--reset"], :default => false
         | 
| 330 336 |  | 
| 331 337 | 
             
                def set_compression_path(*compression_path)
         | 
| 332 338 | 
             
                  begin
         | 
| 333 339 | 
             
                    if (compression_path.nil? or compression_path.empty?) and options["reset"]
         | 
| 334 | 
            -
                      compression_path = | 
| 340 | 
            +
                      compression_path = ["#{File.expand_path('~')}/.cnvrg/tmp"]
         | 
| 335 341 | 
             
                    end
         | 
| 336 342 | 
             
                    compression_path = compression_path.join(" ")
         | 
| 337 343 | 
             
                    if !Dir.exist? compression_path
         | 
| @@ -348,7 +354,7 @@ module Cnvrg | |
| 348 354 | 
             
                    end
         | 
| 349 355 | 
             
                    config = YAML.load_file(path)
         | 
| 350 356 | 
             
                    config_new = {owner: config.to_h[:owner], username: config.to_h[:username],
         | 
| 351 | 
            -
             | 
| 357 | 
            +
                                  version_last_check: config.to_h[:version_last_check], api: config.to_h[:api], compression_path: compression_path}
         | 
| 352 358 | 
             
                    File.open(home_dir+"/.cnvrg/config.yml", "w+") { |f| f.write config_new.to_yaml }
         | 
| 353 359 | 
             
                    checks = Helpers.checkmark
         | 
| 354 360 | 
             
                    say "#{checks} Done", Thor::Shell::Color::GREEN
         | 
| @@ -360,11 +366,13 @@ module Cnvrg | |
| 360 366 | 
             
                end
         | 
| 361 367 |  | 
| 362 368 |  | 
| 363 | 
            -
             | 
| 364 369 | 
             
                desc 'login', 'Authenticate with cnvrg.io platform'
         | 
| 365 370 |  | 
| 366 371 | 
             
                def login
         | 
| 367 372 | 
             
                  begin
         | 
| 373 | 
            +
                    log_handler()
         | 
| 374 | 
            +
                    log_start(__method__, args, options)
         | 
| 375 | 
            +
             | 
| 368 376 | 
             
                    cmd = HighLine.new
         | 
| 369 377 |  | 
| 370 378 | 
             
                    say 'Authenticating with cnvrg', Thor::Shell::Color::YELLOW
         | 
| @@ -374,7 +382,7 @@ module Cnvrg | |
| 374 382 | 
             
                    @email, token = netrc[Cnvrg::Helpers.netrc_domain]
         | 
| 375 383 |  | 
| 376 384 | 
             
                    if @email and token
         | 
| 377 | 
            -
                       | 
| 385 | 
            +
                      log_message('Seems you\'re already logged in', Thor::Shell::Color::BLUE)
         | 
| 378 386 | 
             
                      exit(0)
         | 
| 379 387 | 
             
                    end
         | 
| 380 388 | 
             
                    @email = ask("Enter your email:")
         | 
| @@ -385,7 +393,8 @@ module Cnvrg | |
| 385 393 | 
             
                      netrc[Cnvrg::Helpers.netrc_domain] = @email, result["token"]
         | 
| 386 394 | 
             
                      netrc.save
         | 
| 387 395 |  | 
| 388 | 
            -
                       | 
| 396 | 
            +
                      log_message("Authenticated successfully as #{@email}", Thor::Shell::Color::GREEN)
         | 
| 397 | 
            +
             | 
| 389 398 | 
             
                      owners = result["owners"]
         | 
| 390 399 | 
             
                      urls = result["urls"]
         | 
| 391 400 | 
             
                      choose_owner = result["username"]
         | 
| @@ -431,22 +440,24 @@ module Cnvrg | |
| 431 440 | 
             
                      # end
         | 
| 432 441 |  | 
| 433 442 | 
             
                      if set_owner(choose_owner, result["username"], urls[ow_index])
         | 
| 434 | 
            -
                         | 
| 443 | 
            +
                        log_message("Setting default owner: #{choose_owner}", Thor::Shell::Color::GREEN)
         | 
| 435 444 |  | 
| 436 445 | 
             
                      else
         | 
| 437 | 
            -
                         | 
| 446 | 
            +
                        log_message("Setting default owenr has failed, logging out", Thor::Shell::Color::RED)
         | 
| 438 447 |  | 
| 439 448 | 
             
                        return logout()
         | 
| 440 449 | 
             
                      end
         | 
| 441 450 |  | 
| 442 451 | 
             
                    else
         | 
| 443 | 
            -
                       | 
| 452 | 
            +
                      log_message("Failed to authenticate, wrong email/password", Thor::Shell::Color::RED)
         | 
| 444 453 |  | 
| 445 454 | 
             
                      exit(1)
         | 
| 446 455 | 
             
                    end
         | 
| 447 | 
            -
                  rescue
         | 
| 456 | 
            +
                  rescue => e
         | 
| 457 | 
            +
             | 
| 458 | 
            +
                    log_message("Error Occurred, aborting", Thor::Shell::Color::RED)
         | 
| 459 | 
            +
                    log_error(e)
         | 
| 448 460 |  | 
| 449 | 
            -
                    say "Error Occurred, aborting", Thor::Shell::Color::RED
         | 
| 450 461 | 
             
                    logout()
         | 
| 451 462 | 
             
                    exit(1)
         | 
| 452 463 | 
             
                  rescue SignalException
         | 
| @@ -462,10 +473,12 @@ module Cnvrg | |
| 462 473 |  | 
| 463 474 | 
             
                def logout
         | 
| 464 475 | 
             
                  begin
         | 
| 476 | 
            +
                    log_handler()
         | 
| 477 | 
            +
                    log_start(__method__, args, options)
         | 
| 465 478 | 
             
                    netrc = Netrc.read
         | 
| 466 479 | 
             
                    netrc.delete(Cnvrg::Helpers.netrc_domain)
         | 
| 467 480 | 
             
                    netrc.save
         | 
| 468 | 
            -
                     | 
| 481 | 
            +
                    log_message("Logged out successfully.\n", Thor::Shell::Color::GREEN)
         | 
| 469 482 | 
             
                  rescue SignalException
         | 
| 470 483 | 
             
                    say "\nAborting"
         | 
| 471 484 | 
             
                    exit(1)
         | 
| @@ -482,16 +495,13 @@ module Cnvrg | |
| 482 495 | 
             
                    log_start(__method__, args, options)
         | 
| 483 496 | 
             
                    auth = Cnvrg::Auth.new
         | 
| 484 497 | 
             
                    if (email = auth.get_email)
         | 
| 485 | 
            -
                       | 
| 498 | 
            +
                      log_message("Logged in as: #{email}", Thor::Shell::Color::GREEN)
         | 
| 486 499 | 
             
                    else
         | 
| 487 | 
            -
                       | 
| 500 | 
            +
                      log_message("You're not logged in.", Thor::Shell::Color::RED)
         | 
| 488 501 | 
             
                    end
         | 
| 489 502 |  | 
| 490 | 
            -
                    log_end(0)
         | 
| 491 503 |  | 
| 492 504 | 
             
                  rescue SignalException
         | 
| 493 | 
            -
                    log_end(-1)
         | 
| 494 | 
            -
             | 
| 495 505 | 
             
                    say "\nAborting"
         | 
| 496 506 | 
             
                    exit(1)
         | 
| 497 507 | 
             
                  end
         | 
| @@ -513,10 +523,9 @@ module Cnvrg | |
| 513 523 | 
             
                    if !docker_image.nil? and !docker_image.empty?
         | 
| 514 524 | 
             
                      docker = true
         | 
| 515 525 | 
             
                    end
         | 
| 516 | 
            -
                     | 
| 526 | 
            +
                    log_message("Creating #{project_name}", Thor::Shell::Color::BLUE)
         | 
| 517 527 | 
             
                    if Dir.exists? project_name or File.exists? project_name
         | 
| 518 | 
            -
                       | 
| 519 | 
            -
                      log_end(1, "conflict with dir/file #{project_name}")
         | 
| 528 | 
            +
                      log_message("Conflict with dir/file #{project_name}", Thor::Shell::Color::RED)
         | 
| 520 529 | 
             
                      exit(1)
         | 
| 521 530 |  | 
| 522 531 | 
             
                    end
         | 
| @@ -532,24 +541,24 @@ module Cnvrg | |
| 532 541 | 
             
                          if yes? "Image wasn't found locally, pull image from cnvrg repository?", Thor::Shell::Color::YELLOW
         | 
| 533 542 | 
             
                            image = pull(docker_image)
         | 
| 534 543 | 
             
                            if image
         | 
| 535 | 
            -
                               | 
| 544 | 
            +
                              log_message("downloaded image: #{docker_image}", Thor::Shell::Color::BLUE)
         | 
| 536 545 | 
             
                              @image = Images.new(working_dir, docker_image)
         | 
| 537 546 | 
             
                            else
         | 
| 538 | 
            -
                               | 
| 547 | 
            +
                              log_message("Could not create a new project with docker, image was not found", Thor::Shell::Color::RED)
         | 
| 539 548 | 
             
                              @project.revert(working_dir)
         | 
| 540 549 | 
             
                              exit(1)
         | 
| 541 550 | 
             
                            end
         | 
| 542 551 | 
             
                          else
         | 
| 543 | 
            -
                             | 
| 552 | 
            +
                            log_message("Could not create a new project with docker, image was not found", Thor::Shell::Color::RED)
         | 
| 544 553 | 
             
                            @project.revert(working_dir)
         | 
| 545 554 | 
             
                            exit(1)
         | 
| 546 555 |  | 
| 547 556 | 
             
                          end
         | 
| 548 557 | 
             
                        elsif docker_image_local.size == 1
         | 
| 549 | 
            -
                           | 
| 558 | 
            +
                          log_message("found image: #{docker_image_local[0]}, setting it up..", Thor::Shell::Color::BLUE)
         | 
| 550 559 | 
             
                          @image = Images.new(working_dir, docker_image_local[0])
         | 
| 551 560 | 
             
                        elsif docker_image_local.size >1
         | 
| 552 | 
            -
                           | 
| 561 | 
            +
                          log_message("found #{docker_image_local.size} images, choose the image name you want to use", Thor::Shell::Color::BLUE)
         | 
| 553 562 | 
             
                          image_name = ask "#{docker_image_local.join("\n")}\n", Thor::Shell::Color::BLUE
         | 
| 554 563 | 
             
                          image_name = image_name.strip
         | 
| 555 564 | 
             
                          @image = Images.new(working_dir, image_name)
         | 
| @@ -558,18 +567,17 @@ module Cnvrg | |
| 558 567 |  | 
| 559 568 | 
             
                      end
         | 
| 560 569 | 
             
                    else
         | 
| 561 | 
            -
                       | 
| 570 | 
            +
                      log_message("Error creating project, please contact support.", Thor::Shell::Color::RED)
         | 
| 562 571 | 
             
                      @project.revert(working_dir)
         | 
| 563 | 
            -
                      log_end(1, "can't create project #{project_name}")
         | 
| 564 572 |  | 
| 565 573 | 
             
                      exit(0)
         | 
| 566 574 | 
             
                    end
         | 
| 567 575 |  | 
| 568 | 
            -
                     | 
| 569 | 
            -
                     | 
| 576 | 
            +
                    log_message("created project successfully", Thor::Shell::Color::GREEN)
         | 
| 577 | 
            +
                    log_message("Linked directory to\t#{@project.url}", Thor::Shell::Color::GREEN)
         | 
| 570 578 | 
             
                  rescue => e
         | 
| 571 | 
            -
                     | 
| 572 | 
            -
                     | 
| 579 | 
            +
                    log_message("Error occurred, aborting", Thor::Shell::Color::RED)
         | 
| 580 | 
            +
                    log_error(e)
         | 
| 573 581 | 
             
                    if Dir.exist? working_dir
         | 
| 574 582 |  | 
| 575 583 | 
             
                      @project.revert(working_dir)
         | 
| @@ -642,11 +650,10 @@ module Cnvrg | |
| 642 650 |  | 
| 643 651 | 
             
                    sync = options["sync"]
         | 
| 644 652 | 
             
                    project_name =File.basename(Dir.getwd)
         | 
| 645 | 
            -
                     | 
| 653 | 
            +
                    log_message("Linking #{project_name}", Thor::Shell::Color::BLUE)
         | 
| 646 654 | 
             
                    if File.directory?(Dir.getwd+"/.cnvrg")
         | 
| 647 655 | 
             
                      config = YAML.load_file("#{Dir.getwd}/.cnvrg/config.yml")
         | 
| 648 | 
            -
                       | 
| 649 | 
            -
             | 
| 656 | 
            +
                      log_message("Directory is already linked to #{config[:project_slug]}", Thor::Shell::Color::RED)
         | 
| 650 657 | 
             
                      exit(0)
         | 
| 651 658 | 
             
                    end
         | 
| 652 659 | 
             
                    working_dir = Dir.getwd
         | 
| @@ -662,47 +669,46 @@ module Cnvrg | |
| 662 669 | 
             
                          if yes? "Image wasn't found locally, pull image from cnvrg repository?", Thor::Shell::Color::YELLOW
         | 
| 663 670 | 
             
                            image = pull(docker_image)
         | 
| 664 671 | 
             
                            if image
         | 
| 665 | 
            -
                               | 
| 672 | 
            +
                              log_message("downloaded image: #{docker_image}", Thor::Shell::Color::BLUE)
         | 
| 666 673 | 
             
                              @image = Images.new(working_dir, docker_image)
         | 
| 667 674 | 
             
                            else
         | 
| 668 | 
            -
                               | 
| 675 | 
            +
                              log_message("Could not create a new project with docker, image was not found", Thor::Shell::Color::RED)
         | 
| 669 676 | 
             
                              @project.revert(working_dir)
         | 
| 670 677 | 
             
                              exit(1)
         | 
| 671 678 | 
             
                            end
         | 
| 672 679 | 
             
                          else
         | 
| 673 | 
            -
                             | 
| 680 | 
            +
                            log_message("Could not create a new project with docker, image was not found", Thor::Shell::Color::RED)
         | 
| 674 681 | 
             
                            @project.revert(working_dir)
         | 
| 675 682 | 
             
                            exit(1)
         | 
| 676 683 |  | 
| 677 684 | 
             
                          end
         | 
| 678 685 | 
             
                        elsif docker_image_local.size == 1
         | 
| 679 | 
            -
                           | 
| 686 | 
            +
                          log_message("found image: #{docker_image_local[0]}, setting it up..", Thor::Shell::Color::BLUE)
         | 
| 680 687 | 
             
                          @image = Images.new(working_dir, docker_image_local[0])
         | 
| 681 688 | 
             
                        elsif docker_image_local.size >1
         | 
| 682 | 
            -
                           | 
| 689 | 
            +
                          log_message("found #{docker_image_local.size} images, choose the image name you want to use", Thor::Shell::Color::BLUE)
         | 
| 683 690 | 
             
                          image_name = ask "#{docker_image_local.join("\n")}\n", Thor::Shell::Color::BLUE
         | 
| 684 691 | 
             
                          @image = Images.new(working_dir, image_name)
         | 
| 685 692 | 
             
                        end
         | 
| 686 693 | 
             
                      end
         | 
| 687 694 | 
             
                      if sync
         | 
| 688 | 
            -
                         | 
| 695 | 
            +
                        log_message("Syncing project", Thor::Shell::Color::BLUE)
         | 
| 689 696 | 
             
                        upload(true)
         | 
| 690 697 | 
             
                      end
         | 
| 691 698 |  | 
| 692 699 | 
             
                      url = @project.url
         | 
| 693 700 | 
             
                      check = Helpers.checkmark
         | 
| 694 | 
            -
                       | 
| 695 | 
            -
                       | 
| 696 | 
            -
                      log_end(0)
         | 
| 701 | 
            +
                      log_message("#{check} Link finished successfully", Thor::Shell::Color::GREEN)
         | 
| 702 | 
            +
                      log_message("#{project_name}'s location is: #{url}\n", Thor::Shell::Color::GREEN)
         | 
| 697 703 |  | 
| 698 704 | 
             
                    else
         | 
| 699 | 
            -
                      log_end(1, "can't link project")
         | 
| 700 705 | 
             
                      @project.revert(working_dir) unless @project.nil?
         | 
| 701 | 
            -
                       | 
| 706 | 
            +
                      log_message("Error linking project, please contact support.", Thor::Shell::Color::RED)
         | 
| 702 707 | 
             
                      exit(0)
         | 
| 703 708 | 
             
                    end
         | 
| 709 | 
            +
                  rescue => e
         | 
| 710 | 
            +
                    log_error(e)
         | 
| 704 711 | 
             
                  rescue SignalException
         | 
| 705 | 
            -
                    log_end(-1)
         | 
| 706 712 |  | 
| 707 713 | 
             
                    say "\nAborting"
         | 
| 708 714 | 
             
                    exit(1)
         | 
| @@ -719,11 +725,11 @@ module Cnvrg | |
| 719 725 | 
             
                    dataset_name =File.basename(Dir.getwd)
         | 
| 720 726 | 
             
                    if File.directory?(Dir.getwd+"/.cnvrg")
         | 
| 721 727 | 
             
                      config = YAML.load_file("#{Dir.getwd}/.cnvrg/config.yml")
         | 
| 722 | 
            -
                       | 
| 728 | 
            +
                      log_message("Directory is already linked to #{config[:dataset_slug]}", Thor::Shell::Color::RED)
         | 
| 723 729 |  | 
| 724 730 | 
             
                      exit(0)
         | 
| 725 731 | 
             
                    end
         | 
| 726 | 
            -
                     | 
| 732 | 
            +
                    log_message("Init dataset: #{dataset_name}", Thor::Shell::Color::BLUE)
         | 
| 727 733 |  | 
| 728 734 | 
             
                    working_dir = Dir.getwd
         | 
| 729 735 | 
             
                    owner = CLI.get_owner
         | 
| @@ -733,19 +739,17 @@ module Cnvrg | |
| 733 739 |  | 
| 734 740 | 
             
                      url = @dataset.url
         | 
| 735 741 | 
             
                      check = Helpers.checkmark
         | 
| 736 | 
            -
                       | 
| 737 | 
            -
                       | 
| 738 | 
            -
                      log_end(0)
         | 
| 742 | 
            +
                      log_message("#{check} Link finished successfully", Thor::Shell::Color::GREEN)
         | 
| 743 | 
            +
                      log_message("#{dataset_name}'s location is: #{url}\n", Thor::Shell::Color::GREEN)
         | 
| 739 744 |  | 
| 740 745 | 
             
                    else
         | 
| 741 | 
            -
                      log_end(1, "can't create dataset")
         | 
| 742 746 | 
             
                      @dataset.revert(working_dir) unless @dataset.nil?
         | 
| 743 | 
            -
                       | 
| 747 | 
            +
                      log_message("Error creating dataset, please contact support.", Thor::Shell::Color::RED)
         | 
| 744 748 | 
             
                      exit(0)
         | 
| 745 749 | 
             
                    end
         | 
| 750 | 
            +
                  rescue => e
         | 
| 751 | 
            +
                    log_error(e)
         | 
| 746 752 | 
             
                  rescue SignalException
         | 
| 747 | 
            -
                    log_end(-1)
         | 
| 748 | 
            -
             | 
| 749 753 | 
             
                    say "\nAborting"
         | 
| 750 754 | 
             
                    exit(1)
         | 
| 751 755 | 
             
                  end
         | 
| @@ -767,17 +771,15 @@ module Cnvrg | |
| 767 771 | 
             
                    Cnvrg::CLI.is_response_success(response)
         | 
| 768 772 | 
             
                    dataset_name = response["result"]["name"]
         | 
| 769 773 | 
             
                    if (Dir.exists? dataset_name)
         | 
| 770 | 
            -
                       | 
| 774 | 
            +
                      log_messgae("Error: Conflict with dir #{dataset_name}", Thor::Shell::Color::RED)
         | 
| 771 775 | 
             
                      if no? "Sync to repository anyway? (current data might lost)", Thor::Shell::Color::YELLOW
         | 
| 772 | 
            -
                         | 
| 773 | 
            -
                        log_end(1, "conflict with dir #{dataset_name}")
         | 
| 774 | 
            -
             | 
| 776 | 
            +
                        log_message("Remove dir in order to clone #{dataset_name}", Thor::Shell::Color::RED)
         | 
| 775 777 | 
             
                        exit(1)
         | 
| 776 778 | 
             
                      end
         | 
| 777 779 |  | 
| 778 780 | 
             
                    end
         | 
| 779 781 | 
             
                    if Dataset.clone(owner, dataset_name, slug)
         | 
| 780 | 
            -
                       | 
| 782 | 
            +
                      log_message("Cloning #{dataset_name}", Thor::Shell::Color::BLUE)
         | 
| 781 783 |  | 
| 782 784 | 
             
                      commit_to_clone = options["commit"] || nil
         | 
| 783 785 | 
             
                      working_dir = "#{Dir.pwd}/#{dataset_name}"
         | 
| @@ -785,21 +787,23 @@ module Cnvrg | |
| 785 787 | 
             
                      @dataset.generate_idx()
         | 
| 786 788 |  | 
| 787 789 |  | 
| 788 | 
            -
                      download_data(false, false, path = working_dir, in_dir=false)
         | 
| 790 | 
            +
                      download_res = download_data(false, false, path = working_dir, in_dir=false)
         | 
| 791 | 
            +
                      if !download_res
         | 
| 792 | 
            +
                        exit(1)
         | 
| 793 | 
            +
                      end
         | 
| 789 794 |  | 
| 790 795 |  | 
| 791 796 | 
             
                      check = Helpers.checkmark
         | 
| 792 | 
            -
                       | 
| 793 | 
            -
                      log_end(0)
         | 
| 797 | 
            +
                      log_message("#{check} Clone finished successfully", Thor::Shell::Color::GREEN)
         | 
| 794 798 |  | 
| 795 799 | 
             
                    else
         | 
| 796 | 
            -
                      log_end(1, "can't create dataset")
         | 
| 797 800 | 
             
                      @dataset.revert(working_dir) unless @dataset.nil?
         | 
| 798 | 
            -
                       | 
| 801 | 
            +
                      log_message("Error creating dataset, please contact support.", Thor::Shell::Color::RED)
         | 
| 799 802 | 
             
                      exit(0)
         | 
| 800 803 | 
             
                    end
         | 
| 804 | 
            +
                  rescue => e
         | 
| 805 | 
            +
                    log_error(e)
         | 
| 801 806 | 
             
                  rescue SignalException
         | 
| 802 | 
            -
                    log_end(-1)
         | 
| 803 807 |  | 
| 804 808 | 
             
                    say "\nAborting"
         | 
| 805 809 | 
             
                    exit(1)
         | 
| @@ -826,7 +830,6 @@ module Cnvrg | |
| 826 830 | 
             
                    container.exec(command, tty: true)
         | 
| 827 831 |  | 
| 828 832 | 
             
                  rescue SignalException
         | 
| 829 | 
            -
                    log_end(-1)
         | 
| 830 833 |  | 
| 831 834 | 
             
                    say "\nAborting"
         | 
| 832 835 | 
             
                    exit(1)
         | 
| @@ -862,10 +865,8 @@ module Cnvrg | |
| 862 865 | 
             
                  if Dataset.init_container(owner, dataset_slug, dataset_name)
         | 
| 863 866 |  | 
| 864 867 | 
             
                    say "init finished successfully", Thor::Shell::Color::GREEN
         | 
| 865 | 
            -
                    log_end(0)
         | 
| 866 868 |  | 
| 867 869 | 
             
                  else
         | 
| 868 | 
            -
                    log_end(1, "can't create dataset")
         | 
| 869 870 | 
             
                    say "error creating dataset, please contact support.", Thor::Shell::Color::RED
         | 
| 870 871 | 
             
                    exit(0)
         | 
| 871 872 | 
             
                  end
         | 
| @@ -894,33 +895,70 @@ module Cnvrg | |
| 894 895 |  | 
| 895 896 | 
             
                    commit = res["commit"]
         | 
| 896 897 | 
             
                    if result["updated_on_server"].empty? and result["conflicts"].empty? and result["deleted"].empty?
         | 
| 897 | 
            -
                       | 
| 898 | 
            -
                      log_end(0)
         | 
| 898 | 
            +
                      log_message("Project is up to date", Thor::Shell::Color::GREEN, ((options["sync"] or sync)) ? false : true)
         | 
| 899 899 | 
             
                      return true
         | 
| 900 900 | 
             
                    end
         | 
| 901 | 
            -
                     | 
| 901 | 
            +
                    log_message("Downloading data", Thor::Shell::Color::BLUE)
         | 
| 902 902 |  | 
| 903 903 | 
             
                    result = @dataset.downlowd_updated_data(@dataset.last_local_commit)
         | 
| 904 904 |  | 
| 905 905 | 
             
                    delete = result["result"]["delete"]
         | 
| 906 906 | 
             
                    commits = result["result"]["commits"]
         | 
| 907 907 | 
             
                    updated_idx = result["result"]["idx"]
         | 
| 908 | 
            -
                     | 
| 908 | 
            +
                    parallel_options = {
         | 
| 909 | 
            +
                        :progress => {
         | 
| 910 | 
            +
                            :title => "Download Progress",
         | 
| 911 | 
            +
                            :progress_mark => '=',
         | 
| 912 | 
            +
                            :format => "%b>>%i| %p%% %t",
         | 
| 913 | 
            +
                            :starting_at => 0,
         | 
| 914 | 
            +
                            :total => commits.size,
         | 
| 915 | 
            +
                            :autofinish => true
         | 
| 916 | 
            +
                        },
         | 
| 917 | 
            +
                        in_processes: ParallelProcesses,
         | 
| 918 | 
            +
                        in_thread: ParallelThreads
         | 
| 919 | 
            +
                    }
         | 
| 920 | 
            +
             | 
| 921 | 
            +
                    begin
         | 
| 922 | 
            +
                    tar_files = []
         | 
| 923 | 
            +
                    download_result = Parallel.map(commits, parallel_options) do |c|
         | 
| 924 | 
            +
             | 
| 909 925 | 
             
                      file_name = @files.download_data_file(c, dataset_dir)
         | 
| 910 926 |  | 
| 911 927 | 
             
                      if file_name.eql? false or file_name.nil?
         | 
| 912 | 
            -
                         | 
| 913 | 
            -
                         | 
| 928 | 
            +
                        count = 0
         | 
| 929 | 
            +
                        success_download = false
         | 
| 930 | 
            +
                        while count < 3 and !success_download
         | 
| 931 | 
            +
                          log_message("Couldn't download data files, retrying.. ", Thor::Shell::Color::BLUE)
         | 
| 932 | 
            +
             | 
| 933 | 
            +
                          file_name = @files.download_data_file(c, dataset_dir)
         | 
| 934 | 
            +
                          success_download = (file_name.eql? false or file_name.nil?)
         | 
| 935 | 
            +
                          count +=1
         | 
| 936 | 
            +
             | 
| 937 | 
            +
                        end
         | 
| 938 | 
            +
                        if count > 3 or !success_download
         | 
| 939 | 
            +
                          log_message("Couldn't download data files,revoking", Thor::Shell::Color::RED)
         | 
| 940 | 
            +
             | 
| 941 | 
            +
                          raise Parallel::Kill
         | 
| 942 | 
            +
                        end
         | 
| 914 943 | 
             
                      end
         | 
| 915 944 | 
             
                      file_path = "#{dataset_dir}/#{file_name}"
         | 
| 945 | 
            +
                      tar_files << file_path
         | 
| 916 946 | 
             
                      success = extarct_tar(file_path, dataset_dir)
         | 
| 917 947 | 
             
                      if !success
         | 
| 918 | 
            -
                         | 
| 948 | 
            +
                        log_message("Couldn't extract data files,revoking", Thor::Shell::Color::RED)
         | 
| 949 | 
            +
             | 
| 950 | 
            +
                        raise Parallel::Kill
         | 
| 919 951 | 
             
                      end
         | 
| 920 952 |  | 
| 921 953 | 
             
                      FileUtils.rm_rf([file_path])
         | 
| 922 954 |  | 
| 923 955 | 
             
                    end
         | 
| 956 | 
            +
                    rescue Interrupt
         | 
| 957 | 
            +
                      @files.revoke_download(tar_files,updated_idx[:tree].keys )
         | 
| 958 | 
            +
                      return false
         | 
| 959 | 
            +
                    end
         | 
| 960 | 
            +
             | 
| 961 | 
            +
             | 
| 924 962 | 
             
                    to_delete = []
         | 
| 925 963 | 
             
                    delete.each do |d|
         | 
| 926 964 | 
             
                      to_delete << "#{dataset_dir}/#{d}"
         | 
| @@ -930,28 +968,19 @@ module Cnvrg | |
| 930 968 | 
             
                    @dataset.update_idx(updated_idx)
         | 
| 931 969 |  | 
| 932 970 |  | 
| 933 | 
            -
                    # result["conflicts"].each do |f|
         | 
| 934 | 
            -
                    #   relative_path = f.gsub(/^#{@dataset.local_path}/, "")
         | 
| 935 | 
            -
                    #   if @files.download_file_s3(f, relative_path, dataset_dir, conflict=true)
         | 
| 936 | 
            -
                    #     successful_changes << relative_path
         | 
| 937 | 
            -
                    #   end
         | 
| 938 | 
            -
                    #
         | 
| 939 | 
            -
                    # end
         | 
| 940 | 
            -
                    # update idx with latest commit
         | 
| 941 | 
            -
                    # @dataset.update_idx_with_commit!(commit)
         | 
| 942 971 | 
             
                    check = Helpers.checkmark()
         | 
| 943 | 
            -
                     | 
| 972 | 
            +
                    log_message("#{check} Downloaded changes successfully", Thor::Shell::Color::GREEN)
         | 
| 973 | 
            +
                    return true
         | 
| 944 974 |  | 
| 945 975 |  | 
| 946 | 
            -
                    log_end(0)
         | 
| 947 976 | 
             
                  end
         | 
| 948 | 
            -
                rescue
         | 
| 949 | 
            -
                   | 
| 977 | 
            +
                rescue => e
         | 
| 978 | 
            +
                  log_message("Error occurd, \nAborting", Thor::Shell::Color::BLUE)
         | 
| 979 | 
            +
                  log_error(e)
         | 
| 980 | 
            +
                  @files.revoke_download(tar_files,updated_idx[:tree].keys )
         | 
| 950 981 |  | 
| 951 | 
            -
                  say "Error occurd, \nAborting", Thor::Shell::Color::BLUE
         | 
| 952 982 | 
             
                  exit(1)
         | 
| 953 983 | 
             
                rescue SignalException
         | 
| 954 | 
            -
                  log_end(-1)
         | 
| 955 984 | 
             
                  say "\nAborting", Thor::Shell::Color::BLUE
         | 
| 956 985 | 
             
                  exit(1)
         | 
| 957 986 | 
             
                end
         | 
| @@ -974,19 +1003,18 @@ module Cnvrg | |
| 974 1003 | 
             
                    @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
         | 
| 975 1004 | 
             
                    ignore = options[:ignore] || []
         | 
| 976 1005 | 
             
                    if !@dataset.update_ignore_list(ignore)
         | 
| 977 | 
            -
                       | 
| 1006 | 
            +
                      log_message("Couldn't append new ignore files to .cnvrgignore", Thor::Shell::Color::YELLOW)
         | 
| 978 1007 | 
             
                    end
         | 
| 979 1008 | 
             
                    result = @dataset.compare_idx(false)
         | 
| 980 1009 |  | 
| 981 1010 | 
             
                    commit = result["result"]["commit"]
         | 
| 982 1011 | 
             
                    if commit != @dataset.last_local_commit and !@dataset.last_local_commit.nil? and !result["result"]["tree"]["updated_on_server"].empty?
         | 
| 983 | 
            -
                      log_end(0)
         | 
| 984 1012 |  | 
| 985 | 
            -
                       | 
| 1013 | 
            +
                      log_message("Remote server has an updated version, please run `cnvrg download` first, or alternatively: `cnvrg sync`", Thor::Shell::Color::BLUE)
         | 
| 986 1014 | 
             
                      exit(1)
         | 
| 987 1015 | 
             
                    end
         | 
| 988 1016 |  | 
| 989 | 
            -
                     | 
| 1017 | 
            +
                    log_message("Comparing local changes with remote version:", Thor::Shell::Color::BLUE, options["verbose"] ? true : false)
         | 
| 990 1018 | 
             
                    result = result["result"]["tree"]
         | 
| 991 1019 | 
             
                    # if result["added"].any? {|x| x.include? ".conflict"} or !result["conflicts"].empty?
         | 
| 992 1020 | 
             
                    #   all = result["added"].select {|x| x.include? ".conflict"} +result["conflicts"].flatten
         | 
| @@ -1004,8 +1032,7 @@ module Cnvrg | |
| 1004 1032 | 
             
                    check = Helpers.checkmark()
         | 
| 1005 1033 |  | 
| 1006 1034 | 
             
                    if result["added"].empty? and result["updated_on_local"].empty? and result["deleted"].empty?
         | 
| 1007 | 
            -
                       | 
| 1008 | 
            -
                      say "#{check} Dataset is up to date", Thor::Shell::Color::GREEN unless ((options["sync"] or sync) and !direct)
         | 
| 1035 | 
            +
                      log_message("#{check} Dataset is up to date", Thor::Shell::Color::GREEN, (((options["sync"] or sync) and !direct) ? false : true))
         | 
| 1009 1036 | 
             
                      return true
         | 
| 1010 1037 | 
             
                    end
         | 
| 1011 1038 | 
             
                    update_count = 0
         | 
| @@ -1014,12 +1041,12 @@ module Cnvrg | |
| 1014 1041 | 
             
                    successful_deletions = []
         | 
| 1015 1042 | 
             
                    if options["verbose"]
         | 
| 1016 1043 | 
             
                      if update_total == 1
         | 
| 1017 | 
            -
                         | 
| 1044 | 
            +
                        log_message("Updating #{update_total} file", Thor::Shell::Color::BLUE)
         | 
| 1018 1045 | 
             
                      else
         | 
| 1019 | 
            -
                         | 
| 1046 | 
            +
                        log_message("Updating #{update_total} files", Thor::Shell::Color::BLUE)
         | 
| 1020 1047 | 
             
                      end
         | 
| 1021 1048 | 
             
                    else
         | 
| 1022 | 
            -
                       | 
| 1049 | 
            +
                      log_message("Syncing files", Thor::Shell::Color::BLUE, ((options["sync"] or sync)) ? false : true)
         | 
| 1023 1050 |  | 
| 1024 1051 | 
             
                    end
         | 
| 1025 1052 |  | 
| @@ -1045,8 +1072,7 @@ module Cnvrg | |
| 1045 1072 | 
             
                            successful_updates<< relative_path
         | 
| 1046 1073 | 
             
                          else
         | 
| 1047 1074 | 
             
                            @files.rollback_commit(commit_sha1)
         | 
| 1048 | 
            -
                             | 
| 1049 | 
            -
                            say "Couldn't upload, Rolling Back all changes.", Thor::Shell::Color::RED
         | 
| 1075 | 
            +
                            log_message("Couldn't upload, Rolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 1050 1076 | 
             
                            exit(0)
         | 
| 1051 1077 | 
             
                          end
         | 
| 1052 1078 | 
             
                        end
         | 
| @@ -1070,14 +1096,13 @@ module Cnvrg | |
| 1070 1096 | 
             
                      end
         | 
| 1071 1097 |  | 
| 1072 1098 | 
             
                    rescue SignalException
         | 
| 1073 | 
            -
                      log_end(-1)
         | 
| 1074 1099 | 
             
                      @files.rollback_commit(commit_sha1)
         | 
| 1075 1100 | 
             
                      say "User aborted, Rolling Back all changes.", Thor::Shell::Color::RED
         | 
| 1076 1101 | 
             
                      exit(0)
         | 
| 1077 1102 | 
             
                    rescue => e
         | 
| 1078 | 
            -
                       | 
| 1103 | 
            +
                      log_message("Exception while trying to upload, Rolling back", Thor::Shell::Color::RED)
         | 
| 1104 | 
            +
                      log_error(e)
         | 
| 1079 1105 | 
             
                      @files.rollback_commit(commit_sha1)
         | 
| 1080 | 
            -
                      say "Exception while trying to upload, Rolling back", Thor::Shell::Color::RED
         | 
| 1081 1106 | 
             
                      exit(0)
         | 
| 1082 1107 | 
             
                    end
         | 
| 1083 1108 | 
             
                    if !result["deleted"].nil? and !result["deleted"].empty?
         | 
| @@ -1092,57 +1117,52 @@ module Cnvrg | |
| 1092 1117 |  | 
| 1093 1118 | 
             
                          @dataset.update_idx_with_commit!(commit_sha1)
         | 
| 1094 1119 | 
             
                        rescue => e
         | 
| 1095 | 
            -
                           | 
| 1120 | 
            +
                          log_message("Couldn't commit updates, Rolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 1121 | 
            +
                          log_error(e)
         | 
| 1096 1122 | 
             
                          @files.rollback_commit(commit_sha1)
         | 
| 1097 | 
            -
                          say "Couldn't commit updates, Rolling Back all changes.", Thor::Shell::Color::RED
         | 
| 1098 1123 | 
             
                          exit(1)
         | 
| 1099 1124 |  | 
| 1100 1125 | 
             
                        end
         | 
| 1101 1126 | 
             
                        if options["verbose"]
         | 
| 1102 | 
            -
                           | 
| 1127 | 
            +
                          log_message("#{check} Done", Thor::Shell::Color::BLUE)
         | 
| 1103 1128 | 
             
                          if successful_updates.size >0
         | 
| 1104 | 
            -
                             | 
| 1129 | 
            +
                            log_message("Updated:", Thor::Shell::Color::GREEN)
         | 
| 1105 1130 | 
             
                            suc = successful_updates.map { |x| x=Helpers.checkmark() +" "+x }
         | 
| 1106 | 
            -
                             | 
| 1131 | 
            +
                            log_message(suc.join("\n"), Thor::Shell::Color::GREEN)
         | 
| 1107 1132 | 
             
                          end
         | 
| 1108 1133 | 
             
                          if successful_deletions.size >0
         | 
| 1109 | 
            -
                             | 
| 1134 | 
            +
                            log_message("Deleted:", Thor::Shell::Color::GREEN)
         | 
| 1110 1135 | 
             
                            del = successful_updates.map { |x| x=Helpers.checkmark() +" "+x }
         | 
| 1111 | 
            -
                             | 
| 1136 | 
            +
                            log_message(del.join("\n"), Thor::Shell::Color::GREEN)
         | 
| 1112 1137 | 
             
                          end
         | 
| 1113 | 
            -
                           | 
| 1138 | 
            +
                          log_message("Total of #{update_count} / #{update_total} files.", Thor::Shell::Color::GREEN)
         | 
| 1114 1139 | 
             
                        else
         | 
| 1115 1140 | 
             
                          if (options["sync"] or sync) and direct
         | 
| 1116 | 
            -
                             | 
| 1141 | 
            +
                            log_message("#{check} Syncing dataset completed successfully", Thor::Shell::Color::GREEN)
         | 
| 1117 1142 |  | 
| 1118 1143 | 
             
                          else
         | 
| 1119 | 
            -
                             | 
| 1144 | 
            +
                            log_message("#{check} Changes were updated successfully", Thor::Shell::Color::GREEN)
         | 
| 1120 1145 |  | 
| 1121 1146 | 
             
                          end
         | 
| 1122 1147 |  | 
| 1123 1148 | 
             
                        end
         | 
| 1124 1149 |  | 
| 1125 | 
            -
                        log_end(0)
         | 
| 1126 1150 | 
             
                      else
         | 
| 1127 1151 | 
             
                        @files.rollback_commit(commit_sha1)
         | 
| 1128 | 
            -
                         | 
| 1129 | 
            -
                        say "Error. Rolling Back all changes.", Thor::Shell::Color::RED
         | 
| 1152 | 
            +
                        log_message("Error: Couldn't commit. \nRolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 1130 1153 | 
             
                      end
         | 
| 1131 1154 | 
             
                    else
         | 
| 1132 | 
            -
                       | 
| 1133 | 
            -
                      say "Error occurd, \nRolling back", Thor::Shell::Color::RED
         | 
| 1155 | 
            +
                      log_message("Error: Uploaded only #{update_count}/#{update_total} files, \nRolling back", Thor::Shell::Color::RED)
         | 
| 1134 1156 |  | 
| 1135 1157 | 
             
                      @files.rollback_commit(commit_sha1)
         | 
| 1136 1158 | 
             
                    end
         | 
| 1137 1159 | 
             
                  rescue => e
         | 
| 1160 | 
            +
                    log_message("Error occurd, \nAborting", Thor::Shell::Color::RED)
         | 
| 1161 | 
            +
                    log_error(e)
         | 
| 1138 1162 |  | 
| 1139 | 
            -
                    log_end(-1)
         | 
| 1140 | 
            -
             | 
| 1141 | 
            -
                    say "Error occurd, \nAborting", Thor::Shell::Color::RED
         | 
| 1142 1163 | 
             
                    @files.rollback_commit(commit_sha1)
         | 
| 1143 1164 | 
             
                    exit(1)
         | 
| 1144 1165 | 
             
                  rescue SignalException
         | 
| 1145 | 
            -
                    log_end(-1)
         | 
| 1146 1166 |  | 
| 1147 1167 | 
             
                    say "\nAborting", Thor::Shell::Color::BLUE
         | 
| 1148 1168 | 
             
                    say "\nRolling back all changes", Thor::Shell::Color::BLUE
         | 
| @@ -1159,7 +1179,7 @@ module Cnvrg | |
| 1159 1179 | 
             
                method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
         | 
| 1160 1180 | 
             
                method_option :no_compression, :type => :boolean, :aliases => ["-nc", "--no_compression"], :default => false
         | 
| 1161 1181 |  | 
| 1162 | 
            -
                def upload_data_tar(ignore, verbose, sync,no_compression)
         | 
| 1182 | 
            +
                def upload_data_tar(ignore, verbose, sync, no_compression)
         | 
| 1163 1183 |  | 
| 1164 1184 | 
             
                  begin
         | 
| 1165 1185 | 
             
                    verify_logged_in(true)
         | 
| @@ -1170,29 +1190,27 @@ module Cnvrg | |
| 1170 1190 |  | 
| 1171 1191 | 
             
                    @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
         | 
| 1172 1192 | 
             
                    if !@dataset.update_ignore_list(ignore)
         | 
| 1173 | 
            -
                       | 
| 1193 | 
            +
                      log_message("Couldn't append new ignore files to .cnvrgignore", Thor::Shell::Color::RED)
         | 
| 1174 1194 | 
             
                      exit(1)
         | 
| 1175 1195 | 
             
                    end
         | 
| 1176 | 
            -
                     | 
| 1196 | 
            +
                    log_message("Checking dataset", Thor::Shell::Color::BLUE)
         | 
| 1177 1197 | 
             
                    local_idx = @dataset.generate_idx
         | 
| 1178 1198 | 
             
                    result = @dataset.compare_idx(false, commit=@dataset.last_local_commit, local_idx= local_idx)
         | 
| 1179 1199 |  | 
| 1180 1200 |  | 
| 1181 1201 | 
             
                    commit = result["result"]["commit"]
         | 
| 1182 1202 | 
             
                    if commit != @dataset.last_local_commit and !@dataset.last_local_commit.nil? and !result["result"]["tree"]["updated_on_server"].empty?
         | 
| 1183 | 
            -
                      log_end(0)
         | 
| 1184 1203 |  | 
| 1185 | 
            -
                       | 
| 1204 | 
            +
                      log_message("Remote server has an updated version, please run `cnvrg data download` first", Thor::Shell::Color::BLUE)
         | 
| 1186 1205 | 
             
                      exit(1)
         | 
| 1187 1206 | 
             
                    end
         | 
| 1188 1207 |  | 
| 1189 | 
            -
                     | 
| 1208 | 
            +
                    log_message("Comparing local changes with remote version:", Thor::Shell::Color::BLUE, verbose)
         | 
| 1190 1209 | 
             
                    result = result["result"]["tree"]
         | 
| 1191 1210 | 
             
                    check = Helpers.checkmark()
         | 
| 1192 1211 |  | 
| 1193 1212 | 
             
                    if result["added"].empty? and result["updated_on_local"].empty? and result["deleted"].empty?
         | 
| 1194 | 
            -
                       | 
| 1195 | 
            -
                      say "#{check} Dataset is up to date", Thor::Shell::Color::GREEN unless (sync)
         | 
| 1213 | 
            +
                      log_message("#{check} Dataset is up to date", Thor::Shell::Color::GREEN, (sync ? false : true))
         | 
| 1196 1214 | 
             
                      return true
         | 
| 1197 1215 | 
             
                    end
         | 
| 1198 1216 | 
             
                    update_count = 0
         | 
| @@ -1221,7 +1239,7 @@ module Cnvrg | |
| 1221 1239 | 
             
                      @dataset.update_idx_with_files_commits!((successful_deletions+successful_updates), commit_time)
         | 
| 1222 1240 |  | 
| 1223 1241 | 
             
                      @dataset.update_idx_with_commit!(commit_sha1)
         | 
| 1224 | 
            -
                       | 
| 1242 | 
            +
                      log_message("Compressing data", Thor::Shell::Color::BLUE)
         | 
| 1225 1243 |  | 
| 1226 1244 | 
             
                      home_dir = File.expand_path('~')
         | 
| 1227 1245 | 
             
                      compression_path = get_compression_path
         | 
| @@ -1229,22 +1247,22 @@ module Cnvrg | |
| 1229 1247 | 
             
                      tar_files_path = "#{home_dir}/.cnvrg/tmp/#{@dataset.slug}_#{commit_sha1}.txt"
         | 
| 1230 1248 | 
             
                      tar_files = (result["added"] + result["updated_on_local"]).join("\n")
         | 
| 1231 1249 | 
             
                      File.open(tar_files_path, 'w') { |f| f.write tar_files }
         | 
| 1232 | 
            -
                      is_tar = create_tar(dataset_dir, tar_path, tar_files_path,no_compression)
         | 
| 1250 | 
            +
                      is_tar = create_tar(dataset_dir, tar_path, tar_files_path, no_compression)
         | 
| 1233 1251 | 
             
                      if !is_tar
         | 
| 1234 | 
            -
                         | 
| 1252 | 
            +
                        log_message("ERROR: Couldn't compress data", Thor::Shell::Color::RED)
         | 
| 1235 1253 | 
             
                        FileUtils.rm_rf([tar_path]) if File.exist? tar_path
         | 
| 1236 1254 | 
             
                        FileUtils.rm_rf([tar_files_path]) if File.exist? tar_files_path
         | 
| 1237 1255 | 
             
                        @files.rollback_commit(commit_sha1)
         | 
| 1238 | 
            -
                         | 
| 1256 | 
            +
                        log_message("Rolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 1239 1257 | 
             
                        exit(1)
         | 
| 1240 1258 | 
             
                      end
         | 
| 1241 | 
            -
                       | 
| 1259 | 
            +
                      log_message("Uploading data", Thor::Shell::Color::BLUE)
         | 
| 1242 1260 | 
             
                      log_file = "#{home_dir}/.cnvrg/tmp/upload_#{File.basename(tar_path)}.log"
         | 
| 1243 1261 | 
             
                      res = false
         | 
| 1244 1262 | 
             
                      res = @files.upload_tar_file(tar_path, tar_path, commit_sha1)
         | 
| 1245 1263 |  | 
| 1246 1264 | 
             
                      if res
         | 
| 1247 | 
            -
                         | 
| 1265 | 
            +
                        log_message("Commiting data", Thor::Shell::Color::BLUE)
         | 
| 1248 1266 |  | 
| 1249 1267 | 
             
                        cur_idx = @dataset.get_idx.to_h
         | 
| 1250 1268 |  | 
| @@ -1255,13 +1273,13 @@ module Cnvrg | |
| 1255 1273 |  | 
| 1256 1274 |  | 
| 1257 1275 | 
             
                          @files.rollback_commit(commit_sha1)
         | 
| 1258 | 
            -
                           | 
| 1276 | 
            +
                          log_message("Can't commit, Rolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 1259 1277 | 
             
                          exit(1)
         | 
| 1260 1278 | 
             
                        end
         | 
| 1261 1279 |  | 
| 1262 1280 | 
             
                      else
         | 
| 1263 1281 | 
             
                        if File.exist? log_file
         | 
| 1264 | 
            -
             | 
| 1282 | 
            +
                          @files.upload_data_log_file(log_file, log_file, commit_sha1)
         | 
| 1265 1283 | 
             
                        end
         | 
| 1266 1284 |  | 
| 1267 1285 |  | 
| @@ -1270,8 +1288,8 @@ module Cnvrg | |
| 1270 1288 |  | 
| 1271 1289 |  | 
| 1272 1290 | 
             
                        @files.rollback_commit(commit_sha1)
         | 
| 1273 | 
            -
                         | 
| 1274 | 
            -
                         | 
| 1291 | 
            +
                        log_message("Can't upload, Rolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 1292 | 
            +
                        log_message("Upload error log: #{log_file}", Thor::Shell::Color::RED)
         | 
| 1275 1293 |  | 
| 1276 1294 | 
             
                        exit(1)
         | 
| 1277 1295 | 
             
                      end
         | 
| @@ -1281,11 +1299,10 @@ module Cnvrg | |
| 1281 1299 | 
             
                      FileUtils.rm_rf([tar_path, tar_files_path])
         | 
| 1282 1300 |  | 
| 1283 1301 | 
             
                    rescue SignalException
         | 
| 1284 | 
            -
                      log_end(-1)
         | 
| 1285 1302 | 
             
                      FileUtils.rm_rf([tar_files_path]) if File.exist? tar_files_path
         | 
| 1286 1303 | 
             
                      FileUtils.rm_rf([tar_path]) if File.exist? tar_path
         | 
| 1287 1304 | 
             
                      if File.exist? log_file
         | 
| 1288 | 
            -
                        @files.upload_data_log_file(log_file,log_file,commit_sha1)
         | 
| 1305 | 
            +
                        @files.upload_data_log_file(log_file, log_file, commit_sha1)
         | 
| 1289 1306 | 
             
                      end
         | 
| 1290 1307 |  | 
| 1291 1308 |  | 
| @@ -1293,36 +1310,36 @@ module Cnvrg | |
| 1293 1310 | 
             
                      say "User aborted, Rolling Back all changes.", Thor::Shell::Color::RED
         | 
| 1294 1311 | 
             
                      exit(0)
         | 
| 1295 1312 | 
             
                    rescue => e
         | 
| 1296 | 
            -
                       | 
| 1313 | 
            +
                      log_error(e)
         | 
| 1297 1314 | 
             
                      if !Cnvrg::Helpers.internet_connection?
         | 
| 1298 1315 | 
             
                        say "Seems there is no internet connection", Thor::Shell::Color::RED
         | 
| 1299 1316 |  | 
| 1300 1317 | 
             
                      end
         | 
| 1301 1318 | 
             
                      if File.exist? log_file
         | 
| 1302 | 
            -
                        @files.upload_data_log_file(log_file,log_file,commit_sha1)
         | 
| 1319 | 
            +
                        @files.upload_data_log_file(log_file, log_file, commit_sha1)
         | 
| 1303 1320 | 
             
                      end
         | 
| 1304 1321 | 
             
                      FileUtils.rm_rf([tar_files_path]) if File.exist? tar_files_path
         | 
| 1305 1322 | 
             
                      FileUtils.rm_rf([tar_path]) if File.exist? tar_path
         | 
| 1306 1323 |  | 
| 1307 | 
            -
                      log_end(-1, e.message)
         | 
| 1308 1324 | 
             
                      @files.rollback_commit(commit_sha1)
         | 
| 1309 | 
            -
                       | 
| 1310 | 
            -
                       | 
| 1325 | 
            +
                      log_message("Exception while trying to upload, \nRolling back,\n look at the log for more details", Thor::Shell::Color::RED)
         | 
| 1326 | 
            +
                      log_message("Error log: #{log_file}", Thor::Shell::Color::RED)
         | 
| 1311 1327 |  | 
| 1312 1328 |  | 
| 1313 1329 | 
             
                      exit(0)
         | 
| 1314 1330 | 
             
                    end
         | 
| 1315 | 
            -
                     | 
| 1316 | 
            -
             | 
| 1331 | 
            +
                    log_message("#{check} Changes were updated successfully", Thor::Shell::Color::GREEN)
         | 
| 1317 1332 |  | 
| 1318 1333 |  | 
| 1319 1334 | 
             
                  rescue => e
         | 
| 1320 | 
            -
             | 
| 1321 | 
            -
                     | 
| 1335 | 
            +
             | 
| 1336 | 
            +
                    puts e.message
         | 
| 1337 | 
            +
                    puts e.backtrace
         | 
| 1338 | 
            +
                    log_message("Error occurred, \nAborting", Thor::Shell::Color::RED)
         | 
| 1339 | 
            +
                    log_error(e)
         | 
| 1322 1340 | 
             
                    @files.rollback_commit(commit_sha1)
         | 
| 1323 1341 | 
             
                    exit(1)
         | 
| 1324 1342 | 
             
                  rescue SignalException
         | 
| 1325 | 
            -
                    log_end(-1)
         | 
| 1326 1343 |  | 
| 1327 1344 | 
             
                    say "\nAborting", Thor::Shell::Color::BLUE
         | 
| 1328 1345 | 
             
                    say "\nRolling back all changes", Thor::Shell::Color::BLUE
         | 
| @@ -1330,7 +1347,6 @@ module Cnvrg | |
| 1330 1347 | 
             
                    exit(1)
         | 
| 1331 1348 | 
             
                  end
         | 
| 1332 1349 |  | 
| 1333 | 
            -
                  log_end(0)
         | 
| 1334 1350 |  | 
| 1335 1351 | 
             
                end
         | 
| 1336 1352 |  | 
| @@ -1424,18 +1440,16 @@ module Cnvrg | |
| 1424 1440 | 
             
                    project_name = response["title"]
         | 
| 1425 1441 | 
             
                    commit_to_clone = options["commit"] || nil
         | 
| 1426 1442 |  | 
| 1427 | 
            -
                     | 
| 1443 | 
            +
                    log_message("Cloning #{project_name}", Thor::Shell::Color::BLUE)
         | 
| 1428 1444 | 
             
                    clone_resp = false
         | 
| 1429 1445 | 
             
                    if remote
         | 
| 1430 1446 | 
             
                      clone_resp = Project.clone_dir_remote(slug, owner, project_name)
         | 
| 1431 1447 | 
             
                      project_home = Dir.pwd
         | 
| 1432 1448 | 
             
                    else
         | 
| 1433 1449 | 
             
                      if (Dir.exists? project_name)
         | 
| 1434 | 
            -
                         | 
| 1450 | 
            +
                        log_message("Error: Conflict with dir #{project_name}", Thor::Shell::Color::RED)
         | 
| 1435 1451 | 
             
                        if no? "Sync to repository anyway? (current data might lost)", Thor::Shell::Color::YELLOW
         | 
| 1436 | 
            -
                           | 
| 1437 | 
            -
                          log_end(1, "conflict with dir #{project_name}")
         | 
| 1438 | 
            -
             | 
| 1452 | 
            +
                          log_message("Remove dir in order to clone #{project_name}", Thor::Shell::Color::RED)
         | 
| 1439 1453 | 
             
                          exit(1)
         | 
| 1440 1454 | 
             
                        end
         | 
| 1441 1455 |  | 
| @@ -1463,20 +1477,20 @@ module Cnvrg | |
| 1463 1477 | 
             
                          if yes? "Image wasn't found locally, pull image from cnvrg repository?", Thor::Shell::Color::YELLOW
         | 
| 1464 1478 | 
             
                            image = pull(docker_image)
         | 
| 1465 1479 | 
             
                            if image
         | 
| 1466 | 
            -
                               | 
| 1480 | 
            +
                              log_message("downloaded image: #{docker_image}", Thor::Shell::Color::BLUE)
         | 
| 1467 1481 | 
             
                              @image = Images.new(working_dir, docker_image)
         | 
| 1468 1482 | 
             
                            else
         | 
| 1469 | 
            -
                               | 
| 1483 | 
            +
                              log_message("Could not create a new project with docker, image was not found", Thor::Shell::Color::RED)
         | 
| 1470 1484 | 
             
                              @project.revert(working_dir)
         | 
| 1471 1485 | 
             
                              exit(1)
         | 
| 1472 1486 | 
             
                            end
         | 
| 1473 1487 | 
             
                          end
         | 
| 1474 1488 |  | 
| 1475 1489 | 
             
                        elsif docker_image_local.size == 1
         | 
| 1476 | 
            -
                           | 
| 1490 | 
            +
                          log_message("found image: #{docker_image_local[0]}, setting it up..", Thor::Shell::Color::BLUE)
         | 
| 1477 1491 | 
             
                          @image = Images.new(working_dir, docker_image_local[0])
         | 
| 1478 1492 | 
             
                        elsif docker_image_local.size >1
         | 
| 1479 | 
            -
                           | 
| 1493 | 
            +
                          log_message("found #{docker_image_local.size} images, choose the image name you want to use", Thor::Shell::Color::BLUE)
         | 
| 1480 1494 | 
             
                          image_name = ask "#{docker_image_local.join("\n")}\n", Thor::Shell::Color::BLUE
         | 
| 1481 1495 | 
             
                          @image = Images.new(working_dir, image_name)
         | 
| 1482 1496 | 
             
                        end
         | 
| @@ -1484,35 +1498,65 @@ module Cnvrg | |
| 1484 1498 | 
             
                      end
         | 
| 1485 1499 |  | 
| 1486 1500 | 
             
                      successful_changes = []
         | 
| 1487 | 
            -
                       | 
| 1501 | 
            +
                      log_message("Downloading files", Thor::Shell::Color::BLUE)
         | 
| 1488 1502 | 
             
                      if !response["result"]["tree"].nil?
         | 
| 1489 | 
            -
                         | 
| 1490 | 
            -
             | 
| 1491 | 
            -
             | 
| 1492 | 
            -
             | 
| 1493 | 
            -
             | 
| 1494 | 
            -
             | 
| 1495 | 
            -
             | 
| 1496 | 
            -
             | 
| 1497 | 
            -
                             | 
| 1503 | 
            +
                        parallel_options = {
         | 
| 1504 | 
            +
                            :progress => {
         | 
| 1505 | 
            +
                                :title => "Download Progress",
         | 
| 1506 | 
            +
                                :progress_mark => '=',
         | 
| 1507 | 
            +
                                :format => "%b>>%i| %p%% %t",
         | 
| 1508 | 
            +
                                :starting_at => 0,
         | 
| 1509 | 
            +
                                :total => response["result"]["tree"].size,
         | 
| 1510 | 
            +
                                :autofinish => true
         | 
| 1511 | 
            +
                            },
         | 
| 1512 | 
            +
                            in_processes: ParallelProcesses,
         | 
| 1513 | 
            +
                            in_thread: ParallelThreads
         | 
| 1514 | 
            +
                        }
         | 
| 1515 | 
            +
                        begin
         | 
| 1516 | 
            +
                          clone_result = Parallel.map((response["result"]["tree"]), parallel_options) do |f|
         | 
| 1498 1517 |  | 
| 1499 | 
            -
                             | 
| 1500 | 
            -
             | 
| 1518 | 
            +
                            relative_path = f[0].gsub(/^#{@project.local_path}/, "")
         | 
| 1519 | 
            +
                            if f[0].end_with? "/"
         | 
| 1520 | 
            +
                              # dir
         | 
| 1521 | 
            +
                              if @files.download_dir(f[0], relative_path, project_home)
         | 
| 1522 | 
            +
                                f
         | 
| 1523 | 
            +
                              else
         | 
| 1524 | 
            +
                                log_message("Could not create directory: #{f[0]}", Thor::Shell::Color::RED)
         | 
| 1525 | 
            +
                                raise Parallel::Kill
         | 
| 1526 | 
            +
                              end
         | 
| 1527 | 
            +
                            else
         | 
| 1528 | 
            +
                              # blob
         | 
| 1529 | 
            +
             | 
| 1530 | 
            +
                              if @files.download_file_s3(f[0], relative_path, project_home, commit_sha1=current_commit)
         | 
| 1531 | 
            +
                                f
         | 
| 1532 | 
            +
                                successful_changes << relative_path
         | 
| 1533 | 
            +
                              else
         | 
| 1534 | 
            +
                                log_message("Could not download file: #{f[0]}", Thor::Shell::Color::RED)
         | 
| 1535 | 
            +
                                raise Parallel::Kill
         | 
| 1536 | 
            +
             | 
| 1537 | 
            +
                              end
         | 
| 1501 1538 | 
             
                            end
         | 
| 1502 1539 | 
             
                          end
         | 
| 1540 | 
            +
                        rescue Interrupt
         | 
| 1541 | 
            +
             | 
| 1542 | 
            +
                          log_message("Couldn't download, Rolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 1543 | 
            +
             | 
| 1544 | 
            +
                          @files.revoke_download([], response["result"]["tree"])
         | 
| 1545 | 
            +
                          exit(1)
         | 
| 1503 1546 | 
             
                        end
         | 
| 1547 | 
            +
             | 
| 1548 | 
            +
             | 
| 1504 1549 | 
             
                      end
         | 
| 1505 1550 |  | 
| 1506 | 
            -
                       | 
| 1507 | 
            -
             | 
| 1551 | 
            +
                      successful_changes = clone_result
         | 
| 1552 | 
            +
             | 
| 1553 | 
            +
                      log_message("Done.\nDownloaded total of #{successful_changes.size} files", Thor::Shell::Color::GREEN)
         | 
| 1508 1554 | 
             
                    else
         | 
| 1509 | 
            -
                      log_end(1, "can't create directory")
         | 
| 1510 1555 |  | 
| 1511 | 
            -
                       | 
| 1556 | 
            +
                      log_message("Error: Couldn't create directory: #{project_name}", Thor::Shell::Color::RED)
         | 
| 1512 1557 | 
             
                      exit(1)
         | 
| 1513 1558 | 
             
                    end
         | 
| 1514 1559 | 
             
                  rescue SignalException
         | 
| 1515 | 
            -
                    log_end(-1)
         | 
| 1516 1560 | 
             
                    say "\nAborting"
         | 
| 1517 1561 | 
             
                    exit(1)
         | 
| 1518 1562 | 
             
                  end
         | 
| @@ -1534,49 +1578,46 @@ module Cnvrg | |
| 1534 1578 | 
             
                    result = @project.compare_idx(new_branch)["result"]
         | 
| 1535 1579 | 
             
                    commit = result["commit"]
         | 
| 1536 1580 | 
             
                    result = result["tree"]
         | 
| 1537 | 
            -
                     | 
| 1581 | 
            +
                    log_message("Comparing local changes with remote version:", Thor::Shell::Color::BLUE)
         | 
| 1538 1582 |  | 
| 1539 1583 | 
             
                    if result["added"].empty? and result["updated_on_local"].empty? and result["updated_on_server"].empty? and result["deleted"].empty? and result["conflicts"].empty?
         | 
| 1540 | 
            -
                       | 
| 1541 | 
            -
                      log_end(0)
         | 
| 1584 | 
            +
                      log_message("Project is up to date", Thor::Shell::Color::GREEN)
         | 
| 1542 1585 | 
             
                      return true
         | 
| 1543 1586 | 
             
                    end
         | 
| 1544 1587 | 
             
                    if result["added"].size > 0
         | 
| 1545 | 
            -
                       | 
| 1588 | 
            +
                      log_message("Added files:\n", Thor::Shell::Color::BLUE)
         | 
| 1546 1589 | 
             
                      result["added"].each do |a|
         | 
| 1547 | 
            -
                         | 
| 1590 | 
            +
                        log_message("\t\tA:\t#{a}", Thor::Shell::Color::GREEN)
         | 
| 1548 1591 | 
             
                      end
         | 
| 1549 1592 | 
             
                    end
         | 
| 1550 1593 |  | 
| 1551 1594 | 
             
                    if result["deleted"].size > 0
         | 
| 1552 | 
            -
                       | 
| 1595 | 
            +
                      log_message("Deleted files:\n", Thor::Shell::Color::BLUE)
         | 
| 1553 1596 | 
             
                      result["deleted"].each do |a|
         | 
| 1554 | 
            -
                         | 
| 1597 | 
            +
                        log_message("\t\tD:\t#{a}", Thor::Shell::Color::GREEN)
         | 
| 1555 1598 | 
             
                      end
         | 
| 1556 1599 | 
             
                    end
         | 
| 1557 1600 | 
             
                    if result["updated_on_local"].size > 0
         | 
| 1558 | 
            -
                       | 
| 1601 | 
            +
                      log_message("Local changes:\n", Thor::Shell::Color::BLUE)
         | 
| 1559 1602 | 
             
                      result["updated_on_local"].each do |a|
         | 
| 1560 | 
            -
                         | 
| 1603 | 
            +
                        log_message("\t\tM:\t#{a}", Thor::Shell::Color::GREEN)
         | 
| 1561 1604 | 
             
                      end
         | 
| 1562 1605 | 
             
                    end
         | 
| 1563 1606 |  | 
| 1564 1607 | 
             
                    if result["updated_on_server"].size > 0
         | 
| 1565 | 
            -
                       | 
| 1608 | 
            +
                      log_message("Remote changes:\n", Thor::Shell::Color::BLUE)
         | 
| 1566 1609 | 
             
                      result["updated_on_server"].each do |a|
         | 
| 1567 | 
            -
                         | 
| 1610 | 
            +
                        log_message("\t\tM:\t#{a}", Thor::Shell::Color::GREEN)
         | 
| 1568 1611 | 
             
                      end
         | 
| 1569 1612 | 
             
                    end
         | 
| 1570 1613 |  | 
| 1571 1614 | 
             
                    if result["conflicts"].size > 0
         | 
| 1572 | 
            -
                       | 
| 1615 | 
            +
                      log_message("Conflicted changes:\n", Thor::Shell::Color::BLUE)
         | 
| 1573 1616 | 
             
                      result["conflicts"].each do |a|
         | 
| 1574 | 
            -
                         | 
| 1617 | 
            +
                        log_message("\t\tC:\t#{a}", Thor::Shell::Color::RED)
         | 
| 1575 1618 | 
             
                      end
         | 
| 1576 1619 | 
             
                    end
         | 
| 1577 | 
            -
                    log_end(0)
         | 
| 1578 1620 | 
             
                  rescue SignalException
         | 
| 1579 | 
            -
                    log_end(-1)
         | 
| 1580 1621 | 
             
                    say "\nAborting"
         | 
| 1581 1622 | 
             
                    exit(1)
         | 
| 1582 1623 | 
             
                  end
         | 
| @@ -1634,7 +1675,7 @@ module Cnvrg | |
| 1634 1675 | 
             
                      end
         | 
| 1635 1676 | 
             
                    end
         | 
| 1636 1677 | 
             
                    if !@project.update_ignore_list(ignore)
         | 
| 1637 | 
            -
                       | 
| 1678 | 
            +
                      log_message("Couldn't append new ignore files to .cnvrgignore", Thor::Shell::Color::YELLOW)
         | 
| 1638 1679 | 
             
                    end
         | 
| 1639 1680 | 
             
                    new_branch = options["new_branch"] || false
         | 
| 1640 1681 |  | 
| @@ -1648,13 +1689,12 @@ module Cnvrg | |
| 1648 1689 | 
             
                    commit = result["result"]["commit"]
         | 
| 1649 1690 | 
             
                    if !link
         | 
| 1650 1691 | 
             
                      if commit != @project.last_local_commit and !@project.last_local_commit.nil? and !result["result"]["tree"]["updated_on_server"].empty?
         | 
| 1651 | 
            -
                        log_end(0)
         | 
| 1652 1692 |  | 
| 1653 | 
            -
                         | 
| 1693 | 
            +
                        log_message("Remote server has an updated version, please run `cnvrg download` first, or alternatively: `cnvrg sync`", Thor::Shell::Color::BLUE)
         | 
| 1654 1694 | 
             
                        exit(1)
         | 
| 1655 1695 | 
             
                      end
         | 
| 1656 1696 |  | 
| 1657 | 
            -
                       | 
| 1697 | 
            +
                      log_message("Comparing local changes with remote version:", Thor::Shell::Color::BLUE, (options["verbose"]))
         | 
| 1658 1698 | 
             
                    end
         | 
| 1659 1699 | 
             
                    result = result["result"]["tree"]
         | 
| 1660 1700 | 
             
                    # if result["added"].any? {|x| x.include? ".conflict"} or !result["conflicts"].empty?
         | 
| @@ -1672,8 +1712,7 @@ module Cnvrg | |
| 1672 1712 | 
             
                    # end
         | 
| 1673 1713 | 
             
                    check = Helpers.checkmark()
         | 
| 1674 1714 | 
             
                    if result["added"].empty? and result["updated_on_local"].empty? and result["deleted"].empty?
         | 
| 1675 | 
            -
                       | 
| 1676 | 
            -
                      say "#{check} Project is up to date", Thor::Shell::Color::GREEN unless ((options["sync"] or sync) and !direct)
         | 
| 1715 | 
            +
                      log_message("#{check} Project is up to date", Thor::Shell::Color::GREEN, (((options["sync"] or sync) and !direct) ? false : true))
         | 
| 1677 1716 | 
             
                      return true
         | 
| 1678 1717 | 
             
                    end
         | 
| 1679 1718 | 
             
                    update_count = 0
         | 
| @@ -1682,77 +1721,133 @@ module Cnvrg | |
| 1682 1721 | 
             
                    successful_deletions = []
         | 
| 1683 1722 | 
             
                    if options["verbose"]
         | 
| 1684 1723 | 
             
                      if update_total == 1
         | 
| 1685 | 
            -
                         | 
| 1724 | 
            +
                        log_message("Updating #{update_total} file", Thor::Shell::Color::BLUE)
         | 
| 1686 1725 | 
             
                      else
         | 
| 1687 | 
            -
                         | 
| 1726 | 
            +
                        log_message("Updating #{update_total} files", Thor::Shell::Color::BLUE)
         | 
| 1688 1727 | 
             
                      end
         | 
| 1689 1728 | 
             
                    else
         | 
| 1690 | 
            -
                       | 
| 1729 | 
            +
                      log_message("Syncing files", Thor::Shell::Color::BLUE, ((options["sync"] or sync)) ? false : true)
         | 
| 1691 1730 |  | 
| 1692 1731 | 
             
                    end
         | 
| 1693 | 
            -
             | 
| 1694 1732 | 
             
                    # Start commit
         | 
| 1695 | 
            -
             | 
| 1696 1733 | 
             
                    commit_sha1 = @files.start_commit(new_branch)["result"]["commit_sha1"]
         | 
| 1697 1734 |  | 
| 1698 1735 | 
             
                    # upload / update
         | 
| 1699 1736 | 
             
                    begin
         | 
| 1700 | 
            -
                      (result["added"] + result["updated_on_local"]).each do |f|
         | 
| 1701 | 
            -
                        absolute_path = "#{@project.local_path}/#{f}"
         | 
| 1702 | 
            -
                        relative_path = f.gsub(/^#{@project.local_path + "/"}/, "")
         | 
| 1703 | 
            -
                        if File.directory?(absolute_path)
         | 
| 1704 | 
            -
                          resDir = @files.create_dir(absolute_path, relative_path, commit_sha1)
         | 
| 1705 | 
            -
                          if resDir
         | 
| 1706 | 
            -
                            update_count += 1
         | 
| 1707 | 
            -
                            successful_updates<< relative_path
         | 
| 1708 | 
            -
                          end
         | 
| 1709 | 
            -
                        else
         | 
| 1710 | 
            -
                          res = @files.upload_file(absolute_path, relative_path, commit_sha1)
         | 
| 1711 | 
            -
                          if res
         | 
| 1712 | 
            -
                            update_count += 1
         | 
| 1713 | 
            -
                            successful_updates<< relative_path
         | 
| 1714 | 
            -
                          else
         | 
| 1715 | 
            -
                            say "Failed to upload: #{ File.basename(absolute_path) }", Thor::Shell::Color::RED
         | 
| 1716 1737 |  | 
| 1717 | 
            -
             | 
| 1718 | 
            -
             | 
| 1719 | 
            -
             | 
| 1720 | 
            -
             | 
| 1738 | 
            +
                      parallel_options = {
         | 
| 1739 | 
            +
                          :progress => {
         | 
| 1740 | 
            +
                              :title => "Upload Progress",
         | 
| 1741 | 
            +
                              :progress_mark => '=',
         | 
| 1742 | 
            +
                              :format => "%b>>%i| %p%% %t",
         | 
| 1743 | 
            +
                              :starting_at => 0,
         | 
| 1744 | 
            +
                              :total => update_total,
         | 
| 1745 | 
            +
                              :autofinish => true
         | 
| 1746 | 
            +
                          },
         | 
| 1747 | 
            +
                          in_processes: ParallelProcesses,
         | 
| 1748 | 
            +
                          in_thread: ParallelThreads,
         | 
| 1749 | 
            +
                          isolation: true
         | 
| 1750 | 
            +
                      }
         | 
| 1751 | 
            +
                      if (result["added"] + result["updated_on_local"]).size > 0
         | 
| 1752 | 
            +
             | 
| 1753 | 
            +
                        begin
         | 
| 1754 | 
            +
                          upload_result = Parallel.map((result["added"] + result["updated_on_local"]), parallel_options) do |f|
         | 
| 1755 | 
            +
                            absolute_path = "#{@project.local_path}/#{f}"
         | 
| 1756 | 
            +
                            relative_path = f.gsub(/^#{@project.local_path + "/"}/, "")
         | 
| 1757 | 
            +
                            if File.directory?(absolute_path)
         | 
| 1758 | 
            +
                              resDir = @files.create_dir(absolute_path, relative_path, commit_sha1)
         | 
| 1759 | 
            +
                              if resDir
         | 
| 1760 | 
            +
                                f
         | 
| 1761 | 
            +
                                # progressbar.increment
         | 
| 1762 | 
            +
                                update_count += 1
         | 
| 1763 | 
            +
                                successful_updates<< relative_path
         | 
| 1764 | 
            +
                              else
         | 
| 1765 | 
            +
                                log_message("Failed to upload directory: #{ relative_path }", Thor::Shell::Color::RED)
         | 
| 1766 | 
            +
             | 
| 1767 | 
            +
                                raise Parallel::Kill
         | 
| 1768 | 
            +
                              end
         | 
| 1769 | 
            +
             | 
| 1770 | 
            +
                            else
         | 
| 1771 | 
            +
             | 
| 1772 | 
            +
                              res = @files.upload_file(absolute_path, relative_path, commit_sha1)
         | 
| 1773 | 
            +
                              if res
         | 
| 1774 | 
            +
                                f
         | 
| 1775 | 
            +
                                update_count += 1
         | 
| 1776 | 
            +
             | 
| 1777 | 
            +
                                successful_updates<< relative_path
         | 
| 1778 | 
            +
                              else
         | 
| 1779 | 
            +
                                log_message("Failed to upload: #{ File.basename(absolute_path) }", Thor::Shell::Color::RED)
         | 
| 1780 | 
            +
             | 
| 1781 | 
            +
                                raise Parallel::Kill
         | 
| 1782 | 
            +
             | 
| 1783 | 
            +
                              end
         | 
| 1784 | 
            +
                            end
         | 
| 1721 1785 | 
             
                          end
         | 
| 1786 | 
            +
                        rescue Interrupt
         | 
| 1787 | 
            +
                          log_message("Couldn't upload, Rolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 1788 | 
            +
                          @files.rollback_commit(commit_sha1)
         | 
| 1789 | 
            +
             | 
| 1790 | 
            +
                          exit(1)
         | 
| 1722 1791 | 
             
                        end
         | 
| 1723 1792 | 
             
                      end
         | 
| 1724 1793 |  | 
| 1794 | 
            +
             | 
| 1795 | 
            +
                      successful_updates = upload_result.to_a
         | 
| 1796 | 
            +
             | 
| 1725 1797 | 
             
                      # delete
         | 
| 1798 | 
            +
             | 
| 1726 1799 | 
             
                      deleted = update_deleted(result["deleted"])
         | 
| 1727 | 
            -
                       | 
| 1728 | 
            -
             | 
| 1729 | 
            -
                         | 
| 1730 | 
            -
             | 
| 1731 | 
            -
             | 
| 1732 | 
            -
             | 
| 1733 | 
            -
             | 
| 1734 | 
            -
             | 
| 1735 | 
            -
             | 
| 1736 | 
            -
             | 
| 1737 | 
            -
             | 
| 1800 | 
            +
                      begin
         | 
| 1801 | 
            +
             | 
| 1802 | 
            +
                        deleted_result = Parallel.map(deleted, in_processes: ParallelProcesses, in_thread: ParallelThreads) do |f|
         | 
| 1803 | 
            +
             | 
| 1804 | 
            +
                          relative_path = f.gsub(/^#{@project.local_path + "/"}/, "")
         | 
| 1805 | 
            +
                          if relative_path.end_with?("/")
         | 
| 1806 | 
            +
                            if @files.delete_dir(f, relative_path, commit_sha1)
         | 
| 1807 | 
            +
                              f
         | 
| 1808 | 
            +
                            else
         | 
| 1809 | 
            +
                              log_message("Failed to delete directory: #{ f }", Thor::Shell::Color::RED)
         | 
| 1810 | 
            +
             | 
| 1811 | 
            +
                            end
         | 
| 1812 | 
            +
                          else
         | 
| 1813 | 
            +
                            if @files.delete_file(f, relative_path, commit_sha1)
         | 
| 1814 | 
            +
                              f
         | 
| 1815 | 
            +
                            else
         | 
| 1816 | 
            +
                              log_message("Failed to delete file: #{ f }", Thor::Shell::Color::RED)
         | 
| 1817 | 
            +
             | 
| 1818 | 
            +
                            end
         | 
| 1738 1819 | 
             
                          end
         | 
| 1739 1820 | 
             
                        end
         | 
| 1821 | 
            +
                      rescue Interrupt
         | 
| 1822 | 
            +
                        log_message("Couldn't upload, Rolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 1823 | 
            +
                        @files.rollback_commit(commit_sha1)
         | 
| 1824 | 
            +
             | 
| 1825 | 
            +
                        exit(1)
         | 
| 1826 | 
            +
             | 
| 1740 1827 | 
             
                      end
         | 
| 1741 1828 |  | 
| 1829 | 
            +
             | 
| 1830 | 
            +
                      successful_deletions += successful_deletions.select { |x| not x.nil? }
         | 
| 1831 | 
            +
             | 
| 1832 | 
            +
             | 
| 1833 | 
            +
                      successful_updates = successful_updates.select { |x| not x.nil? }
         | 
| 1834 | 
            +
             | 
| 1835 | 
            +
                      update_count = successful_updates.size
         | 
| 1836 | 
            +
             | 
| 1742 1837 | 
             
                    rescue SignalException
         | 
| 1743 | 
            -
                      log_end(-1)
         | 
| 1744 1838 | 
             
                      @files.rollback_commit(commit_sha1)
         | 
| 1745 1839 | 
             
                      say "User aborted, Rolling Back all changes.", Thor::Shell::Color::RED
         | 
| 1746 1840 | 
             
                      exit(0)
         | 
| 1747 1841 | 
             
                    rescue => e
         | 
| 1748 | 
            -
                      log_end(-1, e.message)
         | 
| 1749 1842 | 
             
                      @files.rollback_commit(commit_sha1)
         | 
| 1750 | 
            -
                       | 
| 1843 | 
            +
                      log_message("Exception while trying to upload, Rolling back", Thor::Shell::Color::RED)
         | 
| 1844 | 
            +
                      log_error(e)
         | 
| 1751 1845 | 
             
                      exit(0)
         | 
| 1752 1846 | 
             
                    end
         | 
| 1753 1847 | 
             
                    if !result["deleted"].nil? and !result["deleted"].empty?
         | 
| 1754 1848 | 
             
                      update_count += result["deleted"].size
         | 
| 1755 1849 | 
             
                    end
         | 
| 1850 | 
            +
             | 
| 1756 1851 | 
             
                    if update_count == update_total
         | 
| 1757 1852 | 
             
                      res = @files.end_commit(commit_sha1)
         | 
| 1758 1853 | 
             
                      if (Cnvrg::CLI.is_response_success(res, false))
         | 
| @@ -1762,9 +1857,9 @@ module Cnvrg | |
| 1762 1857 |  | 
| 1763 1858 | 
             
                          @project.update_idx_with_commit!(commit_sha1)
         | 
| 1764 1859 | 
             
                        rescue => e
         | 
| 1765 | 
            -
                          log_end(-1, e.message)
         | 
| 1766 1860 | 
             
                          @files.rollback_commit(commit_sha1)
         | 
| 1767 | 
            -
                           | 
| 1861 | 
            +
                          log_message("Couldn't commit updates, Rolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 1862 | 
            +
                          log_error(e)
         | 
| 1768 1863 | 
             
                          exit(1)
         | 
| 1769 1864 |  | 
| 1770 1865 | 
             
                        end
         | 
| @@ -1774,49 +1869,47 @@ module Cnvrg | |
| 1774 1869 | 
             
                        end
         | 
| 1775 1870 |  | 
| 1776 1871 | 
             
                        if options["verbose"]
         | 
| 1777 | 
            -
                           | 
| 1872 | 
            +
                          log_message("#{check} Done", Thor::Shell::Color::BLUE)
         | 
| 1778 1873 | 
             
                          if successful_updates.size >0
         | 
| 1779 | 
            -
                             | 
| 1874 | 
            +
                            log_message("Updated:", Thor::Shell::Color::GREEN)
         | 
| 1780 1875 | 
             
                            suc = successful_updates.map { |x| x=Helpers.checkmark() +" "+x }
         | 
| 1781 | 
            -
                             | 
| 1876 | 
            +
                            log_message(suc.join("\n"), Thor::Shell::Color::GREEN)
         | 
| 1782 1877 | 
             
                          end
         | 
| 1783 1878 | 
             
                          if successful_deletions.size >0
         | 
| 1784 | 
            -
                             | 
| 1879 | 
            +
                            log_message("Deleted:", Thor::Shell::Color::GREEN)
         | 
| 1785 1880 | 
             
                            del = successful_updates.map { |x| x=Helpers.checkmark() +" "+x }
         | 
| 1786 | 
            -
                             | 
| 1881 | 
            +
                            log_message(del.join("\n"), Thor::Shell::Color::GREEN)
         | 
| 1787 1882 | 
             
                          end
         | 
| 1788 | 
            -
                           | 
| 1883 | 
            +
                          log_message("Total of #{update_count} / #{update_total} files.", Thor::Shell::Color::GREEN)
         | 
| 1789 1884 | 
             
                        else
         | 
| 1790 1885 | 
             
                          if (options["sync"] or sync) and direct
         | 
| 1791 | 
            -
                             | 
| 1886 | 
            +
                            log_message("#{check} Syncing project completed successfully", Thor::Shell::Color::GREEN)
         | 
| 1792 1887 |  | 
| 1793 1888 | 
             
                          else
         | 
| 1794 | 
            -
                             | 
| 1889 | 
            +
                            log_message("#{check} Changes were updated successfully", Thor::Shell::Color::GREEN)
         | 
| 1795 1890 |  | 
| 1796 1891 | 
             
                          end
         | 
| 1797 1892 |  | 
| 1798 1893 | 
             
                        end
         | 
| 1799 1894 |  | 
| 1800 | 
            -
                        log_end(0)
         | 
| 1801 1895 | 
             
                      else
         | 
| 1802 1896 | 
             
                        @files.rollback_commit(commit_sha1)
         | 
| 1803 | 
            -
                         | 
| 1804 | 
            -
                        say "Error. Rolling Back all changes.", Thor::Shell::Color::RED
         | 
| 1897 | 
            +
                        log_message("Error: couldn't commit changes,  Rolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 1805 1898 | 
             
                      end
         | 
| 1806 1899 | 
             
                    else
         | 
| 1807 | 
            -
                       | 
| 1808 | 
            -
                      say "Error occurd, \nRolling back", Thor::Shell::Color::RED
         | 
| 1900 | 
            +
                      log_message("Error: uploaded only: #{update_count} / #{update_total}, \n Rolling back", Thor::Shell::Color::RED)
         | 
| 1809 1901 |  | 
| 1810 1902 | 
             
                      @files.rollback_commit(commit_sha1)
         | 
| 1811 1903 | 
             
                    end
         | 
| 1812 1904 | 
             
                  rescue => e
         | 
| 1813 | 
            -
                    log_end(-1,e.message)
         | 
| 1814 1905 |  | 
| 1815 | 
            -
                     | 
| 1906 | 
            +
                    log_message("Error occurred, \nAborting", Thor::Shell::Color::RED)
         | 
| 1907 | 
            +
                    log_error(e)
         | 
| 1816 1908 | 
             
                    @files.rollback_commit(commit_sha1)
         | 
| 1909 | 
            +
                    puts e.message
         | 
| 1910 | 
            +
             | 
| 1817 1911 | 
             
                    exit(1)
         | 
| 1818 1912 | 
             
                  rescue SignalException
         | 
| 1819 | 
            -
                    log_end(-1)
         | 
| 1820 1913 |  | 
| 1821 1914 | 
             
                    say "\nAborting", Thor::Shell::Color::BLUE
         | 
| 1822 1915 | 
             
                    say "\nRolling back all changes", Thor::Shell::Color::BLUE
         | 
| @@ -1852,7 +1945,7 @@ module Cnvrg | |
| 1852 1945 | 
             
                      end
         | 
| 1853 1946 | 
             
                    end
         | 
| 1854 1947 | 
             
                    if !@project.update_ignore_list(ignore)
         | 
| 1855 | 
            -
                       | 
| 1948 | 
            +
                      log_message("Couldn't append new ignore files to .cnvrgignore", Thor::Shell::Color::YELLOW)
         | 
| 1856 1949 | 
             
                    end
         | 
| 1857 1950 | 
             
                    new_branch = options["new_branch"] || false
         | 
| 1858 1951 |  | 
| @@ -1862,8 +1955,7 @@ module Cnvrg | |
| 1862 1955 |  | 
| 1863 1956 | 
             
                    commit = res["commit"]
         | 
| 1864 1957 | 
             
                    if result["updated_on_server"].empty? and result["conflicts"].empty? and result["deleted"].empty?
         | 
| 1865 | 
            -
                       | 
| 1866 | 
            -
                      log_end(0)
         | 
| 1958 | 
            +
                      log_message("Project is up to date", Thor::Shell::Color::GREEN, ((options["sync"] or sync) ? false : true))
         | 
| 1867 1959 | 
             
                      return true
         | 
| 1868 1960 | 
             
                    end
         | 
| 1869 1961 | 
             
                    # if result["added"].any? {|x| x.include? ".conflict"} or !result["conflicts"].empty?
         | 
| @@ -1879,106 +1971,149 @@ module Cnvrg | |
| 1879 1971 | 
             
                    #   exit(1)
         | 
| 1880 1972 | 
             
                    #   end
         | 
| 1881 1973 | 
             
                    update_count = 0
         | 
| 1882 | 
            -
                    update_total = result["updated_on_server"].size + result["conflicts"].size
         | 
| 1974 | 
            +
                    update_total = result["updated_on_server"].size + result["conflicts"].size + result["deleted"].size
         | 
| 1883 1975 |  | 
| 1884 1976 |  | 
| 1885 1977 | 
             
                    successful_changes = []
         | 
| 1886 1978 | 
             
                    if update_total ==1
         | 
| 1887 | 
            -
                       | 
| 1979 | 
            +
                      log_message("Downloading #{update_total} file", Thor::Shell::Color::BLUE, !options["sync"])
         | 
| 1888 1980 | 
             
                    elsif update_total == 0
         | 
| 1889 | 
            -
                       | 
| 1890 | 
            -
                      log_end(0)
         | 
| 1981 | 
            +
                      log_message("Project is up to date", Thor::Shell::Color::GREEN, !options["sync"])
         | 
| 1891 1982 | 
             
                      return true
         | 
| 1892 1983 | 
             
                    elsif options["verbose"]
         | 
| 1893 | 
            -
                       | 
| 1984 | 
            +
                      log_message("Downloading #{update_total} files", Thor::Shell::Color::BLUE)
         | 
| 1894 1985 | 
             
                    else
         | 
| 1895 | 
            -
                       | 
| 1896 | 
            -
             | 
| 1986 | 
            +
                      log_message("Syncing files", Thor::Shell::Color::BLUE, !options["sync"])
         | 
| 1897 1987 |  | 
| 1898 1988 | 
             
                    end
         | 
| 1989 | 
            +
                    parallel_options = {
         | 
| 1990 | 
            +
                        :progress => {
         | 
| 1991 | 
            +
                            :title => "Download Progress",
         | 
| 1992 | 
            +
                            :progress_mark => '=',
         | 
| 1993 | 
            +
                            :format => "%b>>%i| %p%% %t",
         | 
| 1994 | 
            +
                            :starting_at => 0,
         | 
| 1995 | 
            +
                            :total => result["updated_on_server"].size,
         | 
| 1996 | 
            +
                            :autofinish => true
         | 
| 1997 | 
            +
                        },
         | 
| 1998 | 
            +
                        in_processes: ParallelProcesses,
         | 
| 1999 | 
            +
                        in_thread: ParallelThreads
         | 
| 2000 | 
            +
                    }
         | 
| 2001 | 
            +
                    if !result["conflicts"].empty?
         | 
| 2002 | 
            +
                      begin
         | 
| 1899 2003 |  | 
| 1900 | 
            -
                    result["conflicts"].each do |f|
         | 
| 1901 | 
            -
                      relative_path = f.gsub(/^#{@project.local_path}/, "")
         | 
| 1902 | 
            -
                      if @files.download_file_s3(f, relative_path, project_home, commit_sha1=nil, conflict=true)
         | 
| 1903 | 
            -
                        successful_changes << relative_path
         | 
| 1904 | 
            -
                      end
         | 
| 1905 2004 |  | 
| 1906 | 
            -
             | 
| 1907 | 
            -
                    result["updated_on_server"].each do |f|
         | 
| 1908 | 
            -
                      relative_path = f.gsub(/^#{@project.local_path}/, "")
         | 
| 1909 | 
            -
                      if f.end_with? "/"
         | 
| 1910 | 
            -
                        # dir
         | 
| 1911 | 
            -
                        if @files.download_dir(f, relative_path, project_home)
         | 
| 1912 | 
            -
                          successful_changes << relative_path
         | 
| 2005 | 
            +
                        conflicts_result = Parallel.map(result["conflicts"], in_processes: ParallelProcesses, in_thread: ParallelThreads) do |f|
         | 
| 1913 2006 |  | 
| 2007 | 
            +
                          relative_path = f.gsub(/^#{@project.local_path}/, "")
         | 
| 2008 | 
            +
                          if @files.download_file_s3(f, relative_path, project_home, commit_sha1=nil, conflict=true)
         | 
| 2009 | 
            +
                            f
         | 
| 2010 | 
            +
                          else
         | 
| 2011 | 
            +
                            log_message("Couldn't download: #{f}", Thor::Shell::Color::RED)
         | 
| 2012 | 
            +
                            raise Parallel::Kill
         | 
| 2013 | 
            +
             | 
| 2014 | 
            +
                          end
         | 
| 1914 2015 | 
             
                        end
         | 
| 1915 | 
            -
                       | 
| 1916 | 
            -
             | 
| 1917 | 
            -
                         | 
| 1918 | 
            -
             | 
| 2016 | 
            +
                      rescue Interrupt
         | 
| 2017 | 
            +
             | 
| 2018 | 
            +
                        log_message("Couldn't download, Rolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 2019 | 
            +
             | 
| 2020 | 
            +
                        @files.revoke_download(result["conflicts"], [])
         | 
| 2021 | 
            +
                        exit(1)
         | 
| 2022 | 
            +
                      end
         | 
| 2023 | 
            +
                    end
         | 
| 2024 | 
            +
             | 
| 2025 | 
            +
             | 
| 2026 | 
            +
                    successful_changes += conflicts_result.to_a
         | 
| 2027 | 
            +
                    if !result["updated_on_server"].empty?
         | 
| 2028 | 
            +
                      begin
         | 
| 2029 | 
            +
                        updated_on_server_result = Parallel.map(result["updated_on_server"], parallel_options) do |f|
         | 
| 2030 | 
            +
             | 
| 2031 | 
            +
                          relative_path = f.gsub(/^#{@project.local_path}/, "")
         | 
| 2032 | 
            +
                          if f.end_with? "/"
         | 
| 2033 | 
            +
                            # dir
         | 
| 2034 | 
            +
                            if @files.download_dir(f, relative_path, project_home)
         | 
| 2035 | 
            +
                              f
         | 
| 2036 | 
            +
                            else
         | 
| 2037 | 
            +
                              log_message("Couldn't dcreate directory: #{f}", Thor::Shell::Color::RED)
         | 
| 2038 | 
            +
                              raise Parallel::Kill
         | 
| 2039 | 
            +
             | 
| 2040 | 
            +
             | 
| 2041 | 
            +
                            end
         | 
| 2042 | 
            +
             | 
| 2043 | 
            +
                          else
         | 
| 2044 | 
            +
                            # blob
         | 
| 2045 | 
            +
                            if @files.download_file_s3(f, relative_path, project_home)
         | 
| 2046 | 
            +
                              f
         | 
| 2047 | 
            +
                            else
         | 
| 2048 | 
            +
             | 
| 2049 | 
            +
             | 
| 2050 | 
            +
                              log_message("Couldn't download: #{f}", Thor::Shell::Color::RED)
         | 
| 2051 | 
            +
                              raise Parallel::Kill
         | 
| 2052 | 
            +
             | 
| 2053 | 
            +
             | 
| 2054 | 
            +
                            end
         | 
| 2055 | 
            +
                          end
         | 
| 2056 | 
            +
             | 
| 2057 | 
            +
             | 
| 1919 2058 | 
             
                        end
         | 
| 2059 | 
            +
                        successful_changes += updated_on_server_result.to_a
         | 
| 2060 | 
            +
                      rescue Interrupt
         | 
| 2061 | 
            +
                        log_message("Couldn't download, Rolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 2062 | 
            +
             | 
| 2063 | 
            +
                        @files.revoke_download(result["conflicts"], result["updated_on_server"])
         | 
| 2064 | 
            +
                        exit(1)
         | 
| 2065 | 
            +
             | 
| 1920 2066 | 
             
                      end
         | 
| 2067 | 
            +
                    end
         | 
| 2068 | 
            +
             | 
| 2069 | 
            +
                    deleted = result["deleted"].to_a
         | 
| 2070 | 
            +
                    delete_res = @files.delete_commit_files_local(deleted)
         | 
| 2071 | 
            +
                    if !delete_res
         | 
| 2072 | 
            +
                      log_message("Couldn't delete #{deleted.join(" ")}", Thor::Shell::Color::RED)
         | 
| 2073 | 
            +
                      log_message("Couldn't download, Rolling Back all changes.", Thor::Shell::Color::RED)
         | 
| 2074 | 
            +
             | 
| 2075 | 
            +
                      @files.revoke_download(result["conflicts"], result["updated_on_server"])
         | 
| 2076 | 
            +
                      exit(1)
         | 
| 1921 2077 |  | 
| 1922 2078 | 
             
                    end
         | 
| 2079 | 
            +
                    successful_changes += deleted
         | 
| 2080 | 
            +
             | 
| 2081 | 
            +
             | 
| 2082 | 
            +
                    successful_changes = successful_changes.select { |x| not x.nil? }
         | 
| 2083 | 
            +
             | 
| 1923 2084 | 
             
                    if update_total == successful_changes.size
         | 
| 1924 2085 | 
             
                      # update idx with latest commit
         | 
| 1925 2086 | 
             
                      @project.update_idx_with_commit!(commit)
         | 
| 1926 2087 | 
             
                      check = Helpers.checkmark()
         | 
| 1927 2088 |  | 
| 1928 2089 | 
             
                      if options["verbose"]
         | 
| 1929 | 
            -
                         | 
| 1930 | 
            -
                         | 
| 1931 | 
            -
                         | 
| 2090 | 
            +
                        log_message("#{check} Done, Downloaded:", Thor::Shell::Color::GREEN)
         | 
| 2091 | 
            +
                        log_message(successful_changes.join("\n"), Thor::Shell::Color::GREEN)
         | 
| 2092 | 
            +
                        log_message("Total of #{successful_changes.size} / #{update_total} files.", Thor::Shell::Color::GREEN)
         | 
| 1932 2093 | 
             
                      else
         | 
| 1933 | 
            -
                         | 
| 2094 | 
            +
                        log_message("#{check} Downloaded changes successfully", Thor::Shell::Color::GREEN, ((sync or options["sync"]) ? false : true))
         | 
| 1934 2095 | 
             
                      end
         | 
| 1935 2096 |  | 
| 1936 2097 |  | 
| 1937 | 
            -
                      log_end(0)
         | 
| 1938 2098 | 
             
                    end
         | 
| 1939 2099 | 
             
                  rescue => e
         | 
| 1940 | 
            -
                    log_end(-1)
         | 
| 1941 2100 |  | 
| 1942 | 
            -
                     | 
| 2101 | 
            +
                    log_message("Error occurred, \nAborting", Thor::Shell::Color::BLUE)
         | 
| 2102 | 
            +
                    log_error(e)
         | 
| 1943 2103 | 
             
                    if successful_changes.nil?
         | 
| 1944 2104 | 
             
                      exit(1)
         | 
| 1945 2105 | 
             
                    end
         | 
| 1946 | 
            -
                     | 
| 1947 | 
            -
             | 
| 1948 | 
            -
                      abs_path = "#{@project.local_path}/#{f}"
         | 
| 1949 | 
            -
                      filename = File.basename abs_path
         | 
| 1950 | 
            -
                      say "revoking #{filename}"
         | 
| 1951 | 
            -
                      if result["conflicts"].include? f
         | 
| 1952 | 
            -
                        @files.revoke_download_file(abs_path, f, filename, true)
         | 
| 1953 | 
            -
                      elsif result["updated_on_server"].include? f
         | 
| 1954 | 
            -
                        if File.directory? abs_path
         | 
| 1955 | 
            -
                          @files.revoke_download_dir(abs_path, f, project_home)
         | 
| 1956 | 
            -
                        else
         | 
| 1957 | 
            -
                          @files.revoke_download_file(project_home, abs_path, filename)
         | 
| 1958 | 
            -
                        end
         | 
| 1959 | 
            -
                      end
         | 
| 2106 | 
            +
                    begin
         | 
| 2107 | 
            +
                      @files.revoke_download(result["conflicts"], result["updated_on_server"])
         | 
| 1960 2108 | 
             
                    end
         | 
| 1961 2109 | 
             
                    exit(1)
         | 
| 1962 2110 | 
             
                  rescue SignalException
         | 
| 1963 | 
            -
                    log_end(-1)
         | 
| 1964 2111 | 
             
                    say "\nAborting", Thor::Shell::Color::BLUE
         | 
| 1965 2112 | 
             
                    if successful_changes.nil?
         | 
| 1966 2113 | 
             
                      exit(1)
         | 
| 1967 2114 | 
             
                    end
         | 
| 1968 | 
            -
                     | 
| 1969 | 
            -
             | 
| 1970 | 
            -
                      abs_path = "#{@project.local_path}/#{f}"
         | 
| 1971 | 
            -
                      filename = File.basename abs_path
         | 
| 1972 | 
            -
                      say "revoking #{filename}"
         | 
| 1973 | 
            -
                      if result["conflicts"].include? f
         | 
| 1974 | 
            -
                        @files.revoke_download_file(abs_path, f, filename, true)
         | 
| 1975 | 
            -
                      elsif result["updated_on_server"].include? f
         | 
| 1976 | 
            -
                        if File.directory? abs_path
         | 
| 1977 | 
            -
                          @files.revoke_download_dir(abs_path, f, project_home)
         | 
| 1978 | 
            -
                        else
         | 
| 1979 | 
            -
                          @files.revoke_download_file(project_home, abs_path, filename)
         | 
| 1980 | 
            -
                        end
         | 
| 1981 | 
            -
                      end
         | 
| 2115 | 
            +
                    begin
         | 
| 2116 | 
            +
                      @files.revoke_download(result["conflicts"], result["updated_on_server"])
         | 
| 1982 2117 | 
             
                    end
         | 
| 1983 2118 | 
             
                    exit(1)
         | 
| 1984 2119 | 
             
                  end
         | 
| @@ -2014,30 +2149,36 @@ module Cnvrg | |
| 2014 2149 | 
             
                      File.open(project_home + "/.cnvrg/idx.yml", "w+") { |f| f.write idx.to_yaml }
         | 
| 2015 2150 | 
             
                      current_tree = Dir.entries(".").reject { |file| file.start_with? '.' or file.eql? "__init__.py" or file.eql? "uwsgi.ini" }
         | 
| 2016 2151 |  | 
| 2017 | 
            -
                      response["result"]["tree"] | 
| 2152 | 
            +
                      jump_result = Parallel.map(response["result"]["tree"], in_processes: ParallelProcesses, in_thread: ParallelThreads) do |f|
         | 
| 2153 | 
            +
             | 
| 2018 2154 | 
             
                        relative_path = f[0].gsub(/^#{@project.local_path}/, "")
         | 
| 2019 2155 | 
             
                        if f[0].end_with? "/"
         | 
| 2020 2156 | 
             
                          # dir
         | 
| 2021 2157 | 
             
                          if @files.download_dir(f[0], relative_path, project_home)
         | 
| 2022 2158 | 
             
                            current_tree.delete(relative_path[0, relative_path.size-1])
         | 
| 2023 | 
            -
                             | 
| 2159 | 
            +
                            f[0]
         | 
| 2024 2160 | 
             
                          end
         | 
| 2025 2161 | 
             
                        else
         | 
| 2026 2162 | 
             
                          # blob
         | 
| 2027 2163 | 
             
                          if @files.download_file_s3(f[0], relative_path, project_home, commit_sha1=commit_sha1)
         | 
| 2028 2164 | 
             
                            current_tree.delete(relative_path)
         | 
| 2029 | 
            -
             | 
| 2030 | 
            -
                            successful_changes << relative_path
         | 
| 2165 | 
            +
                            f[0]
         | 
| 2031 2166 | 
             
                          end
         | 
| 2032 2167 | 
             
                        end
         | 
| 2168 | 
            +
             | 
| 2033 2169 | 
             
                      end
         | 
| 2170 | 
            +
                      successful_changes = jump_result.select { |x| not x.nil? }
         | 
| 2034 2171 | 
             
                    end
         | 
| 2172 | 
            +
             | 
| 2173 | 
            +
             | 
| 2035 2174 | 
             
                    FileUtils.rm_rf(current_tree)
         | 
| 2036 | 
            -
                     | 
| 2037 | 
            -
             | 
| 2175 | 
            +
                    log_message("Done. Jumped to #{commit_sha1} completed successfully", Thor::Shell::Color::GREEN)
         | 
| 2176 | 
            +
                  rescue => e
         | 
| 2177 | 
            +
                    log_message("Error occurred, Aborting", Thor::Shell::Color::RED)
         | 
| 2178 | 
            +
                    log_error(e)
         | 
| 2038 2179 | 
             
                  rescue SignalException
         | 
| 2039 | 
            -
             | 
| 2040 | 
            -
                     | 
| 2180 | 
            +
             | 
| 2181 | 
            +
                    exit(1)
         | 
| 2041 2182 | 
             
                  end
         | 
| 2042 2183 | 
             
                end
         | 
| 2043 2184 |  | 
| @@ -2083,13 +2224,14 @@ module Cnvrg | |
| 2083 2224 | 
             
                      end
         | 
| 2084 2225 |  | 
| 2085 2226 |  | 
| 2086 | 
            -
                       | 
| 2087 | 
            -
                      log_end(0)
         | 
| 2227 | 
            +
                      log_message("Done. Jumped to #{commit_sha1} completed successfully", Thor::Shell::Color::GREEN)
         | 
| 2088 2228 | 
             
                    end
         | 
| 2229 | 
            +
                  rescue => e
         | 
| 2230 | 
            +
                    log_message("Error occurred, Aborting", Thor::Shell::Color::RED)
         | 
| 2231 | 
            +
                    log_error(e)
         | 
| 2089 2232 |  | 
| 2090 2233 | 
             
                  rescue SignalException
         | 
| 2091 | 
            -
                     | 
| 2092 | 
            -
                    exi(1)
         | 
| 2234 | 
            +
                    exit(1)
         | 
| 2093 2235 | 
             
                  end
         | 
| 2094 2236 | 
             
                end
         | 
| 2095 2237 |  | 
| @@ -2100,11 +2242,9 @@ module Cnvrg | |
| 2100 2242 |  | 
| 2101 2243 | 
             
                def sync(direct=true)
         | 
| 2102 2244 | 
             
                  verify_logged_in(true) if direct
         | 
| 2103 | 
            -
                   | 
| 2104 | 
            -
             | 
| 2105 | 
            -
                   | 
| 2106 | 
            -
                    say 'Syncing project', Thor::Shell::Color::BLUE
         | 
| 2107 | 
            -
                  end
         | 
| 2245 | 
            +
                  log_start(__method__, args, options)
         | 
| 2246 | 
            +
                  log_message('Checking for new updates from remote version', Thor::Shell::Color::BLUE, options["verbose"])
         | 
| 2247 | 
            +
                  log_message('Syncing project', Thor::Shell::Color::BLUE, !options["verbose"])
         | 
| 2108 2248 |  | 
| 2109 2249 |  | 
| 2110 2250 | 
             
                  invoke :download, [], :new_branch => options["new_branch"], :verbose => options["verbose"], :sync => true
         | 
| @@ -2206,6 +2346,7 @@ module Cnvrg | |
| 2206 2346 | 
             
                method_option :ignore, :type => :string, :aliases => ["-i", "--ignore"], :desc => "ignore following files", :default => ""
         | 
| 2207 2347 | 
             
                method_option :remote, :type => :boolean, :aliases => ["--remote"], :default => false
         | 
| 2208 2348 | 
             
                method_option :gpu, :type => :boolean, :aliases => ["--gpu"], :default => false
         | 
| 2349 | 
            +
             | 
| 2209 2350 | 
             
                def exec(*cmd)
         | 
| 2210 2351 |  | 
| 2211 2352 | 
             
                  log = []
         | 
| @@ -2256,7 +2397,7 @@ module Cnvrg | |
| 2256 2397 | 
             
                      if image_proj and image_proj.is_docker
         | 
| 2257 2398 | 
             
                        container= image_proj.get_container
         | 
| 2258 2399 | 
             
                        if !container
         | 
| 2259 | 
            -
                           | 
| 2400 | 
            +
                          log_message("Couldn't create container with image #{image_proj.image_name}:#{image_proj.image_tag}", Thor::Shell::Color::RED)
         | 
| 2260 2401 | 
             
                          exit(1)
         | 
| 2261 2402 | 
             
                        end
         | 
| 2262 2403 |  | 
| @@ -2288,8 +2429,8 @@ module Cnvrg | |
| 2288 2429 | 
             
                    begin
         | 
| 2289 2430 | 
             
                      machine_activity = @exp.get_machine_activity(working_dir)
         | 
| 2290 2431 | 
             
                      @exp.start(cmd, platform, machine_name, start_commit, title, email_notification, machine_activity, script_path)
         | 
| 2291 | 
            -
                       | 
| 2292 | 
            -
                       | 
| 2432 | 
            +
                      log_message("Experiment's live results: #{Cnvrg::Helpers.remote_url}/#{@project.owner}/projects/#{@project.slug}/experiments/#{@exp.slug}", Thor::Shell::Color::GREEN)
         | 
| 2433 | 
            +
                      log_message("Running: #{cmd}\n", Thor::Shell::Color::BLUE)
         | 
| 2293 2434 | 
             
                      unless @exp.slug.nil?
         | 
| 2294 2435 | 
             
                        real = Time.now
         | 
| 2295 2436 | 
             
                        exp_success = true
         | 
| @@ -2303,7 +2444,7 @@ module Cnvrg | |
| 2303 2444 | 
             
                                cur_time = Time.now
         | 
| 2304 2445 | 
             
                                real_time= Time.now-real
         | 
| 2305 2446 |  | 
| 2306 | 
            -
                                cur_log = { | 
| 2447 | 
            +
                                cur_log = {time: cur_time,
         | 
| 2307 2448 | 
             
                                           message: line,
         | 
| 2308 2449 | 
             
                                           type: "stdout",
         | 
| 2309 2450 | 
             
                                           real: real_time
         | 
| @@ -2311,7 +2452,7 @@ module Cnvrg | |
| 2311 2452 | 
             
                                }
         | 
| 2312 2453 |  | 
| 2313 2454 |  | 
| 2314 | 
            -
             | 
| 2455 | 
            +
                                if print_log
         | 
| 2315 2456 | 
             
                                  puts cur_log
         | 
| 2316 2457 | 
             
                                end
         | 
| 2317 2458 | 
             
                                log << cur_log
         | 
| @@ -2323,7 +2464,7 @@ module Cnvrg | |
| 2323 2464 | 
             
                                        stats = usage_metrics_in_docker(docker_id)
         | 
| 2324 2465 | 
             
                                        cpu = stats[0]
         | 
| 2325 2466 | 
             
                                        memory = stats[1]
         | 
| 2326 | 
            -
                                        if | 
| 2467 | 
            +
                                        if is_on_gpu
         | 
| 2327 2468 | 
             
                                          gpu_stats = gpu_util
         | 
| 2328 2469 | 
             
                                          gpu_utilization = gpu_stats[0]
         | 
| 2329 2470 | 
             
                                          gpu_memory_util = gpu_stats[1]
         | 
| @@ -2334,9 +2475,9 @@ module Cnvrg | |
| 2334 2475 | 
             
                                      end
         | 
| 2335 2476 | 
             
                                      log.each do |l|
         | 
| 2336 2477 | 
             
                                        if remote and is_on_gpu
         | 
| 2337 | 
            -
                                          l.merge!(cpu:cpu,memory:memory, gpu_util:gpu_utilization,gpu_memory_util:gpu_memory_util)
         | 
| 2478 | 
            +
                                          l.merge!(cpu: cpu, memory: memory, gpu_util: gpu_utilization, gpu_memory_util: gpu_memory_util)
         | 
| 2338 2479 | 
             
                                        else
         | 
| 2339 | 
            -
                                          l.merge!(cpu:cpu,memory:memory)
         | 
| 2480 | 
            +
                                          l.merge!(cpu: cpu, memory: memory)
         | 
| 2340 2481 | 
             
                                        end
         | 
| 2341 2482 | 
             
                                      end
         | 
| 2342 2483 |  | 
| @@ -2351,8 +2492,10 @@ module Cnvrg | |
| 2351 2492 | 
             
                                    end
         | 
| 2352 2493 |  | 
| 2353 2494 | 
             
                                  end
         | 
| 2354 | 
            -
                                rescue
         | 
| 2355 | 
            -
             | 
| 2495 | 
            +
                                rescue => e
         | 
| 2496 | 
            +
             | 
| 2497 | 
            +
                                  log_message("Failed to upload ongoing results, continuing with experiment", Thor::Shell::Color::YELLOW)
         | 
| 2498 | 
            +
                                  log_error(e)
         | 
| 2356 2499 | 
             
                                end
         | 
| 2357 2500 |  | 
| 2358 2501 | 
             
                              end
         | 
| @@ -2367,22 +2510,23 @@ module Cnvrg | |
| 2367 2510 | 
             
                              end
         | 
| 2368 2511 |  | 
| 2369 2512 | 
             
                            rescue Errno::EIO => e
         | 
| 2370 | 
            -
                               | 
| 2371 | 
            -
             | 
| 2372 | 
            -
             | 
| 2513 | 
            +
                              log_error(e)
         | 
| 2514 | 
            +
             | 
| 2515 | 
            +
                                # break
         | 
| 2516 | 
            +
                            rescue Errno::ENOENT => e
         | 
| 2373 2517 |  | 
| 2374 2518 | 
             
                              exp_success = false
         | 
| 2375 2519 |  | 
| 2376 | 
            -
                               | 
| 2520 | 
            +
                              log_message("command \"#{cmd}\" couldn't be executed, verify command is valid", Thor::Shell::Color::RED)
         | 
| 2521 | 
            +
                              log_error(e)
         | 
| 2377 2522 | 
             
                            rescue PTY::ChildExited
         | 
| 2378 | 
            -
                              log_end(1, "proccess exited")
         | 
| 2379 2523 | 
             
                              exp_success = false
         | 
| 2380 | 
            -
                               | 
| 2524 | 
            +
                              log_message("The process exited!", Thor::Shell::Color::RED)
         | 
| 2381 2525 | 
             
                            rescue => e
         | 
| 2382 | 
            -
                              log_end(-1, e.message)
         | 
| 2383 2526 | 
             
                              res = @exp.end(log, 1, start_commit, cpu_average, memory_average)
         | 
| 2384 2527 |  | 
| 2385 | 
            -
                               | 
| 2528 | 
            +
                              log_message("Error occurred,aborting", Thor::Shell::Color::RED)
         | 
| 2529 | 
            +
                              log_error(e)
         | 
| 2386 2530 | 
             
                              exit(0)
         | 
| 2387 2531 | 
             
                            end
         | 
| 2388 2532 | 
             
                            ::Process.wait pid
         | 
| @@ -2396,21 +2540,19 @@ module Cnvrg | |
| 2396 2540 | 
             
                              if !Cnvrg::Helpers.internet_connection?
         | 
| 2397 2541 | 
             
                                wait_offline = agree "Seems like you're offline, wait until you're back online?", Thor::Shell::Color::YELLOW
         | 
| 2398 2542 | 
             
                                if wait_offline
         | 
| 2399 | 
            -
                                   | 
| 2543 | 
            +
                                  log_message("Waiting until your'e online..", Thor::Shell::Color::BLUE)
         | 
| 2400 2544 | 
             
                                  while !Cnvrg::Helpers.internet_connection?
         | 
| 2401 2545 | 
             
                                  end
         | 
| 2402 2546 | 
             
                                  exit_status = 0
         | 
| 2403 2547 | 
             
                                else
         | 
| 2404 | 
            -
                                   | 
| 2405 | 
            -
                                  log_end(1, "experiment has failed,computer is offline")
         | 
| 2548 | 
            +
                                  log_message("Experiment has failed, your'e computer is offline", Thor::Shell::Color::RED)
         | 
| 2406 2549 | 
             
                                  exit(0)
         | 
| 2407 2550 | 
             
                                end
         | 
| 2408 2551 | 
             
                              else
         | 
| 2409 2552 |  | 
| 2410 2553 | 
             
                                end_commit = @project.last_local_commit
         | 
| 2411 2554 | 
             
                                res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
         | 
| 2412 | 
            -
                                 | 
| 2413 | 
            -
                                log_end(1, "experiment has failed")
         | 
| 2555 | 
            +
                                log_message("Experiment has failed, look at the log for more details or run cnvrg exec --log", Thor::Shell::Color::RED)
         | 
| 2414 2556 | 
             
                                exit(0)
         | 
| 2415 2557 | 
             
                              end
         | 
| 2416 2558 |  | 
| @@ -2427,15 +2569,15 @@ module Cnvrg | |
| 2427 2569 |  | 
| 2428 2570 | 
             
                            res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
         | 
| 2429 2571 | 
             
                            check = Helpers.checkmark()
         | 
| 2430 | 
            -
                             | 
| 2431 | 
            -
                            log_end(0)
         | 
| 2572 | 
            +
                            log_message("#{check} Done. Experiment's results were updated!", Thor::Shell::Color::GREEN)
         | 
| 2432 2573 | 
             
                          end
         | 
| 2433 2574 | 
             
                        rescue => e
         | 
| 2434 | 
            -
                          log_end(-1, e.message)
         | 
| 2435 2575 | 
             
                          if container
         | 
| 2436 2576 | 
             
                            container.stop()
         | 
| 2437 2577 | 
             
                          end
         | 
| 2438 | 
            -
                           | 
| 2578 | 
            +
                          log_message("Couldn't run #{cmd}, check your input parameters", Thor::Shell::Color::RED)
         | 
| 2579 | 
            +
                          log_error(e)
         | 
| 2580 | 
            +
             | 
| 2439 2581 | 
             
                          exit(1)
         | 
| 2440 2582 | 
             
                        end
         | 
| 2441 2583 |  | 
| @@ -2445,7 +2587,6 @@ module Cnvrg | |
| 2445 2587 | 
             
                    end
         | 
| 2446 2588 | 
             
                  rescue SignalException
         | 
| 2447 2589 | 
             
                    exit_status = -1
         | 
| 2448 | 
            -
                    log_end(-1)
         | 
| 2449 2590 | 
             
                    end_commit = @project.last_local_commit
         | 
| 2450 2591 |  | 
| 2451 2592 | 
             
                    res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
         | 
| @@ -2488,7 +2629,7 @@ module Cnvrg | |
| 2488 2629 | 
             
                    start_commit = @project.last_local_commit
         | 
| 2489 2630 | 
             
                    cmd = cmd.join("\s")
         | 
| 2490 2631 |  | 
| 2491 | 
            -
                     | 
| 2632 | 
            +
                    log_message("Running: #{cmd}\n", Thor::Shell::Color::BLUE)
         | 
| 2492 2633 |  | 
| 2493 2634 | 
             
                    @exp = Experiment.new(@project.owner, @project.slug)
         | 
| 2494 2635 | 
             
                    machine_activity = @exp.get_machine_activity(project_home)
         | 
| @@ -2540,7 +2681,7 @@ module Cnvrg | |
| 2540 2681 |  | 
| 2541 2682 | 
             
                                  end
         | 
| 2542 2683 | 
             
                                rescue
         | 
| 2543 | 
            -
                                   | 
| 2684 | 
            +
                                  log_message("Failed to upload ongoing results, continuing with experiment", Thor::Shell::Color::YELLOW)
         | 
| 2544 2685 | 
             
                                end
         | 
| 2545 2686 |  | 
| 2546 2687 | 
             
                              end
         | 
| @@ -2557,18 +2698,16 @@ module Cnvrg | |
| 2557 2698 | 
             
                            rescue Errno::EIO => e
         | 
| 2558 2699 | 
             
                              break
         | 
| 2559 2700 | 
             
                            rescue Errno::ENOENT
         | 
| 2560 | 
            -
                              log_end(1, "command #{cmd} isn't valid")
         | 
| 2561 2701 |  | 
| 2562 2702 | 
             
                              exp_success = false
         | 
| 2563 2703 |  | 
| 2564 | 
            -
                               | 
| 2704 | 
            +
                              log_message("command \"#{cmd}\" couldn't be executed, verify command is valid", Thor::Shell::Color::RED)
         | 
| 2565 2705 | 
             
                            rescue PTY::ChildExited
         | 
| 2566 | 
            -
                              log_end(1, "proccess exited")
         | 
| 2567 2706 | 
             
                              exp_success = false
         | 
| 2568 | 
            -
                               | 
| 2707 | 
            +
                              log_message("The process exited!", Thor::Shell::Color::RED)
         | 
| 2569 2708 | 
             
                            rescue => e
         | 
| 2570 | 
            -
                               | 
| 2571 | 
            -
                               | 
| 2709 | 
            +
                              log_message("Error occurred, aborting", Thor::Shell::Color::RED)
         | 
| 2710 | 
            +
                              log_error(e)
         | 
| 2572 2711 | 
             
                              exit(0)
         | 
| 2573 2712 | 
             
                            end
         | 
| 2574 2713 | 
             
                            ::Process.wait pid
         | 
| @@ -2582,13 +2721,12 @@ module Cnvrg | |
| 2582 2721 | 
             
                              if !Cnvrg::Helpers.internet_connection?
         | 
| 2583 2722 | 
             
                                wait_offline = agree "Seems like you're offline, wait until your'e back online?", Thor::Shell::Color::YELLOW
         | 
| 2584 2723 | 
             
                                if wait_offline
         | 
| 2585 | 
            -
                                   | 
| 2724 | 
            +
                                  log_message("Waiting until your'e online..", Thor::Shell::Color::BLUE)
         | 
| 2586 2725 | 
             
                                  while !Cnvrg::Helpers.internet_connection?
         | 
| 2587 2726 | 
             
                                  end
         | 
| 2588 2727 | 
             
                                  exit_status = 0
         | 
| 2589 2728 | 
             
                                else
         | 
| 2590 | 
            -
                                   | 
| 2591 | 
            -
                                  log_end(1, "experiment has failed,computer is offline")
         | 
| 2729 | 
            +
                                  log_message("Experiment has failed, your'e computer is offline", Thor::Shell::Color::RED)
         | 
| 2592 2730 | 
             
                                  exit(0)
         | 
| 2593 2731 | 
             
                                end
         | 
| 2594 2732 | 
             
                              else
         | 
| @@ -2596,18 +2734,17 @@ module Cnvrg | |
| 2596 2734 | 
             
                                end_commit = @project.last_local_commit
         | 
| 2597 2735 | 
             
                                res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
         | 
| 2598 2736 | 
             
                                @image.update_image_activity(@project.last_local_commit, @exp.slug)
         | 
| 2599 | 
            -
                                 | 
| 2600 | 
            -
                                log_end(1, "experiment has failed")
         | 
| 2737 | 
            +
                                log_message("Experiment has failed, look at the log for more details or run cnvrg exec --log", Thor::Shell::Color::RED)
         | 
| 2601 2738 | 
             
                                exit(0)
         | 
| 2602 2739 | 
             
                              end
         | 
| 2603 2740 |  | 
| 2604 2741 | 
             
                            end
         | 
| 2605 2742 | 
             
                            if sync_after
         | 
| 2606 | 
            -
                               | 
| 2743 | 
            +
                              log_message("Syncing project after running", Thor::Shell::Color::BLUE)
         | 
| 2607 2744 | 
             
                              # Sync after run
         | 
| 2608 2745 | 
             
                              download()
         | 
| 2609 2746 | 
             
                              upload()
         | 
| 2610 | 
            -
                               | 
| 2747 | 
            +
                              log_message("Done Syncing", Thor::Shell::Color::BLUE)
         | 
| 2611 2748 | 
             
                            end
         | 
| 2612 2749 | 
             
                            end_commit = @project.last_local_commit
         | 
| 2613 2750 |  | 
| @@ -2615,12 +2752,11 @@ module Cnvrg | |
| 2615 2752 | 
             
                            @image.update_image_activity(@project.last_local_commit, @exp.slug)
         | 
| 2616 2753 |  | 
| 2617 2754 | 
             
                            check = Helpers.checkmark()
         | 
| 2618 | 
            -
                             | 
| 2619 | 
            -
                            log_end(0)
         | 
| 2755 | 
            +
                            log_message("#{check} Done. Experiment's result: #{Cnvrg::Helpers.remote_url}/#{@project.owner}/projects/#{@project.slug}/experiments/#{@exp.slug}", Thor::Shell::Color::GREEN)
         | 
| 2620 2756 | 
             
                          end
         | 
| 2621 2757 | 
             
                        rescue => e
         | 
| 2622 | 
            -
                           | 
| 2623 | 
            -
                           | 
| 2758 | 
            +
                          log_message("Couldn't run #{cmd}, check your input parameters", Thor::Shell::Color::RED)
         | 
| 2759 | 
            +
                          log_error(e)
         | 
| 2624 2760 | 
             
                          exit(1)
         | 
| 2625 2761 | 
             
                        end
         | 
| 2626 2762 |  | 
| @@ -2628,9 +2764,12 @@ module Cnvrg | |
| 2628 2764 | 
             
                      end
         | 
| 2629 2765 |  | 
| 2630 2766 | 
             
                    end
         | 
| 2767 | 
            +
                  rescue => e
         | 
| 2768 | 
            +
                    log_message("Error occurred, Aborting", Thor::Shell::Color::RED)
         | 
| 2769 | 
            +
                    log_error(e)
         | 
| 2770 | 
            +
             | 
| 2631 2771 | 
             
                  rescue SignalException
         | 
| 2632 2772 | 
             
                    exit_status = -1
         | 
| 2633 | 
            -
                    log_end(-1)
         | 
| 2634 2773 | 
             
                    end_commit = @project.last_local_commit
         | 
| 2635 2774 | 
             
                    if !@exp.nil?
         | 
| 2636 2775 |  | 
| @@ -2684,7 +2823,7 @@ module Cnvrg | |
| 2684 2823 | 
             
                      elsif time[2].downcase().start_with? "days"
         | 
| 2685 2824 | 
             
                        new = local + (time[1].to_i * 3600 * 24)
         | 
| 2686 2825 | 
             
                      else
         | 
| 2687 | 
            -
                         | 
| 2826 | 
            +
                        log_message("Could not undersatnd when to schedule experiment", Thor::Shell::Color::RED)
         | 
| 2688 2827 | 
             
                        exit(1)
         | 
| 2689 2828 | 
             
                      end
         | 
| 2690 2829 | 
             
                      new_time = new.to_s
         | 
| @@ -2738,13 +2877,13 @@ module Cnvrg | |
| 2738 2877 | 
             
                      image_slug = image.image_slug
         | 
| 2739 2878 | 
             
                    end
         | 
| 2740 2879 |  | 
| 2741 | 
            -
                    invoke :sync, [false], [] | 
| 2880 | 
            +
                    invoke :sync, [false], [] if sync_before
         | 
| 2742 2881 |  | 
| 2743 2882 |  | 
| 2744 2883 | 
             
                    if command.include? "'"
         | 
| 2745 2884 | 
             
                      oc = command.to_enum(:scan, /'/).map { Regexp.last_match }
         | 
| 2746 2885 | 
             
                      pairs = oc.enum_for(:each_slice, 2).to_a
         | 
| 2747 | 
            -
                      pairs.each_with_index do |p,i|
         | 
| 2886 | 
            +
                      pairs.each_with_index do |p, i|
         | 
| 2748 2887 | 
             
                        add=0
         | 
| 2749 2888 | 
             
                        if i!=0
         | 
| 2750 2889 | 
             
                          add=2*i
         | 
| @@ -2755,7 +2894,7 @@ module Cnvrg | |
| 2755 2894 |  | 
| 2756 2895 |  | 
| 2757 2896 | 
             
                    end
         | 
| 2758 | 
            -
                     | 
| 2897 | 
            +
                    log_message("Running remote experiment", Thor::Shell::Color::BLUE)
         | 
| 2759 2898 | 
             
                    exp = Experiment.new(project.owner, project.slug)
         | 
| 2760 2899 | 
             
                    res = exp.exec_remote(command, commit_to_run, instance_type, image_slug, schedule, local_timestamp, grid, path_to_cmd, data, data_commit)
         | 
| 2761 2900 | 
             
                    if Cnvrg::CLI.is_response_success(res)
         | 
| @@ -2796,16 +2935,18 @@ module Cnvrg | |
| 2796 2935 | 
             
                        str = "Running grid search. #{Cnvrg::Helpers.remote_url}/#{project.owner}/projects/#{project.slug}/experiments?grid=#{res["result"]["exp_url"]} "
         | 
| 2797 2936 | 
             
                      end
         | 
| 2798 2937 |  | 
| 2799 | 
            -
                       | 
| 2938 | 
            +
                      log_message(str, Thor::Shell::Color::GREEN)
         | 
| 2800 2939 |  | 
| 2801 2940 | 
             
                      exit(0)
         | 
| 2802 2941 | 
             
                      # end
         | 
| 2803 2942 | 
             
                    end
         | 
| 2804 2943 |  | 
| 2944 | 
            +
                  rescue => e
         | 
| 2945 | 
            +
                    log_message("Error occurred, Aborting", Thor::Shell::Color::RED)
         | 
| 2946 | 
            +
                    log_error(e)
         | 
| 2805 2947 |  | 
| 2806 2948 | 
             
                  rescue SignalException
         | 
| 2807 2949 | 
             
                    exit_status = -1
         | 
| 2808 | 
            -
                    log_end(-1)
         | 
| 2809 2950 | 
             
                    end_commit = project.last_local_commit
         | 
| 2810 2951 |  | 
| 2811 2952 | 
             
                    res = @exp.end(log, exit_status, end_commit, "", "")
         | 
| @@ -2852,7 +2993,7 @@ module Cnvrg | |
| 2852 2993 | 
             
                    begin
         | 
| 2853 2994 | 
             
                      num_workers = workers.to_i
         | 
| 2854 2995 | 
             
                    rescue
         | 
| 2855 | 
            -
                       | 
| 2996 | 
            +
                      log_message("Number of workers should be a number between 1 to 10", Thor::Shell::Color::RED)
         | 
| 2856 2997 | 
             
                      exit(1)
         | 
| 2857 2998 | 
             
                    end
         | 
| 2858 2999 | 
             
                    file_as_input = options["file_as_input"] || false
         | 
| @@ -2910,16 +3051,18 @@ module Cnvrg | |
| 2910 3051 | 
             
                      #   end
         | 
| 2911 3052 | 
             
                      # else
         | 
| 2912 3053 | 
             
                      check = Helpers.checkmark()
         | 
| 2913 | 
            -
                       | 
| 3054 | 
            +
                      log_message("#{check} Deployment process is on: #{Cnvrg::Helpers.remote_url}/#{project.owner}/projects/#{project.slug}/deploys/show/#{res["result"]["deploy_slug"]}", Thor::Shell::Color::GREEN)
         | 
| 2914 3055 |  | 
| 2915 3056 | 
             
                      exit(0)
         | 
| 2916 3057 | 
             
                      # end
         | 
| 2917 3058 | 
             
                    end
         | 
| 3059 | 
            +
                  rescue => e
         | 
| 3060 | 
            +
                    log_message("Error occurred, Aborting", Thor::Shell::Color::RED)
         | 
| 3061 | 
            +
                    log_error(e)
         | 
| 2918 3062 |  | 
| 2919 3063 |  | 
| 2920 3064 | 
             
                  rescue SignalException
         | 
| 2921 3065 | 
             
                    exit_status = -1
         | 
| 2922 | 
            -
                    log_end(-1)
         | 
| 2923 3066 | 
             
                    end_commit = project.last_local_commit
         | 
| 2924 3067 |  | 
| 2925 3068 | 
             
                    res = @exp.end(log, exit_status, end_commit, "", "")
         | 
| @@ -3017,7 +3160,7 @@ module Cnvrg | |
| 3017 3160 | 
             
                    res = @image.remote_notebook(notebook_dir, instance_type, kernel, data, data_commit)
         | 
| 3018 3161 | 
             
                    if Cnvrg::CLI.is_response_success(res)
         | 
| 3019 3162 | 
             
                      if res["result"]["machine"] == -1
         | 
| 3020 | 
            -
                         | 
| 3163 | 
            +
                        log_message("There are no available machines", Thor::Shell::Color::BLUE)
         | 
| 3021 3164 | 
             
                        create = yes? "create new machine?", Thor::Shell::Color::YELLOW
         | 
| 3022 3165 | 
             
                        if create
         | 
| 3023 3166 | 
             
                          res = Cnvrg::API.request("users/#{@image.owner}/machines/list", 'GET')
         | 
| @@ -3030,22 +3173,22 @@ module Cnvrg | |
| 3030 3173 | 
             
                                if !url.nil? and !url.empty?
         | 
| 3031 3174 | 
             
                                  check = Helpers.checkmark()
         | 
| 3032 3175 |  | 
| 3033 | 
            -
                                   | 
| 3176 | 
            +
                                  log_message("#{check} Notebook server started successfully", Thor::Shell::Color::GREEN)
         | 
| 3034 3177 | 
             
                                  Launchy.open(url)
         | 
| 3035 3178 | 
             
                                else
         | 
| 3036 | 
            -
                                   | 
| 3179 | 
            +
                                  log_message("Couldn't run notebook server", Thor::Shell::Color::RED)
         | 
| 3037 3180 | 
             
                                end
         | 
| 3038 3181 | 
             
                                exit(0)
         | 
| 3039 3182 | 
             
                              end
         | 
| 3040 3183 | 
             
                            end
         | 
| 3041 3184 | 
             
                          else
         | 
| 3042 | 
            -
                             | 
| 3185 | 
            +
                            log_message("No machines are avilable", Thor::Shell::Color::RED)
         | 
| 3043 3186 | 
             
                            exit(0)
         | 
| 3044 3187 | 
             
                          end
         | 
| 3045 3188 |  | 
| 3046 3189 |  | 
| 3047 3190 | 
             
                        else
         | 
| 3048 | 
            -
                           | 
| 3191 | 
            +
                          log_message("Can't execute command on remote machine with local image", Thor::Shell::Color::RED)
         | 
| 3049 3192 | 
             
                          exit(1)
         | 
| 3050 3193 |  | 
| 3051 3194 | 
             
                        end
         | 
| @@ -3053,17 +3196,18 @@ module Cnvrg | |
| 3053 3196 | 
             
                        note_url = res["result"]["notebook_url"]
         | 
| 3054 3197 | 
             
                        @image.set_note_url(note_url)
         | 
| 3055 3198 | 
             
                        check = Helpers.checkmark()
         | 
| 3056 | 
            -
                         | 
| 3199 | 
            +
                        log_message("#{check} Notebook is on: #{Cnvrg::Helpers.remote_url}/#{@image.owner}/projects/#{@image.project_slug}/notebook_sessions/show/#{note_url}", Thor::Shell::Color::GREEN)
         | 
| 3057 3200 | 
             
                        # Launchy.open(url)
         | 
| 3058 3201 |  | 
| 3059 3202 | 
             
                        exit(0)
         | 
| 3060 3203 | 
             
                      end
         | 
| 3061 3204 | 
             
                    end
         | 
| 3062 | 
            -
             | 
| 3205 | 
            +
                  rescue => e
         | 
| 3206 | 
            +
                    log_message("Error occurred, Aborting", Thor::Shell::Color::RED)
         | 
| 3207 | 
            +
                    log_error(e)
         | 
| 3063 3208 |  | 
| 3064 3209 | 
             
                  rescue SignalException
         | 
| 3065 3210 | 
             
                    exit_status = -1
         | 
| 3066 | 
            -
                    log_end(-1)
         | 
| 3067 3211 | 
             
                    end_commit = @project.last_local_commit
         | 
| 3068 3212 |  | 
| 3069 3213 | 
             
                    res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
         | 
| @@ -3073,7 +3217,7 @@ module Cnvrg | |
| 3073 3217 | 
             
                  end
         | 
| 3074 3218 | 
             
                end
         | 
| 3075 3219 |  | 
| 3076 | 
            -
                desc 'search_libraries', 'search if  libraries installed'
         | 
| 3220 | 
            +
                desc 'search_libraries', 'search if  libraries installed', :hide => true
         | 
| 3077 3221 |  | 
| 3078 3222 | 
             
                def search_libraries(library)
         | 
| 3079 3223 | 
             
                  begin
         | 
| @@ -3135,7 +3279,7 @@ module Cnvrg | |
| 3135 3279 | 
             
                  end
         | 
| 3136 3280 | 
             
                end
         | 
| 3137 3281 |  | 
| 3138 | 
            -
                desc 'show_libraries', 'show system libraries installed'
         | 
| 3282 | 
            +
                desc 'show_libraries', 'show system libraries installed', :hide => true
         | 
| 3139 3283 | 
             
                method_option :system, :type => :boolean, :aliases => ["-s", "--s"], :default => false, :desc => "show also system libraries installed"
         | 
| 3140 3284 |  | 
| 3141 3285 | 
             
                def show_libraries
         | 
| @@ -3194,7 +3338,7 @@ module Cnvrg | |
| 3194 3338 | 
             
                end
         | 
| 3195 3339 |  | 
| 3196 3340 |  | 
| 3197 | 
            -
                desc 'run_notebook', 'Starts a new notebook environment'
         | 
| 3341 | 
            +
                desc 'run_notebook', 'Starts a new notebook environment', :hide => true
         | 
| 3198 3342 | 
             
                method_option :notebook_dir, :type => :string, :aliases => ["-n", "--n"], :default => "", :desc => "relative path to notebook dir from current directory"
         | 
| 3199 3343 | 
             
                method_option :remote, :type => :boolean, :aliases => ["-r", "--r"], :default => false, :desc => "run on remote machine"
         | 
| 3200 3344 | 
             
                method_option :kernel, :type => :string, :aliases => ["-k", "--k"], :default => "", :desc => "default kernel"
         | 
| @@ -3343,7 +3487,7 @@ module Cnvrg | |
| 3343 3487 |  | 
| 3344 3488 | 
             
                  rescue => e
         | 
| 3345 3489 | 
             
                    log_end(-1, e.message)
         | 
| 3346 | 
            -
                    say "Error  | 
| 3490 | 
            +
                    say "Error occurred, aborting", Thor::Shell::Color::RED
         | 
| 3347 3491 | 
             
                    if container
         | 
| 3348 3492 | 
             
                      container.stop()
         | 
| 3349 3493 | 
             
                    end
         | 
| @@ -3380,10 +3524,10 @@ module Cnvrg | |
| 3380 3524 | 
             
                    project_dir = is_cnvrg_dir()
         | 
| 3381 3525 |  | 
| 3382 3526 |  | 
| 3383 | 
            -
                     | 
| 3527 | 
            +
                    log_message('Checking for new updates from remote version', Thor::Shell::Color::BLUE, options["verbose"])
         | 
| 3384 3528 | 
             
                    invoke :sync, [false], :verbose => options["verbose"]
         | 
| 3385 3529 |  | 
| 3386 | 
            -
                     | 
| 3530 | 
            +
                    log_message("Done Syncing", Thor::Shell::Color::BLUE, options["verbose"])
         | 
| 3387 3531 |  | 
| 3388 3532 |  | 
| 3389 3533 | 
             
                    @project = Project.new(project_dir)
         | 
| @@ -3402,37 +3546,34 @@ module Cnvrg | |
| 3402 3546 | 
             
                      if !container
         | 
| 3403 3547 | 
             
                        check = Helpers.checkmark()
         | 
| 3404 3548 |  | 
| 3405 | 
            -
                         | 
| 3549 | 
            +
                        log_message("#{check} Notebook server stopped successfully", Thor::Shell::Color::GREEN)
         | 
| 3406 3550 | 
             
                        exit(0)
         | 
| 3407 3551 | 
             
                      end
         | 
| 3408 3552 |  | 
| 3409 3553 |  | 
| 3410 | 
            -
                       | 
| 3554 | 
            +
                      log_message("Stopping notebook server...", Thor::Shell::Color::BLUE)
         | 
| 3411 3555 |  | 
| 3412 3556 | 
             
                      check = Helpers.checkmark()
         | 
| 3413 3557 | 
             
                      image.remove_note_slug()
         | 
| 3414 3558 | 
             
                      container.stop()
         | 
| 3415 3559 |  | 
| 3416 | 
            -
                       | 
| 3417 | 
            -
                      log_end(0)
         | 
| 3560 | 
            +
                      log_message("#{check} Notebook server stopped successfully", Thor::Shell::Color::GREEN)
         | 
| 3418 3561 |  | 
| 3419 3562 | 
             
                      exit(0)
         | 
| 3420 3563 | 
             
                    elsif remote
         | 
| 3421 | 
            -
                       | 
| 3564 | 
            +
                      log_message("Stopping notebook server...", Thor::Shell::Color::BLUE)
         | 
| 3422 3565 | 
             
                      check = Helpers.checkmark()
         | 
| 3423 3566 |  | 
| 3424 | 
            -
                       | 
| 3425 | 
            -
                      log_end(0)
         | 
| 3567 | 
            +
                      log_message("#{check} Notebook server stopped successfully", Thor::Shell::Color::GREEN)
         | 
| 3426 3568 | 
             
                      exit(0)
         | 
| 3427 3569 | 
             
                    end
         | 
| 3428 3570 | 
             
                  rescue => e
         | 
| 3429 | 
            -
                     | 
| 3430 | 
            -
                     | 
| 3571 | 
            +
                    log_message("Error occurd, aborting", Thor::Shell::Color::RED)
         | 
| 3572 | 
            +
                    log_error(e)
         | 
| 3431 3573 | 
             
                    if container
         | 
| 3432 3574 | 
             
                      container.stop()
         | 
| 3433 3575 | 
             
                    end
         | 
| 3434 3576 | 
             
                  rescue SignalException
         | 
| 3435 | 
            -
                    log_end(-1)
         | 
| 3436 3577 | 
             
                    say "Aborting"
         | 
| 3437 3578 | 
             
                    exit(1)
         | 
| 3438 3579 | 
             
                  end
         | 
| @@ -3441,7 +3582,7 @@ module Cnvrg | |
| 3441 3582 | 
             
                end
         | 
| 3442 3583 |  | 
| 3443 3584 |  | 
| 3444 | 
            -
                desc 'install_system_libraries', 'Install libraries'
         | 
| 3585 | 
            +
                desc 'install_system_libraries', 'Install libraries', :hide => true
         | 
| 3445 3586 |  | 
| 3446 3587 | 
             
                def install_system_libraries(*command_to_run)
         | 
| 3447 3588 | 
             
                  begin
         | 
| @@ -3476,7 +3617,7 @@ module Cnvrg | |
| 3476 3617 | 
             
                    log_end(0)
         | 
| 3477 3618 | 
             
                  rescue => e
         | 
| 3478 3619 | 
             
                    log_end(-1, e.message)
         | 
| 3479 | 
            -
                    say "Error  | 
| 3620 | 
            +
                    say "Error occurred, aborting"
         | 
| 3480 3621 | 
             
                    if container
         | 
| 3481 3622 | 
             
                      container.stop()
         | 
| 3482 3623 | 
             
                    end
         | 
| @@ -3491,7 +3632,7 @@ module Cnvrg | |
| 3491 3632 |  | 
| 3492 3633 | 
             
                end
         | 
| 3493 3634 |  | 
| 3494 | 
            -
                desc 'install_libraries', 'Install libraries'
         | 
| 3635 | 
            +
                desc 'install_libraries', 'Install libraries', :hide => true
         | 
| 3495 3636 | 
             
                method_option :requirement, :type => :string, :aliases => ["-r", "--r"], :default => "", :desc => "Install from the given requirements file"
         | 
| 3496 3637 |  | 
| 3497 3638 | 
             
                def install_python_libraries(*lib)
         | 
| @@ -3538,7 +3679,7 @@ module Cnvrg | |
| 3538 3679 | 
             
                    log_end(0)
         | 
| 3539 3680 | 
             
                  rescue => e
         | 
| 3540 3681 | 
             
                    log_end(-1, e.message)
         | 
| 3541 | 
            -
                    say "Error  | 
| 3682 | 
            +
                    say "Error occurred, aborting"
         | 
| 3542 3683 | 
             
                    if container
         | 
| 3543 3684 | 
             
                      container.stop()
         | 
| 3544 3685 | 
             
                    end
         | 
| @@ -3558,121 +3699,117 @@ module Cnvrg | |
| 3558 3699 | 
             
                method_option :gpu, :type => :boolean, :aliases => ["--gpu"], :default => false
         | 
| 3559 3700 | 
             
                method_option :gpuxl, :type => :boolean, :aliases => ["--gpuxl"], :default => false
         | 
| 3560 3701 | 
             
                method_option :gpuxxl, :type => :boolean, :aliases => ["--gpuxxl"], :default => false
         | 
| 3561 | 
            -
                method_option :image, :type => :string, :aliases => ["-i","--image"], :default => ""
         | 
| 3562 | 
            -
                method_option :public, :type => :boolean, :aliases => ["-p","--public"], :default => false
         | 
| 3563 | 
            -
                method_option :base, :type => :boolean, :aliases => ["-b","--base"], :default => false
         | 
| 3702 | 
            +
                method_option :image, :type => :string, :aliases => ["-i", "--image"], :default => ""
         | 
| 3703 | 
            +
                method_option :public, :type => :boolean, :aliases => ["-p", "--public"], :default => false
         | 
| 3704 | 
            +
                method_option :base, :type => :boolean, :aliases => ["-b", "--base"], :default => false
         | 
| 3564 3705 | 
             
                method_option :python3, :type => :boolean, :aliases => ["--python3"], :default => false
         | 
| 3565 3706 | 
             
                method_option :docker_path, :type => :string, :aliases => ["--docker_path"], :default => ""
         | 
| 3566 3707 |  | 
| 3567 3708 |  | 
| 3568 | 
            -
                desc 'create_custom_image', 'run commands inside containers', :hide=>true
         | 
| 3709 | 
            +
                desc 'create_custom_image', 'run commands inside containers', :hide => true
         | 
| 3569 3710 |  | 
| 3570 3711 | 
             
                def build_image(image_name)
         | 
| 3571 3712 | 
             
                  begin
         | 
| 3572 | 
            -
             | 
| 3573 | 
            -
             | 
| 3574 | 
            -
             | 
| 3575 | 
            -
             | 
| 3576 | 
            -
             | 
| 3577 | 
            -
             | 
| 3578 | 
            -
             | 
| 3579 | 
            -
             | 
| 3580 | 
            -
             | 
| 3581 | 
            -
             | 
| 3582 | 
            -
             | 
| 3583 | 
            -
             | 
| 3584 | 
            -
             | 
| 3585 | 
            -
             | 
| 3586 | 
            -
             | 
| 3587 | 
            -
             | 
| 3588 | 
            -
             | 
| 3589 | 
            -
             | 
| 3590 | 
            -
             | 
| 3591 | 
            -
             | 
| 3592 | 
            -
             | 
| 3593 | 
            -
             | 
| 3594 | 
            -
             | 
| 3595 | 
            -
             | 
| 3596 | 
            -
             | 
| 3597 | 
            -
             | 
| 3598 | 
            -
             | 
| 3599 | 
            -
             | 
| 3600 | 
            -
             | 
| 3601 | 
            -
             | 
| 3602 | 
            -
             | 
| 3603 | 
            -
                  end
         | 
| 3713 | 
            +
                    verify_logged_in(false)
         | 
| 3714 | 
            +
                    log_start(__method__, args, options)
         | 
| 3715 | 
            +
                    instances = {"small" => options["small"], "medium" => options["medium"], "large" => options["large"],
         | 
| 3716 | 
            +
                                 "gpu" => options["gpu"], "gpuxl" => options["gpuxl"], "gpuxxl" => options["gpuxxl"]}
         | 
| 3717 | 
            +
                    instance_type = get_instance_type(instances)
         | 
| 3718 | 
            +
                    image_extend = options["image"]
         | 
| 3719 | 
            +
                    public = options["public"]
         | 
| 3720 | 
            +
                    base = options["base"]
         | 
| 3721 | 
            +
                    python3 = options["python3"]
         | 
| 3722 | 
            +
                    docker_path = options["docker_path"]
         | 
| 3723 | 
            +
                    owner = CLI.get_owner
         | 
| 3724 | 
            +
                    checks = Helpers.checkmark()
         | 
| 3725 | 
            +
                    tar_path = nil
         | 
| 3726 | 
            +
                    if !docker_path.nil? and !docker_path.empty?
         | 
| 3727 | 
            +
                      docker_path = File.absolute_path(docker_path)
         | 
| 3728 | 
            +
                      #create tar of the docker path: it could be a docker file, and it could be a docker folder
         | 
| 3729 | 
            +
                      tar_path = File.expand_path('~')+"/.cnvrg/tmp/docker_#{File.basename docker_path}.tar.gz"
         | 
| 3730 | 
            +
                      resp = create_docker_tar(docker_path, tar_path)
         | 
| 3731 | 
            +
                      if !resp
         | 
| 3732 | 
            +
                        log_message("Couldn't create tar from docker path", Thor::Shell::Color::RED)
         | 
| 3733 | 
            +
                        FileUtils.rm_rf tar_path
         | 
| 3734 | 
            +
                        exit(1)
         | 
| 3735 | 
            +
                      end
         | 
| 3736 | 
            +
                      files = Cnvrg::Files.new(owner, "")
         | 
| 3737 | 
            +
                      resp = Images.create_new_custom_image_with_docker(instance_type, owner, image_name, public, base, image_extend, python3, tar_path, files)
         | 
| 3738 | 
            +
                      if resp
         | 
| 3739 | 
            +
                      end
         | 
| 3740 | 
            +
                    else
         | 
| 3741 | 
            +
                      log_message("Creating machine for your custom image, this may take a few moments...", Thor::Shell::Color::BLUE)
         | 
| 3742 | 
            +
                      resp = Images.create_new_custom_image(instance_type, owner, image_name, public, base, image_extend, python3, nil)
         | 
| 3604 3743 |  | 
| 3605 | 
            -
                  if Cnvrg::CLI.is_response_success(resp,false)
         | 
| 3606 | 
            -
                    image_slug = resp["result"]["slug"]
         | 
| 3607 | 
            -
                    container = resp["result"]["machine_c"]
         | 
| 3608 | 
            -
                    say "#{checks} Created image and machine successfully", Thor::Shell::Color::GREEN
         | 
| 3609 | 
            -
                    say "Connecting to machine", Thor::Shell::Color::BLUE
         | 
| 3610 | 
            -
                    ssh = Ssh.new(resp)
         | 
| 3611 | 
            -
                    if !ssh.is_ssh
         | 
| 3612 | 
            -
                      say "Couldn't connect to machine,aborting", Thor::Shell::Color::RED
         | 
| 3613 | 
            -
                      Images.revoke_custom_new_image(owner, image_slug)
         | 
| 3614 | 
            -
                      log_end(-1,"Couldn't connect to machine,aborting")
         | 
| 3615 3744 | 
             
                    end
         | 
| 3616 | 
            -
                    say "run command until ctrl + c or quit is initiated", Thor::Shell::Color::BLUE
         | 
| 3617 | 
            -
                    begin
         | 
| 3618 | 
            -
                      logs = []
         | 
| 3619 3745 |  | 
| 3620 | 
            -
             | 
| 3621 | 
            -
             | 
| 3622 | 
            -
             | 
| 3623 | 
            -
             | 
| 3624 | 
            -
             | 
| 3625 | 
            -
             | 
| 3626 | 
            -
             | 
| 3627 | 
            -
             | 
| 3628 | 
            -
             | 
| 3629 | 
            -
             | 
| 3630 | 
            -
             | 
| 3631 | 
            -
             | 
| 3632 | 
            -
             | 
| 3633 | 
            -
                          res = res_parsed.join(",")
         | 
| 3634 | 
            -
                        end
         | 
| 3746 | 
            +
                    if Cnvrg::CLI.is_response_success(resp, false)
         | 
| 3747 | 
            +
                      image_slug = resp["result"]["slug"]
         | 
| 3748 | 
            +
                      container = resp["result"]["machine_c"]
         | 
| 3749 | 
            +
                      log_message("#{checks} Created image and machine successfully", Thor::Shell::Color::GREEN)
         | 
| 3750 | 
            +
                      log_message("Connecting to machine", Thor::Shell::Color::BLUE)
         | 
| 3751 | 
            +
                      ssh = Ssh.new(resp)
         | 
| 3752 | 
            +
                      if !ssh.is_ssh
         | 
| 3753 | 
            +
                        log_message("Couldn't connect to machine,aborting", Thor::Shell::Color::RED)
         | 
| 3754 | 
            +
                        Images.revoke_custom_new_image(owner, image_slug)
         | 
| 3755 | 
            +
                      end
         | 
| 3756 | 
            +
                      log_message("run command until ctrl + c or quit is initiated", Thor::Shell::Color::BLUE)
         | 
| 3757 | 
            +
                      begin
         | 
| 3758 | 
            +
                        logs = []
         | 
| 3635 3759 |  | 
| 3636 | 
            -
                         | 
| 3637 | 
            -
             | 
| 3760 | 
            +
                        while true
         | 
| 3761 | 
            +
                          command = ask("$>")
         | 
| 3762 | 
            +
                          logs << {time: Time.now,
         | 
| 3763 | 
            +
                                   message: command,
         | 
| 3764 | 
            +
                                   type: "stdout"
         | 
| 3765 | 
            +
                          }
         | 
| 3766 | 
            +
                          if command.eql? "quit"
         | 
| 3767 | 
            +
                            log_message("Commiting Image..", Thor::Shell::Color::BLUE)
         | 
| 3768 | 
            +
                            break
         | 
| 3769 | 
            +
                          end
         | 
| 3770 | 
            +
                          res = ssh.exec_command(command)
         | 
| 3771 | 
            +
                          begin
         | 
| 3772 | 
            +
                            res_parsed = JSON.parse(res)
         | 
| 3773 | 
            +
                            res = res_parsed.join(",")
         | 
| 3774 | 
            +
                          end
         | 
| 3775 | 
            +
             | 
| 3776 | 
            +
                          puts res
         | 
| 3777 | 
            +
                          logs << {time: Time.now,
         | 
| 3638 3778 | 
             
                                   message: res,
         | 
| 3639 3779 | 
             
                                   type: "stdout"
         | 
| 3640 | 
            -
             | 
| 3641 | 
            -
             | 
| 3780 | 
            +
                          }
         | 
| 3781 | 
            +
                          logs.flatten!
         | 
| 3642 3782 |  | 
| 3643 | 
            -
             | 
| 3783 | 
            +
                        end
         | 
| 3644 3784 |  | 
| 3645 | 
            -
             | 
| 3646 | 
            -
             | 
| 3785 | 
            +
                      rescue SignalException
         | 
| 3786 | 
            +
                        log_message("Commiting Image..", Thor::Shell::Color::BLUE)
         | 
| 3647 3787 |  | 
| 3648 | 
            -
             | 
| 3649 | 
            -
             | 
| 3650 | 
            -
             | 
| 3651 | 
            -
             | 
| 3652 | 
            -
             | 
| 3653 | 
            -
             | 
| 3654 | 
            -
             | 
| 3788 | 
            +
                      end
         | 
| 3789 | 
            +
                      resp = Images.commit_custom_image(owner, image_slug, logs)
         | 
| 3790 | 
            +
                      if Cnvrg::CLI.is_response_success(resp, false)
         | 
| 3791 | 
            +
                        log_message("#{checks} Image commited successfuly, email will be sent when image is ready", Thor::Shell::Color::GREEN)
         | 
| 3792 | 
            +
                      else
         | 
| 3793 | 
            +
                        if image_slug
         | 
| 3794 | 
            +
                          Images.revoke_custom_new_image(owner, image_slug)
         | 
| 3795 | 
            +
                        end
         | 
| 3796 | 
            +
                        if ssh
         | 
| 3797 | 
            +
                          ssh.close_ssh()
         | 
| 3798 | 
            +
                        end
         | 
| 3799 | 
            +
                        log_message("Image couldn't be commited, rolling back changes", Thor::Shell::Color::RED)
         | 
| 3800 | 
            +
             | 
| 3801 | 
            +
                        exit(1)
         | 
| 3655 3802 | 
             
                      end
         | 
| 3656 3803 | 
             
                      if ssh
         | 
| 3657 3804 | 
             
                        ssh.close_ssh()
         | 
| 3658 3805 | 
             
                      end
         | 
| 3659 | 
            -
                      say "Image couldn't be commited, rolling back changes", Thor::Shell::Color::RED
         | 
| 3660 | 
            -
             | 
| 3661 | 
            -
                      exit(1)
         | 
| 3662 | 
            -
                    end
         | 
| 3663 | 
            -
                    if ssh
         | 
| 3664 | 
            -
                      ssh.close_ssh()
         | 
| 3665 | 
            -
                    end
         | 
| 3666 | 
            -
             | 
| 3667 | 
            -
             | 
| 3668 | 
            -
             | 
| 3669 | 
            -
             | 
| 3670 3806 |  | 
| 3671 3807 |  | 
| 3808 | 
            +
                    end
         | 
| 3809 | 
            +
                  rescue => e
         | 
| 3810 | 
            +
                    log_message("Error occurd, aborting", Thor::Shell::Color::RED)
         | 
| 3672 3811 |  | 
| 3673 | 
            -
             | 
| 3674 | 
            -
                  rescue =>e
         | 
| 3675 | 
            -
                    puts e
         | 
| 3812 | 
            +
                    log_error(e)
         | 
| 3676 3813 | 
             
                    if image_slug
         | 
| 3677 3814 | 
             
                      Images.revoke_custom_new_image(owner, image_slug)
         | 
| 3678 3815 | 
             
                    end
         | 
| @@ -3695,7 +3832,7 @@ module Cnvrg | |
| 3695 3832 | 
             
                end
         | 
| 3696 3833 |  | 
| 3697 3834 |  | 
| 3698 | 
            -
                desc 'build', 'run commands inside containers'
         | 
| 3835 | 
            +
                desc 'build', 'run commands inside containers', :hide => true
         | 
| 3699 3836 | 
             
                method_option :install, :type => :string, :aliases => ["--i"], :default => nil, :desc => "Install from the given instructions file"
         | 
| 3700 3837 |  | 
| 3701 3838 | 
             
                def build(*cmd)
         | 
| @@ -3756,7 +3893,7 @@ module Cnvrg | |
| 3756 3893 | 
             
                    log_end(0)
         | 
| 3757 3894 | 
             
                  rescue => e
         | 
| 3758 3895 | 
             
                    log_end(-1, e.message)
         | 
| 3759 | 
            -
                    say "Error  | 
| 3896 | 
            +
                    say "Error occurred, aborting", Thor::Shell::Color::RED
         | 
| 3760 3897 | 
             
                    if container
         | 
| 3761 3898 | 
             
                      container.stop()
         | 
| 3762 3899 | 
             
                    end
         | 
| @@ -3771,7 +3908,7 @@ module Cnvrg | |
| 3771 3908 |  | 
| 3772 3909 | 
             
                end
         | 
| 3773 3910 |  | 
| 3774 | 
            -
                desc 'commit_notebook', 'commit notebook changes to create a new notebook image'
         | 
| 3911 | 
            +
                desc 'commit_notebook', 'commit notebook changes to create a new notebook image', :hide => true
         | 
| 3775 3912 |  | 
| 3776 3913 | 
             
                def commit_image
         | 
| 3777 3914 | 
             
                  verify_logged_in(true)
         | 
| @@ -3804,7 +3941,7 @@ module Cnvrg | |
| 3804 3941 | 
             
                    return new_image.id
         | 
| 3805 3942 | 
             
                  rescue => e
         | 
| 3806 3943 | 
             
                    log_end(-1, e.message)
         | 
| 3807 | 
            -
                    say "\nError occurred,aborting"
         | 
| 3944 | 
            +
                    say "\nError occurred, aborting"
         | 
| 3808 3945 | 
             
                    exit(1)
         | 
| 3809 3946 | 
             
                  rescue SignalException
         | 
| 3810 3947 | 
             
                    log_end(-1)
         | 
| @@ -3813,7 +3950,7 @@ module Cnvrg | |
| 3813 3950 | 
             
                  end
         | 
| 3814 3951 | 
             
                end
         | 
| 3815 3952 |  | 
| 3816 | 
            -
                desc 'sync_image', 'sync current container into image, and push it to cnvrg repository'
         | 
| 3953 | 
            +
                desc 'sync_image', 'sync current container into image, and push it to cnvrg repository', :hide => true
         | 
| 3817 3954 | 
             
                method_option :is_public, :type => :boolean, :aliases => ["-p", "--p"], :default => false, :desc => "is public"
         | 
| 3818 3955 | 
             
                method_option :is_base, :type => :boolean, :aliases => ["-b", "--b"], :default => false, :desc => "is base for others images"
         | 
| 3819 3956 | 
             
                method_option :message, :type => :string, :aliases => ["-m", "--m"], :default => "", :desc => "commit message for this image"
         | 
| @@ -3854,13 +3991,13 @@ module Cnvrg | |
| 3854 3991 | 
             
                  log_start(__method__, args, options)
         | 
| 3855 3992 | 
             
                  working_dir = is_cnvrg_dir()
         | 
| 3856 3993 | 
             
                  if !name.empty? and name == "cnvrg"
         | 
| 3857 | 
            -
                     | 
| 3994 | 
            +
                    log_message("can't create image with the name cnvrg", Thor::Shell::Color::RED)
         | 
| 3858 3995 | 
             
                    exit(1)
         | 
| 3859 3996 | 
             
                  end
         | 
| 3860 3997 | 
             
                  begin
         | 
| 3861 3998 | 
             
                    image = is_project_with_docker(working_dir)
         | 
| 3862 3999 | 
             
                    if !image or !image.is_docker
         | 
| 3863 | 
            -
                       | 
| 4000 | 
            +
                      log_message("Couldn't find image related to project", Thor::Shell::Color::RED)
         | 
| 3864 4001 | 
             
                      exit(0)
         | 
| 3865 4002 | 
             
                    end
         | 
| 3866 4003 | 
             
                    if !name.nil? and !name.empty?
         | 
| @@ -3870,18 +4007,18 @@ module Cnvrg | |
| 3870 4007 | 
             
                    end
         | 
| 3871 4008 | 
             
                    stored_commands = File.open(working_dir+"/.cnvrg/custom_image.txt").read.chop.gsub("\n", ",")
         | 
| 3872 4009 | 
             
                    if stored_commands.nil? or stored_commands.empty?
         | 
| 3873 | 
            -
                       | 
| 4010 | 
            +
                      log_message("Nothing to push", Thor::Shell::Color::BLUE)
         | 
| 3874 4011 | 
             
                      exit(0)
         | 
| 3875 4012 | 
             
                    end
         | 
| 3876 4013 |  | 
| 3877 | 
            -
                     | 
| 4014 | 
            +
                    log_message("Pushing new image", Thor::Shell::Color::BLUE)
         | 
| 3878 4015 | 
             
                    if image.create_custom_image(name, working_dir, stored_commands)
         | 
| 3879 4016 |  | 
| 3880 | 
            -
                       | 
| 4017 | 
            +
                      log_message("Image was updated successfully", Thor::Shell::Color::GREEN)
         | 
| 3881 4018 | 
             
                    end
         | 
| 3882 4019 | 
             
                  rescue => e
         | 
| 3883 | 
            -
                     | 
| 3884 | 
            -
                     | 
| 4020 | 
            +
                    log_message("error occurred, aborting", Thor::Shell::Color::RED)
         | 
| 4021 | 
            +
                    log_error(e)
         | 
| 3885 4022 |  | 
| 3886 4023 | 
             
                  end
         | 
| 3887 4024 | 
             
                end
         | 
| @@ -3903,16 +4040,15 @@ module Cnvrg | |
| 3903 4040 | 
             
                    message = message.join(" ")
         | 
| 3904 4041 | 
             
                  end
         | 
| 3905 4042 |  | 
| 3906 | 
            -
                   | 
| 4043 | 
            +
                  log_message("Saving image's current state", Thor::Shell::Color::BLUE)
         | 
| 3907 4044 | 
             
                  image.save(path)
         | 
| 3908 4045 |  | 
| 3909 4046 | 
             
                  begin
         | 
| 3910 | 
            -
                     | 
| 4047 | 
            +
                    log_message("Compressing image file to upload", Thor::Shell::Color::BLUE)
         | 
| 3911 4048 | 
             
                    gzipRes = system("gzip -f #{path}")
         | 
| 3912 4049 | 
             
                    if !gzipRes
         | 
| 3913 | 
            -
                      log_End(1, "can't create gz file from image")
         | 
| 3914 4050 |  | 
| 3915 | 
            -
                       | 
| 4051 | 
            +
                      log_message("Couldn't create tar file from image", Thor::Shell::Color::RED)
         | 
| 3916 4052 | 
             
                      exit(1)
         | 
| 3917 4053 | 
             
                    end
         | 
| 3918 4054 | 
             
                    path = path+".gz"
         | 
| @@ -3920,7 +4056,7 @@ module Cnvrg | |
| 3920 4056 |  | 
| 3921 4057 | 
             
                    exit_status = $?.exitstatus
         | 
| 3922 4058 | 
             
                    if exit_status == 0
         | 
| 3923 | 
            -
                       | 
| 4059 | 
            +
                      log_message("Uploading image file", Thor::Shell::Color::BLUE)
         | 
| 3924 4060 |  | 
| 3925 4061 | 
             
                      diff =container_changes(Dir.pwd)
         | 
| 3926 4062 | 
             
                      res = @files.upload_image(path, image_name, owner, is_public, is_base, diff[1], diff[0], diff[2], message, image.commit_id)
         | 
| @@ -3930,23 +4066,19 @@ module Cnvrg | |
| 3930 4066 | 
             
                        image_loc.update_slug(res["result"]["id"])
         | 
| 3931 4067 |  | 
| 3932 4068 | 
             
                        checks = Helpers.checkmark()
         | 
| 3933 | 
            -
                         | 
| 3934 | 
            -
                        log_end(0)
         | 
| 4069 | 
            +
                        log_message("#{checks} Done", Thor::Shell::Color::GREEN)
         | 
| 3935 4070 | 
             
                      else
         | 
| 3936 | 
            -
                         | 
| 3937 | 
            -
                        log_end(1, "can't create upload imag")
         | 
| 4071 | 
            +
                        log_message("Couldn't upload image", Thor::Shell::Color::RED)
         | 
| 3938 4072 |  | 
| 3939 4073 | 
             
                      end
         | 
| 3940 4074 | 
             
                    else
         | 
| 3941 | 
            -
                       | 
| 3942 | 
            -
                      log_end(1, "can't create upload imag")
         | 
| 4075 | 
            +
                      log_message("Couldn't create image file for: #{image_name}", Thor::Shell::Color::RED)
         | 
| 3943 4076 | 
             
                      exit(1)
         | 
| 3944 4077 | 
             
                    end
         | 
| 3945 4078 | 
             
                  rescue => e
         | 
| 3946 | 
            -
                     | 
| 3947 | 
            -
                     | 
| 4079 | 
            +
                    log_message("Couldn't upload image file for: #{image_name}", Thor::Shell::Color::RED)
         | 
| 4080 | 
            +
                    log_error(e)
         | 
| 3948 4081 | 
             
                  rescue SignalException
         | 
| 3949 | 
            -
                    log_end(-1)
         | 
| 3950 4082 |  | 
| 3951 4083 | 
             
                    say "Couldn't upload image file for: #{image_name}", Thor::Shell::Color::RED
         | 
| 3952 4084 | 
             
                    exit(1)
         | 
| @@ -4026,7 +4158,7 @@ module Cnvrg | |
| 4026 4158 | 
             
                            '8888/tcp' => {},
         | 
| 4027 4159 | 
             
                        },
         | 
| 4028 4160 | 
             
                        'HostConfig' => {
         | 
| 4029 | 
            -
                            'Binds'=> ["/var/run/docker.sock:/var/run/docker.sock","/usr/bin/docker:/usr/bin/docker" | 
| 4161 | 
            +
                            'Binds' => ["/var/run/docker.sock:/var/run/docker.sock", "/usr/bin/docker:/usr/bin/docker"],
         | 
| 4030 4162 | 
             
                            'PortBindings' => {
         | 
| 4031 4163 | 
             
                                '8888/tcp' => [
         | 
| 4032 4164 | 
             
                                    {'HostPort' => "#{port}", 'HostIp' => 'localhost'}
         | 
| @@ -4264,14 +4396,13 @@ module Cnvrg | |
| 4264 4396 | 
             
                    path = File.expand_path('~')+"/.cnvrg/tmp/#{image_name}.tar.gz"
         | 
| 4265 4397 | 
             
                    @files = Cnvrg::Files.new(owner, "")
         | 
| 4266 4398 |  | 
| 4267 | 
            -
                     | 
| 4399 | 
            +
                    log_message("Downloading image file", Thor::Shell::Color::BLUE)
         | 
| 4268 4400 | 
             
                    begin
         | 
| 4269 4401 | 
             
                      if @files.download_image(path, image_slug, owner)
         | 
| 4270 4402 | 
             
                        gzipRes = system("gunzip -f #{path}")
         | 
| 4271 4403 | 
             
                        if !gzipRes
         | 
| 4272 | 
            -
                          log_End(1, "can't unzip gz file from image")
         | 
| 4273 4404 |  | 
| 4274 | 
            -
                           | 
| 4405 | 
            +
                          log_message("Couldn't create tar file from image", Thor::Shell::Color::RED)
         | 
| 4275 4406 | 
             
                          exit(1)
         | 
| 4276 4407 | 
             
                        else
         | 
| 4277 4408 | 
             
                          path = path.gsub(".gz", "")
         | 
| @@ -4279,17 +4410,14 @@ module Cnvrg | |
| 4279 4410 | 
             
                        end
         | 
| 4280 4411 |  | 
| 4281 4412 | 
             
                      else
         | 
| 4282 | 
            -
                         | 
| 4283 | 
            -
                        log_end(1, "can't download image")
         | 
| 4413 | 
            +
                        log_message("Couldn't download image #{image_name}", Thor::Shell::Color::RED)
         | 
| 4284 4414 | 
             
                        return false
         | 
| 4285 4415 | 
             
                      end
         | 
| 4286 4416 | 
             
                    rescue Interrupt
         | 
| 4287 | 
            -
                      log_end(-1)
         | 
| 4288 4417 | 
             
                      say "The user has exited to process, aborting", Thor::Shell::Color::BLUE
         | 
| 4289 4418 | 
             
                      exit(1)
         | 
| 4290 4419 | 
             
                    end
         | 
| 4291 4420 | 
             
                  rescue SignalException
         | 
| 4292 | 
            -
                    log_end(-1)
         | 
| 4293 4421 | 
             
                    say "\nAborting"
         | 
| 4294 4422 | 
             
                    exit(1)
         | 
| 4295 4423 | 
             
                  end
         | 
| @@ -4363,10 +4491,8 @@ module Cnvrg | |
| 4363 4491 | 
             
                        printf "%-20s %-20s  %-30s %-20s %-20s\n", u["name"], u["project"], created_by, u["is_public"], update_at
         | 
| 4364 4492 | 
             
                      end
         | 
| 4365 4493 | 
             
                    end
         | 
| 4366 | 
            -
                    log_end(0)
         | 
| 4367 4494 | 
             
                    return res["result"]["images"]
         | 
| 4368 4495 | 
             
                  rescue SignalException
         | 
| 4369 | 
            -
                    log_end(-1)
         | 
| 4370 4496 | 
             
                    say "\nAborting"
         | 
| 4371 4497 | 
             
                    exit(1)
         | 
| 4372 4498 | 
             
                  end
         | 
| @@ -4390,10 +4516,8 @@ module Cnvrg | |
| 4390 4516 | 
             
                        printf "%-20s %-20s %-20s\n", u["name"], u["created_by"], update_at
         | 
| 4391 4517 | 
             
                      end
         | 
| 4392 4518 | 
             
                    end
         | 
| 4393 | 
            -
                    log_end(0)
         | 
| 4394 4519 | 
             
                    return res["result"]["images"]
         | 
| 4395 4520 | 
             
                  rescue SignalException
         | 
| 4396 | 
            -
                    log_end(-1)
         | 
| 4397 4521 | 
             
                    say "\nAborting"
         | 
| 4398 4522 | 
             
                    exit(1)
         | 
| 4399 4523 | 
             
                  end
         | 
| @@ -4401,7 +4525,7 @@ module Cnvrg | |
| 4401 4525 |  | 
| 4402 4526 | 
             
                end
         | 
| 4403 4527 |  | 
| 4404 | 
            -
                desc 'get_machine', 'create new aws machine'
         | 
| 4528 | 
            +
                desc 'get_machine', 'create new aws machine', :hide => true
         | 
| 4405 4529 |  | 
| 4406 4530 | 
             
                def get_machine()
         | 
| 4407 4531 | 
             
                  begin
         | 
| @@ -4449,12 +4573,12 @@ module Cnvrg | |
| 4449 4573 | 
             
                    owner = Cnvrg::CLI.get_owner()
         | 
| 4450 4574 | 
             
                    image = Cnvrg::Images.image_exist(owner, image_name)
         | 
| 4451 4575 | 
             
                    if !image
         | 
| 4452 | 
            -
                       | 
| 4576 | 
            +
                      log_message("Couldn't find image in cnvrg repository", Thor::Shell::Color::RED)
         | 
| 4453 4577 | 
             
                      exit(1)
         | 
| 4454 4578 | 
             
                    end
         | 
| 4455 4579 | 
             
                    path = download_image(image_name, image["slug"])
         | 
| 4456 4580 | 
             
                    if path
         | 
| 4457 | 
            -
                       | 
| 4581 | 
            +
                      log_message("Building image", Thor::Shell::Color::BLUE)
         | 
| 4458 4582 | 
             
                      Docker.options[:read_timeout]=216000
         | 
| 4459 4583 | 
             
                      image = Docker::Image.build_from_dir(path, {'dockerfile' => 'Dockerfile.cpu', 't' => "#{image_name}:latest"}) do |v|
         | 
| 4460 4584 | 
             
                        begin
         | 
| @@ -4470,20 +4594,16 @@ module Cnvrg | |
| 4470 4594 | 
             
                      if not image.nil?
         | 
| 4471 4595 | 
             
                        FileUtils.rm_rf(path)
         | 
| 4472 4596 | 
             
                        checks = Helpers.checkmark()
         | 
| 4473 | 
            -
                         | 
| 4474 | 
            -
                        log_end(0)
         | 
| 4597 | 
            +
                        log_message("#{checks} Image built successfully", Thor::Shell::Color::GREEN)
         | 
| 4475 4598 | 
             
                        return image
         | 
| 4476 | 
            -
                        log_end(0)
         | 
| 4477 4599 | 
             
                      else
         | 
| 4478 4600 |  | 
| 4479 | 
            -
                         | 
| 4480 | 
            -
                        log_end(1, "Could build  image")
         | 
| 4601 | 
            +
                        log_message("Could not build image", Thor::Shell::Color::RED)
         | 
| 4481 4602 | 
             
                        return false
         | 
| 4482 4603 | 
             
                      end
         | 
| 4483 4604 | 
             
                    else
         | 
| 4484 4605 |  | 
| 4485 | 
            -
                       | 
| 4486 | 
            -
                      log_end(1, "Could build  image")
         | 
| 4606 | 
            +
                      log_message("Could not download image", Thor::Shell::Color::RED)
         | 
| 4487 4607 | 
             
                      return false
         | 
| 4488 4608 |  | 
| 4489 4609 |  | 
| @@ -4511,12 +4631,11 @@ module Cnvrg | |
| 4511 4631 | 
             
                      # end
         | 
| 4512 4632 | 
             
                  rescue => e
         | 
| 4513 4633 |  | 
| 4514 | 
            -
             | 
| 4515 | 
            -
                     | 
| 4634 | 
            +
                    log_message "Error: couldn't build image", Thor::Shell::Color::RED
         | 
| 4635 | 
            +
                    log_error(e)
         | 
| 4516 4636 |  | 
| 4517 4637 | 
             
                  rescue SignalException
         | 
| 4518 4638 | 
             
                    say "\nAborting"
         | 
| 4519 | 
            -
                    log_end(-1)
         | 
| 4520 4639 | 
             
                    exit(1)
         | 
| 4521 4640 | 
             
                  ensure
         | 
| 4522 4641 | 
             
                    if path
         | 
| @@ -4543,22 +4662,22 @@ module Cnvrg | |
| 4543 4662 | 
             
                    if yes? "Image wasn't found locally, pull image from cnvrg repository?", Thor::Shell::Color::YELLOW
         | 
| 4544 4663 | 
             
                      image = pull(docker_image)
         | 
| 4545 4664 | 
             
                      if image
         | 
| 4546 | 
            -
                         | 
| 4665 | 
            +
                        log_message("downloaded image: #{docker_image}", Thor::Shell::Color::BLUE)
         | 
| 4547 4666 | 
             
                        @image = Images.new(working_dir, docker_image)
         | 
| 4548 4667 | 
             
                      else
         | 
| 4549 | 
            -
                         | 
| 4668 | 
            +
                        log_message("Could not create a new project with docker, image was not found", Thor::Shell::Color::RED)
         | 
| 4550 4669 | 
             
                        exit(1)
         | 
| 4551 4670 | 
             
                      end
         | 
| 4552 4671 | 
             
                    else
         | 
| 4553 | 
            -
                       | 
| 4672 | 
            +
                      log_message("Could not create a new project with docker, image was not found", Thor::Shell::Color::RED)
         | 
| 4554 4673 | 
             
                      exit(1)
         | 
| 4555 4674 |  | 
| 4556 4675 | 
             
                    end
         | 
| 4557 4676 | 
             
                  elsif docker_image_local.size == 1
         | 
| 4558 | 
            -
                     | 
| 4677 | 
            +
                    log_message("found image: #{docker_image_local[0]}, setting it up..", Thor::Shell::Color::BLUE)
         | 
| 4559 4678 | 
             
                    @image = Images.new(working_dir, docker_image_local[0])
         | 
| 4560 4679 | 
             
                  elsif docker_image_local.size >1
         | 
| 4561 | 
            -
                     | 
| 4680 | 
            +
                    log_message("found #{docker_image_local.size} images, choose the image name you want to use", Thor::Shell::Color::BLUE)
         | 
| 4562 4681 | 
             
                    image_name = ask "#{docker_image_local.join("\n")}\n", Thor::Shell::Color::BLUE
         | 
| 4563 4682 | 
             
                    image_name = image_name.strip
         | 
| 4564 4683 | 
             
                    @image = Images.new(working_dir, image_name)
         | 
| @@ -4619,11 +4738,11 @@ module Cnvrg | |
| 4619 4738 | 
             
                        url = "https://cnvrg.io/api"
         | 
| 4620 4739 | 
             
                      end
         | 
| 4621 4740 | 
             
                      config = YAML.load_file(home_dir+"/.cnvrg/config.yml")
         | 
| 4622 | 
            -
                      compression_path = | 
| 4741 | 
            +
                      compression_path = "#{home_dir}/.cnvrg/tmp"
         | 
| 4623 4742 | 
             
                      if config and !config.nil? and !config.empty? and !config.to_h[:compression_path].nil?
         | 
| 4624 4743 | 
             
                        compression_path = config.to_h[:compression_path]
         | 
| 4625 4744 | 
             
                      end
         | 
| 4626 | 
            -
                      config = {owner: owner, username: username, version_last_check: get_start_day(), api: url,compression_path:compression_path}
         | 
| 4745 | 
            +
                      config = {owner: owner, username: username, version_last_check: get_start_day(), api: url, compression_path: compression_path}
         | 
| 4627 4746 |  | 
| 4628 4747 | 
             
                      File.open(home_dir+"/.cnvrg/config.yml", "w+") { |f| f.write config.to_yaml }
         | 
| 4629 4748 | 
             
                      return true
         | 
| @@ -4668,13 +4787,48 @@ module Cnvrg | |
| 4668 4787 |  | 
| 4669 4788 | 
             
                  def log_start(command, args="", options={})
         | 
| 4670 4789 | 
             
                    begin
         | 
| 4671 | 
            -
                      $LOG.info "----"
         | 
| 4672 4790 | 
             
                      $LOG.info ruby_version: RUBY_VERSION, os: Cnvrg::Helpers.os(), cli_version: Cnvrg::VERSION
         | 
| 4673 4791 | 
             
                      $LOG.info command: command, args: args, options: options
         | 
| 4674 4792 | 
             
                    rescue
         | 
| 4675 4793 | 
             
                    end
         | 
| 4676 4794 | 
             
                  end
         | 
| 4677 4795 |  | 
| 4796 | 
            +
                  def log_message(message, type, to_print=true)
         | 
| 4797 | 
            +
                    if to_print
         | 
| 4798 | 
            +
                      say message, type
         | 
| 4799 | 
            +
                    end
         | 
| 4800 | 
            +
                    begin
         | 
| 4801 | 
            +
                      if type == Thor::Shell::Color::BLUE
         | 
| 4802 | 
            +
                        $LOG.info message: message, type: "info"
         | 
| 4803 | 
            +
                      elsif type == Thor::Shell::Color::RED
         | 
| 4804 | 
            +
                        $LOG.error message: message, type: "error"
         | 
| 4805 | 
            +
                      elsif type == Thor::Shell::Color::YELLOW
         | 
| 4806 | 
            +
                        $LOG.warn message: message, type: "warning"
         | 
| 4807 | 
            +
                      elsif type == Thor::Shell::Color::GREEN
         | 
| 4808 | 
            +
                        $LOG.info message: message, type: "success"
         | 
| 4809 | 
            +
                      else
         | 
| 4810 | 
            +
                        $LOG.info message: message, type: "unknown"
         | 
| 4811 | 
            +
                      end
         | 
| 4812 | 
            +
             | 
| 4813 | 
            +
                    rescue => e
         | 
| 4814 | 
            +
                      puts e
         | 
| 4815 | 
            +
                    end
         | 
| 4816 | 
            +
                  end
         | 
| 4817 | 
            +
             | 
| 4818 | 
            +
                  def log_error(e)
         | 
| 4819 | 
            +
                    begin
         | 
| 4820 | 
            +
                      $LOG.error message: e.message, type: "error"
         | 
| 4821 | 
            +
                      size = e.backtrace.size
         | 
| 4822 | 
            +
                      min = 4
         | 
| 4823 | 
            +
                      if min>= size
         | 
| 4824 | 
            +
                        min = size
         | 
| 4825 | 
            +
                      end
         | 
| 4826 | 
            +
                      $LOG.error message: "Error: #{e.message}, Backtrace: #{e.backtrace[0..min].join(",")}", type: "error"
         | 
| 4827 | 
            +
                    rescue
         | 
| 4828 | 
            +
                    end
         | 
| 4829 | 
            +
                  end
         | 
| 4830 | 
            +
             | 
| 4831 | 
            +
             | 
| 4678 4832 | 
             
                  def log_end(exit_status=0, error=nil)
         | 
| 4679 4833 | 
             
                    begin
         | 
| 4680 4834 | 
             
                      if exit_status != 0
         | 
| @@ -4690,6 +4844,8 @@ module Cnvrg | |
| 4690 4844 | 
             
                    if response.nil?
         | 
| 4691 4845 | 
             
                      if !Cnvrg::Helpers.internet_connection?
         | 
| 4692 4846 | 
             
                        say("<%= color('Error:You seems to be offline', RED) %>")
         | 
| 4847 | 
            +
                        $LOG.error message: "offline connection", type: "error"
         | 
| 4848 | 
            +
             | 
| 4693 4849 | 
             
                      end
         | 
| 4694 4850 | 
             
                      if should_exit
         | 
| 4695 4851 | 
             
                        exit(1)
         | 
| @@ -4702,6 +4858,7 @@ module Cnvrg | |
| 4702 4858 | 
             
                      if response["status"] == 500
         | 
| 4703 4859 | 
             
                        say("<%= color('Server Error', RED) %>")
         | 
| 4704 4860 | 
             
                      else
         | 
| 4861 | 
            +
                        $LOG.error message: error, type: "error"
         | 
| 4705 4862 | 
             
                        say("<%= color('Error:#{error}', RED) %>")
         | 
| 4706 4863 | 
             
                      end
         | 
| 4707 4864 |  | 
| @@ -4734,7 +4891,8 @@ module Cnvrg | |
| 4734 4891 | 
             
                    api = config.to_h[:api]
         | 
| 4735 4892 | 
             
                    return api.gsub!("/api", "")
         | 
| 4736 4893 | 
             
                  end
         | 
| 4737 | 
            -
             | 
| 4894 | 
            +
             | 
| 4895 | 
            +
                  def get_compression_path
         | 
| 4738 4896 | 
             
                    home_dir = File.expand_path('~')
         | 
| 4739 4897 |  | 
| 4740 4898 | 
             
                    config = YAML.load_file(home_dir+ "/.cnvrg/config.yml")
         | 
| @@ -4777,6 +4935,14 @@ module Cnvrg | |
| 4777 4935 | 
             
                  def log_handler
         | 
| 4778 4936 | 
             
                    begin
         | 
| 4779 4937 | 
             
                      date = DateTime.now.strftime("%m_%d_%Y")
         | 
| 4938 | 
            +
                      home_dir = File.expand_path('~')
         | 
| 4939 | 
            +
             | 
| 4940 | 
            +
                      if !File.directory? home_dir+"/.cnvrg"
         | 
| 4941 | 
            +
                        FileUtils.mkdir_p([home_dir+"/.cnvrg", home_dir+"/.cnvrg/tmp"])
         | 
| 4942 | 
            +
                      end
         | 
| 4943 | 
            +
                      if !File.exist?(home_dir+"/.cnvrg/config.yml")
         | 
| 4944 | 
            +
                        FileUtils.touch [home_dir+"/.cnvrg/config.yml"]
         | 
| 4945 | 
            +
                      end
         | 
| 4780 4946 | 
             
                      logfile = File.expand_path('~') +"/.cnvrg/log_#{date}.log"
         | 
| 4781 4947 | 
             
                      if !File.exist? logfile
         | 
| 4782 4948 | 
             
                        FileUtils.touch([logfile])
         | 
| @@ -4798,27 +4964,34 @@ module Cnvrg | |
| 4798 4964 | 
             
                        end
         | 
| 4799 4965 |  | 
| 4800 4966 | 
             
                      end
         | 
| 4801 | 
            -
                       | 
| 4967 | 
            +
                      config = LogStashLogger.configure do |config|
         | 
| 4968 | 
            +
                        config.customize_event do |event|
         | 
| 4969 | 
            +
                          event.remove('@version')
         | 
| 4970 | 
            +
                          event.remove('severity')
         | 
| 4971 | 
            +
                        end
         | 
| 4972 | 
            +
                      end
         | 
| 4973 | 
            +
                      $LOG = LogStashLogger.new(type: :file, path: logfile, sync: true, config: config)
         | 
| 4802 4974 | 
             
                      remove_old_log_files()
         | 
| 4975 | 
            +
                    rescue
         | 
| 4976 | 
            +
             | 
| 4803 4977 | 
             
                    end
         | 
| 4804 4978 | 
             
                  end
         | 
| 4805 4979 |  | 
| 4806 4980 | 
             
                  def remove_old_log_files()
         | 
| 4807 4981 | 
             
                    begin
         | 
| 4808 | 
            -
             | 
| 4809 | 
            -
             | 
| 4810 | 
            -
             | 
| 4811 | 
            -
             | 
| 4812 | 
            -
             | 
| 4813 | 
            -
             | 
| 4982 | 
            +
                      last_week = (Time.now - (7*24*60*60)).strftime("%Y-%m-%d")
         | 
| 4983 | 
            +
                      home = File.expand_path('~')
         | 
| 4984 | 
            +
                      log_files = Dir["#{home}/.cnvrg/tmp/*.log"]
         | 
| 4985 | 
            +
                      log_files.each do |l|
         | 
| 4986 | 
            +
                        if File.mtime(l).strftime("%Y-%m-%d") < last_week
         | 
| 4987 | 
            +
                          FileUtils.rm_rf(l)
         | 
| 4988 | 
            +
                        end
         | 
| 4814 4989 | 
             
                      end
         | 
| 4815 4990 | 
             
                    end
         | 
| 4816 | 
            -
                    end
         | 
| 4817 4991 |  | 
| 4818 4992 | 
             
                  end
         | 
| 4819 4993 |  | 
| 4820 4994 |  | 
| 4821 | 
            -
             | 
| 4822 4995 | 
             
                  def verify_logged_in(in_dir=true)
         | 
| 4823 4996 | 
             
                    log_handler()
         | 
| 4824 4997 | 
             
                    auth = Cnvrg::Auth.new
         | 
| @@ -5109,15 +5282,16 @@ module Cnvrg | |
| 5109 5282 | 
             
                      return relative
         | 
| 5110 5283 | 
             
                    end
         | 
| 5111 5284 | 
             
                  end
         | 
| 5112 | 
            -
             | 
| 5285 | 
            +
             | 
| 5286 | 
            +
                  def create_docker_tar(docker_path, tar_path)
         | 
| 5113 5287 | 
             
                    begin
         | 
| 5114 5288 |  | 
| 5115 | 
            -
             | 
| 5116 | 
            -
             | 
| 5117 | 
            -
             | 
| 5118 | 
            -
             | 
| 5119 | 
            -
             | 
| 5120 | 
            -
             | 
| 5289 | 
            +
                      if File.directory? (docker_path)
         | 
| 5290 | 
            +
                        `cd #{docker_path} && tar -czf #{tar_path} . `
         | 
| 5291 | 
            +
                      else
         | 
| 5292 | 
            +
                        dir_name = File.dirname docker_path
         | 
| 5293 | 
            +
                        `cd #{dir_name} &&  tar -czf #{tar_path} #{File.basename(docker_path)}`
         | 
| 5294 | 
            +
                      end
         | 
| 5121 5295 | 
             
                    rescue => e
         | 
| 5122 5296 | 
             
                      puts "Exception while compressing docker path: #{e.message}"
         | 
| 5123 5297 | 
             
                    end
         | 
| @@ -5125,7 +5299,7 @@ module Cnvrg | |
| 5125 5299 | 
             
                    return $?.success?
         | 
| 5126 5300 | 
             
                  end
         | 
| 5127 5301 |  | 
| 5128 | 
            -
                  def create_tar(path_in, path_out, tar_files,no_compression=false)
         | 
| 5302 | 
            +
                  def create_tar(path_in, path_out, tar_files, no_compression=false)
         | 
| 5129 5303 | 
             
                    #The cd is meant for cases when running cnvrg data uplaod not in the main folder
         | 
| 5130 5304 | 
             
                    begin
         | 
| 5131 5305 | 
             
                      if no_compression
         | 
| @@ -5144,27 +5318,29 @@ module Cnvrg | |
| 5144 5318 | 
             
                    `tar -xvf #{file_path} -C #{dir_path} > /dev/null 2>&1`
         | 
| 5145 5319 | 
             
                    return $?.success?
         | 
| 5146 5320 | 
             
                  end
         | 
| 5321 | 
            +
             | 
| 5147 5322 | 
             
                  def cpu_usage
         | 
| 5148 5323 | 
             
                    cpu_usage = 0.0
         | 
| 5149 5324 | 
             
                    begin
         | 
| 5150 5325 | 
             
                      cpu = `top b -n 2 -d 2 |grep %Cpu |tail -1 |awk '{print $2+$3}'`
         | 
| 5151 | 
            -
             | 
| 5152 | 
            -
             | 
| 5153 | 
            -
             | 
| 5326 | 
            +
                      if !cpu.nil?
         | 
| 5327 | 
            +
                        cpu_usage = cpu.to_f
         | 
| 5328 | 
            +
                      end
         | 
| 5154 5329 | 
             
                    rescue
         | 
| 5155 5330 | 
             
                      cpu_usage = 0.0
         | 
| 5156 5331 | 
             
                    end
         | 
| 5157 5332 |  | 
| 5158 5333 | 
             
                    return cpu_usage
         | 
| 5159 5334 | 
             
                  end
         | 
| 5335 | 
            +
             | 
| 5160 5336 | 
             
                  def memory_usage
         | 
| 5161 5337 | 
             
                    prec = 0.0
         | 
| 5162 5338 | 
             
                    begin
         | 
| 5163 | 
            -
             | 
| 5164 | 
            -
             | 
| 5339 | 
            +
                      used = `free -mt |grep Mem: |awk '{print $3}'`
         | 
| 5340 | 
            +
                      total = `free -mt |grep Mem: |awk '{print $2}'`
         | 
| 5165 5341 |  | 
| 5166 | 
            -
             | 
| 5167 | 
            -
             | 
| 5342 | 
            +
                      used_f = used.to_f if !used.nil?
         | 
| 5343 | 
            +
                      total_f = total.to_f if !total.nil?
         | 
| 5168 5344 | 
             
                      prec = (used_f / total_f)*100
         | 
| 5169 5345 | 
             
                      prec = prec.round(2)
         | 
| 5170 5346 | 
             
                    rescue
         | 
| @@ -5174,18 +5350,19 @@ module Cnvrg | |
| 5174 5350 |  | 
| 5175 5351 |  | 
| 5176 5352 | 
             
                  end
         | 
| 5353 | 
            +
             | 
| 5177 5354 | 
             
                  def gpu_util
         | 
| 5178 5355 | 
             
                    gpu = [0.0, 0.0]
         | 
| 5179 5356 | 
             
                    begin
         | 
| 5180 | 
            -
             | 
| 5357 | 
            +
                      gpu_stats = `nvidia-smi --query-gpu=utilization.gpu,utilization.memory --format=csv |tail -1`
         | 
| 5181 5358 |  | 
| 5182 | 
            -
             | 
| 5183 | 
            -
             | 
| 5184 | 
            -
             | 
| 5185 | 
            -
             | 
| 5186 | 
            -
             | 
| 5187 | 
            -
             | 
| 5188 | 
            -
             | 
| 5359 | 
            +
                      if !gpu_stats.nil?
         | 
| 5360 | 
            +
                        gpu = gpu_stats.strip
         | 
| 5361 | 
            +
                        gpu = gpu_stats.gsub!("%", "").split(",")
         | 
| 5362 | 
            +
                        gpu[0] = gpu[0].to_f
         | 
| 5363 | 
            +
                        gpu[1] = gpu[1].to_f
         | 
| 5364 | 
            +
                        return gpu
         | 
| 5365 | 
            +
                      end
         | 
| 5189 5366 |  | 
| 5190 5367 | 
             
                    rescue
         | 
| 5191 5368 | 
             
                      return gpu
         | 
| @@ -5193,18 +5370,19 @@ module Cnvrg | |
| 5193 5370 |  | 
| 5194 5371 |  | 
| 5195 5372 | 
             
                  end
         | 
| 5373 | 
            +
             | 
| 5196 5374 | 
             
                  def usage_metrics_in_docker(docker_id)
         | 
| 5197 | 
            -
                    res = [0.0,0.0]
         | 
| 5375 | 
            +
                    res = [0.0, 0.0]
         | 
| 5198 5376 | 
             
                    begin
         | 
| 5199 5377 | 
             
                      if docker_id.nil?
         | 
| 5200 5378 | 
             
                        docker_id = `cat /etc/hostname`
         | 
| 5201 5379 | 
             
                      end
         | 
| 5202 | 
            -
             | 
| 5380 | 
            +
                      stats = `sudo docker stats #{docker_id} --no-stream --format "{{.CPUPerc}},{{.MemPerc}},{{.BlockIO}}"`
         | 
| 5203 5381 | 
             
                      if !stats.nil?
         | 
| 5204 5382 | 
             
                        conv = stats.split(",")
         | 
| 5205 | 
            -
                        cpu = conv[0].gsub!("%","").to_f
         | 
| 5206 | 
            -
                        memory = conv[1].gsub!("%","").to_f
         | 
| 5207 | 
            -
                        res = [cpu,memory]
         | 
| 5383 | 
            +
                        cpu = conv[0].gsub!("%", "").to_f
         | 
| 5384 | 
            +
                        memory = conv[1].gsub!("%", "").to_f
         | 
| 5385 | 
            +
                        res = [cpu, memory]
         | 
| 5208 5386 | 
             
                        return res
         | 
| 5209 5387 | 
             
                      end
         | 
| 5210 5388 | 
             
                    rescue
         | 
| @@ -5212,7 +5390,6 @@ module Cnvrg | |
| 5212 5390 | 
             
                    end
         | 
| 5213 5391 |  | 
| 5214 5392 |  | 
| 5215 | 
            -
             | 
| 5216 5393 | 
             
                  end
         | 
| 5217 5394 |  | 
| 5218 5395 | 
             
                  def with_progress_bar
         |