用性数据
//dbconfig.c
void zbx_host_availability_init(zbx_host_availability_t *availability, zbx_uint64_t hostid)
{
memset(availability, 0, sizeof(zbx_host_availability_t));
availability->hostid = hostid;
}
#5 同#4一样,只不过是OUT
#6 为agent_type赋值,如果agent_type不属于#1中的四种,跳至out处
1、host_availability_agent_by_item_type 位于poller.c,接收item的type字段,用来判断监控类型
//poller.c
static unsigned char host_availability_agent_by_item_type(unsigned char type)
{
switch (type)
{
case ITEM_TYPE_ZABBIX:
return ZBX_AGENT_ZABBIX;
break;
case ITEM_TYPE_SNMPv1:
case ITEM_TYPE_SNMPv2c:
case ITEM_TYPE_SNMPv3:
return ZBX_AGENT_SNMP;
break;
case ITEM_TYPE_IPMI:
return ZBX_AGENT_IPMI;
break;
case ITEM_TYPE_JMX:
return ZBX_AGENT_JMX;
break;
default:
return ZBX_AGENT_UNKNOWN;
}
}
2、ZBX_AGENT_UNKNOWN 常量 为 255 对应之前的 #2
#7 根据agent_type来判断主机的可用性,网络设备会匹配到ZBX_AGENT_SNMP,四个值分别代表的意思是
//poller.c
static int host_get_availability(const DC_HOST *dc_host, unsigned char agent, zbx_host_availability_t *ha)
{
zbx_agent_availability_t *availability = &ha->agents[agent];
availability->flags = ZBX_FLAGS_AGENT_STATUS;
switch (agent)
{
case ZBX_AGENT_ZABBIX:
availability->available = dc_host->available;
availability->error = zbx_strdup(NULL, dc_host->error);
availability->errors_from = dc_host->errors_from;
availability->disable_until = dc_host->disable_until;
break;
case ZBX_AGENT_SNMP:
availability->available = dc_host->snmp_available; //主机的snmp可用状态
availability->error = zbx_strdup(NULL, dc_host->snmp_error); //错误信息
availability->errors_from = dc_host->snmp_errors_from; //错误发生时间
availability->disable_until = dc_host->snmp_disable_until; //下次延迟检测时间
break;
case ZBX_AGENT_IPMI:
availability->available = dc_host->ipmi_available;
availability->error = zbx_strdup(NULL, dc_host->ipmi_error);
availability->errors_from = dc_host->ipmi_errors_from;
availability->disable_until = dc_host->ipmi_disable_until;
break;
case ZBX_AGENT_JMX:
availability->available = dc_host->jmx_available;
availability->error = zbx_strdup(NULL, dc_host->jmx_error);
availability->disable_until = dc_host->jmx_disable_until;
availability->errors_from = dc_host->jmx_errors_from;
break;
default:
return FAIL;
}
ha->hostid = dc_host->hostid;
return SUCCEED;
}
//dbcache.h
typedef struct
{
zbx_uint64_t hostid;
zbx_uint64_t proxy_hostid;
char host[HOST_HOST_LEN_MAX];
char name[HOST_NAME_LEN * ZBX_MAX_BYTES_IN_UTF8_CHAR + 1];
unsigned char maintenance_status;
unsigned char maintenance_type;
int maintenance_from;
int errors_from;
unsigned char available;
int disable_until;
int snmp_errors_from;
unsigned char snmp_available;
int snmp_disable_until;
int ipmi_errors_from;
unsigned char ipmi_available;
int ipmi_disable_until;
signed char ipmi_authtype;
unsigned char ipmi_privilege;
char ipmi_username[HOST_IPMI_USERNAME_LEN_MAX];
char ipmi_password[HOST_IPMI_PASSWORD_LEN_MAX];
int jmx_errors_from;
unsigned char jmx_available;
int jmx_disable_until;
char inventory_mode;
unsigned char status;
unsigned char tls_connect;
unsigned char tls_accept;
#if defined(HAVE_P