cloud_files_transfer 0.0.4 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01c05eb886b60bc720391b5b5b175239462b7c0b
4
- data.tar.gz: 0af38c4b6be02f69838c976690b53fe3059754f0
3
+ metadata.gz: 4f731a4bd53072ba8ae3b2a843678c7a6f37fc5f
4
+ data.tar.gz: 39ffce01aec214d12aa17a6ed6f73f49a3b9bc75
5
5
  SHA512:
6
- metadata.gz: f06c8f5516fe239271c6c278c2f28cd9f08dcaa0c5fd81e1541ba319e624c5a4f007f466a0beb6256ca7294a08461c848fa0928209678d49c454e4ba65e1bb8c
7
- data.tar.gz: 78ff5243f818edb1b0bd7b34fa2a3883ff26087d1a89b1284a6238a0daf31c0e12bf5883c3488f0cd24926df3e32795a17f448d44dcdbca980266fbfc65f49cb
6
+ metadata.gz: 653c0a9edf5a6a4b73d965834e0001f8a4348005dfaf4b99879d46dc20435f71ad48460ef22b783cf812d15c0b34fbc98b54798e88430ca05dbd774bd4b8d7ba
7
+ data.tar.gz: 58a30b332c3607336ffe2b08764e5c1ba148e79d4fdb5f9f1884197cfd1d08bc6ad1f377427c97fa74b4aef9ef955a5ffde238caca0f50ba372498950d888727
data/README.md CHANGED
@@ -36,7 +36,11 @@ destination:
36
36
 
37
37
  Then launch the rake task to start the transfer. It doesn't matter where you do it from. It could be faster though if done from a Rackspace instance using service net (snet).
38
38
 
39
- $ rake cloud_files_assets:transfer
39
+ $ rake cloudfiles:transfer
40
+
41
+ By default, it will create 4 threads to transfer simultaneously. You can specify the amount of threads like so:
42
+
43
+ $ rake cloudfiles:transfer jobs=8
40
44
 
41
45
  ## Contributing
42
46
 
@@ -19,4 +19,5 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "cloudfiles"
22
+ spec.add_dependency "colorize"
22
23
  end
@@ -19,7 +19,7 @@ module CloudFilesTransfer
19
19
 
20
20
  def create_connection
21
21
  c = CloudFiles::Connection.new(username: username, api_key: api_key, snet: snet)
22
- puts "Connection established."
22
+ puts "Connection established.".colorize(:green)
23
23
  c
24
24
  end
25
25
 
@@ -10,27 +10,49 @@ module CloudFilesTransfer
10
10
  end
11
11
 
12
12
  def self.copy!(origin, destination, path, args={})
13
- return puts("#{path} skipped.") if destination.object_exists?(path)
13
+ return puts("#{path} skipped.".colorize(:light_blue)) if (destination.object_exists?(path) rescue false)
14
14
  new(origin, destination, path, args).copy
15
15
  end
16
16
 
17
17
  def copy
18
18
  retries = 0
19
- puts "Saving #{path}"
20
19
  begin
21
20
  origin_object = origin.object(path)
22
21
  desintation_object = destination.create_object(path)
23
22
  desintation_object.write(origin_object.data)
23
+ success("#{path} saved")
24
24
  rescue Exception
25
25
  retries = retries + 1
26
- unless retries > 5
27
- puts "#{path} failed. Retry"
26
+ unless retries > 2
27
+ warn("#{path} failed. Retry")
28
28
  retry
29
29
  else
30
- puts "#{path} failed."
30
+ fail("#{path} failed.")
31
31
  end
32
32
  end
33
33
  end
34
34
 
35
+ private
36
+
37
+ def info message
38
+ colored_print(message, :light_blue)
39
+ end
40
+
41
+ def warn message
42
+ colored_print(message, :yellow)
43
+ end
44
+
45
+ def success message
46
+ colored_print(message, :green)
47
+ end
48
+
49
+ def fail message
50
+ colored_print(message, :red)
51
+ end
52
+
53
+ def colored_print message, color
54
+ puts(message.colorize(color))
55
+ end
56
+
35
57
  end
36
58
  end
@@ -1,3 +1,3 @@
1
1
  module CloudFilesTransfer
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -1,11 +1,12 @@
1
1
  require 'cloudfiles'
2
+ require 'colorize'
2
3
  require 'yaml'
3
4
  require "cloud_files_transfer/version"
4
5
  require 'cloud_files_transfer/client'
5
- require 'cloud_files_transfer/container'
6
6
  require 'cloud_files_transfer/transfer'
7
7
 
8
8
  module CloudFilesTransfer
9
+
9
10
  class Railtie < Rails::Railtie
10
11
 
11
12
  rake_tasks do
@@ -1,4 +1,4 @@
1
- namespace :cloud_files_assets do
1
+ namespace :cloudfiles do
2
2
 
3
3
  desc "Copy assets from one container to another container"
4
4
  task transfer: :environment do
@@ -29,14 +29,26 @@ namespace :cloud_files_assets do
29
29
  )
30
30
 
31
31
  @container_from = @client_from.container
32
- @container_to = CloudFilesTransfer::Container.new(@client_to.container)
32
+ @container_to = @client_to.container
33
33
  @assets = @container_from.objects
34
34
 
35
- puts "Starting transfer. #{@assets.size} files to copy."
35
+ jobs_count = ENV['jobs'].try(:to_i) || 4
36
36
 
37
- @assets.each do |path|
38
- CloudFilesTransfer::Transfer.copy!(@container_from, @container_to, path)
37
+ puts "#{@assets.size} files to copy."
38
+ puts "Transfering #{jobs_count} files at a time. Here we go!"
39
+
40
+ @assets = @assets.in_groups(jobs_count)
41
+
42
+ Thread.abort_on_exception=true
43
+
44
+ threads = jobs_count.times.map do |i|
45
+ Thread.new(i) do |i|
46
+ @assets[i].each do |path|
47
+ CloudFilesTransfer::Transfer.copy!(@container_from, @container_to, path)
48
+ end
49
+ end
39
50
  end
51
+ threads.each {|t| t.join}
40
52
 
41
53
  puts "Done."
42
54
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloud_files_transfer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mathieu Gagné
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: colorize
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description: Transfer Rackspace Cloud Files assets from one container to another or
28
42
  from account to another.
29
43
  email:
@@ -40,7 +54,6 @@ files:
40
54
  - cloud_files_transfer.gemspec
41
55
  - lib/cloud_files_transfer.rb
42
56
  - lib/cloud_files_transfer/client.rb
43
- - lib/cloud_files_transfer/container.rb
44
57
  - lib/cloud_files_transfer/transfer.rb
45
58
  - lib/cloud_files_transfer/version.rb
46
59
  - lib/tasks/cloud_files_assets.rake
@@ -1,38 +0,0 @@
1
- module CloudFilesTransfer
2
- class Container
3
-
4
- attr_accessor :container, :skip_existing_object
5
-
6
- delegate :object_exists?, :create_object, to: :container
7
-
8
- def initialize(container, args={})
9
- @container = container
10
- @skip_existing_object = args.fetch(:skip_existing_object, true)
11
- end
12
-
13
- def transfer(object)
14
- return skip_message(object.name) if skip_existing_object and object_exists?(object.name)
15
- retries = 0
16
- puts "Saving #{object.name}"
17
- begin
18
- copy = create_object(object.name)
19
- copy.write(object.data)
20
- rescue Exception
21
- retries = retries + 1
22
- unless retries > 5
23
- puts "#{object.name} failed. Retry"
24
- retry
25
- else
26
- puts "#{object.name} failed."
27
- end
28
- end
29
- end
30
-
31
- private
32
-
33
- def skip_message(object_name)
34
- puts "#{object_name} skipped."
35
- end
36
-
37
- end
38
- end