dalli-elasticache 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # dalli-elasticache
2
+
3
+ A wrapper for the [Dalli memcached client](https://github.com/mperham/dalli) with support for [AWS ElastiCache Auto Discovery](http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/AutoDiscovery.html)
4
+
5
+ ## Installation
6
+
7
+ Install the [rubygem](https://rubygems.org/gems/dalli-elasticache):
8
+
9
+ # in your Gemfile
10
+ gem 'dalli-elasticache'
11
+
12
+ ## Usage
13
+
14
+ # Create an ElastiCache instance with your config endpoint and options for Dalli
15
+ elasticache = Dalli::ElastiCache.new(config_endpoint, dalli_options={})
16
+ # For example:
17
+ elasticache = Dalli::ElastiCache.new("aaron-scratch.vfdnac.cfg.use1.cache.amazonaws.com:11211", :ttl => 3600, :namespace => "my_app")
18
+
19
+ elasticache.version # => the config version returned by the ElastiCache config endpoint.
20
+
21
+ client = elasticache.client # a regular Dalli::Client using the instance IP addresses returns by the config endpoint
22
+
23
+ # Check the endpoint to see if the version has changed:
24
+ elasticache.refresh.version
25
+ # If so, update your dalli client:
26
+ client = elasticache.client
27
+
28
+
29
+ ## License
30
+
31
+ Copyright 2013 Aaron Suggs
32
+
33
+ Released under an [MIT License](http://opensource.org/licenses/MIT)
data/Rakefile ADDED
File without changes
@@ -0,0 +1,2 @@
1
+ # Support default bundler require path
2
+ require 'dalli/elasticache'
@@ -0,0 +1,59 @@
1
+ require 'dalli'
2
+ require 'socket'
3
+ require 'dalli/elasticache/version'
4
+
5
+ module Dalli
6
+ class ElastiCache
7
+ attr_accessor :config_host, :config_port, :options
8
+
9
+ def initialize(config_endpoint, options={})
10
+ @config_host, @config_port = config_endpoint.split(':')
11
+ @config_port ||= 11211
12
+ @options = options
13
+
14
+ end
15
+
16
+ def client
17
+ Dalli::Client.new(servers, options)
18
+ end
19
+
20
+ def refresh
21
+ # Reset data
22
+ @data = nil
23
+ data
24
+
25
+ self
26
+ end
27
+
28
+ def config_get_cluster
29
+ # TODO: handle timeouts
30
+ s = TCPSocket.new(config_host, config_port)
31
+ s.puts "config get cluster\r\n"
32
+ data = []
33
+ while (line = s.gets) != "END\r\n"
34
+ data << line
35
+ end
36
+
37
+ s.close
38
+ data
39
+ end
40
+
41
+ def data
42
+ return @data if @data
43
+ raw_data = config_get_cluster
44
+ version = raw_data[1].to_i
45
+ instance_data = raw_data[2].split(/\s+/)
46
+ instances = instance_data.map{ |raw| host, ip, port = raw.split('|'); {:host => host, :ip => ip, :port => port} }
47
+ @data = { :version => version, :instances => instances }
48
+ end
49
+
50
+ def version
51
+ data[:version]
52
+ end
53
+
54
+ def servers
55
+ data[:instances].map{ |i| "#{i[:ip]}:#{i[:port]}" }
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,5 @@
1
+ module Dalli
2
+ class ElastiCache
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dalli-elasticache
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Aaron Suggs
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: dalli
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 1.0.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.0.0
46
+ description: A wrapper for Dalli with support for AWS ElastiCache Auto Discovery
47
+ email: aaron@ktheory.com
48
+ executables: []
49
+ extensions: []
50
+ extra_rdoc_files: []
51
+ files:
52
+ - lib/dalli/elasticache/version.rb
53
+ - lib/dalli/elasticache.rb
54
+ - lib/dalli-elasticache.rb
55
+ - README.md
56
+ - Rakefile
57
+ homepage: http://github.com/ktheory/dalli-elasticache
58
+ licenses: []
59
+ post_install_message:
60
+ rdoc_options:
61
+ - --charset=UTF-8
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.3.5
76
+ requirements: []
77
+ rubyforge_project:
78
+ rubygems_version: 1.8.24
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: Adds AWS ElastiCache Auto Discovery support to Dalli memcache client
82
+ test_files: []