Source
xxxxxxxxxx
static int dc_maintenance_match_tags_or(const zbx_dc_maintenance_t *maintenance, const zbx_vector_tags_ptr_t *tags)
/*
** Copyright (C) 2001-2025 Zabbix SIA
**
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
**
** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU Affero General Public License for more details.
**
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
**/
typedef struct
{
zbx_uint64_t hostid;
const zbx_dc_maintenance_t *maintenance;
}
zbx_host_maintenance_t;
typedef struct
{
zbx_uint64_t hostid;
zbx_vector_ptr_t maintenances;
}
zbx_host_event_maintenance_t;
ZBX_PTR_VECTOR_IMPL(host_maintenance_diff_ptr, zbx_host_maintenance_diff_t*)
void zbx_host_maintenance_diff_free(zbx_host_maintenance_diff_t *hmd)
{
zbx_free(hmd);
}
/******************************************************************************
* *
* Purpose: Updates maintenances in configuration cache *
* *
* Parameters: sync - [IN] the db synchronization data *
* *
* Comments: The result contains the following fields: *
* 0 - maintenanceid *
* 1 - maintenance_type *
* 2 - active_since *
* 3 - active_till *
* 4 - tags_evaltype *
* *
******************************************************************************/
void DCsync_maintenances(zbx_dbsync_t *sync)
{
char **row;
zbx_uint64_t rowid;
unsigned char tag;
zbx_uint64_t maintenanceid;
zbx_dc_maintenance_t *maintenance;
int found, ret;
zbx_dc_config_t *config = get_dc_config();
zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __func__);
zbx_dcsync_sync_start(sync, dbconfig_used_size());
while (SUCCEED == (ret = zbx_dbsync_next(sync, &rowid, &row, &tag)))
{
config->maintenance_update |= ZBX_FLAG_MAINTENANCE_UPDATE_MAINTENANCE;
/* removed rows will be always added at the end */
if (ZBX_DBSYNC_ROW_REMOVE == tag)
break;
ZBX_STR2UINT64(maintenanceid, row[0]);
maintenance = (zbx_dc_maintenance_t *)DCfind_id(&config->maintenances, maintenanceid,
sizeof(zbx_dc_maintenance_t), &found);
if (0 == found)
{
maintenance->state = ZBX_MAINTENANCE_IDLE;
maintenance->running_since = 0;