sensu-settings 0.0.2 → 0.0.3

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 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