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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3e3cdc6ae9700edde65741d6ff8e797d3b260e45
4
- data.tar.gz: 21a64e404ca0f783c34d102b858cea2dcf8ec3b0
3
+ metadata.gz: d779231c0e0dc99fe5f3c7ed558c953517b52eb0
4
+ data.tar.gz: 6bad4ad285f0cc504c48b32efcecb0ed00660692
5
5
  SHA512:
6
- metadata.gz: 97712b3d3f4bccc0dc6c7a9e1813c43d6bcae612328091a07e7e5ea6cd9e71e11056fabfa4efa59518b098c9a53e0786b0af2d67ca2e98b342f6656d69378891
7
- data.tar.gz: 6bb7d555055c86dff31d8c814f9b2570b4d3afc116fdfc5e2d52bc71edf1e579a3976b8bbd0166bbc0119ceda0d601bd19998c05aeec173309ed5c527bfe671f
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 = bucket_from_credentials(from_credentials)
17
- @to_bucket = bucket_from_credentials(to_credentials)
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
- if object_needs_syncing?(object)
27
- sync(object)
28
- object_counts[:sync] += 1
29
- else
30
- logger.debug "Skipped #{pp object}"
31
- object_counts[:skip] += 1
32
- end
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( to_bucket.objects[object.key], acl:DEFAULT_ACL)
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 bucket_from_credentials(credentials)
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
- if !bucket.exists?
70
- bucket = s3.buckets.create( credentials[:bucket] )
71
- end
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"}
@@ -1,3 +1,3 @@
1
1
  module AwsOneClickStaging
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
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.0
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-26 00:00:00.000000000 Z
11
+ date: 2015-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk