dalli_keys 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e4962607b1fa8b300cb2f92ee880a441de10a3c3
4
+ data.tar.gz: ecdaad55f1b2f6efac043362bf441e36f22acdf6
5
+ SHA512:
6
+ metadata.gz: 38c437f8670a0cc6d7b71d691ee618a546addd9248f05fb0ce74ff89a9aa11e17fe109cbfebae4e1593e9d11ec0c0af9f611400eea0c6dc88d53bdd0666e8500
7
+ data.tar.gz: d4b86e1ca1ef5ef15558d66c4764f214421b4c9920118bee8f7dbba301c71dc809404a33bc9ddbacb51c227ea30284f79c7f0422acbfedab8a2cf7e7b1670ecf
data/lib/dalli_keys.rb ADDED
@@ -0,0 +1,69 @@
1
+ require_relative 'dalli_keys/dalli_key'
2
+
3
+ module DalliKeys
4
+ VERSION = '0.0.5'
5
+
6
+ def self.version
7
+ VERSION
8
+ end
9
+
10
+ def self.get_keys_on_host(host = 'localhost', port = 11211)
11
+ require 'date'
12
+ require 'net/telnet'
13
+
14
+ telnet = Net::Telnet.new('Host' => host, 'Port' => port, 'Prompt' => /^END/)
15
+
16
+ uptime, current_time = get_stats(telnet)
17
+
18
+ items = get_slab_ids(telnet).map do |slab_id|
19
+ telnet.cmd("stats cachedump #{slab_id} 0").split("\n").select { |line| line =~ /^ITEM/ }
20
+ end
21
+
22
+ items.flatten.map do |item_line|
23
+ match_data = item_line.match(/^ITEM\s(.*?)\s\[(\d+)\sb;\s(\d+)\ss\]/)
24
+ if current_time - uptime == match_data[3].to_i
25
+ expiration = nil
26
+ else
27
+ expiration = DateTime.strptime(match_data[3], '%s')
28
+ end
29
+ DalliKey.new(match_data[1], match_data[2].to_i, expiration)
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def self.get_slab_ids(telnet)
36
+ slab_lines = telnet.cmd('stats slabs').split("\n").select { |l| l =~ /^STAT\s(\d+)/ }
37
+ slab_lines.map { |l| l.match(/^STAT\s(\d+):/)[1] }.map(&:to_i).uniq
38
+ end
39
+
40
+ def self.get_stats(telnet)
41
+ stat_lines = telnet.cmd('stats').split("\n")
42
+ uptime = stat_lines.detect { |l| l.include? 'STAT uptime' }.sub('STAT uptime ', '').to_i
43
+ current_time = stat_lines.detect { |l| l.include? 'STAT time' }.sub('STAT time ', '').to_i
44
+ return uptime, current_time
45
+ end
46
+ end
47
+
48
+ # Monkey patch for Dalli::Client
49
+ module Dalli
50
+ class Client
51
+ def keys
52
+ keys = @servers.map do |server|
53
+ host, port = server.split(':')
54
+ DalliKeys.get_keys_on_host(host, port)
55
+ end
56
+ keys.flatten
57
+ end
58
+ end
59
+ end
60
+
61
+ module ActiveSupport
62
+ module Cache
63
+ class DalliStore
64
+ def keys
65
+ with(&:keys)
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,9 @@
1
+ class DalliKey
2
+ attr_accessor :key, :size, :expiration
3
+
4
+ def initialize(key, size, expiration)
5
+ @key = key
6
+ @size = size
7
+ @expiration = expiration
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dalli_keys
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Thomas Hart
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dalli
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 3.3.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 3.3.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: guard
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 2.13.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 2.13.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard-rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 4.6.4
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 4.6.4
69
+ description: DalliKeys extends Dalli with tools to get key information
70
+ email: tom@thomashart.me
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files: []
74
+ files:
75
+ - lib/dalli_keys.rb
76
+ - lib/dalli_keys/dalli_key.rb
77
+ homepage: http://github.com/myrridin/dalli-keys/
78
+ licenses:
79
+ - MIT
80
+ metadata: {}
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 2.4.8
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: DalliKeys
101
+ test_files: []