Gurpartap/cognizant

View on GitHub
examples/apps/redis-server.cz

Summary

Maintainability
Test Coverage
Cognizant.application("redis-example") do |app|
  app.pids_dir = "~/.cognizant/redis-example/pids/"
  app.logs_dir = "~/.cognizant/redis-example/logs/"

  # 2 slave instances to master at port 6000.
  3.times do |i|
    app.monitor("redis-server-600#{i}") do |process|
      process.autostart = true
      # process.name = "redis-server-600#{i}" # Same thing as above.
      process.group = "redis"
      # process.uid = "redis"
      # process.gid = "redis"
      process.start_command = "redis-server -"
      process.ping_command = "redis-cli -p 600#{i} PING"

      process.daemonize!
      slaveof = i == 0 ? "" : "slaveof 127.0.0.1 6000"
      process.start_with_input = <<-heredoc
        daemonize no
        port 600#{i}
        #{slaveof}
      heredoc

      # process.check(:always_true, :every => 2.seconds, :times => 3) do |p|
      #   `say "Boom!"`
      # end

      process.check(:transition, :from => :running, :to => :stopped) do |p|
        `say --rate 250 "A process has stopped!"`
      end

      # :retry_after => 0 means do not retry.
      process.check(:flapping, :times => 5, :within => 30.seconds, :retry_after => 7.seconds)

      process.check(:cpu_usage, :every => 5.seconds, :above => 60.percent, :times => [3, 5], :do => :restart)
      process.check(:memory_usage, :every => 5.seconds, :above => 100.megabytes, :times => [3, 5]) do |p|
        # Send email or something.
        p.restart # Restart is the default anyways.
      end
    end
  end
end