package edu.sjtu.infosec.ismp.manager.LM.dLog.service.impl;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.ActionForm;
import edu.sjtu.infosec.ismp.manager.LM.dLog.comm.InitSysLogSeverityAndFacility;
import edu.sjtu.infosec.ismp.manager.LM.dLog.dao.SysLogDao;
import edu.sjtu.infosec.ismp.manager.LM.dLog.model.SysLog;
import edu.sjtu.infosec.ismp.manager.LM.dLog.model.SysLogFacility;
import edu.sjtu.infosec.ismp.manager.LM.dLog.model.SysLogSeverity;
import edu.sjtu.infosec.ismp.manager.LM.dLog.service.SysLogService;
import edu.sjtu.infosec.ismp.manager.LM.dLog.web.form.SysLogFrom;
import edu.sjtu.infosec.ismp.manager.LM.dLog.web.form.SysLogInitQueryBean;
import edu.sjtu.infosec.ismp.manager.LM.dLog.web.form.SysLogResponseQueryBean;
import edu.sjtu.infosec.ismp.manager.LM.util.InitQueryDate;
import edu.sjtu.infosec.ismp.manager.LM.util.StringDisplayOptimize;
import edu.sjtu.infosec.ismp.manager.LM.util.modle.PageBean;
import edu.sjtu.infosec.ismp.manager.SYSM.config.model.lm.dLog.SysLogSource;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.comm.SecurityUserHolder;
import edu.sjtu.infosec.ismp.security.Domain;
import edu.sjtu.infosec.ismp.security.OperatorDetails;
public class SysLogServiceImpl implements SysLogService {
private SysLogDao sysLogDao;
public SysLogDao getSysLogDao() {
return sysLogDao;
}
public void setSysLogDao(SysLogDao sysLogDao) {
this.sysLogDao = sysLogDao;
}
public void sysLogBaseInfoService() throws Exception {
/**
* 保存syslog的产生日志的程序模块
*/
List<SysLogFacility> facilityList = sysLogDao.initSysLogFacility();
if(!facilityList.isEmpty()){
for(SysLogFacility sysLogFacility : facilityList){
InitSysLogSeverityAndFacility.addSysLogFacility(sysLogFacility);
}
}
/**
* 保存syslog的严重性
*/
List<SysLogSeverity> severityList = sysLogDao.initSysLogSeverity();
if(!severityList.isEmpty()){
for(SysLogSeverity sysLogSeverity: severityList){
InitSysLogSeverityAndFacility.addSysLogSeverity(sysLogSeverity);
}
}
//打印出SYSLOGFACILITY和SYSLOGSEVERITY的大小
// System.out.println(InitSysLogSeverityAndFacility.SYSLOGFACILITY.size());
// System.out.println(InitSysLogSeverityAndFacility.SYSLOGSEVERITY.size());
}
public SysLogInitQueryBean initQuery() throws Exception {
OperatorDetails user = SecurityUserHolder.getCurrentUser();
SysLogInitQueryBean initQueryBean = new SysLogInitQueryBean();
List<String> initDate = InitQueryDate.initQueryDate(30);
TreeMap<Integer,String> facilityMap = new TreeMap<Integer, String>();
TreeMap<Integer,String> severityMap = new TreeMap<Integer, String>();
facilityMap = InitSysLogSeverityAndFacility.getSysLogFacility(facilityMap);
severityMap = InitSysLogSeverityAndFacility.getSysLogSeverity(severityMap);
initQueryBean.setDomain(user.getDomainList());
initQueryBean.setBeginDate(initDate.get(0));
initQueryBean.setEndDate(initDate.get(1));
initQueryBean.setFacility(facilityMap);
initQueryBean.setSeverity(severityMap);
//打印出用户角色、部门、时间
// System.out.println(user.getRoleList());
// System.out.println(user.getDomainList());
// System.out.println(initDate);
// System.out.println("产生日志的程序模块:" + initQueryBean.getFacility());
// System.out.println("严重性:" + initQueryBean.getSeverity());
return initQueryBean;
}
public SysLogResponseQueryBean responseQuery(ActionForm from,OperatorDetails user) throws Exception {
SysLogResponseQueryBean responseQueryBean = new SysLogResponseQueryBean();
SysLogFrom sysLogFrom = (SysLogFrom)from;
try {
BeanUtils.copyProperties(responseQueryBean, sysLogFrom);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
responseQueryBean.setQuery(StringDisplayOptimize.stringOptimize(this.getQueryString(responseQueryBean,user), 50));
// //打印信息
// System.out.println("----------responseQueryBean------------");
// System.out.println(responseQueryBean.getDomain());
// System.out.println(responseQueryBean.getBeginDate());
// System.out.println(responseQueryBean.getEndDate());
// System.out.println(responseQueryBean.getHostname());
// System.out.println(responseQueryBean.getMessage());
// System.out.println(responseQueryBean.getFacility());
// System.out.println(responseQueryBean.getSeverity());
// System.out.println(responseQueryBean.getQuery());
// System.out.println(sysLogFrom.getDeviceIP());
// System.out.println("----------responseQueryBean------------");
return responseQueryBean;
}
/**
* 获得查询条件的字符串 SysLogResponseQueryBean.query
* @param responseQuery
* @param user
* @return
* @throws Exception
*/
private String getQueryString(SysLogResponseQueryBean responseQuery,OperatorDetails user)throws Exception{
int count = 0;
StringBuffer queryString = new StringBuffer();
if(responseQuery.getDomain() == null || responseQuery.getDomain().equals("all")){
count++;
}else{
List<Domain> domainList = user.getDomainList();
for(Domain domain : domainList){
if(responseQuery.getDomain().equals(domain.getId()+"")){
queryString.append("部门:" + domain.getDomainName()+"、");
break;
}
}
}
if(responseQuery.getFacility() == null || responseQuery.getFacility().equals("all")){
count++;
}else{
Map<Integer,String> facilityMap = InitSysLogSeverityAndFacility.SYSLOGFACILITY;
queryString.append("程序模块:" + facilityMap.get(Integer.parseInt(responseQuery.getFacility()))+"、");
}
if(responseQuery.getBeginDate() != null && !responseQuery.getBeginDate().equals("") && responseQuery.getEndDate() != null && !responseQuery.getEndDate().equals("")){
queryString.append("时间段:" + responseQuery.getBeginDate() + "~" +responseQuery.getEndDate()+"、");
}
if(responseQuery.getHostname() == null || responseQuery.getHostname().equals("")){
count++;
}else{
queryString.append("主机IP:" + responseQuery.getHostname() +"、");
}
if(responseQuery.getSeverity() == null || responseQuery.getSeverity().equals("all")){
count++;
}else{
Map<Integer,String> severityMap = InitSysLogSeverityAndFacility.SYSLOGSEVERITY;
queryString.append("严重性:" + severityMap.get(Integer.parseInt(responseQuery.getSeverity()))+"、");
}
if(responseQuery.getMessage() == null || responseQuery.getMessage().equals("")){
count++;
}else{
queryString.append("消息关键字:" + responseQuery.getMessage() +"、");
}
if(count >= 5){
return "查询全部信息 !";
}
return queryString.toString();
}
public PageBean getSysLog(SysLogResponseQueryBean sysLogQueryBean,
Integer pageNo,String initBeginDate,String initEndDate) throws Exception {
PageBean pageBean = new PageBean();
pageBean.setResultRowSum(getPageResultRowSum(sysLogQueryBean,initBeginDate,initEndDate));
pageBean.setPageRowNum(8);
pageBean.setPageMaxSum((pageBean.getResultRowSum()+(pageBean.getPageRowNum()-1))/pageBean.getPageRowNum());
pageBean.setPageNo(pageNo);
pageBean.setPageResult(this.getPageResult(sysLogQueryBean, pageNo-1*pageBean.getPageRowNum(), pageBean.getPageRowNum(),initBeginDate,initEndDate));
/**
* 2010-9-19 作废
*/
// pageBean.setPageResult(this.optimizePageResult(sysLogQueryBean, pageNo-1, pageBean.getPageRowNum(), initBeginDate, initEndDate));
//打印信息
// System.out.println("----------PageBean---------");
// System.out.println("当前页:" + pageBean.getPageNo());
// System.out.println("一共多少页:" + pageBean.getPageMaxSum());
// System.out.println("每页多少行:" + pageBean.getPageRowNum());
// System.out.println("一共多少行:" + pageBean.getResultRowSum());
// System.out.println("符合查询数:" + pageBean.getPageResult().size());
// System.out.println("----------PageBean---------");
return pageBean;
}
/**
* 获得lm_dlog_syslog表中的数据总数
* @return
* @throws Exception
*/
private Integer getPageResultRowSum(SysLogResponseQueryBean sysLogQueryBean,String initBeginDate,String initEndDate)throws Exception{
OperatorDetails user = SecurityUserHolder.getCurrentUser();
StringBuffer HQL = new StringBuffer();
HQL.append("select count(*) from SysLog where 1=1");
//
// if(sysLogQueryBean.getDomain() != null && !sysLogQueryBean.getDomain().equals("") && !sysLogQueryBean.getDomain().equals("all")){
// HQL.append(",Domain");
// }
// if(sysLogQueryBean.getFacility() != null && !sysLogQueryBean.getFacility().equals("all")){
// HQL.append(",SysLogFacility");
// }
// if(sysLogQueryBean.getSeverity() != null && !sysLogQueryBean.getSeverity().equals("all")){
// HQL.append(",SysLogSeverity");
// }
if(sysLogQueryBean.getDomain() != null && !sysLogQueryBean.getDomain().equals("") && !sysLogQueryBean.getDomain().equals("all")){
HQL.append(" and domain="+sysLogQueryBean.getDomain());
}
if(sysLogQueryBean.getDomain() == null || sysLogQueryBean.getDomain().equals("all")){
String inDomain = "00";
List<Domain> domainList = user.getDomainList();
for(Domain d : domainList)
inDomain += ","+d.getId();
HQL.append(" and domain in ("+inDomain+")");
}
if(sysLogQueryBean.getFacility() != null && !sysLogQueryBean.getFacility().equals("all")){
HQL.append(" and facility="+sysLogQueryBean.getFacility());
}
if(sysLogQueryBean.getSeverity() != null && !sysLogQueryBean.getSeverity().equals("all")){
HQL.append(" and severity="+sysLogQueryBean.getSeverity());
}
if(sysLogQueryBean.getBeginDate() != null && sysLogQueryBean.getEndDate() != null){
HQL.append(" and timestamp between '"+sysLogQueryBean.getBeginDate()+"' and '"+sysLogQueryBean.getEndDate()+"'");
}else{
HQL.append(" and timestamp between '"+initBeginDate+"' and '"+initEndDate+"'");
}
if(sysLogQueryBean.getHostname() != null && !sysLogQueryBean.getHostname().trim().equals("")){
HQL.append(" and hostname='"+sysLogQueryBean.getHostname().trim()+"'");
}
if(sysLogQueryBean.getMessage() != null && !sysLogQueryBean.getMessage().trim().equals("")){
HQL.append(" and message like '%"+sysLogQueryBean.getMessage().trim()+"%'");
}
return sysLogDao.getPageResultRowSum(HQL.toString());
}
/**
* 得到lm_dlog_syslog表中符合HQL条件的数据。并分页
* @param sysLogQueryBean
* @param pageNo
* @param pageRowNum
* @return
* @throws Exception
*/
private List<SysLog> getPageResult(SysLogResponseQueryBean sysLogQueryBean,Integer pageNo,Integer pageRowNum,String initBeginDate,String initEndDate)throws Exception{
OperatorDetails user = SecurityUserHolder.getCurrentUser();
StringBuffer HQL = new StringBuffer();
HQL.append("from SysLog where 1=1");
//
// if(sysLogQueryBean.getDomain() != null && !sysLogQueryBean.getDomain().equals("") && !sysLogQueryBean.getDomain().equals("all")){
// HQL.append(",Domain");
// }
// if(sysLogQueryBean.getFacility() != null && !sysLogQueryBean.getFacility().equals("all")){
// HQL.append(",SysLogFacility");
// }
// if(sysLogQueryBean.getSeverity() != null && !sysLogQueryBean.getSeverity().equals("all")){
// HQL.append(",SysLogSeverity");
// }
if(sysLogQueryBean.getDomain() != null && !sysLogQueryBean.getDomain().equals("") && !sysLogQueryBean.getDomain().equals("all")){
HQL.append(" and domain="+sysLogQueryBean.getDomain());
}
if(sysLogQueryBean.getDomain() == null || sysLogQueryBean.getDomain().equals("all")){
String inDomain = "00";
List<Domain> domainList = user.getDomainList();
for(Domain d : domainList)
inDomain += ","+d.getId();
HQL.append(" and domain in ("+inDomain+")");
}
if(sysLogQueryBean.getFacility() != null && !sysLogQueryBean.getFacility().equals("all")){
HQL.append(" and facility="+sysLogQueryBean.getFacility());
}
if(sysLogQueryBean.getSeverity() != null && !sysLogQueryBean.getSeverity().equals("all")){
HQL.append(" and severity="+sysLogQueryBean.getSeverity());
}
if(sysLogQueryBean.getBeginDate() != null && sysLogQueryBean.getEndDate() != null){
HQL.append(" and timestamp between '"+sysLogQueryBean.getBeginDate()+"' and '"+sysLogQueryBean.getEndDate()+"'");
}else{
HQL.append(" and timestamp between '"+initBeginDate+"' and '"+initEndDate+"'");
}
if(sysLogQueryBean.getHostname() != null && !sysLogQueryBean.getHostname().trim().equals("")){
HQL.append(" and hostname='"+sysLogQueryBean.getHostname().trim()+"'");
}
if(sysLogQueryBean.getMessage() != null && !sysLogQueryBean.getMessage().trim().equals("")){
HQL.append(" and message like '%"+sysLogQueryBean.getMessage().trim()+"%'");
}
HQL.append(" order by timestamp desc");
// //打印信息
// System.out.println("--HQL--" + HQL.toString());
// System.out.println("initTime: " + initBeginDate + "~" + initEndDate);
// System.out.println("Time: " + sysLogQueryBean.getBeginDate() + "~" + sysLogQueryBean.getEndDate());
return sysLogDao.getPageResult(HQL.toString(), pageNo, pageRowNum);
}
/**
* 优化SysLog的message字符
* 2010-9-19 作废
*/
// private List<SysLog> optimizePageResult(SysLogResponseQueryBean sysLogQueryBean,Integer pageNo,Integer pageRowNum,String initBeginDate,String initEndDate)throws Exception{
// List<SysLog> sysLogList = this.getPageResult(sysLogQueryBean, pageNo, pageRowNum, initBeginDate, initEndDate);
// List<SysLog> sysLog = new ArrayList<SysLog>();
//
// for(SysLog syslog : sysLogList){
// syslog.setMessageOptimize(StringDisplayOptimize.stringOptimize(syslog.getMessage(), 20));
// sysLog.add(syslog);
// }
//
// return sysLog;
// }
public List<SysLogSource> getAllSysLogSource(SysLogSource sysLogSource,List<Domain> domain,Integer pageNo,Integer pageRowNum) throws Exception {
return sysLogDao.getAllSysLogSource(sysLogSource, domain, pageNo, pageRowNum);
}
public Integer getAllSysLogSourceCount(SysLogSource sysLogSource,List<Domain> domain) throws Exception {
return sysLogDao.getAllSysLogSourceCount(sysLogSource, domain);
}
}