Class: AutoConsul::Cluster::Registry::S3Provider
- Inherits:
-
Provider
- Object
- Provider
- AutoConsul::Cluster::Registry::S3Provider
show all
- Defined in:
- lib/auto-consul/providers/s3.rb
Defined Under Namespace
Classes: S3Member
Constant Summary
collapse
- KEY_TIMESTAMP_FORMAT =
'%Y%m%d%H%M%S'
Instance Attribute Summary
Attributes inherited from Provider
#uri
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Provider
#initialize
Class Method Details
.from_key_base(key_base) ⇒ Object
63
64
65
66
|
# File 'lib/auto-consul/providers/s3.rb', line 63
def self.from_key_base key_base
stamp, identifier = key_base.split('-', 2)
[read_stamp(stamp), identifier]
end
|
.get_s3 ⇒ Object
28
29
30
|
# File 'lib/auto-consul/providers/s3.rb', line 28
def self.get_s3
AWS::S3.new
end
|
.read_stamp(stamp) ⇒ Object
54
55
56
57
|
# File 'lib/auto-consul/providers/s3.rb', line 54
def self.read_stamp stamp
t = Time.strptime(stamp, KEY_TIMESTAMP_FORMAT)
Time.utc(t.year, t.month, t.day, t.hour, t.min, t.sec, 0)
end
|
.to_key_base(time, identifier) ⇒ Object
59
60
61
|
# File 'lib/auto-consul/providers/s3.rb', line 59
def self.to_key_base time, identifier
"#{write_stamp time}-#{identifier.to_s}"
end
|
.write_stamp(time) ⇒ Object
50
51
52
|
# File 'lib/auto-consul/providers/s3.rb', line 50
def self.write_stamp time
time.dup.utc.strftime KEY_TIMESTAMP_FORMAT
end
|
Instance Method Details
#bucket ⇒ Object
36
37
38
|
# File 'lib/auto-consul/providers/s3.rb', line 36
def bucket
@bucket ||= s3.buckets[bucket_name]
end
|
#bucket_name ⇒ Object
32
33
34
|
# File 'lib/auto-consul/providers/s3.rb', line 32
def bucket_name
uri.host
end
|
#deletes!(deletes) ⇒ Object
104
105
106
|
# File 'lib/auto-consul/providers/s3.rb', line 104
def deletes! deletes
bucket.objects.delete deletes if deletes.size > 0
end
|
#heartbeat!(identity, data, expiry = nil) ⇒ Object
72
73
74
75
76
|
# File 'lib/auto-consul/providers/s3.rb', line 72
def heartbeat! identity, data, expiry=nil
result = bucket.objects[write_key now, identity].write data
purge!(expiry) unless expiry.nil?
result
end
|
#key_prefix ⇒ Object
40
41
42
|
# File 'lib/auto-consul/providers/s3.rb', line 40
def key_prefix
uri.path[1..-1]
end
|
#members(expiry) ⇒ Object
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/auto-consul/providers/s3.rb', line 85
def members expiry
deletes, actives = [], {}
min_time = Time.now.utc - expiry + 1
min_key = File.join(key_prefix, min_time.strftime('%Y%m%d%H%M%S-'))
bucket.objects.with_prefix(key_prefix).each do |obj|
if obj.key < min_key
deletes << obj
else
o = S3Member.new(obj)
actives[o.identifier] = o
end
end
deletes! deletes
actives.values.sort_by {|m| [m.time, m.identifier]}
end
|
#now ⇒ Object
44
45
46
|
# File 'lib/auto-consul/providers/s3.rb', line 44
def now
Time.now
end
|
#purge!(expiry) ⇒ Object
78
79
80
81
82
83
|
# File 'lib/auto-consul/providers/s3.rb', line 78
def purge! expiry
min_key = File.join(key_prefix, "#{self.class.write_stamp(Time.now - expiry + 1)}-")
bucket.objects.with_prefix(key_prefix).delete_if do |s3obj|
s3obj.key < min_key
end
end
|
#s3 ⇒ Object
24
25
26
|
# File 'lib/auto-consul/providers/s3.rb', line 24
def s3
@s3 ||= self.class.get_s3
end
|
#write_key(time, identity) ⇒ Object
68
69
70
|
# File 'lib/auto-consul/providers/s3.rb', line 68
def write_key time, identity
File.join(key_prefix, self.class.to_key_base(time, identity))
end
|