aws_one_click_staging 0.1.0 → 0.1.1
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/aws_one_click_staging/bucket_sync_service.rb +31 -18
- data/lib/aws_one_click_staging/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d779231c0e0dc99fe5f3c7ed558c953517b52eb0
|
4
|
+
data.tar.gz: 6bad4ad285f0cc504c48b32efcecb0ed00660692
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20456486a2357d797831905748a5352a8ad32aed06e11682c2071c3957066ed1341b744f3b5831076f374b1cc3f15085dd5517e0d7f4f2e443573efb0e5c7a01
|
7
|
+
data.tar.gz: 2c3e1a8eb4829d92be2edab97e39fff8edc018a6f51e3c5f6712ad7fe003e1db97f3e0ee4b487e2a36466c30d10041650337e07b68a18781a1a1f1726c01778b
|
@@ -1,36 +1,46 @@
|
|
1
1
|
# props to bantic
|
2
2
|
# https://gist.github.com/bantic/4080793
|
3
3
|
require 'aws/s3' # gem name is 'aws-sdk'
|
4
|
+
require "thwait"
|
4
5
|
|
5
6
|
class BucketSyncService
|
6
7
|
attr_reader :from_bucket, :to_bucket, :logger
|
7
8
|
attr_accessor :debug
|
8
9
|
|
9
|
-
DEFAULT_ACL = :public_read
|
10
|
-
|
11
10
|
# from_credentials and to_credentials are both hashes with these keys:
|
12
11
|
# * :aws_access_key_id
|
13
12
|
# * :aws_secret_access_key
|
14
13
|
# * :bucket
|
15
14
|
def initialize(from_credentials, to_credentials)
|
16
|
-
@from_bucket =
|
17
|
-
@to_bucket =
|
15
|
+
@from_bucket = get_bucket_reference(from_credentials)
|
16
|
+
@to_bucket = get_bucket_reference(to_credentials)
|
18
17
|
end
|
19
18
|
|
20
19
|
def perform(output=STDOUT)
|
20
|
+
AWS.eager_autoload! # this makes threads even more happy
|
21
|
+
|
21
22
|
object_counts = {sync:0, skip:0}
|
22
23
|
create_logger(output)
|
23
24
|
|
25
|
+
threads = []
|
26
|
+
|
24
27
|
logger.info "Starting sync."
|
25
28
|
from_bucket.objects.each do |object|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
threads << Thread.new {
|
30
|
+
if object_needs_syncing?(object)
|
31
|
+
sync(object)
|
32
|
+
object_counts[:sync] += 1
|
33
|
+
else
|
34
|
+
logger.debug "Skipped #{pp object}"
|
35
|
+
object_counts[:skip] += 1
|
36
|
+
end
|
37
|
+
}
|
38
|
+
sleep 0.01 while threads.select {|t| t.alive?}.count > 16
|
33
39
|
end
|
40
|
+
|
41
|
+
|
42
|
+
ThreadsWait.all_waits(threads)
|
43
|
+
|
34
44
|
logger.info "Done. Synced #{object_counts[:sync]}, " +
|
35
45
|
"skipped #{object_counts[:skip]}."
|
36
46
|
end
|
@@ -45,7 +55,7 @@ class BucketSyncService
|
|
45
55
|
|
46
56
|
def sync(object)
|
47
57
|
logger.debug "Syncing #{pp object}"
|
48
|
-
object.copy_to(
|
58
|
+
object.copy_to(to_bucket.objects[object.key])
|
49
59
|
end
|
50
60
|
|
51
61
|
def pp(object)
|
@@ -56,25 +66,28 @@ class BucketSyncService
|
|
56
66
|
|
57
67
|
def object_needs_syncing?(object)
|
58
68
|
to_object = to_bucket.objects[object.key]
|
59
|
-
return true if !to_object.exists?
|
69
|
+
return true if !to_object.exists? # object isn't even present in the dst bucket
|
60
70
|
|
61
|
-
return to_object.etag != object.etag
|
71
|
+
return to_object.etag != object.etag # does the etag on the dst object differ from src?
|
62
72
|
end
|
63
73
|
|
64
|
-
def
|
74
|
+
def get_bucket_reference(credentials)
|
65
75
|
s3 = AWS::S3.new(access_key_id: credentials[:aws_access_key_id],
|
66
76
|
secret_access_key: credentials[:aws_secret_access_key])
|
67
77
|
|
68
78
|
bucket = s3.buckets[ credentials[:bucket] ]
|
69
|
-
|
70
|
-
|
71
|
-
|
79
|
+
create_bucket_if_needed!(bucket)
|
80
|
+
end
|
81
|
+
|
82
|
+
def create_bucket_if_needed!(bucket)
|
83
|
+
return s3.buckets.create( credentials[:bucket] ) if !bucket.exists?
|
72
84
|
bucket
|
73
85
|
end
|
74
86
|
end
|
75
87
|
|
76
88
|
|
77
89
|
|
90
|
+
|
78
91
|
=begin
|
79
92
|
Example usage:
|
80
93
|
from_creds = {aws_access_key_id:"XXX", aws_secret_access_key:"YYY", bucket:"first-bucket"}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws_one_click_staging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TheNotary
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|