#!/bin/bash
# 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.

### send alert email
### usage:
###    bash sendmail.sh alert <alert_email_address> <cluster_name> <table_name> <partition_index>
function send_alert_email()
{
    email_address=$2
    cluster_name=$3
    table_name=$4
    partition_index=$5

    echo "this is a dummy sendmail command, email_to:$2,cluster:$3,table:$4,partition:$5"
}

### send availability_info_email
### usage:
###     bash sendmail.sh availability_info <email_address> <cluster_name> <total_count> <fail_count> <date>
function send_availability_info_email()
{
    email_address=$2
    cluster_name=$3
    total_count=$4
    fail_count=$5
    date=$6

    succ_count=$((total_count-fail_count))

    stat_file=./.availability_info
    total_available="`echo "$succ_count $total_count" | awk '{print $1/$2*100}'`%"
    echo "Statistics from collector on `hostname`" >$stat_file
    echo >>$stat_file
    echo "Detect total count: $total_count" >>$stat_file
    echo "Detect succeed count: $succ_count" >>$stat_file
    echo "Detect failed count: $fail_count" >>$stat_file
    echo "Available: $total_available" >>$stat_file

    echo "this is a dummy sendmail command, email_to:$2,cluster:$3,date:$6,total_count:$4,fail_count:$5,availability:$total_available"
}

###############

if [ $# -eq 0 ]; then
    usage
    exit 0
fi
cmd=$1
case $cmd in
    alert)
        send_alert_email $*
        ;;
    availability_info)
        send_availability_info_email $*
        ;;
    *)
        echo "Error: Unknown command $cmd."
        exit 1
esac
