package com.sohu.cache.client.service.impl;
import java.util.Date;
import java.util.Map;
import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.sohu.cache.client.service.ClientReportDataSizeService;
import com.sohu.cache.dao.AppClientReportDataSizeDao;
import com.sohu.cache.entity.AppClientDataSizeStat;
import com.sohu.tv.jedis.stat.constant.ClientReportConstant;
import com.sohu.tv.jedis.stat.model.ClientReportBean;
/**
* 记录客户端统计map的尺寸
*
* @author leifu
* @Date 2015年7月13日
* @Time 下午3:00:40
*/
public class ClientReportDataSizeServiceImpl implements ClientReportDataSizeService {
private Logger logger = LoggerFactory.getLogger(ClientReportDataSizeServiceImpl.class);
private AppClientReportDataSizeDao appClientReportDataSizeDao;
@Override
public void save(ClientReportBean clientReportBean) {
try {
// 1.client上报
final String clientIp = clientReportBean.getClientIp();
final long collectTime = clientReportBean.getCollectTime();
final long reportTime = clientReportBean.getReportTimeStamp();
final Map<String, Object> otherInfo = clientReportBean.getOtherInfo();
if (otherInfo == null || otherInfo.isEmpty()) {
logger.warn("otherInfo field is empty, client ip {}", clientIp);
return;
}
int costMapSize = MapUtils.getInteger(otherInfo, ClientReportConstant.COST_MAP_SIZE, 0);
int valueMapSize = MapUtils.getInteger(otherInfo, ClientReportConstant.VALUE_MAP_SIZE, 0);
int exceptionMapSize = MapUtils.getInteger(otherInfo, ClientReportConstant.EXCEPTION_MAP_SIZE, 0);
int collectMapSize = MapUtils.getInteger(otherInfo, ClientReportConstant.COLLECTION_MAP_SIZE, 0);
// 只记录大于minSize
int minSize = 100;
if (costMapSize < minSize && valueMapSize < minSize && exceptionMapSize < minSize && collectMapSize < minSize) {
return;
}
// 设置实体
AppClientDataSizeStat appClientDataSizeStat = new AppClientDataSizeStat();
appClientDataSizeStat.setClientIp(clientIp);
appClientDataSizeStat.setCollectTime(collectTime);
appClientDataSizeStat.setCollectMapSize(collectMapSize);
appClientDataSizeStat.setCostMapSize(costMapSize);
appClientDataSizeStat.setValueMapSize(valueMapSize);
appClientDataSizeStat.setExceptionMapSize(exceptionMapSize);
appClientDataSizeStat.setCreateTime(new Date());
appClientDataSizeStat.setReportTime(new Date(reportTime));
appClientReportDataSizeDao.save(appClientDataSizeStat);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
public void setAppClientReportDataSizeDao(AppClientReportDataSizeDao appClientReportDataSizeDao) {
this.appClientReportDataSizeDao = appClientReportDataSizeDao;
}
}