cnvrg 2.1.3 → 2.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Readme.md +21 -1
- data/cnvrg.gemspec +1 -0
- data/lib/cnvrg/cli.rb +12 -4
- data/lib/cnvrg/data.rb +1 -1
- data/lib/cnvrg/downloader/clients/azure_client.rb +22 -4
- data/lib/cnvrg/downloader/clients/gcp_client.rb +1 -1
- data/lib/cnvrg/helpers/agent.rb +9 -1
- data/lib/cnvrg/project.rb +2 -2
- data/lib/cnvrg/version.rb +1 -1
- data/lib/cnvrg.rb +4 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 414c34615497d519b8df3fc1adf597aa18bb8d05eb7466b312bbfd517f0e74aa
|
4
|
+
data.tar.gz: ddde064e3ef2f144948d1b6d1859f4daef95290dd13ae28b544569f6b16f5be0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d72d7b22df91d154e0313f24511ae9f6f007c077bf0f49a9329f0546ec9983833920fd567e4abfe7ab876ae2da4aae888d77840d10d7945f956d0b8e77047c1
|
7
|
+
data.tar.gz: f72cfb009f744ede0fdaec505610e32fa50ee570415cd729678c2d791b79351a891569f5ef1911920ddca242bc0354c61e6aa505252793b3345cdfdaeebe0dbc
|
data/Readme.md
CHANGED
@@ -88,4 +88,24 @@
|
|
88
88
|
* DEV-13815 - Bug: CLI - remove "cnvrg data sync" command
|
89
89
|
## Version v2.1.3
|
90
90
|
2022-05-16
|
91
|
-
* DEV-13981 - Bug: CLI - dataset query clone stuck at 50% then "Killed"
|
91
|
+
* DEV-13981 - Bug: CLI - dataset query clone stuck at 50% then "Killed"
|
92
|
+
## Version v2.1.4
|
93
|
+
2022-05-22
|
94
|
+
* DEV-14182 - Bug: Cli - hide 'data upload' command
|
95
|
+
## Version v2.1.5
|
96
|
+
2022-07-31
|
97
|
+
* DEV-14244 - Bug: CLI - "failed to upload ongoing stats" due to NaN in float
|
98
|
+
* DEV-14633 - Bug: End sync did not complete, causing the experiment to get stuck in "terminating"
|
99
|
+
## Version v2.1.6
|
100
|
+
2022-08-09
|
101
|
+
* DEV-14682 - Bug: git-Walki: CLI/SDK experiments goes into debug mode for Github+SSH integrated projects
|
102
|
+
## Version v2.1.7
|
103
|
+
2022-08-24
|
104
|
+
* DEV-15229 - Bug: CLI - warnings from faraday gem when running any CLI command
|
105
|
+
## Version v2.1.8
|
106
|
+
2022-09-04
|
107
|
+
* DEV-15473 - Bug: CLI - Errors while cloning a project that has file containing spaces in their names
|
108
|
+
## Version v2.1.9
|
109
|
+
2022-09-06
|
110
|
+
* DEV-15423 - Bug: Workspace - Jupyter process gets killed
|
111
|
+
* DEV-15451 - Bug: CLI - sync error "undefined method `encode' for nil:NilClass" on GCP storage
|
data/cnvrg.gemspec
CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_runtime_dependency 'ffi', '~> 1.9', '>= 1.9.10'
|
29
29
|
spec.add_runtime_dependency 'mimemagic', '~> 0.3.1', '>=0.3.7'
|
30
30
|
spec.add_runtime_dependency 'faraday', '~> 0.15.2'
|
31
|
+
spec.add_runtime_dependency 'warning', '~> 1.3.0'
|
31
32
|
spec.add_runtime_dependency 'netrc', '~> 0.11.0'
|
32
33
|
spec.add_runtime_dependency 'open4', '~> 1.3', '>= 1.3.4'
|
33
34
|
spec.add_runtime_dependency 'highline', '~> 1.7', '>= 1.7.8'
|
data/lib/cnvrg/cli.rb
CHANGED
@@ -1848,7 +1848,7 @@ module Cnvrg
|
|
1848
1848
|
log_start(__method__, args, options)
|
1849
1849
|
project_home = Dir.pwd
|
1850
1850
|
soft = options["soft"] || false
|
1851
|
-
Project.stop_if_project_present(project_home, slug) if soft
|
1851
|
+
Project.stop_if_project_present(project_home, slug, owner) if soft
|
1852
1852
|
clone_resp = Project.clone_dir_remote(slug, owner, slug,true)
|
1853
1853
|
exit 1 if not clone_resp
|
1854
1854
|
idx_status = Project.new(get_project_home).generate_idx(files:[])
|
@@ -1918,7 +1918,7 @@ module Cnvrg
|
|
1918
1918
|
clone_resp = false
|
1919
1919
|
project_home = Dir.pwd
|
1920
1920
|
|
1921
|
-
Project.stop_if_project_present(project_home, project_name) if soft
|
1921
|
+
Project.stop_if_project_present(project_home, project_name, owner) if soft
|
1922
1922
|
|
1923
1923
|
if remote and !git
|
1924
1924
|
clone_resp = Project.clone_dir_remote(slug, owner, project_name,git)
|
@@ -2088,6 +2088,8 @@ module Cnvrg
|
|
2088
2088
|
method_option :message, :type => :string, :aliases => ["--message"], :desc => "create commit with message", :default => nil
|
2089
2089
|
|
2090
2090
|
def upload_data_new(new_branch, verbose, sync, force, tags, chunk_size, message:nil, total_deleted: 0, total_downloaded: 0)
|
2091
|
+
log_message("This method is deprecated, please use 'data put' instead. for more info visit our docs: https://app.cnvrg.io/docs/cli/install.html#upload-files-to-a-dataset", Thor::Shell::Color::BLUE, !options["verbose"])
|
2092
|
+
return
|
2091
2093
|
begin
|
2092
2094
|
commit, files_list = invoke :start_commit_data,[], :new_branch=> new_branch, :direct=>false, :force =>force, :chunk_size => chunk_size, :message => message
|
2093
2095
|
files_to_upload, upload_errors = invoke :upload_data_files,[commit, files_list: files_list],:new_branch=>new_branch, :verbose =>verbose, :force =>force, :sync =>sync, :chunk_size => chunk_size
|
@@ -4731,8 +4733,14 @@ module Cnvrg
|
|
4731
4733
|
end
|
4732
4734
|
end
|
4733
4735
|
else
|
4734
|
-
|
4735
|
-
|
4736
|
+
begin
|
4737
|
+
timestamp, value = data_result&.first&.dig('value')
|
4738
|
+
stat_value = value.present? ? ("%.2f" % value) : 0 # converting 34.685929244444445 to 34.69
|
4739
|
+
rescue => e
|
4740
|
+
Cnvrg::Logger.log_info("Failed converting string into float with error: #{e.message}")
|
4741
|
+
Cnvrg::Logger.log_error(e)
|
4742
|
+
stat_value = 0
|
4743
|
+
end
|
4736
4744
|
stat_value = stat_value.to_i == stat_value.to_f ? stat_value.to_i : stat_value.to_f # converting 34.00 to 34
|
4737
4745
|
if query_name.include? 'block'
|
4738
4746
|
stats['block_io'] = {} if stats['block_io'].blank?
|
data/lib/cnvrg/data.rb
CHANGED
@@ -81,7 +81,7 @@ module Cnvrg
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
-
desc "data upload", "Upload files from local dataset directory to remote server"
|
84
|
+
desc "data upload", "Upload files from local dataset directory to remote server", :hide => true
|
85
85
|
method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
|
86
86
|
method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
|
87
87
|
method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
|
@@ -15,15 +15,13 @@ module Cnvrg
|
|
15
15
|
|
16
16
|
def download(storage_path, local_path, decrypt: true)
|
17
17
|
prepare_download(local_path)
|
18
|
-
|
19
18
|
storage_path = Cnvrg::Helpers.decrypt(@key, @iv, storage_path) if decrypt
|
20
19
|
|
21
20
|
# We generate a temp uri in order to stream the file instead of using "get_blob" that overflows memory
|
22
21
|
uri = client.send(:blob_uri, @container, storage_path)
|
23
22
|
|
24
|
-
generator = Azure::Storage::Common::Core::Auth::SharedAccessSignature.new(@account_name, @access_key)
|
25
23
|
|
26
|
-
expiring_url =
|
24
|
+
expiring_url = self.signed_uri_custom(
|
27
25
|
uri,
|
28
26
|
false,
|
29
27
|
service: 'b',
|
@@ -32,12 +30,32 @@ module Cnvrg
|
|
32
30
|
start: (Time.now - (5 * 60)).utc.iso8601, # start 5 minutes ago
|
33
31
|
expiry: (Time.now + 60 * 60 * 2).utc.iso8601 # expire in 2 hours
|
34
32
|
)
|
35
|
-
|
36
33
|
# Stream the file without loading it all into memory
|
37
34
|
download = open(expiring_url)
|
38
35
|
IO.copy_stream(download, local_path)
|
39
36
|
end
|
40
37
|
|
38
|
+
def signed_uri_custom(uri, use_account_sas, options)
|
39
|
+
# url sent to generate_service_sas_token should be DECODED (file names with spaces should not be encoded with %20)
|
40
|
+
url = URI.decode(uri.path)
|
41
|
+
generator = Azure::Storage::Common::Core::Auth::SharedAccessSignature.new(@account_name, @access_key)
|
42
|
+
|
43
|
+
CGI::parse(uri.query || "").inject({}) { |memo, (k, v)| memo[k.to_sym] = v; memo }
|
44
|
+
|
45
|
+
if options[:service] == (nil) && uri.host != (nil)
|
46
|
+
host_splits = uri.host.split(".")
|
47
|
+
options[:service] = host_splits[1].chr if host_splits.length > 1 && host_splits[0] == @account_name
|
48
|
+
end
|
49
|
+
|
50
|
+
sas_params = if use_account_sas
|
51
|
+
generator.generate_account_sas_token(options)
|
52
|
+
else
|
53
|
+
generator.generate_service_sas_token(url, options)
|
54
|
+
end
|
55
|
+
|
56
|
+
URI.parse(uri.to_s + (uri.query.nil? ? "?" : "&") + sas_params)
|
57
|
+
end
|
58
|
+
|
41
59
|
def upload(storage_path, local_path)
|
42
60
|
begin
|
43
61
|
client.create_block_blob(@container, storage_path, File.open(local_path, "rb"))
|
@@ -6,7 +6,7 @@ module Cnvrg
|
|
6
6
|
class GcpClient < Client
|
7
7
|
def initialize(project_id: nil, credentials: nil, bucket_name: nil, sts: nil)
|
8
8
|
@key, @iv = extract_key_iv(sts)
|
9
|
-
@project_id = Cnvrg::Helpers.decrypt(@key, @iv, project_id)
|
9
|
+
@project_id = Cnvrg::Helpers.decrypt(@key, @iv, project_id) if project_id.present?
|
10
10
|
@credentials_path = Cnvrg::Helpers.decrypt(@key, @iv, credentials)
|
11
11
|
@tempfile = nil
|
12
12
|
@bucket_name = Cnvrg::Helpers.decrypt(@key, @iv, bucket_name)
|
data/lib/cnvrg/helpers/agent.rb
CHANGED
@@ -22,6 +22,7 @@ class Cnvrg::Helpers::Agent
|
|
22
22
|
@slug = slug
|
23
23
|
@files_exist = files_exist
|
24
24
|
@container_name = container_name
|
25
|
+
@execute_command_completed = false
|
25
26
|
@is_new_main = !ENV["MAIN_CONTAINER_PORT"].blank?
|
26
27
|
@main_name = @is_new_main ? "main" : "slave"
|
27
28
|
@run_in_main = @container_name.downcase == @main_name
|
@@ -79,6 +80,7 @@ class Cnvrg::Helpers::Agent
|
|
79
80
|
command_status = Status::ABORTED
|
80
81
|
@exit_status = 127
|
81
82
|
end
|
83
|
+
@execute_command_completed = true
|
82
84
|
finish_log = "Command: #{@command} with slug: #{@slug} finished"
|
83
85
|
finish_log += " after #{@real_execution_retries} retries" if @real_execution_retries > 0
|
84
86
|
log_internal(finish_log)
|
@@ -97,7 +99,7 @@ class Cnvrg::Helpers::Agent
|
|
97
99
|
|
98
100
|
def periodic_thread
|
99
101
|
Thread.new do
|
100
|
-
while
|
102
|
+
while !@execute_command_completed
|
101
103
|
Thread.exit if @log_interval.blank?
|
102
104
|
sleep(@log_interval)
|
103
105
|
send_logs
|
@@ -179,11 +181,17 @@ class Cnvrg::Helpers::Agent
|
|
179
181
|
end
|
180
182
|
end
|
181
183
|
@exit_status = $?.exitstatus
|
184
|
+
rescue NoMethodError => e
|
185
|
+
log_internal("No Method Error: #{e}", level: LogLevel::ERROR)
|
186
|
+
@exit_status = 129
|
182
187
|
rescue Timeout::Error
|
183
188
|
Process.kill(0, @pid)
|
184
189
|
@errors << {log: "Command timed out!", timestamp: Time.now}
|
185
190
|
log_internal("Command timed out!", level: LogLevel::ERROR)
|
186
191
|
@exit_status = 124
|
192
|
+
rescue => e
|
193
|
+
log_internal("Error: #{e}", level: LogLevel::ERROR)
|
194
|
+
@exit_status = 129
|
187
195
|
ensure
|
188
196
|
retry_command if @retries != 0 and @exit_status !=0
|
189
197
|
@exit_status
|
data/lib/cnvrg/project.rb
CHANGED
@@ -829,12 +829,12 @@ module Cnvrg
|
|
829
829
|
Cnvrg::API.request("users/#{@owner}/projects/#{@slug}/jobs/#{job_type.underscore}/#{job_id}/set_started", "POST", {job_type: job_type, job_id: job_id})
|
830
830
|
end
|
831
831
|
|
832
|
-
def self.stop_if_project_present(project_home, project_name)
|
832
|
+
def self.stop_if_project_present(project_home, project_name, owner)
|
833
833
|
cli = Cnvrg::CLI.new()
|
834
834
|
config = YAML.load_file(project_home + "/.cnvrg/config.yml")
|
835
835
|
local_commit = YAML.load_file(project_home + "/.cnvrg/idx.yml")[:commit] rescue nil
|
836
836
|
return if local_commit.blank?
|
837
|
-
if config[:project_name] == project_name
|
837
|
+
if config[:project_name] == project_name && config[:owner] == owner
|
838
838
|
cli.log_message("Project already present, clone aborted")
|
839
839
|
exit(0)
|
840
840
|
end
|
data/lib/cnvrg/version.rb
CHANGED
data/lib/cnvrg.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cnvrg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yochay Ettun
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-
|
13
|
+
date: 2022-09-13 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -150,6 +150,20 @@ dependencies:
|
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: 0.15.2
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: warning
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 1.3.0
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 1.3.0
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: netrc
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|