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 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: []