package com.sf.monitor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.sf.log.Logger;
import com.sf.monitor.druid.DruidInfos;
import com.sf.monitor.kafka.KafkaInfos;
import com.sf.monitor.zk.ZookeeperHosts;
import com.sf.notify.Notify;
import com.sf.prometheus.PrometheusQuery;
import io.prometheus.client.Prometheus;
import kafka.utils.ZKStringSerializer;
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.exception.ZkMarshallingError;
import org.I0Itec.zkclient.serialize.ZkSerializer;
import org.apache.commons.io.IOUtils;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.imps.GzipCompressionProvider;
import org.apache.curator.retry.ExponentialBackoffRetry;
public class Resources {
private static final Logger log = new Logger(Resources.class);
public static ThreadLocal<Boolean> isZKDirectBytes = new ThreadLocal<Boolean>() {
@Override
protected Boolean initialValue() {
return false;
}
};
private static final ZkSerializer zkSerializer = new ZkSerializer() {
@Override
public byte[] serialize(Object data) throws ZkMarshallingError {
return ZKStringSerializer.serialize(data);
}
@Override
public Object deserialize(byte[] bytes) throws ZkMarshallingError {
if (isZKDirectBytes.get()) {
return bytes;
} else {
return ZKStringSerializer.deserialize(bytes);
}
}
};
public static CuratorFramework curator;
public static KafkaInfos kafkaInfos;
public static DruidInfos druidInfos;
public static ZookeeperHosts zkHosts;
public static Notify notify;
public static Config.Fetchers fetchers;
public static PrometheusQuery prometheusQuery;
public static final ObjectMapper jsonMapper = new ObjectMapper();
static {
jsonMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
jsonMapper.configure(SerializationFeature.INDENT_OUTPUT, false);
}
public static void init() throws Exception {
try {
Config.CuratorConfig zkConfig = Config.config.zookeeper;
curator = CuratorFrameworkFactory
.builder()
.connectString(zkConfig.addrs)
.retryPolicy(new ExponentialBackoffRetry(zkConfig.baseSleepTimeMs, zkConfig.maxRetries, zkConfig.maxSleepMs))
.compressionProvider(new GzipCompressionProvider())
.build();
curator.start();
kafkaInfos = new KafkaInfos(new ZkClient(zkConfig.addrs, 30000, zkConfig.connectionTimeout, zkSerializer));
druidInfos = Config.config.druidInfos;
zkHosts = new ZookeeperHosts(Config.config.zookeeper.addrs);
druidInfos.init();
notify = new Notify(Config.config.notify.url);
fetchers = Config.config.fetchers;
Prometheus.defaultInitialize();
prometheusQuery = new PrometheusQuery(Config.config.prometheus.serverUrl);
} catch (Exception e) {
log.error(e, "error while initialyzing resourses");
throw e;
}
}
public static void close() {
IOUtils.closeQuietly(kafkaInfos);
IOUtils.closeQuietly(curator);
}
}