redreloader 0.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 +7 -0
- data/CHANGELOG +1 -0
- data/Manifest +6 -0
- data/Rakefile +8 -0
- data/bin/redreloader +36 -0
- data/lib/redreloader.rb +43 -0
- data/redreloader.example.conf +8 -0
- data/redreloader.gemspec +34 -0
- metadata +70 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 00a108459fb95ec78f63cd3f17188cd2c61b37ab
|
4
|
+
data.tar.gz: 69b8d894d08386e13d1775dea36c8726e4b6baef
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c07fd3aa42a1a6a921d2bfd4500526afdb503f4b45510a85070d37784963ec319bece61931f4238569862fe40ab2a138e7aa011a64f27977518d11cb87a99ce7
|
7
|
+
data.tar.gz: 7b718e396a222b0089f919e9a40f850631aa3a7b61524591a2beb5fa448612e36be3b35f02e48f17e3343ab8ee9c0a988df5d6f8fe333a38d97b697a0fca9a0e
|
data/CHANGELOG
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
v0.1. redreloader downloads a file from redis and runs a command on change
|
data/Manifest
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
require 'echoe'
|
2
|
+
Echoe.new("redreloader") do |p|
|
3
|
+
p.author = "Andrew Snow "
|
4
|
+
p.email = 'andrew@modulus.org'
|
5
|
+
p.summary = "Transfers file from redis and runs a command whenever it changes"
|
6
|
+
p.url = "https://github.com/andys/redreloader"
|
7
|
+
p.runtime_dependencies = ['redis']
|
8
|
+
end
|
data/bin/redreloader
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
require '../lib/redreloader'
|
5
|
+
|
6
|
+
fn = ARGV[0]
|
7
|
+
fn ||= '/etc/redreloader.conf'
|
8
|
+
|
9
|
+
config = YAML::load(File.read(fn))
|
10
|
+
puts config.inspect
|
11
|
+
|
12
|
+
Redreloader.redis = Redis.new(config['redis'])
|
13
|
+
|
14
|
+
def log(str)
|
15
|
+
puts "[#{Time.now}] ---> #{str}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def run!(cmd)
|
19
|
+
log "Running #{cmd.inspect}:"
|
20
|
+
system cmd
|
21
|
+
log "Returned #{$!.to_i}"
|
22
|
+
end
|
23
|
+
|
24
|
+
digest = Redreloader.calcmd5(File.read(config['file']))
|
25
|
+
|
26
|
+
run! config['command']
|
27
|
+
|
28
|
+
loop do
|
29
|
+
Redreloader.if_changed_from(config['key'], digest) do |newdata, newdigest|
|
30
|
+
log "File changed"
|
31
|
+
File.open(config['file'], 'w') {|io| io.write(newdata) }
|
32
|
+
digest = newdigest
|
33
|
+
run! config['command']
|
34
|
+
end
|
35
|
+
sleep config['interval'] || 1
|
36
|
+
end
|
data/lib/redreloader.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'redis'
|
2
|
+
require 'zlib'
|
3
|
+
require 'digest/md5'
|
4
|
+
|
5
|
+
class Redreloader
|
6
|
+
class << self
|
7
|
+
attr_accessor :redis
|
8
|
+
attr_accessor :ttl
|
9
|
+
|
10
|
+
def [](key)
|
11
|
+
val = with_binary_redis { @redis.getrange(key, 16, -1) }
|
12
|
+
Zlib::Inflate.inflate(val) if val && val != ""
|
13
|
+
end
|
14
|
+
|
15
|
+
def []=(key, val)
|
16
|
+
with_binary_redis { @redis.set(key, calcmd5(val) + Zlib::Deflate.deflate(val), ex: @ttl) }
|
17
|
+
end
|
18
|
+
|
19
|
+
def calcmd5(val)
|
20
|
+
Digest::MD5.digest val
|
21
|
+
end
|
22
|
+
|
23
|
+
def digest(key)
|
24
|
+
data = with_binary_redis { @redis.getrange(key, 0, 15) }
|
25
|
+
data if data != ""
|
26
|
+
end
|
27
|
+
|
28
|
+
def if_changed_from(key, old_digest)
|
29
|
+
if (new_digest = digest(key)) && new_digest != old_digest
|
30
|
+
newdata = self[key]
|
31
|
+
yield(newdata, new_digest) if newdata
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def with_binary_redis
|
36
|
+
original_encoding = Encoding.default_external
|
37
|
+
Encoding.default_external = Encoding.find('binary')
|
38
|
+
yield
|
39
|
+
ensure
|
40
|
+
Encoding.default_external = original_encoding
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/redreloader.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
# stub: redreloader 0.1 ruby lib
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "redreloader"
|
6
|
+
s.version = "0.1"
|
7
|
+
|
8
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
9
|
+
s.require_paths = ["lib"]
|
10
|
+
s.authors = ["Andrew Snow "]
|
11
|
+
s.date = "2014-08-30"
|
12
|
+
s.description = "Transfers file from redis and runs a command whenever it changes"
|
13
|
+
s.email = "andrew@modulus.org"
|
14
|
+
s.executables = ["redreloader"]
|
15
|
+
s.extra_rdoc_files = ["CHANGELOG", "bin/redreloader", "lib/redreloader.rb"]
|
16
|
+
s.files = ["CHANGELOG", "Manifest", "Rakefile", "bin/redreloader", "lib/redreloader.rb", "redreloader.example.conf", "redreloader.gemspec"]
|
17
|
+
s.homepage = "https://github.com/andys/redreloader"
|
18
|
+
s.rdoc_options = ["--line-numbers", "--title", "Redreloader"]
|
19
|
+
s.rubyforge_project = "redreloader"
|
20
|
+
s.rubygems_version = "2.2.2"
|
21
|
+
s.summary = "Transfers file from redis and runs a command whenever it changes"
|
22
|
+
|
23
|
+
if s.respond_to? :specification_version then
|
24
|
+
s.specification_version = 4
|
25
|
+
|
26
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
27
|
+
s.add_runtime_dependency(%q<redis>, [">= 0"])
|
28
|
+
else
|
29
|
+
s.add_dependency(%q<redis>, [">= 0"])
|
30
|
+
end
|
31
|
+
else
|
32
|
+
s.add_dependency(%q<redis>, [">= 0"])
|
33
|
+
end
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: redreloader
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- 'Andrew Snow '
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: redis
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Transfers file from redis and runs a command whenever it changes
|
28
|
+
email: andrew@modulus.org
|
29
|
+
executables:
|
30
|
+
- redreloader
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files:
|
33
|
+
- CHANGELOG
|
34
|
+
- bin/redreloader
|
35
|
+
- lib/redreloader.rb
|
36
|
+
files:
|
37
|
+
- CHANGELOG
|
38
|
+
- Manifest
|
39
|
+
- Rakefile
|
40
|
+
- bin/redreloader
|
41
|
+
- lib/redreloader.rb
|
42
|
+
- redreloader.example.conf
|
43
|
+
- redreloader.gemspec
|
44
|
+
homepage: https://github.com/andys/redreloader
|
45
|
+
licenses: []
|
46
|
+
metadata: {}
|
47
|
+
post_install_message:
|
48
|
+
rdoc_options:
|
49
|
+
- --line-numbers
|
50
|
+
- --title
|
51
|
+
- Redreloader
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '1.2'
|
64
|
+
requirements: []
|
65
|
+
rubyforge_project: redreloader
|
66
|
+
rubygems_version: 2.2.2
|
67
|
+
signing_key:
|
68
|
+
specification_version: 4
|
69
|
+
summary: Transfers file from redis and runs a command whenever it changes
|
70
|
+
test_files: []
|