healthety 0.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.
- data/.gitignore +2 -0
- data/Gemfile +3 -0
- data/README.md +26 -0
- data/Rakefile +9 -0
- data/healthety.gemspec +21 -0
- data/lib/healthety/healthety.rb +51 -0
- data/lib/healthety/transmission.rb +18 -0
- data/lib/healthety/version.rb +3 -0
- data/lib/healthety/worker.rb +22 -0
- data/lib/healthety.rb +3 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/unit/healthety_spec.rb +23 -0
- data/spec/unit/transmission_spec.rb +15 -0
- data/spec/unit/worker_spec.rb +28 -0
- metadata +91 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# Ruby Worker
|
2
|
+
|
3
|
+
The Ruby Worker sends JSON data via UDP packets to a given host at a defined interval.
|
4
|
+
|
5
|
+
### Installation
|
6
|
+
|
7
|
+
gem install healthety
|
8
|
+
|
9
|
+
### Usage
|
10
|
+
|
11
|
+
require "healthety"
|
12
|
+
|
13
|
+
Healthety.workers do
|
14
|
+
host "127.0.0.1"
|
15
|
+
port 8124
|
16
|
+
|
17
|
+
worker :load_average do
|
18
|
+
interval 0.5
|
19
|
+
value rand(10)
|
20
|
+
end
|
21
|
+
|
22
|
+
worker :memory do
|
23
|
+
interval 2
|
24
|
+
value rand(10)
|
25
|
+
end
|
26
|
+
end
|
data/Rakefile
ADDED
data/healthety.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "healthety/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "healthety"
|
7
|
+
s.version = Healthety::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = "Martin Jagusch"
|
10
|
+
s.email = "m@martinjagusch.com"
|
11
|
+
s.homepage = "http://github.com/healthety/ruby_worker"
|
12
|
+
s.description = "The Ruby Worker sends JSON data via UDP packets to a given host."
|
13
|
+
s.summary = s.description
|
14
|
+
|
15
|
+
s.add_development_dependency("rspec", "~> 2.5.0")
|
16
|
+
s.add_development_dependency("mocha")
|
17
|
+
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Healthety
|
2
|
+
extend self
|
3
|
+
|
4
|
+
def workers(&block)
|
5
|
+
@workers = []
|
6
|
+
@threads = []
|
7
|
+
|
8
|
+
instance_eval(&block)
|
9
|
+
|
10
|
+
start
|
11
|
+
end
|
12
|
+
|
13
|
+
def host(host)
|
14
|
+
@host = host
|
15
|
+
end
|
16
|
+
|
17
|
+
def port(port)
|
18
|
+
@port = port
|
19
|
+
end
|
20
|
+
|
21
|
+
def worker(name, &block)
|
22
|
+
@workers << Worker.new(name, &block)
|
23
|
+
end
|
24
|
+
|
25
|
+
def start
|
26
|
+
puts message
|
27
|
+
transmission = Transmission.new(@host, @port)
|
28
|
+
|
29
|
+
# Catch Ctrl-C and terminate all worker threads.
|
30
|
+
trap("INT") { @threads.map(&:kill) }
|
31
|
+
|
32
|
+
@workers.each do |worker|
|
33
|
+
@threads << Thread.new do
|
34
|
+
loop do
|
35
|
+
worker.perform
|
36
|
+
transmission.send(worker.name, worker.value)
|
37
|
+
sleep worker.interval
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
@threads.map(&:join)
|
43
|
+
end
|
44
|
+
|
45
|
+
def message
|
46
|
+
<<-EOM
|
47
|
+
=> Workers starting to send to #{@host}:#{@port}
|
48
|
+
=> Ctrl-C to stop
|
49
|
+
EOM
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "socket"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
module Healthety
|
5
|
+
class Transmission
|
6
|
+
def initialize(host, port)
|
7
|
+
@host = host
|
8
|
+
@port = port
|
9
|
+
@socket = UDPSocket.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def send(name, value)
|
13
|
+
data = {:name => name, :value => value}.to_json
|
14
|
+
@socket.send(data, 0, @host, @port)
|
15
|
+
$stdout << "#{name}: #{value}\n"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Healthety
|
2
|
+
class Worker
|
3
|
+
attr_reader :name
|
4
|
+
|
5
|
+
def initialize(name, &block)
|
6
|
+
@name = name.to_s
|
7
|
+
@block = block
|
8
|
+
end
|
9
|
+
|
10
|
+
def interval(interval = nil)
|
11
|
+
@interval = interval || @interval
|
12
|
+
end
|
13
|
+
|
14
|
+
def value(value = nil)
|
15
|
+
@value = value || @value
|
16
|
+
end
|
17
|
+
|
18
|
+
def perform
|
19
|
+
instance_eval(&@block)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/healthety.rb
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Healthety
|
4
|
+
describe Healthety do
|
5
|
+
it "should start" do
|
6
|
+
$stdout = StringIO.new
|
7
|
+
Thread.any_instance.stubs(:join)
|
8
|
+
UDPSocket.any_instance.stubs(:send)
|
9
|
+
|
10
|
+
expect do
|
11
|
+
Healthety.workers do
|
12
|
+
host "127.0.0.1"
|
13
|
+
port 8124
|
14
|
+
|
15
|
+
worker :test do
|
16
|
+
interval 0.5
|
17
|
+
value rand(10)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end.to be_true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Healthety
|
4
|
+
describe Transmission do
|
5
|
+
it "should send UDP packets" do
|
6
|
+
$stdout = StringIO.new
|
7
|
+
transmission = Transmission.new("127.0.0.1", 8124)
|
8
|
+
|
9
|
+
transmission.instance_variable_get(:@socket).stubs(:send)
|
10
|
+
transmission.expects(:send).at_least_once
|
11
|
+
|
12
|
+
transmission.send("test", 5)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Healthety
|
4
|
+
describe Worker do
|
5
|
+
before(:each) do
|
6
|
+
@block = Proc.new { interval 0.5; value 10 }
|
7
|
+
@worker = Worker.new(:test, &@block)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should initialize" do
|
11
|
+
@worker.name.should eq("test")
|
12
|
+
@worker.instance_variable_get(:@block).should be(@block)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should perform" do
|
16
|
+
@worker.perform
|
17
|
+
|
18
|
+
@worker.interval.should eq(0.5)
|
19
|
+
@worker.value.should eq(10)
|
20
|
+
|
21
|
+
@worker.interval 0.7
|
22
|
+
@worker.value 11
|
23
|
+
|
24
|
+
@worker.interval.should eq(0.7)
|
25
|
+
@worker.value.should eq(11)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: healthety
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Martin Jagusch
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-04-13 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rspec
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ~>
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 2.5.0
|
24
|
+
type: :development
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: mocha
|
28
|
+
prerelease: false
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: "0"
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id002
|
37
|
+
description: The Ruby Worker sends JSON data via UDP packets to a given host.
|
38
|
+
email: m@martinjagusch.com
|
39
|
+
executables: []
|
40
|
+
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files: []
|
44
|
+
|
45
|
+
files:
|
46
|
+
- .gitignore
|
47
|
+
- Gemfile
|
48
|
+
- README.md
|
49
|
+
- Rakefile
|
50
|
+
- healthety.gemspec
|
51
|
+
- lib/healthety.rb
|
52
|
+
- lib/healthety/healthety.rb
|
53
|
+
- lib/healthety/transmission.rb
|
54
|
+
- lib/healthety/version.rb
|
55
|
+
- lib/healthety/worker.rb
|
56
|
+
- spec/spec_helper.rb
|
57
|
+
- spec/unit/healthety_spec.rb
|
58
|
+
- spec/unit/transmission_spec.rb
|
59
|
+
- spec/unit/worker_spec.rb
|
60
|
+
homepage: http://github.com/healthety/ruby_worker
|
61
|
+
licenses: []
|
62
|
+
|
63
|
+
post_install_message:
|
64
|
+
rdoc_options: []
|
65
|
+
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: "0"
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "0"
|
80
|
+
requirements: []
|
81
|
+
|
82
|
+
rubyforge_project:
|
83
|
+
rubygems_version: 1.7.2
|
84
|
+
signing_key:
|
85
|
+
specification_version: 3
|
86
|
+
summary: The Ruby Worker sends JSON data via UDP packets to a given host.
|
87
|
+
test_files:
|
88
|
+
- spec/spec_helper.rb
|
89
|
+
- spec/unit/healthety_spec.rb
|
90
|
+
- spec/unit/transmission_spec.rb
|
91
|
+
- spec/unit/worker_spec.rb
|