package com.easemob.tsdb.thrift.rpc.service;
import com.easemob.tsdb.thrift.models.TSData;
import com.easemob.tsdb.thrift.models.ThriftTsdbRpcService;
import org.apache.thrift.TException;
import org.apache.thrift.async.AsyncMethodCallback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.easemob.tsdb.utils.TSDataUtils.*;
/**
* @author stliu <stliu@apache.org>
* @date 3/11/15
*/
public class ThriftMetricsService implements ThriftTsdbRpcService.Iface, ThriftTsdbRpcService.AsyncIface {
private static final Logger logger = LoggerFactory.getLogger(ThriftMetricsService.class);
private final TSDBDelegate tsdb;
public ThriftMetricsService(TSDBDelegate tsdb) {
this.tsdb = tsdb;
}
/*
private static final Callback<Object, Object> LOGGING_CALLBACK = o -> {
if (o instanceof Exception) {
logger.error("failed to insert data point due to error ", (Exception) o);
}else if(o !=null){
logger.debug("tsdb add data point returned {}", o);
}
return null;
};
*/
@Override
public void putTSData(TSData tsdata, AsyncMethodCallback resultHandler) throws TException {
if (tsdata == null) {
return;
}
try {
tsdb.addPoint(tsdata.getName(), tsdata.getTimestamp(), tsdata.getValue(), tsdata.getTags());
logger.info("insert TSData into TSDB. {}", tsdata);
}catch (Exception e){
logger.error("Failed to insert data to OpenTSDB", e);
}
}
@Override
public void putString(String metrics, AsyncMethodCallback resultHandler) throws TException {
putTSData(parseString2TSData(metrics), resultHandler);
}
@Override
public void putTSData(TSData tsdata) throws TException {
putTSData(tsdata, null);
}
@Override
public void putString(String metrics) throws TException {
putTSData(parseString2TSData(metrics));
}
}