aws_one_click_staging 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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