/** * Expand macros inside key name and return it * Example: * key: 'test.key[a, b, "{HOSTNAME}"]' * name: 'Test item $1, $2, $3' * result: 'Test item a, b, Zabbix-server' * * @param array $item * @param string $item['key_'] * @param string $item['itemid'] * @param string $item['name'] * * @return string */ function itemName($item) { $name = $item['name']; // if item name contains $1..$9 macros, we need to expand them if (preg_match('/\\$[1-9]/', $name)) { $key = resolveItemKeyMacros($item); // parsing key to get the parameters out of it $ItemKey = new CItemKey($key); if ($ItemKey->isValid()) { $keyParameters = $ItemKey->getParameters(); $searchOffset = 0; while (preg_match('/\\$[1-9]/', $name, $matches, PREG_OFFSET_CAPTURE, $searchOffset)) { // matches[0][0] - matched param, [1] - second character of it $paramNumber = $matches[0][0][1] - 1; $replaceString = isset($keyParameters[$paramNumber]) ? $keyParameters[$paramNumber] : ''; $name = substr_replace($name, $replaceString, $matches[0][1], 2); $searchOffset = $matches[0][1] + strlen($replaceString); } } } if (preg_match_all('/' . ZBX_PREG_EXPRESSION_USER_MACROS . '/', $name, $arr)) { $macros = API::UserMacro()->getMacros(array('macros' => $arr[1], 'itemid' => $item['itemid'])); $name = str_replace(array_keys($macros), array_values($macros), $name); } return $name; }
$change .= convert_units(array('value' => bcsub($lastHistory['value'], $prevHistory['value'], $digits), 'units' => $item['units'] == 'unixtime' ? 'uptime' : $item['units'])); $change = nbsp($change); } else { $change = ' - '; } // column "action" if ($item['value_type'] == ITEM_VALUE_TYPE_FLOAT || $item['value_type'] == ITEM_VALUE_TYPE_UINT64) { $actions = new CLink(_('Graph'), 'history.php?action=showgraph&itemid=' . $item['itemid']); } else { $actions = new CLink(_('History'), 'history.php?action=showvalues&itemid=' . $item['itemid']); } $stateCss = $item['state'] == ITEM_STATE_NOTSUPPORTED ? 'unknown txt' : 'txt'; $itemName = $item['resolvedName']; $host = $hosts[$item['hostid']]; if ($filterShowDetails) { $itemKey = $item['type'] == ITEM_TYPE_HTTPTEST || $item['flags'] == ZBX_FLAG_DISCOVERY_CREATED ? new CSpan(resolveItemKeyMacros($item), 'enabled') : new CLink(resolveItemKeyMacros($item), 'items.php?form=update&itemid=' . $item['itemid'], 'enabled'); $statusIcons = array(); if ($item['status'] == ITEM_STATUS_ACTIVE) { if (zbx_empty($item['error'])) { $error = new CDiv(SPACE, 'status_icon iconok'); } else { $error = new CDiv(SPACE, 'status_icon iconerror'); $error->setHint($item['error'], '', 'on'); } $statusIcons[] = $error; } if ($item['value_type'] == ITEM_VALUE_TYPE_FLOAT || $item['value_type'] == ITEM_VALUE_TYPE_UINT64) { $trendValue = $config['hk_trends_global'] ? $config['hk_trends'] : $item['trends']; } else { $trendValue = UNKNOWN_VALUE; }