#!/bin/sh

alterator_api_version=1
. alterator-sh-functions
. alterator-service-functions
. zabbix-sh-functions
. alterator-net-functions
po_domain="alterator-zabbix-agent"

# Change the zabbix agent service startup and running status.
# args: status
agentd_control()
{
    if startup_control zabbix_agentd "$1"; then
        if service_control zabbix_agentd "$1"; then
            [ -n "${ALTERATOR_DEBUG:-}" ] && \
              echo "Zabbix agent service turned $1 successfully" 1>&2
        else
            write_error "`printf \"\`_ 'Unable to turn zabbix_agentd service %s'\`\" $1`"
            [ -n "${ALTERATOR_DEBUG:-}" ] && \
              echo "Unable to turn zabbix_agentd service $1" 1>&2
        fi
    else
        write_error "`_ 'Unable to set zabbix_agentd service startup status'`"
        [ -n "${ALTERATOR_DEBUG:-}" ] && \
              echo "Unable to set zabbix_agentd service startup status" 1>&2
    fi
}

agentd_reload()
{
	if service_reload zabbix_agentd; then
		[ -n "${ALTERATOR_DEBUG:-}" ] && \
			echo "Zabbix agent service reloaded successfully" 1>&2
	else
		write_error "`printf \"\`_ 'Unable to reload zabbix_agentd service'\`\"`"
	fi
}

iplist()
{
( echo "lo"; list_iface ) | \
	while read ifname; do
		ip addr show dev "$ifname" | sed -n -e 's/^[[:space:]]*inet[[:space:]]\+\([0-9\.]\+\).*/\1/p'
	done | tr '\n' ',' | sed -e 's/,$//'
}

on_message()
{
    set_locale
    case "$in_action" in
    type)
        case "$in__objects" in
            /)
                write_type_item enable_service boolean
		write_type_item custom_hostname boolean
		write_type_item server_ip "ipv4-address"
                ;;
        esac
        ;;
    read)
        case "$in__objects" in
            /)
                if service_test_on zabbix_agentd; then
                    write_bool_param enable_service 'on'
                else
                    write_bool_param enable_service 'off'
                fi
		write_string_param server_ip "$(zbxagent_get 'Server')"
		write_string_param system_hostname "$(hostname -s)"
		if [ -z "$(zbxagent_get 'Hostname')" ]; then
			write_bool_param custom_hostname 'off'
			write_string_param hostname "$(hostname -f)"
		else
			write_bool_param custom_hostname 'on'
			write_string_param hostname "$(zbxagent_get 'Hostname')"
		fi
                ;;
        esac
        ;;
    write)
        case "$in__objects" in
            /)
	    	if [ -z "$in_hostname" ]; then
			write_error "`_ 'Hostname should not be empty'`"
		else
			if test_bool $in_enable_service; then
				agentd_control on
                	else
                    		agentd_control off
                	fi
			zbxagent_set 'Server' "$in_server_ip"
			if test_bool $in_custom_hostname; then
				zbxagent_set 'Hostname' "$in_hostname"
			else
				zbxagent_comment 'Hostname'
			fi
			zbxagent_set 'ListenIP' "$(iplist)"
			test_bool $in_enable_service && agentd_reload
		fi
                ;;
        esac
        ;;
    esac
}

message_loop
