#!/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()
{
    local cmd=
    if [ "$1" = "on" ]; then
	    cmd='energize'
    elif [ "$1" = "off" ]; then
	    cmd='gronk'
    else
	    cmd="$1"
    fi

    if service_control 'zabbix_agentd' "$cmd"; 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
}

agentd_reload()
{
	if service_control 'zabbix_agentd' reload; 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"
                write_type_item listen_ip "ipv4-address-list"
                ;;
        esac
        ;;
    read)
        case "$in__objects" in
            /)
                if service_control 'zabbix_agentd' is-active; 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
                if [ "$(zbxagent_get 'EnableRemoteCommands')" != '1' ]; then
                        write_bool_param enable_exec 'off'
                else
                        write_bool_param enable_exec 'on'
                fi
                (
                        listen_ip="$(zbxagent_get 'ListenIP')"
                        write_string_param 'listen_ip' "${listen_ip:-0.0.0.0}"
                )
                ;;
        esac
        ;;
    write)
        case "$in__objects" in
            /)
	    	if [ -z "$in_hostname" ]; then
			write_error "`_ 'Hostname should not be empty'`"
			elif [ -z "${in_hostname##*[<>?\$\\%*()@#!]*}" ]; then
				write_error "`_ 'Hostname is not valid'`"
			else
                        service_control 'zabbix_agentd' off
			zbxagent_set 'Server' "$in_server_ip"
			zbxagent_set 'ServerActive' "$in_server_ip"
			zbxagent_set 'Include' '/etc/zabbix/zabbix_agentd.conf.d/*.conf'
                    	agentd_control off
			if test_bool $in_custom_hostname; then
				zbxagent_set 'Hostname' "$in_hostname"
			else
				zbxagent_comment 'Hostname'
			fi
			zbxagent_set 'ListenIP' "${in_listen_ip:-0.0.0.0}"
                        if test_bool $in_enable_exec; then
                                zbxagent_set 'EnableRemoteCommands' 1
                        else
                                zbxagent_set 'EnableRemoteCommands' 0
                        fi
			if test_bool $in_enable_service; then
				agentd_control on
                	else
                    		agentd_control off
                	fi
		fi
                ;;
        esac
        ;;
    esac
}

message_loop
