[ZBX-11261] Audit on create/update item is broken Created: 2016 Sep 23  Updated: 2017 May 30  Resolved: 2016 Sep 26

Status: Closed
Project: ZABBIX BUGS AND ISSUES
Component/s: Frontend (F)
Affects Version/s: 3.2.0
Fix Version/s: None

Type: Incident report Priority: Minor
Reporter: Andrey Denisov Assignee: Unassigned
Resolution: Duplicate Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Duplicate
duplicates ZBX-2815 Missing audit records for different a... Closed

 Comments   
Comment by Andrey Denisov [ 2016 Sep 23 ]

Create/update item has been moved in API in 3.2.0, but there are no audit actions in API functions for such actions.

I propose to modify CItem.php the following way, see //<<== - like comments:

protected function updateReal(array $items) {
$items = zbx_toArray($items);

$itemids = [];
$data = [];

$updItems = []; // <<== add audit logging. Getting updated items data
foreach ($items as $item)

{ unset($item['flags']); // flags cannot be changed $data[] = ['values' => $item, 'where' => ['itemid' => $item['itemid']]]; $itemids[] = $item['itemid']; $updItems[$item['itemid']] = $item; //<<== add audit logging. Getting updated items }

//<<== add audit logging. Getting old items data
$oldItems = $this->get([
'itemids' => $itemids,
'nopermissions' => true
]);
//<<=====================================

DB::update('items', $data);

$itemApplications = [];
$applicationids = [];
foreach ($items as $item) {
if (!isset($item['applications']))

{ continue; }
$applicationids[] = $item['itemid'];

foreach ($item['applications'] as $appid) { $itemApplications[] = [ 'applicationid' => $appid, 'itemid' => $item['itemid'] ]; }
}
if (!empty($applicationids)) { DB::delete('items_applications', ['itemid' => $applicationids]); DB::insert('items_applications', $itemApplications); }
$itemHosts = $this->get([
'output' => ['name'],
'itemids' => $itemids,
'selectHosts' => ['name'],
'nopermissions' => true
]);
foreach ($itemHosts as $item) { $host = reset($item['hosts']); info(_s('Updated: Item "%1$s" on "%2$s".', $item['name'], $host['name'])); }
//<<== add audit logging. Write to audit
foreach ($oldItems as $item) { add_audit_ext(AUDIT_ACTION_UPDATE, AUDIT_RESOURCE_ITEM, $item['itemid'], $host['name'].NAME_DELIMITER.$item['name'], 'items', $item, $updItems[$item['itemid']]); }
//<<=========================================
}

protected function createReal(array &$items) {
$itemids = DB::insert('items', $items);
$itemApplications = [];
foreach ($items as $key => $item) {
$items[$key]['itemid'] = $itemids[$key];
if (!isset($item['applications'])) { continue; }

foreach ($item['applications'] as $appid) {
if ($appid == 0)

{ continue; }

$itemApplications[] = [
'applicationid' => $appid,
'itemid' => $items[$key]['itemid']
];
}
}
if (!empty($itemApplications))

{ DB::insert('items_applications', $itemApplications); }

$itemHosts = $this->get([
'output' => ['name'],
'itemids' => $itemids,
'selectHosts' => ['name'],
'nopermissions' => true
]);

$hosts=[];//<<== collecting hosts
foreach ($itemHosts as $item)

{ $host = reset($item['hosts']); $hosts[$item['itemid']] = $host; //<<== collecting here info(_s('Created: Item "%1$s" on "%2$s".', $item['name'], $host['name'])); }

//<<== write to audit
foreach ($items as $item)

{ add_audit_details(AUDIT_ACTION_ADD, AUDIT_RESOURCE_ITEM,$item['itemid'],$item['name'], _('Item').' '.$item['name'].'['.$item['key_'].'], Id['.$item['itemid'].'], '._('Host').'['.$hosts[$item['itemid']]['name'].']' ); }

//<<=================================
}

Comment by richlv [ 2016 Sep 23 ]

duplicate of ZBX-2815

Comment by Aleksandrs Saveljevs [ 2016 Sep 26 ]

Closing as a duplicate.

Generated at Thu Apr 25 20:53:42 EEST 2024 using Jira 9.12.4#9120004-sha1:625303b708afdb767e17cb2838290c41888e9ff0.