<?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 = [];
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':
CSession::start();
if (!CSession::keyExists('serverCheckResult')
|| (CSession::getValue('serverCheckTime') + SERVER_CHECK_INTERVAL) <= time()) {
$zabbixServer = new CZabbixServer($ZBX_SERVER, $ZBX_SERVER_PORT, ZBX_SOCKET_TIMEOUT, 0);
CSession::setValue('serverCheckResult', $zabbixServer->isRunning(CWebUser::getSessionCookie()));
CSession::setValue('serverCheckTime', time());
}
$result = [
'result' => (bool) CSession::getValue('serverCheckResult'),
'message' => CSession::getValue('serverCheckResult')
? ''
: _('Zabbix server is not running: the information displayed may not be current.')
];
break;
case 'screen.get':
$result = '';
$screenBase = CScreenBuilder::getScreen($data);
if ($screenBase !== null) {
$screen = $screenBase->get();
if ($data['mode'] == SCREEN_MODE_JS) {
$result = $screen;
}