<?php
require_once dirname(__FILE__).'/include/func.inc.php';
require_once dirname(__FILE__).'/include/defines.inc.php';
require_once dirname(__FILE__).'/include/classes/user/CWebUser.php';
require_once dirname(__FILE__).'/include/classes/core/CHttpRequest.php';
$requestType = getRequest('type', PAGE_TYPE_JSON);
if ($requestType == PAGE_TYPE_JSON) {
$http_request = new CHttpRequest();
$data = json_decode($http_request->body(), true);
}
else {
$data = $_REQUEST;
}
if (is_array($data) && array_key_exists('method', $data) && $data['method'] === 'zabbix.status') {
CWebUser::disableSessionExtension();
}
require_once dirname(__FILE__).'/include/config.inc.php';
$page['title'] = 'RPC';
$page['file'] = 'jsrpc.php';
$page['type'] = detect_page_type($requestType);
require_once dirname(__FILE__).'/include/page_header.php';
if (!is_array($data) || !isset($data['method'])
|| ($requestType == PAGE_TYPE_JSON && (!isset($data['params']) || !is_array($data['params'])))) {
fatal_error('Wrong RPC call to JS RPC!');
}
$result = [];
$limit = CSettingsHelper::get(CSettingsHelper::SEARCH_LIMIT);
switch ($data['method']) {
case 'search':
$result = API::Host()->get([
'output' => ['hostid', 'name'],
'search' => ['name' => $data['params']['search'], 'host' => $data['params']['search']],
'searchByAny' => true,
'sortfield' => 'name',
'limit' => 15
]);
break;
case 'zabbix.status':
if (!CSessionHelper::has('serverCheckResult')
|| (CSessionHelper::get('serverCheckTime') + SERVER_CHECK_INTERVAL) <= time()) {
if ($ZBX_SERVER === null && $ZBX_SERVER_PORT === null) {
$is_running = false;
}
else {
$zabbix_server = new CZabbixServer($ZBX_SERVER, $ZBX_SERVER_PORT,
timeUnitToSeconds(CSettingsHelper::get(CSettingsHelper::CONNECT_TIMEOUT)),
timeUnitToSeconds(CSettingsHelper::get(CSettingsHelper::SOCKET_TIMEOUT)), 0
);
$is_running = $zabbix_server->isRunning(CSessionHelper::getId());
}
CSessionHelper::set('serverCheckResult', $is_running);
CSessionHelper::set('serverCheckTime', time());
}
$result = [
'result' => (bool) CSessionHelper::get('serverCheckResult'),
'message' => CSessionHelper::get('serverCheckResult')
? ''
: _('Zabbix server is not running: the information displayed may not be current.')
];
break;
case 'screen.get':
$result = '';