sensu-settings 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 574e3cda48e7886857ddee4f8dd6b299304726cb
4
- data.tar.gz: 6cb9b7a031ae185dda7ffc341d80ef6e5497ebd9
3
+ metadata.gz: 48ba35c4667643728d564b4a6f1b896c7309cca4
4
+ data.tar.gz: b3df632e4ebfde1123b2b9c606304cabff06ea8f
5
5
  SHA512:
6
- metadata.gz: 7e5136184244c730101a4bb0dd859f4471c3cbe36761e17b0d0b5abba694b0a4c8dde879dd5ca15cea2d262d74eee0544c23bb595da3cf304a1b9456ce2cd263
7
- data.tar.gz: ab0ee858e81fa3f116b3693a2dc2d616f1463df69a0633ce3c6317fad969584a39e3704a3ac49b32607d5435b398f804f77907c22e8ac38657014c9d1b01dbd6
6
+ metadata.gz: 5089acb63a77f61dede53af687a9ae5f9c2d01def001617c0dc360626192183a102c5d3881e28681d21022ae0c7879d41815233c3a1edf9bb18f0a75cbd99579
7
+ data.tar.gz: 3ef86a3100eddda1ff08aa3dd1e8a8103501ba93677a7bc162f7a1f70db2912867d2d01ff5edda9b59f99a76092ee7ccddcc35ecdab47ad0bfc10a6a75ebd4a6
@@ -1,5 +1,3 @@
1
- gem "multi_json", "1.10.0"
2
-
3
1
  require "sensu/settings/validator"
4
2
  require "multi_json"
5
3
 
@@ -16,7 +14,10 @@ module Sensu
16
14
 
17
15
  def initialize
18
16
  @warnings = []
19
- @settings = Hash[CATEGORIES.map {|category| [category, {}]}]
17
+ @settings = {}
18
+ CATEGORIES.each do |category|
19
+ @settings[category] = {}
20
+ end
20
21
  @indifferent_access = false
21
22
  @loaded_files = []
22
23
  self.class.create_category_methods
@@ -46,8 +47,8 @@ module Sensu
46
47
  @settings
47
48
  end
48
49
 
49
- # Retrieve the value object corresponding to a key, acting like
50
- # a Hash object.
50
+ # Retrieve the setting object corresponding to a key, acting
51
+ # like a Hash object.
51
52
  #
52
53
  # @param key [String, Symbol]
53
54
  # @return [Object] value for key.
@@ -60,18 +61,18 @@ module Sensu
60
61
  def load_env
61
62
  if ENV["RABBITMQ_URL"]
62
63
  @settings[:rabbitmq] = ENV["RABBITMQ_URL"]
63
- warning(@settings[:rabbitmq], "using rabbitmq url environment variable")
64
+ warning("using rabbitmq url environment variable", :rabbitmq => @settings[:rabbitmq])
64
65
  end
65
66
  ENV["REDIS_URL"] ||= ENV["REDISTOGO_URL"]
66
67
  if ENV["REDIS_URL"]
67
68
  @settings[:redis] = ENV["REDIS_URL"]
68
- warning(@settings[:redis], "using redis url environment variable")
69
+ warning("using redis url environment variable", :redis => @settings[:redis])
69
70
  end
70
71
  ENV["API_PORT"] ||= ENV["PORT"]
71
72
  if ENV["API_PORT"]
72
73
  @settings[:api] ||= {}
73
74
  @settings[:api][:port] = ENV["API_PORT"].to_i
74
- warning(@settings[:api], "using api port environment variable")
75
+ warning("using api port environment variable", :api => @settings[:api])
75
76
  end
76
77
  @indifferent_access = false
77
78
  end
@@ -82,24 +83,30 @@ module Sensu
82
83
  def load_file(file)
83
84
  if File.file?(file) && File.readable?(file)
84
85
  begin
85
- warning(file, "loading config file")
86
+ warning("loading config file", :file => file)
86
87
  contents = IO.read(file)
87
88
  config = MultiJson.load(contents, :symbolize_keys => true)
88
89
  merged = deep_merge(@settings, config)
89
90
  unless @loaded_files.empty?
90
91
  changes = deep_diff(@settings, merged)
91
- warning(changes, "config file applied changes")
92
+ warning("config file applied changes", {
93
+ :file => file,
94
+ :changes => changes
95
+ })
92
96
  end
93
97
  @settings = merged
94
98
  @indifferent_access = false
95
99
  @loaded_files << file
96
100
  rescue MultiJson::ParseError => error
97
- warning(file, "config file must be valid json")
98
- warning(file, "ignoring config file")
101
+ warning("config file must be valid json", {
102
+ :file => file,
103
+ :error => error.to_s
104
+ })
105
+ warning("ignoring config file", :file => file)
99
106
  end
100
107
  else
101
- warning(file, "config file does not exist or is not readable")
102
- warning(file, "ignoring config file")
108
+ warning("config file does not exist or is not readable", :file => file)
109
+ warning("ignoring config file", :file => file)
103
110
  end
104
111
  end
105
112
 
@@ -108,7 +115,7 @@ module Sensu
108
115
  #
109
116
  # @param [String] directory path.
110
117
  def load_directory(directory)
111
- warning(directory, "loading config files from directory")
118
+ warning("loading config files from directory", :directory => directory)
112
119
  path = directory.gsub(/\\(?=\S)/, "/")
113
120
  Dir.glob(File.join(path, "**/*.json")).each do |file|
114
121
  load_file(file)
@@ -125,7 +132,7 @@ module Sensu
125
132
  # Validate the loaded settings.
126
133
  #
127
134
  # @return [Array] validation failures.
128
- def validate!
135
+ def validate
129
136
  service = ::File.basename($0).split("-").last
130
137
  validator = Validator.new
131
138
  validator.run(@settings, service)
@@ -220,16 +227,15 @@ module Sensu
220
227
  end
221
228
  end
222
229
 
223
- # Record a warning for an object.
230
+ # Record a warning.
224
231
  #
225
- # @param object [Object] under suspicion.
226
232
  # @param message [String] warning message.
233
+ # @param data [Hash] warning context.
227
234
  # @return [Array] current warnings.
228
- def warning(object, message)
235
+ def warning(message, data={})
229
236
  @warnings << {
230
- :object => object,
231
237
  :message => message
232
- }
238
+ }.merge(data)
233
239
  end
234
240
  end
235
241
  end
@@ -15,6 +15,15 @@ module Sensu
15
15
  end
16
16
  end
17
17
 
18
+ # Validate client safe mode.
19
+ # Validates: safe_mode
20
+ #
21
+ # @param client [Hash] sensu client definition.
22
+ def validate_client_safe_mode(client)
23
+ must_be_boolean_if_set(client[:safe_mode]) ||
24
+ invalid(client, "client safe_mode must be boolean")
25
+ end
26
+
18
27
  # Validate client socket.
19
28
  # Validates: socket (bind, port)
20
29
  #
@@ -88,7 +97,7 @@ module Sensu
88
97
  end
89
98
 
90
99
  # Validate a Sensu client definition.
91
- # Validates: name, address
100
+ # Validates: name, address, safe_mode
92
101
  #
93
102
  # @param client [Hash] sensu client definition.
94
103
  def validate_client(client)
@@ -101,6 +110,7 @@ module Sensu
101
110
  invalid(client, "client name cannot contain spaces or special characters")
102
111
  must_be_a_string(client[:address]) ||
103
112
  invalid(client, "client address must be a string")
113
+ validate_client_safe_mode(client)
104
114
  validate_client_subscriptions(client)
105
115
  validate_client_socket(client)
106
116
  validate_client_keepalive(client)
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "sensu-settings"
5
- spec.version = "0.0.2"
5
+ spec.version = "0.0.3"
6
6
  spec.authors = ["Sean Porter"]
7
7
  spec.email = ["portertech@gmail.com"]
8
8
  spec.summary = "The Sensu settings library, loader and validator"
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
15
15
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
16
16
  spec.require_paths = ["lib"]
17
17
 
18
- spec.add_dependency "multi_json", "1.10.0"
18
+ spec.add_dependency "multi_json"
19
19
 
20
20
  spec.add_development_dependency "bundler", "~> 1.6"
21
21
  spec.add_development_dependency "rake"
data/spec/loader_spec.rb CHANGED
@@ -12,7 +12,7 @@ describe "Sensu::Settings::Loader" do
12
12
  end
13
13
 
14
14
  it "can provide a loader API" do
15
- @loader.should respond_to(:load_env, :load_file, :load_directory, :set_env!, :validate!)
15
+ @loader.should respond_to(:load_env, :load_file, :load_directory, :set_env!, :validate)
16
16
  end
17
17
 
18
18
  it "can provide indifferent access to settings" do
@@ -21,7 +21,7 @@ describe "Sensu::Settings::Loader" do
21
21
  end
22
22
 
23
23
  it "can validate loaded settings" do
24
- failures = @loader.validate!
24
+ failures = @loader.validate
25
25
  failures.size.should eq(0)
26
26
  end
27
27
 
@@ -59,7 +59,7 @@ describe "Sensu::Settings::Loader" do
59
59
  @loader.load_file(@config_file)
60
60
  @loader.warnings.size.should eq(1)
61
61
  warning = @loader.warnings.first
62
- warning[:object].should eq(File.expand_path(@config_file))
62
+ warning[:file].should eq(File.expand_path(@config_file))
63
63
  warning[:message].should eq("loading config file")
64
64
  @loader[:api][:port].should eq(4567)
65
65
  @loader["api"]["port"].should eq(4567)
@@ -67,7 +67,7 @@ describe "Sensu::Settings::Loader" do
67
67
 
68
68
  it "can load settings from a file and validate them" do
69
69
  @loader.load_file(@config_file)
70
- failures = @loader.validate!
70
+ failures = @loader.validate
71
71
  reasons = failures.map do |failure|
72
72
  failure[:message]
73
73
  end
@@ -15,7 +15,7 @@ describe "Sensu::Settings" do
15
15
  Sensu::Settings.should respond_to(:load)
16
16
  Sensu::Settings.load.should be_an_instance_of(Sensu::Settings::Loader)
17
17
  settings = Sensu::Settings.load
18
- settings.should respond_to(:validate!)
18
+ settings.should respond_to(:validate)
19
19
  end
20
20
 
21
21
  it "can load settings from the environment, a file, and a directory" do
@@ -478,6 +478,12 @@ describe "Sensu::Settings::Validator" do
478
478
  client[:redact] = ["secret"]
479
479
  @validator.validate_client(client)
480
480
  @validator.reset.should eq(0)
481
+ client[:safe_mode] = 1
482
+ @validator.validate_client(client)
483
+ @validator.reset.should eq(1)
484
+ client[:safe_mode] = false
485
+ @validator.validate_client(client)
486
+ @validator.reset.should eq(0)
481
487
  end
482
488
 
483
489
  it "can validate client socket" do
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-settings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Porter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-20 00:00:00.000000000 Z
11
+ date: 2014-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.10.0
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 1.10.0
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement