flapjack 0.5.5 → 0.6.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. data/.gitignore +10 -0
  2. data/.rbenv-version +1 -0
  3. data/.rspec +10 -0
  4. data/Gemfile +18 -0
  5. data/Guardfile +14 -0
  6. data/README.md +152 -173
  7. data/Rakefile +53 -150
  8. data/bin/flapjack +72 -0
  9. data/bin/flapjack-nagios-receiver +111 -0
  10. data/bin/flapjack-nagios-receiver-control +15 -0
  11. data/bin/flapjack-netsaint-parser +0 -2
  12. data/bin/flapjack-populator +133 -16
  13. data/bin/install-flapjack-systemwide +2 -2
  14. data/config.ru +11 -0
  15. data/dist/etc/init.d/flapjack +46 -0
  16. data/dist/etc/init.d/flapjack-nagios-receiver +36 -0
  17. data/doc/GLOSSARY.md +19 -0
  18. data/etc/flapjack_config.yaml.example +90 -0
  19. data/features/events.feature +132 -0
  20. data/features/notifications.feature +57 -0
  21. data/features/packaging-lintian.feature +5 -3
  22. data/features/steps/events_steps.rb +164 -0
  23. data/features/steps/flapjack-importer_steps.rb +2 -5
  24. data/features/steps/flapjack-worker_steps.rb +13 -6
  25. data/features/steps/notifications_steps.rb +178 -0
  26. data/features/steps/packaging-lintian_steps.rb +14 -0
  27. data/features/steps/time_travel_steps.rb +34 -0
  28. data/features/support/env.rb +63 -36
  29. data/flapjack.gemspec +35 -186
  30. data/lib/flapjack.rb +2 -0
  31. data/lib/flapjack/api.rb +274 -0
  32. data/lib/flapjack/api/entity_check_presenter.rb +184 -0
  33. data/lib/flapjack/api/entity_presenter.rb +66 -0
  34. data/lib/flapjack/cli/worker_manager.rb +1 -2
  35. data/lib/flapjack/configuration.rb +11 -0
  36. data/lib/flapjack/coordinator.rb +288 -0
  37. data/lib/flapjack/daemonizing.rb +186 -0
  38. data/lib/flapjack/data/contact.rb +45 -0
  39. data/lib/flapjack/data/entity.rb +89 -0
  40. data/lib/flapjack/data/entity_check.rb +396 -0
  41. data/lib/flapjack/data/event.rb +144 -0
  42. data/lib/flapjack/data/notification.rb +13 -0
  43. data/lib/flapjack/executive.rb +289 -0
  44. data/lib/flapjack/filters/acknowledgement.rb +39 -0
  45. data/lib/flapjack/filters/{any_parents_failed.rb → base.rb} +6 -4
  46. data/lib/flapjack/filters/delays.rb +53 -0
  47. data/lib/flapjack/filters/detect_mass_client_failures.rb +44 -0
  48. data/lib/flapjack/filters/ok.rb +25 -5
  49. data/lib/flapjack/filters/scheduled_maintenance.rb +17 -0
  50. data/lib/flapjack/filters/unscheduled_maintenance.rb +17 -0
  51. data/lib/flapjack/jabber.rb +294 -0
  52. data/lib/flapjack/notification/common.rb +23 -0
  53. data/lib/flapjack/notification/email.rb +107 -0
  54. data/lib/flapjack/notification/email/alert.html.haml +48 -0
  55. data/lib/flapjack/notification/email/alert.text.erb +14 -0
  56. data/lib/flapjack/notification/sms.rb +42 -0
  57. data/lib/flapjack/notification/sms/messagenet.rb +49 -0
  58. data/lib/flapjack/notifier_engine.rb +4 -4
  59. data/lib/flapjack/notifiers/mailer/mailer.rb +6 -7
  60. data/lib/flapjack/notifiers/xmpp/xmpp.rb +12 -12
  61. data/lib/flapjack/pagerduty.rb +230 -0
  62. data/lib/flapjack/patches.rb +108 -19
  63. data/lib/flapjack/persistence/data_mapper/models/check.rb +5 -3
  64. data/lib/flapjack/persistence/data_mapper/models/check_template.rb +2 -0
  65. data/lib/flapjack/persistence/data_mapper/models/event.rb +2 -0
  66. data/lib/flapjack/persistence/data_mapper/models/node.rb +3 -1
  67. data/lib/flapjack/persistence/data_mapper/models/related_check.rb +3 -1
  68. data/lib/flapjack/pikelet.rb +56 -0
  69. data/lib/flapjack/transports/beanstalkd.rb +1 -1
  70. data/lib/flapjack/transports/result.rb +6 -6
  71. data/lib/flapjack/utility.rb +46 -0
  72. data/lib/flapjack/version.rb +5 -0
  73. data/lib/flapjack/web.rb +198 -0
  74. data/lib/flapjack/web/views/acknowledge.haml +55 -0
  75. data/lib/flapjack/web/views/check.haml +162 -0
  76. data/lib/flapjack/web/views/index.haml +92 -0
  77. data/lib/flapjack/web/views/self_stats.haml +56 -0
  78. data/lib/flapjack/{applications/worker.rb → worker/application.rb} +0 -0
  79. data/lib/flapjack/worker/cli.rb +49 -0
  80. data/{spec → spec.old}/check_sandbox/echo +0 -0
  81. data/{spec → spec.old}/check_sandbox/sandboxed_check +0 -0
  82. data/{spec → spec.old}/configs/flapjack-notifier-couchdb.ini +0 -0
  83. data/{spec → spec.old}/configs/flapjack-notifier.ini +0 -0
  84. data/{spec → spec.old}/configs/recipients.ini +0 -0
  85. data/{spec → spec.old}/helpers.rb +0 -0
  86. data/{spec → spec.old}/inifile_spec.rb +0 -0
  87. data/{spec → spec.old}/mock-notifiers/mock/init.rb +0 -0
  88. data/{spec → spec.old}/mock-notifiers/mock/mock.rb +0 -0
  89. data/{spec → spec.old}/notifier-directories/spoons/testmailer/init.rb +0 -0
  90. data/{spec → spec.old}/notifier_application_spec.rb +0 -0
  91. data/{spec → spec.old}/notifier_filters_spec.rb +0 -0
  92. data/{spec → spec.old}/notifier_options_multiplexer_spec.rb +0 -0
  93. data/{spec → spec.old}/notifier_options_spec.rb +0 -0
  94. data/{spec → spec.old}/notifier_spec.rb +0 -0
  95. data/{spec → spec.old}/notifiers/mailer_spec.rb +0 -0
  96. data/{spec → spec.old}/notifiers/xmpp_spec.rb +0 -0
  97. data/{spec → spec.old}/persistence/datamapper_spec.rb +0 -0
  98. data/{spec → spec.old}/persistence/mock_persistence_backend.rb +0 -0
  99. data/{spec → spec.old}/simple.ini +0 -0
  100. data/{spec → spec.old}/spec.opts +0 -0
  101. data/{spec → spec.old}/test-filters/blocker.rb +0 -0
  102. data/{spec → spec.old}/test-filters/mock.rb +0 -0
  103. data/{spec → spec.old}/transports/beanstalkd_spec.rb +0 -0
  104. data/{spec → spec.old}/transports/mock_transport.rb +0 -0
  105. data/{spec → spec.old}/worker_application_spec.rb +0 -0
  106. data/{spec → spec.old}/worker_options_spec.rb +0 -0
  107. data/spec/lib/flapjack/api/entity_check_presenter_spec.rb +117 -0
  108. data/spec/lib/flapjack/api/entity_presenter_spec.rb +92 -0
  109. data/spec/lib/flapjack/api_spec.rb +170 -0
  110. data/spec/lib/flapjack/coordinator_spec.rb +16 -0
  111. data/spec/lib/flapjack/data/entity_check_spec.rb +398 -0
  112. data/spec/lib/flapjack/data/entity_spec.rb +71 -0
  113. data/spec/lib/flapjack/data/event_spec.rb +6 -0
  114. data/spec/lib/flapjack/executive_spec.rb +59 -0
  115. data/spec/lib/flapjack/filters/acknowledgement_spec.rb +6 -0
  116. data/spec/lib/flapjack/filters/delays_spec.rb +6 -0
  117. data/spec/lib/flapjack/filters/detect_mass_client_failures_spec.rb +6 -0
  118. data/spec/lib/flapjack/filters/ok_spec.rb +6 -0
  119. data/spec/lib/flapjack/filters/scheduled_maintenance_spec.rb +6 -0
  120. data/spec/lib/flapjack/filters/unscheduled_maintenance_spec.rb +6 -0
  121. data/spec/lib/flapjack/jabber_spec.rb +150 -0
  122. data/spec/lib/flapjack/notification/email_spec.rb +6 -0
  123. data/spec/lib/flapjack/notification/sms_spec.rb +6 -0
  124. data/spec/lib/flapjack/pikelet_spec.rb +28 -0
  125. data/spec/lib/flapjack/web_spec.rb +188 -0
  126. data/spec/spec_helper.rb +44 -0
  127. data/spec/support/profile_all_formatter.rb +44 -0
  128. data/spec/support/uncolored_doc_formatter.rb +9 -0
  129. data/tasks/events.rake +85 -0
  130. data/tmp/acknowledge.rb +14 -0
  131. data/tmp/create_config_yaml.rb +16 -0
  132. data/tmp/create_events_failure.rb +33 -0
  133. data/tmp/create_events_ok.rb +33 -0
  134. data/tmp/create_events_ok_fail_ack_ok.rb +54 -0
  135. data/tmp/create_events_ok_failure.rb +40 -0
  136. data/tmp/create_events_ok_failure_ack.rb +54 -0
  137. data/tmp/dummy_entities.json +1 -0
  138. data/tmp/generate_nagios_test_hosts.rb +16 -0
  139. data/tmp/parse_config_yaml.rb +7 -0
  140. data/tmp/redis_delete_all_keys.rb +11 -0
  141. data/tmp/test_entities.json +1 -0
  142. metadata +482 -221
  143. data/TODO.md +0 -36
  144. data/VERSION +0 -1
  145. data/bin/flapjack-benchmark +0 -50
  146. data/bin/flapjack-notifier +0 -21
  147. data/bin/flapjack-notifier-manager +0 -43
  148. data/bin/flapjack-stats +0 -27
  149. data/bin/flapjack-worker +0 -13
  150. data/bin/flapjack-worker-manager +0 -35
  151. data/dist/etc/init.d/flapjack-notifier +0 -47
  152. data/dist/etc/init.d/flapjack-workers +0 -44
  153. data/features/flapjack-notifier-manager.feature +0 -19
  154. data/features/flapjack-worker-manager.feature +0 -27
  155. data/features/flapjack-worker.feature +0 -27
  156. data/features/netsaint-config-converter.feature +0 -126
  157. data/features/persistence/couch.feature +0 -105
  158. data/features/persistence/sqlite3.feature +0 -105
  159. data/features/persistence/steps/couch_steps.rb +0 -25
  160. data/features/persistence/steps/generic_steps.rb +0 -102
  161. data/features/persistence/steps/sqlite3_steps.rb +0 -13
  162. data/features/steps/flapjack-notifier-manager_steps.rb +0 -24
  163. data/features/steps/flapjack-worker-manager_steps.rb +0 -48
  164. data/lib/flapjack/applications/notifier.rb +0 -222
  165. data/lib/flapjack/cli/notifier.rb +0 -108
  166. data/lib/flapjack/cli/notifier_manager.rb +0 -86
  167. data/lib/flapjack/cli/worker.rb +0 -51
@@ -0,0 +1,44 @@
1
+ if ENV['COVERAGE']
2
+ require 'simplecov'
3
+
4
+ SimpleCov.start do
5
+ add_filter '/spec/'
6
+ end
7
+ end
8
+
9
+ FLAPJACK_ENV = ENV["FLAPJACK_ENV"] || 'test'
10
+ require 'bundler'
11
+ Bundler.require(:default, :test)
12
+
13
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
14
+
15
+ # Requires supporting files with custom matchers and macros, etc,
16
+ # in ./support/ and its subdirectories.
17
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
18
+
19
+ # This file was generated by the `rspec --init` command. Conventionally, all
20
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
21
+ # Require this file using `require "spec_helper"` to ensure that it is only
22
+ # loaded once.
23
+ #
24
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
25
+ RSpec.configure do |config|
26
+ config.treat_symbols_as_metadata_keys_with_true_values = true
27
+ config.run_all_when_everything_filtered = true
28
+ config.filter_run :focus
29
+
30
+ # Run specs in random order to surface order dependencies. If you find an
31
+ # order dependency and want to debug it, you can fix the order by providing
32
+ # the seed, which is printed after each run.
33
+ # --seed 1234
34
+ config.order = 'random'
35
+
36
+ config.around(:each, :redis => true) do |example|
37
+ @redis = ::Redis.new(:db => 14, :driver => :ruby)
38
+ @redis.flushdb
39
+ example.run
40
+ @redis.quit
41
+ end
42
+
43
+ config.include Rack::Test::Methods, :sinatra => true
44
+ end
@@ -0,0 +1,44 @@
1
+ require 'rspec/core/formatters/base_formatter'
2
+
3
+ class ProfileAllFormatter < RSpec::Core::Formatters::BaseFormatter
4
+
5
+ def initialize(output)
6
+ super(output)
7
+ @example_times = []
8
+ end
9
+
10
+ def start(count)
11
+ super(count)
12
+ @output.puts "Profiling enabled."
13
+ end
14
+
15
+ def example_started(example)
16
+ super(example)
17
+ @time = ((Time.respond_to?(:zone) && Time.zone) ? Time.zone.now : Time.now)
18
+ end
19
+
20
+ def example_passed(example)
21
+ @example_times << [
22
+ example_group.description,
23
+ example.description,
24
+ ((Time.respond_to?(:zone) && Time.zone) ? Time.zone.now : Time.now) - @time
25
+ ]
26
+ super(example)
27
+ end
28
+
29
+ def start_dump
30
+ super
31
+ @output.puts "\n\nExample times:\n"
32
+
33
+ @example_times = @example_times.sort_by do |description, example, time|
34
+ time
35
+ end.reverse
36
+
37
+ @example_times.each do |description, example, time|
38
+ @output.print sprintf("%.7f", time)
39
+ @output.puts " #{description} #{example}"
40
+ end
41
+ @output.flush
42
+ end
43
+
44
+ end
@@ -0,0 +1,9 @@
1
+ require 'rspec/core/formatters/documentation_formatter'
2
+
3
+ class UncoloredDocFormatter < RSpec::Core::Formatters::DocumentationFormatter
4
+
5
+ def color(text, color_code)
6
+ text
7
+ end
8
+
9
+ end
data/tasks/events.rake ADDED
@@ -0,0 +1,85 @@
1
+
2
+ require 'redis'
3
+ require 'yaml'
4
+ require 'yajl'
5
+
6
+ namespace :events do
7
+
8
+ # FIXME: add arguments, make more flexible
9
+ desc "send events to trigger some notifications"
10
+ task :test_notification do
11
+
12
+ # config file reading stuff ...
13
+ # FIXME: move this into somewhere reusable
14
+ FLAPJACK_ENV = ENV['FLAPJACK_ENV'] || 'development'
15
+ config_file = File.join('etc', 'flapjack_config.yaml')
16
+ if File.file?(config_file)
17
+ config = YAML::load(File.open(config_file))
18
+ else
19
+ puts "Could not find 'etc/flapjack_config.yaml'"
20
+ exit(false)
21
+ end
22
+ config_env = config[FLAPJACK_ENV]
23
+ @redis_host = config_env['redis']['host'] || 'localhost'
24
+ @redis_port = config_env['redis']['port'] || '6379'
25
+ @redis_path = config_env['redis']['path'] || nil
26
+ @redis_db = config_env['redis']['db'] || 0
27
+
28
+ if config_env.nil? || config_env.empty?
29
+ puts "No config data for environment '#{FLAPJACK_ENV}'"
30
+ exit(false)
31
+ end
32
+
33
+ # add lib to the default include path
34
+ unless $:.include?(File.dirname(__FILE__) + '/../lib/')
35
+ $: << File.dirname(__FILE__) + '/../lib'
36
+ end
37
+
38
+ def get_redis_connection
39
+ if @redis_path
40
+ redis = Redis.new(:db => @redis_db, :path => @redis_path)
41
+ else
42
+ redis = Redis.new(:db => @redis_db, :host => @redis_host, :port => @redis_port)
43
+ end
44
+ redis
45
+ end
46
+
47
+ # creates an event object and adds it to the events list in redis
48
+ # 'entity' => entity,
49
+ # 'check' => check,
50
+ # 'type' => 'service',
51
+ # 'state' => state,
52
+ # 'summary' => check_output,
53
+ # 'time' => timestamp,
54
+ def create_event(event)
55
+ redis = get_redis_connection
56
+ evt = Yajl::Encoder.encode(event)
57
+ puts "sending #{evt}"
58
+ redis.rpush('events', evt)
59
+ end
60
+
61
+ create_event( 'entity' => 'clientx-app-01',
62
+ 'check' => 'ping',
63
+ 'type' => 'service',
64
+ 'state' => 'ok',
65
+ 'summary' => 'testing' )
66
+
67
+ sleep(8)
68
+
69
+ create_event( 'entity' => 'clientx-app-01',
70
+ 'check' => 'ping',
71
+ 'type' => 'service',
72
+ 'state' => 'critical',
73
+ 'summary' => 'testing' )
74
+
75
+ sleep(8)
76
+
77
+ create_event( 'entity' => 'clientx-app-01',
78
+ 'check' => 'ping',
79
+ 'type' => 'service',
80
+ 'state' => 'ok',
81
+ 'summary' => 'testing' )
82
+
83
+ end
84
+
85
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'redis'
4
+ require 'json'
5
+
6
+ if not id = ARGV.first then
7
+ puts "Usage: acknowledge.rb <id>"
8
+ exit 1
9
+ end
10
+
11
+
12
+ redis = Redis.new
13
+
14
+ redis.hset 'acknowledged', id, 'true'
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ require 'yaml'
5
+
6
+ config = { 'sausage' => true,
7
+ 'sauce' => 'tomato sauce',
8
+ 'count' => 23,
9
+ 'foobar' => 'jkfldjsk',
10
+ 'zero_s' => '0',
11
+ 'true_s' => 'true',
12
+ }
13
+
14
+
15
+ puts config.to_yaml
16
+
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'redis'
4
+ require 'json'
5
+
6
+ id = "%.2d" % (1..10).to_a[rand(9)]
7
+
8
+ events = []
9
+
10
+ events << {
11
+ 'entity' => "app-#{id}",
12
+ 'check' => 'http',
13
+ 'type' => 'service',
14
+ 'state' => 'critical',
15
+ }.to_json
16
+
17
+ redis = Redis.new
18
+
19
+ 2000.times do
20
+ events.each {|event|
21
+ redis.rpush 'events', event
22
+ }
23
+ end
24
+
25
+ puts "#{Time.now} - finished loading up events"
26
+ previous_events_size = redis.llen 'events'
27
+ while previous_events_size > 0
28
+ sleep 1
29
+ events_size = redis.llen 'events'
30
+ throughput = previous_events_size - events_size
31
+ previous_events_size = events_size
32
+ puts "#{Time.now} - #{events_size} (#{throughput})"
33
+ end
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'redis'
4
+ require 'json'
5
+
6
+ id = "%.2d" % (1..10).to_a[rand(9)]
7
+
8
+ events = []
9
+
10
+ events << {
11
+ 'entity' => "client1-test-app-#{id}",
12
+ 'check' => 'http',
13
+ 'type' => 'service',
14
+ 'state' => 'ok',
15
+ }.to_json
16
+
17
+ redis = Redis.new
18
+
19
+ 4000.times do
20
+ events.each {|event|
21
+ redis.rpush 'events', event
22
+ }
23
+ end
24
+
25
+ puts "#{Time.now} - finished loading up events"
26
+ previous_events_size = redis.llen 'events'
27
+ while previous_events_size > 0
28
+ sleep 1
29
+ events_size = redis.llen 'events'
30
+ throughput = previous_events_size - events_size
31
+ previous_events_size = events_size
32
+ puts "#{Time.now} - #{events_size} (#{throughput})"
33
+ end
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'redis'
4
+ require 'json'
5
+
6
+ id = "%.2d" % (1..10).to_a[rand(9)]
7
+
8
+ events = []
9
+
10
+ events << {
11
+ 'entity' => "app-#{id}",
12
+ 'check' => 'http',
13
+ 'type' => 'service',
14
+ 'state' => 'ok',
15
+ }.to_json
16
+
17
+ events << {
18
+ 'entity' => "app-#{id}",
19
+ 'check' => 'http',
20
+ 'type' => 'service',
21
+ 'state' => 'critical',
22
+ }.to_json
23
+
24
+ events << {
25
+ 'entity' => "app-#{id}",
26
+ 'check' => 'http',
27
+ 'type' => 'action',
28
+ 'state' => 'acknowledgement',
29
+ }.to_json
30
+
31
+ events << {
32
+ 'entity' => "app-#{id}",
33
+ 'check' => 'http',
34
+ 'type' => 'service',
35
+ 'state' => 'ok',
36
+ }.to_json
37
+
38
+ redis = Redis.new
39
+
40
+ 2000.times do
41
+ events.each {|event|
42
+ redis.rpush 'events', event
43
+ }
44
+ end
45
+
46
+ puts "#{Time.now} - finished loading up events"
47
+ previous_events_size = redis.llen 'events'
48
+ while previous_events_size > 0
49
+ sleep 1
50
+ events_size = redis.llen 'events'
51
+ throughput = previous_events_size - events_size
52
+ previous_events_size = events_size
53
+ puts "#{Time.now} - #{events_size} (#{throughput})"
54
+ end
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'redis'
4
+ require 'json'
5
+
6
+ id = "%.2d" % (1..10).to_a[rand(9)]
7
+
8
+ events = []
9
+
10
+ events << {
11
+ 'entity' => "app-#{id}",
12
+ 'check' => 'http',
13
+ 'type' => 'service',
14
+ 'state' => 'ok',
15
+ }.to_json
16
+
17
+ events << {
18
+ 'entity' => "app-#{id}",
19
+ 'check' => 'http',
20
+ 'type' => 'service',
21
+ 'state' => 'critical',
22
+ }.to_json
23
+
24
+ redis = Redis.new
25
+
26
+ 2000.times do
27
+ events.each {|event|
28
+ redis.rpush 'events', event
29
+ }
30
+ end
31
+
32
+ puts "#{Time.now} - finished loading up events"
33
+ previous_events_size = redis.llen 'events'
34
+ while previous_events_size > 0
35
+ sleep 1
36
+ events_size = redis.llen 'events'
37
+ throughput = previous_events_size - events_size
38
+ previous_events_size = events_size
39
+ puts "#{Time.now} - #{events_size} (#{throughput})"
40
+ end
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'redis'
4
+ require 'json'
5
+
6
+ id = "%.2d" % (1..10).to_a[rand(9)]
7
+
8
+ events = []
9
+
10
+ events << {
11
+ 'entity' => "app-#{id}",
12
+ 'check' => 'http',
13
+ 'type' => 'service',
14
+ 'state' => 'ok',
15
+ }.to_json
16
+
17
+ events << {
18
+ 'entity' => "app-#{id}",
19
+ 'check' => 'http',
20
+ 'type' => 'service',
21
+ 'state' => 'critical',
22
+ }.to_json
23
+
24
+ events << {
25
+ 'entity' => "app-#{id}",
26
+ 'check' => 'http',
27
+ 'type' => 'action',
28
+ 'state' => 'acknowledgement',
29
+ }.to_json
30
+
31
+ #events << {
32
+ # 'entity' => "app-#{id}",
33
+ # 'check' => 'http',
34
+ # 'type' => 'service',
35
+ # 'state' => 'ok',
36
+ #}.to_json
37
+
38
+ redis = Redis.new
39
+
40
+ 2000.times do
41
+ events.each {|event|
42
+ redis.rpush 'events', event
43
+ }
44
+ end
45
+
46
+ puts "#{Time.now} - finished loading up events"
47
+ previous_events_size = redis.llen 'events'
48
+ while previous_events_size > 0
49
+ sleep 1
50
+ events_size = redis.llen 'events'
51
+ throughput = previous_events_size - events_size
52
+ previous_events_size = events_size
53
+ puts "#{Time.now} - #{events_size} (#{throughput})"
54
+ end
@@ -0,0 +1 @@
1
+ [{"id":"10001","name":"clientx-app-01","contacts":["0362","0363","0364"]},{"id":"10002","name":"clientx-app-02","contacts":["0362"]},{"id":"10003","name":"clienty-app-01","contacts":["0363","0364"]}]