observed 0.1.1 → 0.2.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +9 -9
- data/.travis.yml +4 -0
- data/README.md +53 -78
- data/examples/observed.rb +1 -1
- data/exe/observed-oneshot +3 -1
- data/features/explicit_routing.feature +33 -0
- data/features/oneshot.feature +4 -0
- data/features/test_in_single_ruby_source.feature +4 -0
- data/integrations/observed-clockwork/features/run_observed_inside_clockwork.feature +6 -7
- data/integrations/observed-clockwork/lib/observed/clockwork/version.rb +1 -1
- data/integrations/observed-clockwork/lib/observed/clockwork.rb +0 -1
- data/integrations/observed-clockwork/observed-clockwork.gemspec +1 -1
- data/integrations/observed-eventmachine/.gitignore +17 -0
- data/integrations/observed-eventmachine/Gemfile +8 -0
- data/integrations/observed-eventmachine/LICENSE.txt +22 -0
- data/integrations/observed-eventmachine/README.md +29 -0
- data/integrations/observed-eventmachine/Rakefile +1 -0
- data/integrations/observed-eventmachine/examples/observed.rb +30 -0
- data/integrations/observed-eventmachine/features/integration_via_single_ruby_source.feature +48 -0
- data/integrations/observed-eventmachine/features/support/env.rb +8 -0
- data/integrations/observed-eventmachine/lib/observed/eventmachine/version.rb +5 -0
- data/integrations/observed-eventmachine/lib/observed/eventmachine.rb +70 -0
- data/integrations/observed-eventmachine/observed-eventmachine.gemspec +28 -0
- data/lib/observed/application/oneshot.rb +14 -37
- data/lib/observed/builtin_plugins/file.rb +5 -14
- data/lib/observed/builtin_plugins/stdout.rb +7 -14
- data/lib/observed/config.rb +4 -4
- data/lib/observed/config_builder.rb +154 -87
- data/lib/observed/config_dsl.rb +2 -8
- data/lib/observed/configurable.rb +61 -3
- data/lib/observed/context.rb +90 -0
- data/lib/observed/default/observer.rb +2 -5
- data/lib/observed/default.rb +0 -1
- data/lib/observed/event_bus.rb +31 -0
- data/lib/observed/execution_job_factory.rb +95 -0
- data/lib/observed/job.rb +163 -0
- data/lib/observed/jobbed_event_bus.rb +33 -0
- data/lib/observed/logging.rb +40 -0
- data/lib/observed/observer.rb +1 -0
- data/lib/observed/observer_helpers/timer.rb +13 -5
- data/lib/observed/pluggable.rb +11 -0
- data/lib/observed/reporter/regexp_matching.rb +2 -1
- data/lib/observed/reporter/report_formatting.rb +57 -0
- data/lib/observed/reporter.rb +0 -2
- data/lib/observed/system.rb +11 -78
- data/lib/observed/translator.rb +22 -0
- data/lib/observed/version.rb +1 -1
- data/lib/observed.rb +10 -12
- data/omnibus-observed/.gitignore +9 -0
- data/omnibus-observed/Berksfile +3 -0
- data/omnibus-observed/Berksfile.lock +52 -0
- data/omnibus-observed/Gemfile +4 -0
- data/omnibus-observed/README.md +102 -0
- data/omnibus-observed/Vagrantfile +93 -0
- data/omnibus-observed/config/projects/observed.rb +20 -0
- data/omnibus-observed/config/software/observed.rb +19 -0
- data/omnibus-observed/package-scripts/observed/makeselfinst +27 -0
- data/omnibus-observed/package-scripts/observed/postinst +17 -0
- data/omnibus-observed/package-scripts/observed/postrm +9 -0
- data/plugins/observed-fluentd/lib/observed/fluentd/version.rb +1 -1
- data/plugins/observed-gauge/README.md +5 -0
- data/plugins/observed-gauge/lib/observed/gauge/version.rb +1 -1
- data/plugins/observed-gauge/lib/observed/gauge.rb +11 -13
- data/plugins/observed-gauge/observed-gauge.gemspec +1 -1
- data/plugins/observed-gauge/spec/gauge_spec.rb +7 -7
- data/plugins/observed-growl/Gemfile +6 -0
- data/plugins/observed-growl/lib/observed/growl.rb +80 -0
- data/plugins/observed-http/lib/observed/http/version.rb +1 -1
- data/plugins/observed-http/lib/observed/http.rb +10 -8
- data/plugins/observed-http/observed-http.gemspec +1 -1
- data/plugins/observed-http/spec/http_spec.rb +62 -7
- data/plugins/observed-http/spec/integration_spec.rb +14 -0
- data/plugins/observed-shell/Gemfile +5 -0
- data/plugins/observed-shell/lib/observed/shell.rb +54 -0
- data/run-integration-tests +81 -0
- data/spec/builtin_plugins/stdout_spec.rb +7 -3
- data/spec/config_builder_spec.rb +42 -59
- data/spec/config_dsl_spec.rb +4 -0
- data/spec/configurable_spec.rb +141 -31
- data/spec/event_bus_spec.rb +16 -0
- data/spec/execution_job_factory_spec.rb +35 -0
- data/spec/job_factory_spec.rb +16 -0
- data/spec/job_spec.rb +228 -0
- data/spec/jobbed_event_bus_spec.rb +38 -0
- data/spec/observed_spec.rb +203 -0
- data/spec/observer_helpers/timer_spec.rb +187 -0
- data/spec/oneshot_spec.rb +7 -2
- data/spec/system_spec.rb +5 -39
- metadata +55 -12
- data/lib/observed/default/reporter.rb +0 -17
- data/lib/observed/reader.rb +0 -14
- data/lib/observed/writer.rb +0 -14
- data/spec/reader_spec.rb +0 -15
- data/spec/writer_spec.rb +0 -16
data/lib/observed/system.rb
CHANGED
@@ -7,6 +7,7 @@ module Observed
|
|
7
7
|
def initialize(args={})
|
8
8
|
@config = args[:config] if args[:config]
|
9
9
|
@logger = args[:logger] if args[:logger]
|
10
|
+
@context = args[:context]
|
10
11
|
end
|
11
12
|
|
12
13
|
def config=(config)
|
@@ -17,93 +18,25 @@ module Observed
|
|
17
18
|
@config
|
18
19
|
end
|
19
20
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
time = self.now
|
24
|
-
end
|
25
|
-
reporters.each do |reporter|
|
26
|
-
if reporter.match(tag)
|
27
|
-
reporter.report(tag, time, data)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def run(observation_name=nil)
|
33
|
-
|
21
|
+
def run(observation_name=nil, data=nil, options=nil)
|
22
|
+
options = { tag: (options && options[:tag]) || observation_name, time: now }.merge(options || {})
|
23
|
+
params = [data, options]
|
34
24
|
if observation_name
|
35
|
-
|
36
|
-
|
25
|
+
fail "No configuration found for observation name '#{observation_name}'" if @context.config_builder.group(observation_name).empty?
|
26
|
+
@context.config_builder.run_group(observation_name).send :now, *params
|
37
27
|
else
|
38
|
-
observers_to_run = observers
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
28
|
+
observers_to_run = @context.config_builder.observers
|
29
|
+
fail "No configuration found for observation name '#{observation_name}'" if observers_to_run.empty?
|
30
|
+
observers_to_run.each do |o|
|
31
|
+
o.send :now, *params
|
32
|
+
end
|
43
33
|
end
|
44
|
-
|
45
34
|
end
|
46
35
|
|
47
36
|
def now
|
48
37
|
Time.now
|
49
38
|
end
|
50
39
|
|
51
|
-
def logger
|
52
|
-
@logger ||= Logger.new(STDOUT)
|
53
|
-
end
|
54
|
-
|
55
|
-
private
|
56
|
-
|
57
|
-
def observers
|
58
|
-
config.observers
|
59
|
-
end
|
60
|
-
|
61
|
-
def reporters
|
62
|
-
config.reporters
|
63
|
-
end
|
64
|
-
|
65
40
|
end
|
66
41
|
|
67
|
-
class YAML
|
68
|
-
def observers
|
69
|
-
config.observers
|
70
|
-
@observers ||= begin
|
71
|
-
|
72
|
-
observer_configs = config.observers
|
73
|
-
|
74
|
-
observers = {}
|
75
|
-
|
76
|
-
observer_configs.each do |tag, input_config|
|
77
|
-
plugin_name = input_config[:plugin] || fail(RuntimeError, %Q|Missing plugin name for the tag "#{tag}" in "#{input_config}" in "#{config}".|)
|
78
|
-
plugin = observer_plugins[plugin_name] || fail(RuntimeError, %Q|The plugin named "#{plugin_name}" is not found in plugins list "#{observer_plugins}".|)
|
79
|
-
updated_config = input_config.merge(tag: tag)
|
80
|
-
observer = plugin.new(updated_config)
|
81
|
-
observer.configure(system: self, logger: logger)
|
82
|
-
observers[tag] = observer
|
83
|
-
end
|
84
|
-
|
85
|
-
observers
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def reporters
|
90
|
-
@reporters ||= begin
|
91
|
-
|
92
|
-
reporter_configs = config.reporters
|
93
|
-
|
94
|
-
reporters = {}
|
95
|
-
|
96
|
-
reporter_configs.each do |tag_pattern, output_config|
|
97
|
-
plugin_name = output_config[:plugin] || fail(RuntimeError, %Q|Missing plugin name for the output for "#{tag_pattern}" in "#{output_config}" in #{config}.|)
|
98
|
-
plugin = reporter_plugins[plugin_name] || fail(RuntimeError, %Q|The plugin named "#{plugin_name}" is not found in plugins list "#{reporter_plugins}".|)
|
99
|
-
updated_config = output_config.merge(tag_pattern: Regexp.new(tag_pattern))
|
100
|
-
reporter = plugin.new(updated_config)
|
101
|
-
reporter.configure(system: self, logger: logger)
|
102
|
-
reporters[tag_pattern] = reporter
|
103
|
-
end
|
104
|
-
|
105
|
-
reporters
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
42
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'observed/configurable'
|
2
|
+
require 'observed/logging'
|
3
|
+
require 'observed/pluggable'
|
4
|
+
|
5
|
+
module Observed
|
6
|
+
class Translator
|
7
|
+
|
8
|
+
include Observed::Configurable
|
9
|
+
include Observed::Logging
|
10
|
+
include Observed::Pluggable
|
11
|
+
|
12
|
+
attribute :tag_pattern
|
13
|
+
|
14
|
+
def match(tag)
|
15
|
+
tag_pattern.match(tag)
|
16
|
+
end
|
17
|
+
|
18
|
+
def translate(tag, time, data)
|
19
|
+
fail RuntimeError, 'Not implemented method: Observed#translate'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/observed/version.rb
CHANGED
data/lib/observed.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
require 'observed/version'
|
2
|
-
require 'observed/
|
3
|
-
require 'observed/system'
|
4
|
-
require 'observed/config_dsl'
|
2
|
+
require 'observed/context'
|
5
3
|
require 'observed/builtin_plugins'
|
6
4
|
require 'forwardable'
|
7
5
|
|
@@ -28,24 +26,24 @@ module Observed
|
|
28
26
|
class Singleton
|
29
27
|
extend Forwardable
|
30
28
|
|
31
|
-
def_delegators :@observed, :require_relative, :observe, :report, :write, :read, :config, :load!, :working_directory
|
29
|
+
def_delegators :@observed, :require_relative, :observe, :translate, :report, :write, :read, :emit, :receive, :group, :run_group, :config, :load!, :working_directory
|
32
30
|
|
33
31
|
# Call this method before you are going to build 2nd or later Observed configuration using this module.
|
34
32
|
# Refrain that `Observed` object is a builder for Observed configuration and it has global state.
|
35
33
|
# We have to reset its state via this `init!` method before building next configurations after the first one.
|
36
34
|
def init!
|
37
|
-
@
|
38
|
-
|
39
|
-
@observed = Observed::ConfigDSL.new(builder: config_builder)
|
35
|
+
@context = Observed::Context.new
|
36
|
+
@observed = @context.config_dsl
|
40
37
|
end
|
41
38
|
|
42
|
-
def run(tag=nil)
|
43
|
-
|
44
|
-
|
39
|
+
def run(tag=nil, data=nil, options=nil)
|
40
|
+
sys = @context.system
|
41
|
+
sys.config = @observed.config
|
42
|
+
sys.send :run, *[tag, data, options].take_while { |a| a != nil }
|
45
43
|
end
|
46
44
|
|
47
45
|
def configure(*args)
|
48
|
-
@
|
46
|
+
@context.configure *args
|
49
47
|
end
|
50
48
|
end
|
51
49
|
|
@@ -69,7 +67,7 @@ module Observed
|
|
69
67
|
|
70
68
|
extend Forwardable
|
71
69
|
|
72
|
-
def_delegators :@@singleton, :run, :init!, :configure, :require_relative, :observe, :report, :write, :read, :config,
|
70
|
+
def_delegators :@@singleton, :run, :init!, :configure, :require_relative, :observe, :translate, :report, :write, :read, :emit, :receive, :group, :run_group, :config,
|
73
71
|
:load!, :working_directory
|
74
72
|
|
75
73
|
extend self
|
@@ -0,0 +1,52 @@
|
|
1
|
+
{
|
2
|
+
"sources": {
|
3
|
+
"omnibus": {
|
4
|
+
"locked_version": "1.2.0"
|
5
|
+
},
|
6
|
+
"apt": {
|
7
|
+
"locked_version": "1.9.2"
|
8
|
+
},
|
9
|
+
"build-essential": {
|
10
|
+
"locked_version": "1.4.2"
|
11
|
+
},
|
12
|
+
"git": {
|
13
|
+
"locked_version": "2.3.0"
|
14
|
+
},
|
15
|
+
"dmg": {
|
16
|
+
"locked_version": "2.0.8"
|
17
|
+
},
|
18
|
+
"yum": {
|
19
|
+
"locked_version": "2.4.2"
|
20
|
+
},
|
21
|
+
"windows": {
|
22
|
+
"locked_version": "1.11.0"
|
23
|
+
},
|
24
|
+
"chef_handler": {
|
25
|
+
"locked_version": "1.1.4"
|
26
|
+
},
|
27
|
+
"runit": {
|
28
|
+
"locked_version": "1.4.0"
|
29
|
+
},
|
30
|
+
"homebrew": {
|
31
|
+
"locked_version": "1.3.2"
|
32
|
+
},
|
33
|
+
"pkgin": {
|
34
|
+
"locked_version": "0.4.0"
|
35
|
+
},
|
36
|
+
"pkgutil": {
|
37
|
+
"locked_version": "0.0.3"
|
38
|
+
},
|
39
|
+
"rbenv": {
|
40
|
+
"locked_version": "1.6.5"
|
41
|
+
},
|
42
|
+
"ohai": {
|
43
|
+
"locked_version": "1.1.12"
|
44
|
+
},
|
45
|
+
"wix": {
|
46
|
+
"locked_version": "1.1.0"
|
47
|
+
},
|
48
|
+
"7-zip": {
|
49
|
+
"locked_version": "1.0.2"
|
50
|
+
}
|
51
|
+
}
|
52
|
+
}
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# observed Omnibus project
|
2
|
+
|
3
|
+
This project creates full-stack platform-specific packages for
|
4
|
+
`observed`!
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
We'll assume you have Ruby 1.9+ and Bundler installed. First ensure all
|
9
|
+
required gems are installed and ready to use:
|
10
|
+
|
11
|
+
```shell
|
12
|
+
$ bundle install --binstubs
|
13
|
+
```
|
14
|
+
|
15
|
+
## Usage
|
16
|
+
|
17
|
+
### Build
|
18
|
+
|
19
|
+
You create a platform-specific package using the `build project` command:
|
20
|
+
|
21
|
+
```shell
|
22
|
+
$ bin/omnibus build project observed
|
23
|
+
```
|
24
|
+
|
25
|
+
The platform/architecture type of the package created will match the platform
|
26
|
+
where the `build project` command is invoked. So running this command on say a
|
27
|
+
MacBook Pro will generate a Mac OS X specific package. After the build
|
28
|
+
completes packages will be available in `pkg/`.
|
29
|
+
|
30
|
+
### Clean
|
31
|
+
|
32
|
+
You can clean up all temporary files generated during the build process with
|
33
|
+
the `clean` command:
|
34
|
+
|
35
|
+
```shell
|
36
|
+
$ bin/omnibus clean
|
37
|
+
```
|
38
|
+
|
39
|
+
Adding the `--purge` purge option removes __ALL__ files generated during the
|
40
|
+
build including the project install directory (`/opt/observed`) and
|
41
|
+
the package cache directory (`/var/cache/omnibus/pkg`):
|
42
|
+
|
43
|
+
```shell
|
44
|
+
$ bin/omnibus clean --purge
|
45
|
+
```
|
46
|
+
|
47
|
+
### Help
|
48
|
+
|
49
|
+
Full help for the Omnibus command line interface can be accessed with the
|
50
|
+
`help` command:
|
51
|
+
|
52
|
+
```shell
|
53
|
+
$ bin/omnibus help
|
54
|
+
```
|
55
|
+
|
56
|
+
## Vagrant-based Virtualized Build Lab
|
57
|
+
|
58
|
+
Every Omnibus project ships will a project-specific
|
59
|
+
[Berksfile](http://berkshelf.com/) and [Vagrantfile](http://www.vagrantup.com/)
|
60
|
+
that will allow you to build your projects on the following platforms:
|
61
|
+
|
62
|
+
* CentOS 5 64-bit
|
63
|
+
* CentOS 6 64-bit
|
64
|
+
* Ubuntu 10.04 64-bit
|
65
|
+
* Ubuntu 11.04 64-bit
|
66
|
+
* Ubuntu 12.04 64-bit
|
67
|
+
|
68
|
+
Please note this build-lab is only meant to get you up and running quickly;
|
69
|
+
there's nothing inherent in Omnibus that restricts you to just building CentOS
|
70
|
+
or Ubuntu packages. See the Vagrantfile to add new platforms to your build lab.
|
71
|
+
|
72
|
+
The only requirements for standing up this virtualized build lab are:
|
73
|
+
|
74
|
+
* VirtualBox - native packages exist for most platforms and can be downloaded
|
75
|
+
from the [VirtualBox downloads page](https://www.virtualbox.org/wiki/Downloads).
|
76
|
+
* Vagrant 1.2.1+ - native packages exist for most platforms and can be downloaded
|
77
|
+
from the [Vagrant downloads page](http://downloads.vagrantup.com/).
|
78
|
+
|
79
|
+
The [vagrant-berkshelf](https://github.com/RiotGames/vagrant-berkshelf) and
|
80
|
+
[vagrant-omnibus](https://github.com/schisamo/vagrant-omnibus) Vagrant plugins
|
81
|
+
are also required and can be installed easily with the following commands:
|
82
|
+
|
83
|
+
```shell
|
84
|
+
$ vagrant plugin install vagrant-berkshelf
|
85
|
+
$ vagrant plugin install vagrant-omnibus
|
86
|
+
```
|
87
|
+
|
88
|
+
Once the pre-requisites are installed you can build your package across all
|
89
|
+
platforms with the following command:
|
90
|
+
|
91
|
+
```shell
|
92
|
+
$ vagrant up
|
93
|
+
```
|
94
|
+
|
95
|
+
If you would like to build a package for a single platform the command looks like this:
|
96
|
+
|
97
|
+
```shell
|
98
|
+
$ vagrant up PLATFORM
|
99
|
+
```
|
100
|
+
|
101
|
+
The complete list of valid platform names can be viewed with the
|
102
|
+
`vagrant status` command.
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
|
4
|
+
require "vagrant"
|
5
|
+
|
6
|
+
if Vagrant::VERSION < "1.2.1"
|
7
|
+
raise "The Omnibus Build Lab is only compatible with Vagrant 1.2.1+"
|
8
|
+
end
|
9
|
+
|
10
|
+
host_project_path = File.expand_path("..", __FILE__)
|
11
|
+
guest_project_path = "/home/vagrant/#{File.basename(host_project_path)}"
|
12
|
+
project_name = "observed"
|
13
|
+
|
14
|
+
Vagrant.configure("2") do |config|
|
15
|
+
|
16
|
+
config.vm.hostname = "#{project_name}-omnibus-build-lab"
|
17
|
+
|
18
|
+
config.vm.define 'ubuntu-10.04' do |c|
|
19
|
+
c.berkshelf.berksfile_path = "./Berksfile"
|
20
|
+
c.vm.box = "opscode-ubuntu-10.04"
|
21
|
+
c.vm.box_url = "http://opscode-vm.s3.amazonaws.com/vagrant/opscode_ubuntu-10.04_chef-11.2.0.box"
|
22
|
+
end
|
23
|
+
|
24
|
+
config.vm.define 'ubuntu-11.04' do |c|
|
25
|
+
c.berkshelf.berksfile_path = "./Berksfile"
|
26
|
+
c.vm.box = "opscode-ubuntu-11.04"
|
27
|
+
c.vm.box_url = "http://opscode-vm.s3.amazonaws.com/vagrant/boxes/opscode-ubuntu-11.04.box"
|
28
|
+
end
|
29
|
+
|
30
|
+
config.vm.define 'ubuntu-12.04' do |c|
|
31
|
+
c.berkshelf.berksfile_path = "./Berksfile"
|
32
|
+
c.vm.box = "canonical-ubuntu-12.04"
|
33
|
+
c.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box"
|
34
|
+
end
|
35
|
+
|
36
|
+
config.vm.define 'centos-5' do |c|
|
37
|
+
c.berkshelf.berksfile_path = "./Berksfile"
|
38
|
+
c.vm.box = "opscode-centos-5.8"
|
39
|
+
c.vm.box_url = "http://opscode-vm.s3.amazonaws.com/vagrant/opscode_centos-5.8_chef-11.2.0.box"
|
40
|
+
end
|
41
|
+
|
42
|
+
config.vm.define 'centos-6' do |c|
|
43
|
+
c.berkshelf.berksfile_path = "./Berksfile"
|
44
|
+
c.vm.box = "opscode-centos-6.3"
|
45
|
+
c.vm.box_url = "http://opscode-vm.s3.amazonaws.com/vagrant/opscode_centos-6.3_chef-11.2.0.box"
|
46
|
+
end
|
47
|
+
|
48
|
+
config.vm.provider :virtualbox do |vb|
|
49
|
+
# Give enough horsepower to build without taking all day.
|
50
|
+
vb.customize [
|
51
|
+
"modifyvm", :id,
|
52
|
+
"--memory", "1536",
|
53
|
+
"--cpus", "2"
|
54
|
+
]
|
55
|
+
end
|
56
|
+
|
57
|
+
# Ensure a recent version of the Chef Omnibus packages are installed
|
58
|
+
config.omnibus.chef_version = :latest
|
59
|
+
|
60
|
+
# Enable the berkshelf-vagrant plugin
|
61
|
+
config.berkshelf.enabled = true
|
62
|
+
# The path to the Berksfile to use with Vagrant Berkshelf
|
63
|
+
config.berkshelf.berksfile_path = "./Berksfile"
|
64
|
+
|
65
|
+
config.ssh.forward_agent = true
|
66
|
+
|
67
|
+
host_project_path = File.expand_path("..", __FILE__)
|
68
|
+
guest_project_path = "/home/vagrant/#{File.basename(host_project_path)}"
|
69
|
+
|
70
|
+
config.vm.synced_folder host_project_path, guest_project_path
|
71
|
+
|
72
|
+
# prepare VM to be an Omnibus builder
|
73
|
+
config.vm.provision :chef_solo do |chef|
|
74
|
+
chef.json = {
|
75
|
+
"omnibus" => {
|
76
|
+
"build_user" => "vagrant",
|
77
|
+
"build_dir" => guest_project_path,
|
78
|
+
"install_dir" => "/opt/#{project_name}"
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
chef.run_list = [
|
83
|
+
"recipe[omnibus::default]"
|
84
|
+
]
|
85
|
+
end
|
86
|
+
|
87
|
+
config.vm.provision :shell, :inline => <<-OMNIBUS_BUILD
|
88
|
+
export PATH=/usr/local/bin:$PATH
|
89
|
+
cd #{guest_project_path}
|
90
|
+
su vagrant -c "bundle install --binstubs"
|
91
|
+
su vagrant -c "bin/omnibus build project #{project_name}"
|
92
|
+
OMNIBUS_BUILD
|
93
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
name "observed"
|
3
|
+
maintainer "KUOKA Yusuke"
|
4
|
+
homepage "https://github.com/gree/observed"
|
5
|
+
|
6
|
+
replaces "observed"
|
7
|
+
install_path "/opt/observed"
|
8
|
+
build_version Omnibus::BuildVersion.new.semver
|
9
|
+
build_iteration 1
|
10
|
+
|
11
|
+
# creates required build directories
|
12
|
+
dependency "preparation"
|
13
|
+
|
14
|
+
dependency "observed"
|
15
|
+
|
16
|
+
# version manifest file
|
17
|
+
dependency "version-manifest"
|
18
|
+
|
19
|
+
exclude "\.git*"
|
20
|
+
exclude "bundler\/git"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
name "observed"
|
2
|
+
#version "0.1.1"
|
3
|
+
version "master"
|
4
|
+
|
5
|
+
dependency "ruby"
|
6
|
+
dependency "rubygems"
|
7
|
+
#dependency "bundler"
|
8
|
+
dependency "rsync"
|
9
|
+
|
10
|
+
source :git => "https://github.com/gree/observed.git"
|
11
|
+
|
12
|
+
relative_path "observed"
|
13
|
+
|
14
|
+
build do
|
15
|
+
gem "install bundler --no-rdoc --no-ri -v 1.3.0"
|
16
|
+
bundle "install --path=#{install_dir}/embedded/service/gem"
|
17
|
+
command "mkdir -p #{install_dir}/embedded/service/observed"
|
18
|
+
command "#{install_dir}/embedded/bin/rsync -a --delete --exclude=.git/*** --exclude=.gitignore ./ #{install_dir}/embedded/service/observed/"
|
19
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
#
|
3
|
+
# Install a full observed
|
4
|
+
#
|
5
|
+
|
6
|
+
PROGNAME=`basename $0`
|
7
|
+
INSTALLER_DIR=`dirname $0`
|
8
|
+
DEST_DIR=/opt/observed
|
9
|
+
CONFIG_DIR=/etc/observed
|
10
|
+
USAGE="usage: $0"
|
11
|
+
|
12
|
+
error_exit()
|
13
|
+
{
|
14
|
+
echo "${PROGNAME}: ${1:-"Unknown Error"}" 1>&2
|
15
|
+
exit 1
|
16
|
+
}
|
17
|
+
|
18
|
+
# move the actual files into place
|
19
|
+
rm -rf $DEST_DIR/* || error_exit "Cannot remove contents of $DEST_DIR"
|
20
|
+
mkdir -p $DEST_DIR || error_exit "Cannot create $DEST_DIR"
|
21
|
+
cp -R $INSTALLER_DIR $DEST_DIR || error_exit "Cannot install to $DEST_DIR"
|
22
|
+
rm -f $DEST_DIR/$PROGNAME
|
23
|
+
|
24
|
+
# You may want to symlink your packages bin files into /usr/bin
|
25
|
+
# ln -sf $DEST_DIR/bin/observed /usr/bin || error_exit "Cannot link observed to /usr/bin"
|
26
|
+
|
27
|
+
exit 0
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
#
|
3
|
+
# Perform necessary observed setup steps
|
4
|
+
# after package is installed.
|
5
|
+
#
|
6
|
+
|
7
|
+
PROGNAME=$(basename $0)
|
8
|
+
|
9
|
+
function error_exit
|
10
|
+
{
|
11
|
+
echo "${PROGNAME}: ${1:-"Unknown Error"}" 1>&2
|
12
|
+
exit 1
|
13
|
+
}
|
14
|
+
|
15
|
+
echo "Thank you for installing observed!"
|
16
|
+
|
17
|
+
exit 0
|
@@ -1,4 +1,5 @@
|
|
1
|
-
require 'observed/
|
1
|
+
require 'observed/logging'
|
2
|
+
require 'observed/translator'
|
2
3
|
require 'observed/reporter/regexp_matching'
|
3
4
|
require 'observed/gauge/version'
|
4
5
|
require 'logger'
|
@@ -6,39 +7,40 @@ require 'rrd'
|
|
6
7
|
|
7
8
|
module Observed
|
8
9
|
module Plugins
|
9
|
-
class Gauge < Observed::
|
10
|
+
class Gauge < Observed::Translator
|
10
11
|
|
11
12
|
plugin_name 'gauge'
|
12
13
|
|
14
|
+
include Observed::Logging
|
13
15
|
include Observed::Reporter::RegexpMatching
|
14
16
|
|
15
|
-
attribute :tag
|
16
17
|
attribute :key_path
|
17
18
|
attribute :coerce, default: ->(data){ data }
|
18
19
|
attribute :rrd
|
19
20
|
attribute :step
|
20
21
|
attribute :period
|
21
22
|
|
22
|
-
def
|
23
|
+
def translate(data, options)
|
24
|
+
time = options[:time] || Time.now
|
23
25
|
rewrote = update_value_for_key_path(data, key_path) do |v|
|
24
26
|
sample = coerce.call(v)
|
25
27
|
average = get_cdp_updated_with(time, sample)
|
26
28
|
average
|
27
29
|
end
|
28
30
|
unless fetch_value_for_key_path(rewrote, key_path).nan?
|
29
|
-
|
31
|
+
rewrote
|
30
32
|
end
|
31
33
|
end
|
32
34
|
|
33
35
|
def prepare_rrd(args)
|
34
36
|
start = args[:start]
|
35
|
-
|
37
|
+
log_debug "Creating a rrd file named '#{args[:rrd]}' with options {:start => #{start}}"
|
36
38
|
result = RRD::Builder.new(args[:rrd], start: start, step: step.seconds).tap do |builder|
|
37
39
|
builder.datasource data_source, :type => :gauge, :heartbeat => period.seconds, :min => 0, :max => :unlimited
|
38
40
|
builder.archive :average, :every => period.seconds, :during => period.seconds
|
39
41
|
builder.save
|
40
42
|
end
|
41
|
-
|
43
|
+
log_debug "Builder#save returned: #{result.inspect}"
|
42
44
|
end
|
43
45
|
|
44
46
|
private
|
@@ -101,17 +103,13 @@ module Observed
|
|
101
103
|
prepare_rrd(rrd: rrd_path, start: t)
|
102
104
|
end
|
103
105
|
|
104
|
-
|
106
|
+
log_debug "Updating the data source '#{data_source}' with the value #{value} with timestamp #{t}"
|
105
107
|
rrd.update t, value
|
106
108
|
|
107
|
-
|
109
|
+
log_debug rrd.fetch!(:average)[-2..-1]
|
108
110
|
|
109
111
|
rrd.fetch(:average)[-2..-1].first.last
|
110
112
|
end
|
111
|
-
|
112
|
-
def logger
|
113
|
-
@logger ||= Logger.new(STDOUT)
|
114
|
-
end
|
115
113
|
end
|
116
114
|
end
|
117
115
|
end
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency 'observed', '~> 0.
|
21
|
+
spec.add_dependency 'observed', '~> 0.2.0.rc1'
|
22
22
|
spec.add_dependency 'rrd-ffi', '~> 0.2.14'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.3'
|