Beispiel #1
0
        while (!isset($data['items'][$next]) && $next < $itemCount - 1) {
            $next++;
        }
        if (isset($data['items'][$next]) && $data['items'][$i]['sortorder'] == $data['items'][$next]['sortorder']) {
            for ($j = $next; $j < $itemCount; $j++) {
                if ($data['items'][$j - 1]['sortorder'] >= $data['items'][$j]['sortorder']) {
                    $data['items'][$j]['sortorder']++;
                }
            }
        }
        $i = $next;
    }
    asort_by_key($data['items'], 'sortorder');
    $data['items'] = array_values($data['items']);
    // is template
    $data['is_template'] = isTemplate($data['hostid']);
    // render view
    $graphView = new CView('configuration.graph.edit', $data);
    $graphView->render();
    $graphView->show();
} else {
    $data = array('pageFilter' => $pageFilter, 'hostid' => $pageFilter->hostid > 0 ? $pageFilter->hostid : get_request('hostid'), 'parent_discoveryid' => get_request('parent_discoveryid'), 'graphs' => array(), 'discovery_rule' => empty($_REQUEST['parent_discoveryid']) ? null : $discovery_rule, 'displayNodes' => is_array(get_current_nodeid()) && $pageFilter->groupid == 0 && $pageFilter->hostid == 0);
    $sortfield = getPageSortField('name');
    $sortorder = getPageSortOrder();
    // get graphs
    $options = array('hostids' => $data['hostid'] ? $data['hostid'] : null, 'groupids' => !$data['hostid'] && $pageFilter->groupid > 0 ? $pageFilter->groupid : null, 'discoveryids' => empty($_REQUEST['parent_discoveryid']) ? null : get_request('parent_discoveryid'), 'editable' => true, 'output' => array('graphid', 'name', 'graphtype'), 'limit' => $config['search_limit'] + 1);
    $data['graphs'] = empty($_REQUEST['parent_discoveryid']) ? API::Graph()->get($options) : API::GraphPrototype()->get($options);
    if ($sortfield == 'graphtype') {
        foreach ($data['graphs'] as $gnum => $graph) {
            $data['graphs'][$gnum]['graphtype'] = graphType($graph['graphtype']);
        }
Beispiel #2
0
/**
 * Get data for item edit page.
 *
 * @param array	$item							item, item prototype or LLD rule to take the data from
 * @param bool $options['is_discovery_rule']
 *
 * @return array
 */
function getItemFormData(array $item = array(), array $options = array())
{
    $data = array('form' => getRequest('form'), 'form_refresh' => getRequest('form_refresh'), 'is_discovery_rule' => !empty($options['is_discovery_rule']), 'parent_discoveryid' => getRequest('parent_discoveryid', !empty($options['is_discovery_rule']) ? getRequest('itemid') : null), 'itemid' => getRequest('itemid'), 'limited' => false, 'interfaceid' => getRequest('interfaceid', 0), 'name' => getRequest('name', ''), 'description' => getRequest('description', ''), 'key' => getRequest('key', ''), 'hostname' => getRequest('hostname'), 'delay' => getRequest('delay', ZBX_ITEM_DELAY_DEFAULT), 'history' => getRequest('history', 90), 'status' => getRequest('status', isset($_REQUEST['form_refresh']) ? 1 : 0), 'type' => getRequest('type', 0), 'snmp_community' => getRequest('snmp_community', 'public'), 'snmp_oid' => getRequest('snmp_oid', 'interfaces.ifTable.ifEntry.ifInOctets.1'), 'port' => getRequest('port', ''), 'value_type' => getRequest('value_type', ITEM_VALUE_TYPE_UINT64), 'data_type' => getRequest('data_type', ITEM_DATA_TYPE_DECIMAL), 'trapper_hosts' => getRequest('trapper_hosts', ''), 'units' => getRequest('units', ''), 'valuemapid' => getRequest('valuemapid', 0), 'params' => getRequest('params', ''), 'multiplier' => getRequest('multiplier', 0), 'delta' => getRequest('delta', 0), 'trends' => getRequest('trends', DAY_IN_YEAR), 'new_application' => getRequest('new_application', ''), 'applications' => getRequest('applications', array()), 'delay_flex' => getRequest('delay_flex', array()), 'new_delay_flex' => getRequest('new_delay_flex', array('delay' => 50, 'period' => ZBX_DEFAULT_INTERVAL)), 'snmpv3_contextname' => getRequest('snmpv3_contextname', ''), 'snmpv3_securityname' => getRequest('snmpv3_securityname', ''), 'snmpv3_securitylevel' => getRequest('snmpv3_securitylevel', 0), 'snmpv3_authprotocol' => getRequest('snmpv3_authprotocol', ITEM_AUTHPROTOCOL_MD5), 'snmpv3_authpassphrase' => getRequest('snmpv3_authpassphrase', ''), 'snmpv3_privprotocol' => getRequest('snmpv3_privprotocol', ITEM_PRIVPROTOCOL_DES), 'snmpv3_privpassphrase' => getRequest('snmpv3_privpassphrase', ''), 'ipmi_sensor' => getRequest('ipmi_sensor', ''), 'authtype' => getRequest('authtype', 0), 'username' => getRequest('username', ''), 'password' => getRequest('password', ''), 'publickey' => getRequest('publickey', ''), 'privatekey' => getRequest('privatekey', ''), 'formula' => getRequest('formula', 1), 'logtimefmt' => getRequest('logtimefmt', ''), 'add_groupid' => getRequest('add_groupid', getRequest('groupid', 0)), 'valuemaps' => null, 'possibleHostInventories' => null, 'alreadyPopulated' => null, 'initial_item_type' => null, 'templates' => array());
    // hostid
    if (!empty($data['parent_discoveryid'])) {
        $discoveryRule = API::DiscoveryRule()->get(array('itemids' => $data['parent_discoveryid'], 'output' => API_OUTPUT_EXTEND, 'editable' => true));
        $discoveryRule = reset($discoveryRule);
        $data['hostid'] = $discoveryRule['hostid'];
    } else {
        $data['hostid'] = getRequest('hostid', 0);
    }
    // types, http items only for internal processes
    $data['types'] = item_type2str();
    unset($data['types'][ITEM_TYPE_HTTPTEST]);
    if (!empty($options['is_discovery_rule'])) {
        unset($data['types'][ITEM_TYPE_AGGREGATE], $data['types'][ITEM_TYPE_CALCULATED], $data['types'][ITEM_TYPE_SNMPTRAP]);
    }
    // item
    if ($item) {
        $data['item'] = $item;
        $data['hostid'] = !empty($data['hostid']) ? $data['hostid'] : $data['item']['hostid'];
        $data['limited'] = $data['item']['templateid'] != 0;
        // get templates
        $itemid = $item['itemid'];
        do {
            $params = array('itemids' => $itemid, 'output' => array('itemid', 'templateid'), 'selectHosts' => array('name'));
            if ($data['is_discovery_rule']) {
                $item = API::DiscoveryRule()->get($params);
            } else {
                $params['selectDiscoveryRule'] = array('itemid');
                $params['filter'] = array('flags' => null);
                $item = API::Item()->get($params);
            }
            $item = reset($item);
            if (!empty($item)) {
                $host = reset($item['hosts']);
                if (!empty($item['hosts'])) {
                    $host['name'] = CHtml::encode($host['name']);
                    if (bccomp($data['itemid'], $itemid) == 0) {
                    } elseif ($data['is_discovery_rule']) {
                        $data['templates'][] = new CLink($host['name'], 'host_discovery.php?form=update&itemid=' . $item['itemid'], 'highlight underline weight_normal');
                        $data['templates'][] = SPACE . '&rArr;' . SPACE;
                    } elseif ($item['discoveryRule']) {
                        $data['templates'][] = new CLink($host['name'], 'disc_prototypes.php?form=update&itemid=' . $item['itemid'] . '&parent_discoveryid=' . $item['discoveryRule']['itemid'], 'highlight underline weight_normal');
                        $data['templates'][] = SPACE . '&rArr;' . SPACE;
                    } else {
                        $data['templates'][] = new CLink($host['name'], 'items.php?form=update&itemid=' . $item['itemid'], 'highlight underline weight_normal');
                        $data['templates'][] = SPACE . '&rArr;' . SPACE;
                    }
                }
                $itemid = $item['templateid'];
            } else {
                break;
            }
        } while ($itemid != 0);
        $data['templates'] = array_reverse($data['templates']);
        array_shift($data['templates']);
    }
    // caption
    if (!empty($data['is_discovery_rule'])) {
        $data['caption'] = _('Discovery rule');
    } else {
        $data['caption'] = !empty($data['parent_discoveryid']) ? _('Item prototype') : _('Item');
    }
    // hostname
    if (empty($data['is_discovery_rule']) && empty($data['hostname'])) {
        if (!empty($data['hostid'])) {
            $hostInfo = API::Host()->get(array('hostids' => $data['hostid'], 'output' => array('name'), 'templated_hosts' => true));
            $hostInfo = reset($hostInfo);
            $data['hostname'] = $hostInfo['name'];
        } else {
            $data['hostname'] = _('not selected');
        }
    }
    // fill data from item
    if (!hasRequest('form_refresh') && ($item || $data['limited'])) {
        $data['name'] = $data['item']['name'];
        $data['description'] = $data['item']['description'];
        $data['key'] = $data['item']['key_'];
        $data['interfaceid'] = $data['item']['interfaceid'];
        $data['type'] = $data['item']['type'];
        $data['snmp_community'] = $data['item']['snmp_community'];
        $data['snmp_oid'] = $data['item']['snmp_oid'];
        $data['port'] = $data['item']['port'];
        $data['value_type'] = $data['item']['value_type'];
        $data['data_type'] = $data['item']['data_type'];
        $data['trapper_hosts'] = $data['item']['trapper_hosts'];
        $data['units'] = $data['item']['units'];
        $data['valuemapid'] = $data['item']['valuemapid'];
        $data['multiplier'] = $data['item']['multiplier'];
        $data['hostid'] = $data['item']['hostid'];
        $data['params'] = $data['item']['params'];
        $data['snmpv3_contextname'] = $data['item']['snmpv3_contextname'];
        $data['snmpv3_securityname'] = $data['item']['snmpv3_securityname'];
        $data['snmpv3_securitylevel'] = $data['item']['snmpv3_securitylevel'];
        $data['snmpv3_authprotocol'] = $data['item']['snmpv3_authprotocol'];
        $data['snmpv3_authpassphrase'] = $data['item']['snmpv3_authpassphrase'];
        $data['snmpv3_privprotocol'] = $data['item']['snmpv3_privprotocol'];
        $data['snmpv3_privpassphrase'] = $data['item']['snmpv3_privpassphrase'];
        $data['ipmi_sensor'] = $data['item']['ipmi_sensor'];
        $data['authtype'] = $data['item']['authtype'];
        $data['username'] = $data['item']['username'];
        $data['password'] = $data['item']['password'];
        $data['publickey'] = $data['item']['publickey'];
        $data['privatekey'] = $data['item']['privatekey'];
        $data['logtimefmt'] = $data['item']['logtimefmt'];
        $data['new_application'] = getRequest('new_application', '');
        if (!$data['is_discovery_rule']) {
            $data['formula'] = $data['item']['formula'];
        }
        if (!$data['limited'] || !isset($_REQUEST['form_refresh'])) {
            $data['delay'] = $data['item']['delay'];
            if (($data['type'] == ITEM_TYPE_TRAPPER || $data['type'] == ITEM_TYPE_SNMPTRAP) && $data['delay'] == 0) {
                $data['delay'] = ZBX_ITEM_DELAY_DEFAULT;
            }
            $data['history'] = $data['item']['history'];
            $data['status'] = $data['item']['status'];
            $data['delta'] = $data['item']['delta'];
            $data['trends'] = $data['item']['trends'];
            $db_delay_flex = $data['item']['delay_flex'];
            if (isset($db_delay_flex)) {
                $arr_of_dellays = explode(';', $db_delay_flex);
                foreach ($arr_of_dellays as $one_db_delay) {
                    $arr_of_delay = explode('/', $one_db_delay);
                    if (!isset($arr_of_delay[0]) || !isset($arr_of_delay[1])) {
                        continue;
                    }
                    array_push($data['delay_flex'], array('delay' => $arr_of_delay[0], 'period' => $arr_of_delay[1]));
                }
            }
            $data['applications'] = array_unique(zbx_array_merge($data['applications'], get_applications_by_itemid($data['itemid'])));
        }
    }
    // applications
    if (count($data['applications']) == 0) {
        array_push($data['applications'], 0);
    }
    $data['db_applications'] = DBfetchArray(DBselect('SELECT DISTINCT a.applicationid,a.name' . ' FROM applications a' . ' WHERE a.hostid=' . zbx_dbstr($data['hostid'])));
    order_result($data['db_applications'], 'name');
    // interfaces
    $data['interfaces'] = API::HostInterface()->get(array('hostids' => $data['hostid'], 'output' => API_OUTPUT_EXTEND));
    // valuemapid
    if ($data['limited']) {
        if (!empty($data['valuemapid'])) {
            if ($map_data = DBfetch(DBselect('SELECT v.name FROM valuemaps v WHERE v.valuemapid=' . zbx_dbstr($data['valuemapid'])))) {
                $data['valuemaps'] = $map_data['name'];
            }
        }
    } else {
        $data['valuemaps'] = DBfetchArray(DBselect('SELECT v.* FROM valuemaps v'));
        order_result($data['valuemaps'], 'name');
    }
    // possible host inventories
    if (empty($data['parent_discoveryid'])) {
        $data['possibleHostInventories'] = getHostInventories();
        // get already populated fields by other items
        $data['alreadyPopulated'] = API::item()->get(array('output' => array('inventory_link'), 'filter' => array('hostid' => $data['hostid']), 'nopermissions' => true));
        $data['alreadyPopulated'] = zbx_toHash($data['alreadyPopulated'], 'inventory_link');
    }
    // template
    $data['is_template'] = isTemplate($data['hostid']);
    // unset snmpv3 fields
    if ($data['type'] != ITEM_TYPE_SNMPV3) {
        $data['snmpv3_contextname'] = '';
        $data['snmpv3_securityname'] = '';
        $data['snmpv3_securitylevel'] = ITEM_SNMPV3_SECURITYLEVEL_NOAUTHNOPRIV;
        $data['snmpv3_authprotocol'] = ITEM_AUTHPROTOCOL_MD5;
        $data['snmpv3_authpassphrase'] = '';
        $data['snmpv3_privprotocol'] = ITEM_PRIVPROTOCOL_DES;
        $data['snmpv3_privpassphrase'] = '';
    }
    // unset ssh auth fields
    if ($data['type'] != ITEM_TYPE_SSH) {
        $data['authtype'] = ITEM_AUTHTYPE_PASSWORD;
        $data['publickey'] = '';
        $data['privatekey'] = '';
    }
    return $data;
}
Beispiel #3
0
        while (!isset($data['items'][$next]) && $next < $itemCount - 1) {
            $next++;
        }
        if (isset($data['items'][$next]) && $data['items'][$i]['sortorder'] == $data['items'][$next]['sortorder']) {
            for ($j = $next; $j < $itemCount; $j++) {
                if ($data['items'][$j - 1]['sortorder'] >= $data['items'][$j]['sortorder']) {
                    $data['items'][$j]['sortorder']++;
                }
            }
        }
        $i = $next;
    }
    asort_by_key($data['items'], 'sortorder');
    $data['items'] = array_values($data['items']);
    // is template
    $data['is_template'] = $data['hostid'] == 0 ? false : isTemplate($data['hostid']);
    // render view
    $graphView = new CView('configuration.graph.edit', $data);
    $graphView->render();
    $graphView->show();
} else {
    $sortField = getRequest('sort', CProfile::get('web.' . $page['file'] . '.sort', 'name'));
    $sortOrder = getRequest('sortorder', CProfile::get('web.' . $page['file'] . '.sortorder', ZBX_SORT_UP));
    CProfile::update('web.' . $page['file'] . '.sort', $sortField, PROFILE_TYPE_STR);
    CProfile::update('web.' . $page['file'] . '.sortorder', $sortOrder, PROFILE_TYPE_STR);
    $config = select_config();
    $data = ['pageFilter' => $pageFilter, 'hostid' => $pageFilter->hostid > 0 ? $pageFilter->hostid : $hostId, 'parent_discoveryid' => isset($discoveryRule) ? $discoveryRule['itemid'] : null, 'graphs' => [], 'sort' => $sortField, 'sortorder' => $sortOrder];
    // get graphs
    $options = ['hostids' => $data['hostid'] == 0 ? null : $data['hostid'], 'groupids' => $data['hostid'] == 0 && $pageFilter->groupid > 0 ? $pageFilter->groupid : null, 'discoveryids' => isset($discoveryRule) ? $discoveryRule['itemid'] : null, 'editable' => true, 'output' => ['graphid', 'name', 'graphtype'], 'limit' => $config['search_limit'] + 1];
    $data['graphs'] = isset($discoveryRule) ? API::GraphPrototype()->get($options) : API::Graph()->get($options);
    if ($sortField == 'graphtype') {