package com.sohu.cache.entity;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import com.alibaba.fastjson.JSONObject;
import com.sohu.cache.constant.AppDescEnum;
import com.sohu.cache.constant.AppDescEnum.AppImportantLevel;
import com.sohu.cache.constant.AppStatusEnum;
import com.sohu.cache.util.ConstUtils;
/**
* 应用的信息,包括分片、类型以及各分片的ip
* <p/>
* User: lingguo
* Date: 14-5-29
* Time: 下午9:42
*/
public class AppDesc implements Serializable {
private static final long serialVersionUID = -3507970915810652761L;
/**
* 应用id
*/
private long appId;
/**
* 应用秘钥
*/
private String appKey;
/**
* 应用名称
*/
private String name;
/**
* 用户id
*/
private long userId;
/**
* 应用状态, 0未分配,1是申请了未审批,2是审批并发布, 3应用下线
*/
private int status;
/**
* 应用描述
*/
private String intro;
/**
* 创建时间
*/
private Date createTime;
/**
* 申请通过的时间
*/
private Date passedTime;
/**
* 类型
*/
private int type;
/**
* 类型描述
*/
private String typeDesc;
/**
* 负责人
*/
private String officer;
/**
* 版本号
*/
private int verId;
/**
* 是否测试:1是0否
*/
private int isTest;
/**
* 是否有后端数据源: 1是0否
*/
private int hasBackStore;
/**
* 是否需要持久化: 1是0否
*/
private int needPersistence;
/**
* 预估qps
*/
private int forecaseQps;
/**
* 是否需要热备: 1是0否
*/
private int needHotBackUp;
/**
* 预估条目数
*/
private int forecastObjNum;
/**
* 内存报警阀值
*/
private int memAlertValue;
/**
* 客户端连接数报警阀值
*/
private int clientConnAlertValue;
/**
* 客户端机器机房
*/
private String clientMachineRoom;
/**
* redis密码
*/
private String password;
/**
* 重要度,默认重要
*/
private int importantLevel = AppImportantLevel.IMPORTANT.getValue();
public long getAppId() {
return appId;
}
public void setAppId(long appId) {
this.appId = appId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
this.intro = intro;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getPassedTime() {
return passedTime;
}
public void setPassedTime(Date passedTime) {
this.passedTime = passedTime;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getOfficer() {
return officer;
}
public void setOfficer(String officer) {
this.officer = officer;
}
public int getVerId() {
return verId;
}
public void setVerId(int verId) {
this.verId = verId;
}
public int getIsTest() {
return isTest;
}
public void setIsTest(int isTest) {
this.isTest = isTest;
}
public int getHasBackStore() {
return hasBackStore;
}
public void setHasBackStore(int hasBackStore) {
this.hasBackStore = hasBackStore;
}
public int getNeedPersistence() {
return needPersistence;
}
public void setNeedPersistence(int needPersistence) {
this.needPersistence = needPersistence;
}
public int getForecaseQps() {
return forecaseQps;
}
public void setForecaseQps(int forecaseQps) {
this.forecaseQps = forecaseQps;
}
public int getNeedHotBackUp() {
return needHotBackUp;
}
public void setNeedHotBackUp(int needHotBackUp) {
this.needHotBackUp = needHotBackUp;
}
public int getForecastObjNum() {
return forecastObjNum;
}
public void setForecastObjNum(int forecastObjNum) {
this.forecastObjNum = forecastObjNum;
}
public int getMemAlertValue() {
return memAlertValue;
}
public void setMemAlertValue(int memAlertValue) {
this.memAlertValue = memAlertValue;
}
public void setTypeDesc(String typeDesc) {
this.typeDesc = typeDesc;
}
public String getClientMachineRoom() {
return clientMachineRoom;
}
public void setClientMachineRoom(String clientMachineRoom) {
this.clientMachineRoom = clientMachineRoom;
}
public String getAppKey() {
return appKey;
}
public void setAppKey(String appKey) {
this.appKey = appKey;
}
public int getClientConnAlertValue() {
return clientConnAlertValue;
}
public void setClientConnAlertValue(int clientConnAlertValue) {
this.clientConnAlertValue = clientConnAlertValue;
}
public int getImportantLevel() {
return importantLevel;
}
public void setImportantLevel(int importantLevel) {
this.importantLevel = importantLevel;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
/**
* 应用运行天数
*/
public int getAppRunDays() {
if (createTime == null) {
return -1;
}
Date now = new Date();
long diff = now.getTime() - createTime.getTime();
return (int) (diff / TimeUnit.DAYS.toMillis(1));
}
public String getTypeDesc() {
if (type <= 0) {
return "";
} else if (type == ConstUtils.CACHE_TYPE_REDIS_CLUSTER) {
return "redis-cluster";
} else if (type == ConstUtils.CACHE_REDIS_SENTINEL) {
return "redis-sentinel";
} else if (type == ConstUtils.CACHE_REDIS_STANDALONE) {
return "redis-standalone";
}
return "";
}
public String getCreateTimeFormat(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if(createTime != null){
return sdf.format(createTime);
}
return "";
}
@Override
public String toString() {
return JSONObject.toJSONString(this);
}
public String getStatusDesc() {
AppStatusEnum appStatusEnum = AppStatusEnum.getByStatus(status);
if (appStatusEnum != null) {
return appStatusEnum.getInfo();
}
return "";
}
/**
* 是否下线
* @return
*/
public boolean isOffline() {
return status == AppStatusEnum.STATUS_OFFLINE.getStatus();
}
/**
* 是否是测试
* @return
*/
public boolean isTest() {
return isTest == AppDescEnum.AppTest.IS_TEST.getValue();
}
/**
* 非常重要
* @return
*/
public boolean isVeryImportant() {
return importantLevel == AppDescEnum.AppImportantLevel.VERY_IMPORTANT.getValue();
}
/**
* 超级重要
* @return
*/
public boolean isSuperImportant() {
return importantLevel == AppDescEnum.AppImportantLevel.SUPER_IMPORTANT.getValue();
}
}