public class PortalServerService
{
/**
* 调测日志记录器。
*/
private static Logger logger = Logger.getLogger(PortalServerService.class);
/**
* client端的重试次数
*/
private static final int CLIENTRETRYTIME = 3;
/**
* 取系统框槽信息的第三个即进程号
*/
private static final int TWO = 2;
/**
* 常量三百
*/
private static final int PORTALPROCESS = 300;
/**
* 超时时间10秒
*/
private static final int TENSECONDS = 10000;
/**
* 数据传输中的延时时间,单位:毫秒
*/
private int errorTime = TENSECONDS;
/**
* 已经统计的Portal服务器ID列表
*/
private List<PortalServer> portalServers = new ArrayList<PortalServer>();
/**
*
* 判断当前portal服务器某个时间点的数据是否已经统计。
*
* @param portalName portal服务器名称
* @param recordTime 统计时间点
* @return true 已经统计 false 未统计
*/
public boolean isServerRecord(String portalName, Timestamp recordTime)
{
logger.recordEnterMethodLog();
errorTime = SystemConfig.getOneReqAndRspTimeout() * CLIENTRETRYTIME;
if (StringUtils.isBlank(portalName) || (null == recordTime))
{
logger.recordExitMethodLog();
return false;
}
boolean isFind = false;
for (PortalServer portalServer : portalServers)
{
if (portalServer.getPortalName().equals(portalName))
{
isFind = true;
if (portalServer.isRecord()
&& ((recordTime.getTime() >= (portalServer.getLastRecordTime().getTime() - errorTime))
&& (recordTime.getTime() <= (portalServer.getLastRecordTime().getTime() + errorTime))))
{
logger.recordExitMethodLog();
return true;
}
}
}
if (!isFind)
{
logger.recordErrorsLog("the portal is new name is :" + portalName);
}
logger.recordExitMethodLog();
return false;
}
/**
*
* 记录当前服务器和时间点为已统计状态。
*
* @param portalName portal服务器名称
* @param recordTime 统计时间点
*/
public void record(String portalName, Timestamp recordTime)
{
logger.recordEnterMethodLog();
if (StringUtils.isBlank(portalName) || (null == recordTime))
{
logger.recordExitMethodLog();
return;
}
boolean isFind = false;
for (PortalServer portalServer : portalServers)
{
if (portalServer.getPortalName().equals(portalName))
{
isFind = true;
portalServer.setRecord(true);
portalServer.setLastRecordTime(recordTime);
}
}
if (!isFind)
{
portalServers.add(new PortalServer(portalName, true, recordTime));
}
logger.recordExitMethodLog();
}
/**
*
* 获取本次统计未统计到的服务器的数目。
*
* @return 本次统计未统计到的服务器的数目
*/
public int getUnrecordServerNum()
{
logger.recordEnterMethodLog();
int unRecordNum = 0;
for (PortalServer portalServer : portalServers)
{
if (!portalServer.isRecord())
{
unRecordNum++;
}
}
logger.recordExitMethodLog();
return getConfigPortalServerNum() - getPortalServerNum() + unRecordNum;
}
/**
*
* 获取已经统计到的Portal服务器个数。
*
* @return Portal服务器个数
*/
public int getPortalServerNum()
{
return portalServers.size();
}
/**
*
* 获取配置的Portal服务器个数。
*
* @return 配置的Portal服务器个数
*/
public int getConfigPortalServerNum()
{
logger.recordEnterMethodLog();
int portalNum = 0;
String subRackSlotModuleInfo = SystemConfig.getSubRackSlotModuleInfo();
String[] strings = subRackSlotModuleInfo.split(",");
for (int i = 0; i < strings.length; i++)
{
String[] stringinfo = strings[i].split("-");
try
{
portalNum += Integer.parseInt(stringinfo[TWO]);
}
catch (NumberFormatException e)
{
logger.recordErrorsLog(e.getMessage());
}
}
logger.recordExitMethodLog();
return portalNum;
}
/**
*
* 获取未统计到的Portal服务器名称列表。
*
* @return 未统计到的Portal服务器名称列表
*/
public String getUnrecordServerName()
{
logger.recordEnterMethodLog();
String unRecordName = null;
String subRackSlot = null;
String portalName = null;
int portalBaseProcessID = PORTALPROCESS;
int processID = 0;
boolean isRecord = false;
String subRackSlotModuleInfo = SystemConfig.getSubRackSlotModuleInfo();
String[] strings = subRackSlotModuleInfo.split(",");
for (int i = 0; i < strings.length; i++)
{
String[] stringinfo = strings[i].split("-");
subRackSlot = stringinfo[0] + "-" + stringinfo[1];
int portalNum;
try
{
portalNum = Integer.parseInt(stringinfo[TWO]);
for (int j = 0; j < portalNum; j++)
{
isRecord = false;
processID = portalBaseProcessID + 1 + j;
portalName = subRackSlot + "-" + processID;
for (PortalServer portalServer : portalServers)
{
if (portalServer.getPortalName().equals(portalName))
{
isRecord = true;
if (!portalServer.isRecord())
{
isRecord = false;
}
}
}
if (!isRecord)
{
if (null != unRecordName)
{
unRecordName += ", ";
unRecordName += portalName;
}
else
{
unRecordName = portalName;
}
}
}
}
catch (NumberFormatException e)
{
logger.recordErrorsLog(e.toString());
}
}
logger.recordInfoLog("getUnrecordServerName unRecordName =" + unRecordName);
logger.recordExitMethodLog();
return unRecordName;
}
/**
*
* 初始化服务器列表中的portal服务器已经被统计的标志。
*
*/
public void initRecordFlag()
{
logger.recordEnterMethodLog();
for (PortalServer portalServer : portalServers)
{
portalServer.setRecord(false);
}
logger.recordExitMethodLog();
}
}
{
/**
* 调测日志记录器。
*/
private static Logger logger = Logger.getLogger(PortalServerService.class);
/**
* client端的重试次数
*/
private static final int CLIENTRETRYTIME = 3;
/**
* 取系统框槽信息的第三个即进程号
*/
private static final int TWO = 2;
/**
* 常量三百
*/
private static final int PORTALPROCESS = 300;
/**
* 超时时间10秒
*/
private static final int TENSECONDS = 10000;
/**
* 数据传输中的延时时间,单位:毫秒
*/
private int errorTime = TENSECONDS;
/**
* 已经统计的Portal服务器ID列表
*/
private List<PortalServer> portalServers = new ArrayList<PortalServer>();
/**
*
* 判断当前portal服务器某个时间点的数据是否已经统计。
*
* @param portalName portal服务器名称
* @param recordTime 统计时间点
* @return true 已经统计 false 未统计
*/
public boolean isServerRecord(String portalName, Timestamp recordTime)
{
logger.recordEnterMethodLog();
errorTime = SystemConfig.getOneReqAndRspTimeout() * CLIENTRETRYTIME;
if (StringUtils.isBlank(portalName) || (null == recordTime))
{
logger.recordExitMethodLog();
return false;
}
boolean isFind = false;
for (PortalServer portalServer : portalServers)
{
if (portalServer.getPortalName().equals(portalName))
{
isFind = true;
if (portalServer.isRecord()
&& ((recordTime.getTime() >= (portalServer.getLastRecordTime().getTime() - errorTime))
&& (recordTime.getTime() <= (portalServer.getLastRecordTime().getTime() + errorTime))))
{
logger.recordExitMethodLog();
return true;
}
}
}
if (!isFind)
{
logger.recordErrorsLog("the portal is new name is :" + portalName);
}
logger.recordExitMethodLog();
return false;
}
/**
*
* 记录当前服务器和时间点为已统计状态。
*
* @param portalName portal服务器名称
* @param recordTime 统计时间点
*/
public void record(String portalName, Timestamp recordTime)
{
logger.recordEnterMethodLog();
if (StringUtils.isBlank(portalName) || (null == recordTime))
{
logger.recordExitMethodLog();
return;
}
boolean isFind = false;
for (PortalServer portalServer : portalServers)
{
if (portalServer.getPortalName().equals(portalName))
{
isFind = true;
portalServer.setRecord(true);
portalServer.setLastRecordTime(recordTime);
}
}
if (!isFind)
{
portalServers.add(new PortalServer(portalName, true, recordTime));
}
logger.recordExitMethodLog();
}
/**
*
* 获取本次统计未统计到的服务器的数目。
*
* @return 本次统计未统计到的服务器的数目
*/
public int getUnrecordServerNum()
{
logger.recordEnterMethodLog();
int unRecordNum = 0;
for (PortalServer portalServer : portalServers)
{
if (!portalServer.isRecord())
{
unRecordNum++;
}
}
logger.recordExitMethodLog();
return getConfigPortalServerNum() - getPortalServerNum() + unRecordNum;
}
/**
*
* 获取已经统计到的Portal服务器个数。
*
* @return Portal服务器个数
*/
public int getPortalServerNum()
{
return portalServers.size();
}
/**
*
* 获取配置的Portal服务器个数。
*
* @return 配置的Portal服务器个数
*/
public int getConfigPortalServerNum()
{
logger.recordEnterMethodLog();
int portalNum = 0;
String subRackSlotModuleInfo = SystemConfig.getSubRackSlotModuleInfo();
String[] strings = subRackSlotModuleInfo.split(",");
for (int i = 0; i < strings.length; i++)
{
String[] stringinfo = strings[i].split("-");
try
{
portalNum += Integer.parseInt(stringinfo[TWO]);
}
catch (NumberFormatException e)
{
logger.recordErrorsLog(e.getMessage());
}
}
logger.recordExitMethodLog();
return portalNum;
}
/**
*
* 获取未统计到的Portal服务器名称列表。
*
* @return 未统计到的Portal服务器名称列表
*/
public String getUnrecordServerName()
{
logger.recordEnterMethodLog();
String unRecordName = null;
String subRackSlot = null;
String portalName = null;
int portalBaseProcessID = PORTALPROCESS;
int processID = 0;
boolean isRecord = false;
String subRackSlotModuleInfo = SystemConfig.getSubRackSlotModuleInfo();
String[] strings = subRackSlotModuleInfo.split(",");
for (int i = 0; i < strings.length; i++)
{
String[] stringinfo = strings[i].split("-");
subRackSlot = stringinfo[0] + "-" + stringinfo[1];
int portalNum;
try
{
portalNum = Integer.parseInt(stringinfo[TWO]);
for (int j = 0; j < portalNum; j++)
{
isRecord = false;
processID = portalBaseProcessID + 1 + j;
portalName = subRackSlot + "-" + processID;
for (PortalServer portalServer : portalServers)
{
if (portalServer.getPortalName().equals(portalName))
{
isRecord = true;
if (!portalServer.isRecord())
{
isRecord = false;
}
}
}
if (!isRecord)
{
if (null != unRecordName)
{
unRecordName += ", ";
unRecordName += portalName;
}
else
{
unRecordName = portalName;
}
}
}
}
catch (NumberFormatException e)
{
logger.recordErrorsLog(e.toString());
}
}
logger.recordInfoLog("getUnrecordServerName unRecordName =" + unRecordName);
logger.recordExitMethodLog();
return unRecordName;
}
/**
*
* 初始化服务器列表中的portal服务器已经被统计的标志。
*
*/
public void initRecordFlag()
{
logger.recordEnterMethodLog();
for (PortalServer portalServer : portalServers)
{
portalServer.setRecord(false);
}
logger.recordExitMethodLog();
}
}