package edu.sjtu.infosec.ismp.manager.VPM.pm.web.actions;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.infosec.ismp.manager.rmi.sysm.config.service.SysConfigDbService;
import org.springframework.remoting.RemoteLookupFailureException;
import edu.sjtu.infosec.ismp.manager.LM.pfLog.service.SystemLogService;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.comm.SecurityUserHolder;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.service.DomainService;
import edu.sjtu.infosec.ismp.manager.VPM.pm.comm.HtmlFactory;
import edu.sjtu.infosec.ismp.manager.VPM.pm.comm.PMPage;
import edu.sjtu.infosec.ismp.manager.VPM.pm.comm.PMPageUtil;
import edu.sjtu.infosec.ismp.manager.VPM.pm.model.PatchUpdateInfo;
import edu.sjtu.infosec.ismp.manager.VPM.pm.model.SensorClentsPatchUpdateInfo;
import edu.sjtu.infosec.ismp.manager.VPM.pm.model.SensorClients;
import edu.sjtu.infosec.ismp.manager.VPM.pm.service.SensorClientsService;
import edu.sjtu.infosec.ismp.manager.VPM.pm.service.SensorService;
import edu.sjtu.infosec.ismp.manager.comm.comm.conn.jdbc.JdbcSensorClient;
import edu.sjtu.infosec.ismp.manager.comm.comm.conn.jdbc.ReadProp;
import edu.sjtu.infosec.ismp.manager.comm.model.page.PageResult;
import edu.sjtu.infosec.ismp.security.Domain;
import edu.sjtu.infosec.ismp.security.OperatorDetails;
public class StatisticsAction extends DispatchAction{
private SensorClientsService sensorClientsService;
private SensorService sensorService;
private DomainService domainService;
private SystemLogService systemlogservice;
private SysConfigDbService sysConfigDbService;
/**
* @param systemlogservice the systemlogservice to set
*/
public void setSystemlogservice(SystemLogService systemlogservice) {
JdbcSensorClient.list.add(sysConfigDbService);
}
/**
* @param sysConfigDbService the sysConfigDbService to set
*/
public void setSysConfigDbService(SysConfigDbService sysConfigDbService) {
this.sysConfigDbService = sysConfigDbService;
}
public DomainService getDomainService() {
return domainService;
}
public void setDomainService(DomainService domainService) {
this.domainService = domainService;
}
public SensorClientsService getSensorClientsService() {
return sensorClientsService;
}
public void setSensorClientsService(SensorClientsService sensorClientsService) {
this.sensorClientsService = sensorClientsService;
}
public SensorService getSensorService() {
return sensorService;
}
public void setSensorService(SensorService sensorService) {
this.sensorService = sensorService;
}
/**
* 查询所有域下的补丁数
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws IOException
*/
public ActionForward getCountDomainAll(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws IOException {
try {
OperatorDetails user= SecurityUserHolder.getCurrentUser();
//根据User 脚色权限查询委办局
List<Domain> userDomainList = new ArrayList<Domain>();
if(user != null)
{
userDomainList = user.getDomainList();
}else{
userDomainList=null;
}
StringBuffer sbf= new StringBuffer();
PMPage page= HtmlFactory.getPage(request);
LinkedList linkList = sensorClientsService.getSensorInfosAll(userDomainList,page.getBeginIndex(), page.getEveryPage(), null, null);
Domain dom = new Domain();
dom.setDomainName("全部委办局");
getCountLinke(request,linkList,sbf,page,dom);
HtmlFactory.flushData(response, sbf);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private void getCountLinke(HttpServletRequest request,LinkedList linkList,StringBuffer sbf,PMPage page,Domain department){
try{
page= HtmlFactory.getPage(request);
//可供更新的补丁数
int allPachInfoNum = sensorService.findAllPatchInfoNum();
//共有多少台计算机
int allComputerNum= (Integer) linkList.getFirst();;
//分页
page = PMPageUtil.createPage(page, allComputerNum);
//需更新的计算机
List<SensorClients> sensorClientsList = (List<SensorClients>) linkList.getLast();
//客户需要的数量更新
int clientsNumOfNeedUpdate = sensorService.findClientsNumOfNeedUpdate(sensorClientsList);
List<SensorClentsPatchUpdateInfo> patchUpdateList = new ArrayList<SensorClentsPatchUpdateInfo>();
for(SensorClients sc:sensorClientsList){
SensorClentsPatchUpdateInfo patchUpdateInfo = new SensorClentsPatchUpdateInfo();
patchUpdateInfo.setId(sc.getId());
patchUpdateInfo.setName(sc.getName());
//错误的更新数
int allPatchUpdateFailedNUm = sensorService.findAllPatchUpdateFailedNumBySensorClients(sc);
patchUpdateInfo.setAllPatchUpdateFailedNUm(allPatchUpdateFailedNUm);
//需更新的补丁数
int allPatchUpdateNeedNum = sensorService.findAllPatchUpdateNeedNumBySensorClients(sc);
patchUpdateInfo.setAllPatchUpdateNeedNum(allPatchUpdateNeedNum);
//已更新的补丁数
int allPatchUpdateOkNum = sensorService.findAllPatchUpdateOkNumBySensorClients(sc);
patchUpdateInfo.setAllPatchUpdateOkNum(allPatchUpdateOkNum);
patchUpdateList.add(patchUpdateInfo);
}
for(SensorClentsPatchUpdateInfo s : patchUpdateList){
HtmlFactory.getDataArray(s,sbf,"CDOMAINALL");
}
String[][] clientDomain ={{"cname",department.getDomainName()},{"allPachInfoNum",allPachInfoNum+""},{"allComputerNum",allComputerNum+""},{"clientsNumOUpdate",clientsNumOfNeedUpdate+""}};
Object[][] objs={{"add",clientDomain}};
HtmlFactory.getDataArray(objs, sbf,"CDOMAIN");
HtmlFactory.getDataArray(page, sbf,"PAGE");
}
catch(RemoteLookupFailureException rlfe){
System.out.println("RMI连接出错:java.rmi.ConnectException");
}catch(NumberFormatException e1){
e1.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}
//@SuppressWarnings({ "unused", "unchecked" })
public ActionForward getCountDomain(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws IOException {
String doid =request.getParameter("sdid");
if(HtmlFactory.isNotEmpty(doid) && !doid.equals("-1")){
StringBuffer sbf= new StringBuffer();
SensorClients sensor = new SensorClients();
Domain department= null;
PMPage page = HtmlFactory.getPage(request);
try{
department= domainService.findById(Integer.valueOf(doid));
sensor.setDepartment(department);
LinkedList linkList = sensorClientsService.getSensorInfos(sensor, page.getBeginIndex(), page.getEveryPage(), null, null);
getCountLinke(request,linkList,sbf,page,department);
}catch(Exception e){
e.printStackTrace();
}
HtmlFactory.flushData(response, sbf);
}else if(doid.equals("-1")){
return getCountDomainAll(mapping,form,request,response);
}
return null;
}
@SuppressWarnings("unchecked")
public ActionForward getCountSensor(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws IOException {
//点击客户端
String scid= request.getParameter("scid");
if(HtmlFactory.isNotEmpty(scid)){
StringBuffer sbf = new StringBuffer();
PMPage page =null;
try{
SensorClients sensorClients = sensorClientsService.getSensorClients(new Integer(scid));
page= HtmlFactory.getPage(request);
if(sensorClients.getDepartment()!=null && sensorClients.getDepartment().getDomainName() !=null){
request.setAttribute("managerName", sensorClients.getDepartment().getDomainName());
}else{
request.setAttribute("managerName", "未分配");
}
//补丁总数
Integer allPatchUpdateInfoNum = sensorService.findAllPatchUpdateInfoNumBySensorClients(sensorClients);
//已安装补丁数
Integer allPatchUpdateOkNum = sensorService.findAllPatchUpdateOkNumBySensorClients(sensorClients);
//安装失败补丁数
Integer allPatchUpdateFailedNum = sensorService.findAllPatchUpdateFailedNumBySensorClients(sensorClients);
//需要更新补丁数
Integer allPatchUpdateNeedNum = sensorService.findAllPatchUpdateNeedNumBySensorClients(sensorClients);
//未知状态的补丁数
Integer allPatchUpdateNoNum = sensorService.findAllPatchUpdateNoNumStateBySensorClients(sensorClients);
//补丁名称 rs --> List ---> PatchUpdateInfo
PageResult rs = sensorService.findAllPatchUpdateInfoBySensorClients(sensorClients,page);
String[][] clientInfo = {{ "name", sensorClients.getName() },{ "ip", sensorClients.getSensorIP() },
{ "doMain",sensorClients.getDepartment().getDomainName() } ,{"allPatchUpdateInfoNum",allPatchUpdateInfoNum.toString()},
{"allPatchUpdateOkNum",allPatchUpdateOkNum.toString()},{"allPatchUpdateFailedNum",allPatchUpdateFailedNum.toString()},
{"allPatchUpdateNeedNum",allPatchUpdateNeedNum.toString()},{"allPatchUpdateNoNum",allPatchUpdateNoNum.toString()}};
Object[][] objs={{"add",clientInfo}};
HtmlFactory.getDataArray(objs, sbf,"CLIENT");
String[][] pValue={{"2","需要更新"},{"3","需要更新"},{"6","需要更新"},{"1","已安装/不适用的更新"},{"4","已安装/不适用的更新"},{"5","包含错误的更新"}};
Object[][] puInfo ={{"state","getState",pValue}};
String[][] pinfos={{"patchName","getDefaultTitle"},{"uptype","getUpdateType"},{"desc","getDefaultDescription"}};
for(Iterator<PatchUpdateInfo> li = rs.getPageList().iterator();li.hasNext();){
PatchUpdateInfo patchUpdateInfo = li.next();
Object[][] upInfoobjs ={{patchUpdateInfo,puInfo},{patchUpdateInfo.getPatchInfo(),pinfos}};
HtmlFactory.getDataArray(upInfoobjs, sbf,"PATCHINFO");
}
HtmlFactory.getDataArray(rs.getPmpage(), sbf,"PAGE");
HtmlFactory.flushData(response, sbf);
}
catch(RemoteLookupFailureException rlfe){
System.out.println("RMI连接出错:java.rmi.ConnectException");
}
catch(Exception e){
e.printStackTrace();
}
}
return null;
}
}