#!/usr/bin/env ruby
require_relative 'ha_logger'

module OnApp
  class ClusterStateMon
    ONAPP_MASTER_FLAG = "/onapp/interface/tmp/onapp.master"
    ONAPP_STATE = "onapp-cluster-state"

    attr_reader :state

    def initialize
      debug_info
      exit 0 unless ENV["CRM_notify_node"] == `hostname`.chomp
      exit 0 unless ENV["CRM_notify_rsc"] == ONAPP_STATE

      action = ENV["CRM_notify_task"]
      exit 0 if action == 'monitor'
      exit 0 unless %w{ promote demote stop start }.include? action

      @state = action == 'promote' ? :master : :slave

      logger.info("onapp-engine, #{state}")
    end

    def notify_onapp_engine
      update = state == :master ? "touch" : "rm -rf"

      %x[ su onapp -m -c "#{update} #{ONAPP_MASTER_FLAG}"]
    end

    private

    def logger
      @logger ||= HALogger.new
    end

    def debug_info
      return unless ENV['CRM_cluster_state_debug']

      logger.info "\n\t\tNODE:   #{ ENV['CRM_notify_node'] }"
      logger.info "task          #{ ENV['CRM_notify_task'] }"
      logger.info "recipient     #{ ENV['CRM_notify_recipient'] }"
      logger.info "resource      #{ ENV['CRM_notify_rsc'] }"
      logger.info "descript      #{ ENV['CRM_notify_desc'] }"
      logger.info "status        #{ ENV['CRM_notify_status'] }"
      logger.info "return code   #{ ENV['CRM_notify_rc'] }"
      logger.info "expected code #{ ENV['CRM_notify_target_rc'] }"
    end
  end
end

OnApp::ClusterStateMon.new.notify_onapp_engine