public ZooKeeperAgentModel(final ZooKeeperClientProvider provider,
final KafkaClientProvider kafkaProvider, final String host,
final Path stateDirectory) throws IOException, InterruptedException {
final ZooKeeperClient client = provider.get("ZooKeeperAgentModel_ctor");
this.agent = checkNotNull(host);
final Path taskConfigFile = stateDirectory.resolve(TASK_CONFIG_FILENAME);
this.tasks = client.pathChildrenCache(Paths.configHostJobs(host), taskConfigFile,
Json.type(Task.class));
tasks.addListener(new JobsListener());
final Path taskStatusFile = stateDirectory.resolve(TASK_STATUS_FILENAME);
this.taskStatuses = ZooKeeperUpdatingPersistentDirectory.create("agent-model-task-statuses",
provider,
taskStatusFile,
Paths.statusHostJobs(host));
this.historyWriter = new TaskHistoryWriter(
host, client, stateDirectory.resolve(TASK_HISTORY_FILENAME));
this.kafkaSender = new KafkaSender(
kafkaProvider.getProducer(new StringSerializer(), new ByteArraySerializer()));
}