redreloader 0.1

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: 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
@@ -0,0 +1,6 @@
1
+ CHANGELOG
2
+ Manifest
3
+ Rakefile
4
+ bin/redreloader
5
+ lib/redreloader.rb
6
+ redreloader.example.conf
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
@@ -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
@@ -0,0 +1,8 @@
1
+ redis:
2
+ host: localhost
3
+ port: 6379
4
+ db: 0
5
+ command: cat myfile.txt
6
+ file: myfile.txt
7
+ key: config:myfile
8
+ interval: 0.3
@@ -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: []