package com.sohu.cache.client.service.impl;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.sohu.cache.async.AsyncService;
import com.sohu.cache.async.AsyncThreadPoolFactory;
import com.sohu.cache.async.KeyCallable;
import com.sohu.cache.client.service.ClientReportCostDistriService;
import com.sohu.cache.client.service.ClientReportDataService;
import com.sohu.cache.client.service.ClientReportDataSizeService;
import com.sohu.cache.client.service.ClientReportExceptionService;
import com.sohu.cache.client.service.ClientReportValueDistriService;
import com.sohu.tv.jedis.stat.model.ClientReportBean;
/**
* cachecloud客户端数据统一处理
*
* @author leifu
* @Date 2015年1月19日
* @Time 上午10:02:01
*/
public class ClientReportDataServiceImpl implements ClientReportDataService {
public static final String CLIENT_REPORT_POOL ="client-report-pool";
private AsyncService asyncService;
private final Logger logger = LoggerFactory.getLogger(ClientReportDataServiceImpl.class);
private ClientReportCostDistriService clientReportCostDistriService;
private ClientReportValueDistriService clientReportValueDistriService;
private ClientReportExceptionService clientReportExceptionService;
private ClientReportDataSizeService clientReportDataSizeService;
public void init() {
asyncService.assemblePool(getThreadPoolKey(), AsyncThreadPoolFactory.CLIENT_REPORT_THREAD_POOL);
}
private String getThreadPoolKey() {
return CLIENT_REPORT_POOL;
}
@Override
public boolean deal(final ClientReportBean clientReportBean) {
try {
// 上报的数据
final String clientIp = clientReportBean.getClientIp();
final List<Map<String, Object>> datas = clientReportBean.getDatas();
if (datas == null || datas.isEmpty()) {
logger.warn("datas field {} is empty", clientReportBean);
return false;
}
String key = getThreadPoolKey() + "_" + clientIp;
asyncService.submitFuture(getThreadPoolKey(), new KeyCallable<Boolean>(key) {
@Override
public Boolean execute() {
try {
clientReportCostDistriService.batchSave(clientReportBean);
clientReportValueDistriService.batchSave(clientReportBean);
clientReportExceptionService.batchSave(clientReportBean);
clientReportDataSizeService.save(clientReportBean);
return true;
} catch (Exception e) {
logger.error(e.getMessage(), e);
return false;
}
}
});
return true;
} catch (Exception e) {
logger.error(e.getMessage(), e);
return false;
}
}
public void setAsyncService(AsyncService asyncService) {
this.asyncService = asyncService;
}
public void setClientReportCostDistriService(ClientReportCostDistriService clientReportCostDistriService) {
this.clientReportCostDistriService = clientReportCostDistriService;
}
public void setClientReportExceptionService(ClientReportExceptionService clientReportExceptionService) {
this.clientReportExceptionService = clientReportExceptionService;
}
public void setClientReportDataSizeService(ClientReportDataSizeService clientReportDataSizeService) {
this.clientReportDataSizeService = clientReportDataSizeService;
}
public void setClientReportValueDistriService(ClientReportValueDistriService clientReportValueDistriService) {
this.clientReportValueDistriService = clientReportValueDistriService;
}
}