/* ** Zabbix ** Copyright (C) 2001-2023 Zabbix SIA ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **/ #include "zbxalgo.h" #include "zbxtime.h" #ifndef ZABBIX_SERVICE_MANAGER_IMPL_H #define ZABBIX_SERVICE_MANAGER_IMPL_H #define ZBX_SERVICE_STATUS_OK -1 #define ZBX_SERVICE_STATUS_PROPAGATION_AS_IS 0 #define ZBX_SERVICE_STATUS_PROPAGATION_INCREASE 1 #define ZBX_SERVICE_STATUS_PROPAGATION_DECREASE 2 #define ZBX_SERVICE_STATUS_PROPAGATION_IGNORE 3 #define ZBX_SERVICE_STATUS_PROPAGATION_FIXED 4 #define ZBX_SERVICE_STATUS_RULE_TYPE_N_GE 0 #define ZBX_SERVICE_STATUS_RULE_TYPE_NP_GE 1 #define ZBX_SERVICE_STATUS_RULE_TYPE_N_L 2 #define ZBX_SERVICE_STATUS_RULE_TYPE_NP_L 3 #define ZBX_SERVICE_STATUS_RULE_TYPE_W_GE 4 #define ZBX_SERVICE_STATUS_RULE_TYPE_WP_GE 5 #define ZBX_SERVICE_STATUS_RULE_TYPE_W_L 6 #define ZBX_SERVICE_STATUS_RULE_TYPE_WP_L 7 typedef struct { zbx_uint64_t eventid; zbx_uint64_t service_problemid; zbx_uint64_t serviceid; int severity; zbx_timespec_t ts; } zbx_service_problem_t; typedef struct { zbx_uint64_t servicetagid; zbx_uint64_t serviceid; char *name; char *value; int revision; } zbx_service_tag_t; typedef struct { zbx_uint64_t service_ruleid; int type; int limit_value; int limit_status; int new_status; int revision; } zbx_service_rule_t; typedef struct { zbx_uint64_t serviceid; zbx_vector_ptr_t tags; zbx_vector_ptr_t service_problems; zbx_vector_ptr_t service_problem_tags; zbx_vector_ptr_t children; zbx_vector_ptr_t parents; zbx_vector_ptr_t status_rules; char *name; int status; int algorithm; int revision; int weight; int propagation_rule; int propagation_value; } zbx_service_t; /* status update queue items */ typedef struct { /* the update source id */ zbx_uint64_t sourceid; /* the servicealarmid that was assigned when flushing alarms */ zbx_uint64_t servicealarmid; /* the new status */ int status; /* timestamp */ int clock; } zbx_status_update_t; /* service update queue items */ typedef struct { const zbx_service_t *service; int old_status; zbx_timespec_t ts; /* the last status update source */ zbx_status_update_t *alarm; } zbx_service_update_t; typedef struct { zbx_uint64_t actionid; unsigned char evaltype; char *formula; zbx_vector_ptr_t conditions; int revision; } zbx_service_action_t; typedef struct { zbx_uint64_t conditionid; zbx_uint64_t actionid; unsigned char conditiontype; unsigned char op; char *value; char *value2; int revision; } zbx_service_action_condition_t; int service_get_status(const zbx_service_t *service, int *status); int service_get_main_status(const zbx_service_t *service); int service_get_rule_status(const zbx_service_t *service, const zbx_service_rule_t *rule); void service_get_rootcause_eventids(const zbx_service_t *parent, zbx_vector_uint64_t *eventids); #endif