#ifndef ZABBIX_DISCOVERER_JOB_H
#define ZABBIX_DISCOVERER_JOB_H
#include "zbxdiscovery.h"
#include "zbxcacheconfig.h"
#define DISCOVERER_JOB_STATUS_QUEUED 0
#define DISCOVERER_JOB_STATUS_WAITING 1
#define DISCOVERER_JOB_STATUS_REMOVING 2
ZBX_VECTOR_DECL(iprange, zbx_iprange_t)
ZBX_VECTOR_DECL(portrange, zbx_range_t)
zbx_vector_portrange_t portranges;
ZBX_PTR_VECTOR_DECL(ds_dcheck_ptr, zbx_ds_dcheck_t *)
zbx_uint64_t drule_revision;
zbx_vector_ds_dcheck_ptr_t *ds_dchecks_common;
zbx_vector_iprange_t *ipranges;
ZBX_PTR_VECTOR_DECL(discoverer_jobs_ptr, zbx_discoverer_job_t*)
unsigned int checks_per_ip;
zbx_vector_iprange_t *ipranges;
zbx_vector_ds_dcheck_ptr_t ds_dchecks;
zbx_uint64_t unique_dcheckid;
zbx_hash_t discoverer_task_hash(const void *data);
int discoverer_task_compare(const void *d1, const void *d2);
void discoverer_task_clear(zbx_discoverer_task_t *task);
void discoverer_task_free(zbx_discoverer_task_t *task);
zbx_uint64_t discoverer_task_check_count_get(zbx_discoverer_task_t *task);
zbx_uint64_t discoverer_task_ip_check_count_get(zbx_discoverer_task_t *task);
zbx_uint64_t discoverer_job_tasks_free(zbx_discoverer_job_t *job);
void discoverer_job_free(zbx_discoverer_job_t *job);
zbx_discoverer_job_t *discoverer_job_create(zbx_dc_drule_t *drule, zbx_vector_ds_dcheck_ptr_t *ds_dchecks_common,
zbx_vector_iprange_t *ipranges);
void discoverer_job_abort(zbx_discoverer_job_t *job, zbx_uint64_t *pending_checks_count,
zbx_vector_discoverer_drule_error_t *errors, char *error);