daikon 0.7.6 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,10 +1,29 @@
1
1
  = daikon
2
2
 
3
- Client gem for http://radishapp.com.
3
+ Dig deep into Redis. This is a client daemon for http://radishapp.com.
4
4
 
5
- Borrowed a bunch of code from https://github.com/alexmchale/try.redis, thanks!
5
+ == Setup
6
+
7
+ Hook up Radish to your Redis instance like so, this will start a daemon up in
8
+ your current directory:
9
+
10
+ daikon start -- -k 1234567890
11
+
12
+ If you want to just test it out and run in the foreground:
13
+
14
+ daikon run -- -k 1234567890
15
+
16
+ Your redis is on a different port, box, or has a password? No problem, use the
17
+ -u option that takes a standard Redis url:
18
+
19
+ daikon start -- -k 1234567890 -u redis://4.2.2.2:9999
20
+
21
+ == Issues
22
+
23
+ If you need to run more than one Daikon instance to monitor more than one
24
+ Redis, the current workaround is to `cd` into different directories and start
25
+ a Daikon for each instance. Patches welcome for this!
6
26
 
7
27
  == Copyright
8
28
 
9
- Copyright (c) 2010 Nick Quaranto. See LICENSE.txt for
10
- further details.
29
+ Copyright (c) 2010-2011 thoughtbot, Nick Quaranto. See LICENSE.txt for further details.
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{daikon}
8
- s.version = "0.7.6"
8
+ s.version = "0.8.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Nick Quaranto"]
12
- s.date = %q{2011-03-10}
12
+ s.date = %q{2011-03-17}
13
13
  s.default_executable = %q{daikon}
14
14
  s.description = %q{daikon, a radishapp.com client}
15
15
  s.email = %q{nick@quaran.to}
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
31
31
  "lib/daikon/client.rb",
32
32
  "lib/daikon/configuration.rb",
33
33
  "lib/daikon/daemon.rb",
34
+ "lib/daikon/daemons_hacks.rb",
34
35
  "lib/daikon/monitor.rb",
35
36
  "lib/daikon/redis_hacks.rb",
36
37
  "spec/client_spec.rb",
@@ -22,8 +22,10 @@ require 'daikon/configuration'
22
22
  require 'daikon/client'
23
23
  require 'daikon/daemon'
24
24
  require 'daikon/monitor'
25
+
26
+ require 'daikon/daemons_hacks'
25
27
  require 'daikon/redis_hacks'
26
28
 
27
29
  module Daikon
28
- VERSION = "0.7.6"
30
+ VERSION = "0.8.0"
29
31
  end
@@ -20,7 +20,7 @@ module Daikon
20
20
  end
21
21
 
22
22
  def connect
23
- Redis.new(:host => config.redis_host, :port => config.redis_port)
23
+ Redis.connect(:url => config.redis_url)
24
24
  end
25
25
 
26
26
  def start_monitor
@@ -1,26 +1,49 @@
1
1
  module Daikon
2
2
  class Configuration
3
- FLAGS = %w[-h -p -k -f -s]
4
- OPTIONS = %w[redis_host redis_port api_key field_id server_prefix]
5
- DEFAULTS = %w[127.0.0.1 6379 1234567890 1 https://radish.heroku.com]
3
+ BLANK_KEY = "1234567890"
4
+ FLAGS = ["-u", "-k", "-s"]
5
+ OPTIONS = ["redis_url", "api_key", "server_prefix"]
6
+ DEFAULTS = ["redis://0.0.0.0:6379", BLANK_KEY, "https://radish.heroku.com"]
6
7
 
7
8
  attr_accessor *OPTIONS
8
9
 
9
10
  def initialize(argv = [])
11
+ @argv = argv
12
+
13
+ validate_deprecated_options
14
+ parse
15
+ validate_api_key
16
+ end
17
+
18
+ private
19
+
20
+ def argv_matches?(regexp)
21
+ @argv.any? { |arg| arg =~ regexp }
22
+ end
23
+
24
+ def validate_deprecated_options
25
+ if argv_matches?(/\-h|\-p/)
26
+ abort "Please use '-u redis://127.0.0.1:6379' format instead to specify redis url"
27
+ end
28
+ end
29
+
30
+ def validate_api_key
31
+ if api_key == BLANK_KEY && argv_matches?(/start|run/)
32
+ abort "Must supply an api key to start the daemon.\nExample: daikon start #{FLAGS[2]} #{DEFAULTS[2]}"
33
+ end
34
+ end
35
+
36
+ def parse
10
37
  FLAGS.each_with_index do |flag, flag_index|
11
- argv_index = argv.index(flag)
38
+ argv_index = @argv.index(flag)
12
39
  value = if argv_index
13
- argv[argv_index + 1]
40
+ @argv[argv_index + 1]
14
41
  else
15
42
  DEFAULTS[flag_index]
16
43
  end
17
44
 
18
45
  send "#{OPTIONS[flag_index]}=", value
19
46
  end
20
-
21
- if api_key == DEFAULTS[2] && argv.any? { |arg| arg =~ /start|run/ }
22
- abort "Must supply an api key to start the daemon.\nExample: daikon start #{FLAGS[2]} #{DEFAULTS[2]}"
23
- end
24
47
  end
25
48
  end
26
49
  end
@@ -0,0 +1,14 @@
1
+ # More terrible overrides since the Daemons gem offers no way to override how
2
+ # its output is formatted.
3
+ module Daemons
4
+ class Controller
5
+ def print_usage_with_daikon_options
6
+ print_usage_without_daikon_options
7
+ puts " -k 1234567890 radishapp.com api key"
8
+ puts " -u redis://0.0.0.0:6379 redis URL to monitor"
9
+ end
10
+
11
+ alias_method :print_usage_without_daikon_options, :print_usage
12
+ alias_method :print_usage, :print_usage_with_daikon_options
13
+ end
14
+ end
@@ -6,19 +6,20 @@ describe Daikon::Client, "setup" do
6
6
  let(:redis) { 'redis instance' }
7
7
 
8
8
  before do
9
- Redis.stubs(:new => redis)
9
+ Redis.stubs(:connect => redis)
10
10
  subject.stubs(:redis=)
11
11
  end
12
12
 
13
13
  context "with overrides" do
14
- let(:config) { Daikon::Configuration.new(%w[-h 8.8.8.8 -p 1234]) }
14
+ let(:url) { "redis://8.8.8.8:1234" }
15
+ let(:config) { Daikon::Configuration.new(["-u", url]) }
15
16
 
16
17
  before do
17
18
  subject.setup(config, logger)
18
19
  end
19
20
 
20
21
  it "sets redis to listen on the given port" do
21
- Redis.should have_received(:new).with(:host => "8.8.8.8", :port => "1234").twice
22
+ Redis.should have_received(:connect).with(:url => url).twice
22
23
  subject.should have_received(:redis=).with(redis)
23
24
  end
24
25
  end
@@ -31,7 +32,7 @@ describe Daikon::Client, "setup" do
31
32
  end
32
33
 
33
34
  it "sets redis to listen on the given port" do
34
- Redis.should have_received(:new).with(:host => "127.0.0.1", :port => "6379").twice
35
+ Redis.should have_received(:connect).with(:url => "redis://0.0.0.0:6379").twice
35
36
  subject.should have_received(:redis=).with(redis)
36
37
  end
37
38
  end
@@ -39,11 +40,15 @@ end
39
40
 
40
41
  describe Daikon::Client, "when server is down" do
41
42
  subject { Daikon::Client.new }
43
+ let(:redis) { stub("redis instance", :info => {}) }
44
+
42
45
  before do
43
- subject.setup(Daikon::Configuration.new)
46
+ Redis.stubs(:connect => redis)
44
47
  http = stub("http", :reset => nil)
45
48
  http.stubs(:request).raises(Timeout::Error)
46
49
  subject.stubs(:http => http)
50
+
51
+ subject.setup(Daikon::Configuration.new)
47
52
  end
48
53
 
49
54
  it "does not commit suicide" do
@@ -55,10 +60,14 @@ end
55
60
 
56
61
  describe Daikon::Client, "when it returns bad json" do
57
62
  subject { Daikon::Client.new }
63
+ let(:redis) { stub("redis instance", :info => {}) }
64
+
58
65
  before do
59
- subject.setup(Daikon::Configuration.new)
66
+ Redis.stubs(:connect => redis)
60
67
  http = stub("http", :request => Excon::Response.new(:body => "{'bad':'json}"), :reset => nil)
61
68
  subject.stubs(:http => http)
69
+
70
+ subject.setup(Daikon::Configuration.new)
62
71
  end
63
72
 
64
73
  it "does not commit suicide" do
@@ -2,13 +2,11 @@ require 'spec_helper'
2
2
 
3
3
  describe Daikon::Configuration do
4
4
  subject { Daikon::Configuration.new(flags) }
5
- let(:flags) { %w[-h 4.2.2.2 -p 9001 -k deadbeef -s localhost:9337 -f 1337] }
5
+ let(:flags) { %w[-u redis://4.2.2.2:9001 -k deadbeef -s localhost:9337] }
6
6
 
7
7
  it "parses the given flags" do
8
- subject.redis_host.should == "4.2.2.2"
9
- subject.redis_port.should == "9001"
8
+ subject.redis_url.should == "redis://4.2.2.2:9001"
10
9
  subject.api_key.should == "deadbeef"
11
- subject.field_id.should == "1337"
12
10
  subject.server_prefix == "localhost:9337"
13
11
  end
14
12
  end
@@ -17,10 +15,8 @@ describe Daikon::Configuration do
17
15
  subject { Daikon::Configuration.new(%w[-k 1234567890]) }
18
16
 
19
17
  it "uses the default keys" do
20
- subject.redis_host.should == "127.0.0.1"
21
- subject.redis_port.should == "6379"
18
+ subject.redis_url.should == "redis://0.0.0.0:6379"
22
19
  subject.api_key.should == "1234567890"
23
- subject.field_id.should == "1"
24
20
  subject.server_prefix == "radish.heroku.com"
25
21
  end
26
22
  end
@@ -44,13 +40,19 @@ describe Daikon::Configuration do
44
40
  end
45
41
 
46
42
  describe Daikon::Configuration do
47
- subject { Daikon::Configuration.new(flags) }
48
- let(:flags) { %w[-p 9001 -k deadbeef] }
43
+ it "fails if -h option given" do
44
+ capture do
45
+ lambda {
46
+ Daikon::Configuration.new(%w[-h 8.8.8.8])
47
+ }.should raise_error(SystemExit)
48
+ end
49
+ end
49
50
 
50
- it "can handle defaults and given options" do
51
- subject.redis_port.should == "9001"
52
- subject.api_key.should == "deadbeef"
53
- subject.field_id.should == "1"
54
- subject.server_prefix == "radish.heroku.com"
51
+ it "fails if -p option given" do
52
+ capture do
53
+ lambda {
54
+ Daikon::Configuration.new(%w[-p 6380])
55
+ }.should raise_error(SystemExit)
56
+ end
55
57
  end
56
58
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: daikon
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.7.6
5
+ version: 0.8.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Nick Quaranto
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-10 00:00:00 -05:00
13
+ date: 2011-03-17 00:00:00 -06:00
14
14
  default_executable: daikon
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -134,6 +134,7 @@ files:
134
134
  - lib/daikon/client.rb
135
135
  - lib/daikon/configuration.rb
136
136
  - lib/daikon/daemon.rb
137
+ - lib/daikon/daemons_hacks.rb
137
138
  - lib/daikon/monitor.rb
138
139
  - lib/daikon/redis_hacks.rb
139
140
  - spec/client_spec.rb