#
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
#
#

# 'check_cpu' check remote cpu load
define command {
        command_name    check_cpu
        command_line    $USER1$/check_cpu.pl -H $HOSTADDRESS$ -C hadoop -w $ARG1$ -c $ARG2$
       }

# Check data node storage full 
define command {
        command_name    check_datanode_storage
        command_line    php $USER1$/check_datanode_storage.php -h $HOSTADDRESS$ -p $ARG1$ -w $ARG2$ -c $ARG3$
       }

define command{
        command_name    check_hdfs_blocks
        command_line    php $USER1$/check_hdfs_blocks.php -h $HOSTADDRESS$ -p $ARG1$ -w $ARG2$ -c $ARG3$
       }

define command{
        command_name    check_hdfs_capacity
        command_line    php $USER1$/check_hdfs_capacity.php -h $HOSTADDRESS$ -p $ARG1$ -w $ARG2$ -c $ARG3$
       }

define command{
        command_name    check_aggregate
        command_line    php $USER1$/check_aggregate.php -f /var/nagios/status.dat -s 1 -t service -n $ARG1$ -w $ARG2$ -c $ARG3$
       }

define command{
        command_name    check_rpcq_latency
        command_line    php $USER1$/check_rpcq_latency.php -h $HOSTADDRESS$ -p $ARG2$ -n $ARG1$ -w $ARG3$ -c $ARG4$
       }

define command{
        command_name    check_nagios
        command_line    $USER1$/check_nagios -e $ARG1$ -F $ARG2$ -C $ARG3$ 
       }

define command{
        command_name    check_webui
        command_line    $USER1$/check_webui.sh $ARG1$ $HOSTADDRESS$
       }

define command{
        command_name    check_name_dir_status
        command_line    php $USER1$/check_name_dir_status.php -h $HOSTADDRESS$ -p $ARG1$
       }

define command{
        command_name    check_puppet_agent_status
        command_line    php $USER1$/check_puppet_agent_status.php -h $HOSTADDRESS$
       }
  
define command{
        command_name    check_oozie_status
        command_line    $USER1$/check_oozie_status.sh $HOSTADDRESS$ $ARG1$ $ARG2$
       }

define command{
        command_name    check_templeton_status
        command_line    $USER1$/check_templeton_status.sh $HOSTADDRESS$ $ARG1$ $ARG2$ 
       }

define command{
        command_name    check_hive_metastore_status
        command_line    $USER1$/check_hive_metastore_status.sh $HOSTADDRESS$ $ARG1$
       }
