rack2aws 0.1.0 → 0.2.0
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/lib/rack2aws.rb +14 -5
- data/lib/rack2aws/processor_count.rb +88 -0
- data/lib/rack2aws/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72ae29bf646a70f2cc5731fbad6ba8a1c61f2115
|
4
|
+
data.tar.gz: 9464c44d339a1a1587795efde4b0d2f622aaebd8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 621b2fbfd728276c06cf70e45c5b777b84b740c36cc7ea33ab789a3064c56f51b92562bc4a7017a481aed2565cd692544619f5a084bb40ce670284a2d0e2dfaf
|
7
|
+
data.tar.gz: 903d33fa596f8106bb4d5d2d6a6a1a1d0955135d4918119f078063ffd1450ff2cf68aeae8cb3a6e0d155b556201517d709dff772330e94f12c70957be2edbfe1
|
data/lib/rack2aws.rb
CHANGED
@@ -2,13 +2,14 @@ require 'fog'
|
|
2
2
|
require 'commander'
|
3
3
|
require 'rack2aws/config'
|
4
4
|
require 'rack2aws/version'
|
5
|
+
require 'rack2aws/processor_count'
|
5
6
|
|
6
7
|
|
7
8
|
module Rack2Aws
|
8
|
-
class
|
9
|
+
class FileManager
|
9
10
|
include Rack2Aws::Configuration
|
10
11
|
|
11
|
-
attr_reader :per_page, :rackspace, :aws, :rackspace_directory, :aws_directory, :verbose_mode, :files, :total
|
12
|
+
attr_reader :per_page, :rackspace, :aws, :rackspace_directory, :aws_directory, :nproc, :verbose_mode, :files, :total
|
12
13
|
|
13
14
|
def initialize(options={})
|
14
15
|
options = default_options.merge(options)
|
@@ -18,6 +19,7 @@ module Rack2Aws
|
|
18
19
|
|
19
20
|
@rackspace_directory = rackspace.directories.get(options[:rackspace_container])
|
20
21
|
@aws_directory = aws.directories.get(options[:aws_bucket])
|
22
|
+
@nproc = options[:nproc]
|
21
23
|
@verbose_mode = options[:verbose]
|
22
24
|
@files = []
|
23
25
|
@total = 0
|
@@ -57,15 +59,15 @@ module Rack2Aws
|
|
57
59
|
def copy_files(page, files)
|
58
60
|
puts " [#{Process.pid}] Page #{page+1}: Copying #{files.size} files..." if verbose_mode
|
59
61
|
total = files.size
|
60
|
-
max_processes = 4
|
61
62
|
process_pids = {}
|
62
63
|
time = Time.now
|
63
64
|
|
64
65
|
while !files.empty? or !process_pids.empty?
|
65
|
-
while process_pids.size <
|
66
|
+
while process_pids.size < nproc and files.any? do
|
66
67
|
file = files.pop
|
67
68
|
pid = Process.fork do
|
68
69
|
copy_file(file)
|
70
|
+
exit!(0)
|
69
71
|
end
|
70
72
|
process_pids[pid] = { :file => file }
|
71
73
|
end
|
@@ -92,6 +94,7 @@ module Rack2Aws
|
|
92
94
|
|
93
95
|
class CLI
|
94
96
|
include Commander::Methods
|
97
|
+
include Rack2Aws::ProcessorCount
|
95
98
|
|
96
99
|
def run
|
97
100
|
program :name, 'rack2aws'
|
@@ -107,6 +110,7 @@ module Rack2Aws
|
|
107
110
|
|
108
111
|
cmd.option '--container CONTAINER_NAME', String, 'Rackspace Cloud Files container name'
|
109
112
|
cmd.option '--bucket BUCKET_NAME', String, 'AWS S3 bucket name'
|
113
|
+
cmd.option '--nproc NUM_PROC', Integer, 'Number of processes to fork'
|
110
114
|
cmd.action do |args, options|
|
111
115
|
if options.container.nil?
|
112
116
|
options.container = ask('Rackspace Cloud Files container: ')
|
@@ -116,9 +120,14 @@ module Rack2Aws
|
|
116
120
|
options.bucket = ask('AWS S3 bucket: ')
|
117
121
|
end
|
118
122
|
|
119
|
-
|
123
|
+
if options.nproc.nil?
|
124
|
+
options.nproc = processor_count()
|
125
|
+
end
|
126
|
+
|
127
|
+
FileManager.new({
|
120
128
|
:rackspace_container => options.container,
|
121
129
|
:aws_bucket => options.bucket,
|
130
|
+
:nproc => options.nproc,
|
122
131
|
:verbose => $verbose
|
123
132
|
}).copy
|
124
133
|
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Rack2Aws
|
2
|
+
# Taken from parallel lib on Github:
|
3
|
+
# https://github.com/grosser/parallel/blob/master/lib/parallel/processor_count.rb
|
4
|
+
module ProcessorCount
|
5
|
+
# Number of processors seen by the OS and used for process scheduling.
|
6
|
+
#
|
7
|
+
# * AIX: /usr/sbin/pmcycles (AIX 5+), /usr/sbin/lsdev
|
8
|
+
# * BSD: /sbin/sysctl
|
9
|
+
# * Cygwin: /proc/cpuinfo
|
10
|
+
# * Darwin: /usr/bin/hwprefs, /usr/sbin/sysctl
|
11
|
+
# * HP-UX: /usr/sbin/ioscan
|
12
|
+
# * IRIX: /usr/sbin/sysconf
|
13
|
+
# * Linux: /proc/cpuinfo
|
14
|
+
# * Minix 3+: /proc/cpuinfo
|
15
|
+
# * Solaris: /usr/sbin/psrinfo
|
16
|
+
# * Tru64 UNIX: /usr/sbin/psrinfo
|
17
|
+
# * UnixWare: /usr/sbin/psrinfo
|
18
|
+
#
|
19
|
+
def processor_count
|
20
|
+
@processor_count ||= begin
|
21
|
+
os_name = RbConfig::CONFIG["target_os"]
|
22
|
+
if os_name =~ /mingw|mswin/
|
23
|
+
require 'win32ole'
|
24
|
+
result = WIN32OLE.connect("winmgmts://").ExecQuery(
|
25
|
+
"select NumberOfLogicalProcessors from Win32_Processor")
|
26
|
+
result.to_enum.collect(&:NumberOfLogicalProcessors).reduce(:+)
|
27
|
+
elsif File.readable?("/proc/cpuinfo")
|
28
|
+
IO.read("/proc/cpuinfo").scan(/^processor/).size
|
29
|
+
elsif File.executable?("/usr/bin/hwprefs")
|
30
|
+
IO.popen("/usr/bin/hwprefs thread_count").read.to_i
|
31
|
+
elsif File.executable?("/usr/sbin/psrinfo")
|
32
|
+
IO.popen("/usr/sbin/psrinfo").read.scan(/^.*on-*line/).size
|
33
|
+
elsif File.executable?("/usr/sbin/ioscan")
|
34
|
+
IO.popen("/usr/sbin/ioscan -kC processor") do |out|
|
35
|
+
out.read.scan(/^.*processor/).size
|
36
|
+
end
|
37
|
+
elsif File.executable?("/usr/sbin/pmcycles")
|
38
|
+
IO.popen("/usr/sbin/pmcycles -m").read.count("\n")
|
39
|
+
elsif File.executable?("/usr/sbin/lsdev")
|
40
|
+
IO.popen("/usr/sbin/lsdev -Cc processor -S 1").read.count("\n")
|
41
|
+
elsif File.executable?("/usr/sbin/sysconf") and os_name =~ /irix/i
|
42
|
+
IO.popen("/usr/sbin/sysconf NPROC_ONLN").read.to_i
|
43
|
+
elsif File.executable?("/usr/sbin/sysctl")
|
44
|
+
IO.popen("/usr/sbin/sysctl -n hw.ncpu").read.to_i
|
45
|
+
elsif File.executable?("/sbin/sysctl")
|
46
|
+
IO.popen("/sbin/sysctl -n hw.ncpu").read.to_i
|
47
|
+
else
|
48
|
+
$stderr.puts "Unknown platform: " + RbConfig::CONFIG["target_os"]
|
49
|
+
$stderr.puts "Assuming 1 processor."
|
50
|
+
1
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
#
|
56
|
+
# Number of physical processor cores on the current system.
|
57
|
+
#
|
58
|
+
def physical_processor_count
|
59
|
+
@physical_processor_count ||= begin
|
60
|
+
ppc = case RbConfig::CONFIG["target_os"]
|
61
|
+
when /darwin1/
|
62
|
+
IO.popen("/usr/sbin/sysctl -n hw.physicalcpu").read.to_i
|
63
|
+
when /linux/
|
64
|
+
cores = {} # unique physical ID / core ID combinations
|
65
|
+
phy = 0
|
66
|
+
IO.read("/proc/cpuinfo").scan(/^physical id.*|^core id.*/) do |ln|
|
67
|
+
if ln.start_with?("physical")
|
68
|
+
phy = ln[/\d+/]
|
69
|
+
elsif ln.start_with?("core")
|
70
|
+
cid = phy + ":" + ln[/\d+/]
|
71
|
+
cores[cid] = true if not cores[cid]
|
72
|
+
end
|
73
|
+
end
|
74
|
+
cores.count
|
75
|
+
when /mswin|mingw/
|
76
|
+
require 'win32ole'
|
77
|
+
result_set = WIN32OLE.connect("winmgmts://").ExecQuery(
|
78
|
+
"select NumberOfCores from Win32_Processor")
|
79
|
+
result_set.to_enum.collect(&:NumberOfCores).reduce(:+)
|
80
|
+
else
|
81
|
+
processor_count
|
82
|
+
end
|
83
|
+
# fall back to logical count if physical info is invalid
|
84
|
+
ppc > 0 ? ppc : processor_count
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/lib/rack2aws/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack2aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Faissal Elamraoui
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|
@@ -78,6 +78,7 @@ files:
|
|
78
78
|
- lib/rack2aws.rb
|
79
79
|
- lib/rack2aws/config.rb
|
80
80
|
- lib/rack2aws/errors.rb
|
81
|
+
- lib/rack2aws/processor_count.rb
|
81
82
|
- lib/rack2aws/props_reader.rb
|
82
83
|
- lib/rack2aws/version.rb
|
83
84
|
homepage: https://amrfaissal.github.io/rack2aws
|