<?xml version="1.0" encoding="utf-8"?>
<packagegui>
	<name>zabbixproxy</name>
	<title>Services: Zabbix Proxy</title>
	<category>Monitoring</category>
	<version>1.1</version>
	<addedit_string>Zabbix Proxy has been created/modified.</addedit_string>
	<delete_string>Zabbix Proxy has been deleted.</delete_string>
	<restart_command>/usr/local/etc/rc.d/zabbix_proxy.sh restart</restart_command>
	<menu>
		<name>Zabbix Proxy</name>
		<tooltiptext>Setup Zabbix Proxy specific settings</tooltiptext>
		<section>Services</section>
		<url>/pkg_edit.php?xml=zabbix-proxy.xml&amp;id=0</url>
	</menu>
	<service>
		<name>zabbix-proxy</name>
		<rcfile>zabbix-proxy.sh</rcfile>
		<executable>zabbix_proxy</executable>
		<description>Zabbix proxy collection daemon</description>
	</service>
	<tabs>
		<tab>
			<text>Settings</text>
			<url>/pkg_edit.php?xml=zabbix-proxy.xml&amp;id=0</url>
			<active />
		</tab>
	</tabs>
	<fields>
		<field>
			<fielddescr>Server</fielddescr>
			<fieldname>server</fieldname>
			<description>List of comma delimited IP addresses (or hostnames) of ZABBIX servers</description>
			<default_value>127.0.0.1</default_value>
			<type>input</type>
			<size>100</size>
			<required>true</required>
		</field>
		<field>
			<fielddescr>Server Port</fielddescr>
			<fieldname>serverport</fieldname>
			<description>Server port (generally 10051)</description>
			<default_value>10051</default_value>
			<type>input</type>
			<size>6</size>
			<required>true</required>
		</field>
		<field>
			<fielddescr>Hostname</fielddescr>
			<fieldname>hostname</fieldname>
			<description>Unique, case-sensitive proxy name. Make sure the proxy name is known to the server</description>
			<default_value>localhost</default_value>
			<type>input</type>
			<size>100</size>
			<required>true</required>
		</field>
		<field>
			<fielddescr>Active Mode</fielddescr>
			<fieldname>activemode</fieldname>
			<description>Check to run Zabbix proxy in active mode (default)</description>
			<default_value>on</default_value>
			<type>checkbox</type>
			<required>true</required>
		</field>
		<field>
			<fielddescr>Config Frequency</fielddescr>
			<fieldname>configfrequency</fieldname>
			<description>How often the proxy retrieves configuration data from the Zabbix server in seconds. Ignored if the proxy runs in passive mode.</description>
			<default_value>3600</default_value>
			<type>input</type>
			<size>10</size>
			<required>true</required>
		</field>
	</fields>
	<custom_php_install_command>
	<![CDATA[
	global $config, $g;

	$pfs_version = substr(trim(file_get_contents("/etc/version")),0,3);
	switch ($pfs_version) {
		case "1.2":
		case "2.0":
			define('ZABBIX_PROXY_BASE', '/usr/local');
			break;
		default:
			define('ZABBIX_PROXY_BASE', '/usr/pbi/zabbix-proxy-' . php_uname("m"));
	}

	mwexec("mkdir -p /var/log/zabbix/");
	mwexec("mkdir -p /var/run/zabbix/");
	mwexec("mkdir -p /var/db/zabbix/");

	conf_mount_rw();

	/* create a few directories and ensure the sample files are in place */
	exec("/bin/mkdir -p " . ZABBIX_PROXY_BASE . "/etc/zabbix");
	exec("/bin/mkdir -p /var/log/zabbix");
	exec("/bin/mkdir -p /var/run/zabbix");
	exec("/bin/mkdir -p /var/db/zabbix");

	exec("/bin/rm -f " . ZABBIX_PROXY_BASE . "/etc/rc.d/zabbix_proxy");

	$start  = "/bin/mkdir -p /var/log/zabbix\n";
	$start .= "/usr/sbin/chown -R zabbix:zabbix /var/log/zabbix\n";

	$start .= "/bin/mkdir -p /var/run/zabbix\n";
	$start .= "/usr/sbin/chown -R zabbix:zabbix /var/run/zabbix\n";

	$start .= "/bin/mkdir -p /var/db/zabbix\n";
	$start .= "/usr/sbin/chown -R zabbix:zabbix /var/db/zabbix\n";

	$start .= "echo \"Starting Zabbix Proxy\"...\n";

	/* start zabbix proxy */
	$start .= ZABBIX_PROXY_BASE . "/sbin/zabbix_proxy\n";

	$stop  = "echo \"Stopping Zabbix Proxy\"\n";
	$stop .= "kill `cat /var/run/zabbix/zabbix_proxy.pid`\n";
	/* write out rc.d start/stop file */
	write_rcfile(array(
		"file" => "zabbix_proxy.sh",
		"start" => "{$start}",
		"restart" => "$stop\n" . "sleep 5\n" . "{$start}",
		"stop" => "$stop"
		)
	);

	conf_mount_ro();
	]]>
	</custom_php_install_command>
	<custom_php_command_before_form></custom_php_command_before_form>
	<custom_php_after_head_command></custom_php_after_head_command>
	<custom_php_after_form_command></custom_php_after_form_command>
	<custom_php_validation_command>
	<![CDATA[
	global $_POST;

	$ServerPort=$_POST['serverport'];
	if (!preg_match("/^\d+$/", $ServerPort)) {
		$input_errors[]='Server Port is not numeric.';
	}

	$ConfigFrequency=$_POST['configfrequency'];
	if (!preg_match("/^\d+$/", $ConfigFrequency)) {
		$input_errors[]='Config Frequency is not numeric.';
	}
	]]>
	</custom_php_validation_command>
	<custom_add_php_command></custom_add_php_command>
	<custom_php_resync_config_command>
	<![CDATA[
	conf_mount_rw();
	global $config, $g;

	$pfs_version = substr(trim(file_get_contents("/etc/version")),0,3);
	switch ($pfs_version) {
		case "1.2":
		case "2.0":
			define('ZABBIX_PROXY_BASE', '/usr/local');
			break;
		default:
			define('ZABBIX_PROXY_BASE', '/usr/pbi/zabbix-proxy-' . php_uname("m"));
	}

	$zabbixproxy_config = $config['installedpackages']['zabbixproxy']['config'][0];

	$Server=$zabbixproxy_config['server'];
	$ServerPort=$zabbixproxy_config['serverport'];
	$Hostname=$zabbixproxy_config['hostname'];
	$ListenPort=$zabbixproxy_config['listenport'];
	$ConfigFrequency=$zabbixproxy_config['configfrequency'];
	if(isset($zabbixproxy_config['activemode'])) {
		$Mode="0"; /* active */
	} else {
		$Mode="1"; /* passive */
	}

	$conf = "Server=$Server\n";
	$conf .= "ServerPort=$ServerPort\n";
	$conf .= "Hostname=$Hostname\n";
	$conf .= "PidFile=/var/run/zabbix/zabbix_proxy.pid\n";
	$conf .= "DBName=/var/db/zabbix/proxy.db\n";
	$conf .= "LogFile=/var/log/zabbix/zabbix_proxy.log\n";
	$conf .= "ConfigFrequency=$ConfigFrequency\n";
	$conf .= "FpingLocation=/usr/local/sbin/fping\n";
	/* there's currently no fping6 (IPv6) dependency in the package, but if there was, the binary would likely also be in /usr/local/sbin */
	$conf .= "Fping6Location=/usr/local/sbin/fping6\n";
	$conf .= "ProxyMode=$Mode\n";

	file_put_contents(ZABBIX_PROXY_BASE . "/etc/zabbix/zabbix_proxy.conf", $conf);

	$want_sysctls = array(
		'kern.ipc.shmall' => '2097152',
		'kern.ipc.shmmax' => '2147483648',
		'kern.ipc.semmsl' => '250'
	);
	$sysctls = array();
	if (file_exists("/etc/sysctl.conf")) {
		$sc = file_get_contents("/etc/sysctl.conf");
		$sc = explode("\n", $sc);
		foreach ($sc as $num => $line) {
			list($sysctl, $val) = explode("=", $line, 2);
			if (array_key_exists($sysctl, $want_sysctls) || empty($sysctl))
				unset($sc[$num]);
		}
	}
	foreach ($want_sysctls as $ws => $wv) {
		$sc[] = "{$ws}={$wv}";
		exec("/sbin/sysctl {$ws}={$wv}");
	}
	file_put_contents("/etc/sysctl.conf", implode("\n", $sc) . "\n");

	$want_tunables = array(
		'kern.ipc.semopm' => '100',
		'kern.ipc.semmni' => '128',
		'kern.ipc.semmns' => '32000',
		'kern.ipc.shmmni' => '4096'
	);
	$tunables = array();
	if (file_exists("/boot/loader.conf")) {
		$lt = file_get_contents("/boot/loader.conf");
		$lt = explode("\n", $lt);
		foreach ($lt as $num => $line) {
			list($tunable, $val) = explode("=", $line, 2);
			if (array_key_exists($tunable, $want_tunables) || empty($tunable))
				unset($lt[$num]);
		}
	}
	foreach ($want_tunables as $wt => $wv) {
		$lt[] = "{$wt}={$wv}";
	}
	file_put_contents("/boot/loader.conf", implode("\n", $lt) . "\n");
	chmod("/var/log/zabbix", 0755);
	chmod("/var/run/zabbix", 0755);
	conf_mount_ro();

	]]>
	</custom_php_resync_config_command>
	<custom_php_deinstall_command>
	<![CDATA[
	exec("kill `cat /var/run/zabbix/zabbix_proxy.pid`");

	exec("/bin/rm " . ZABBIX_PROXY_BASE . "/etc/rc.d/zabbix_proxy.sh");

	exec("/bin/rm -r /var/log/zabbix/");
	exec("/bin/rm -r /var/run/zabbix/");
	exec("/bin/rm -r /var/db/zabbix/");
	]]>
	</custom_php_deinstall_command>
</packagegui>