Author: kevinshen
Date: 2009-11-13 11:37:34 +0100 (Fri, 13 Nov 2009)
New Revision: 39678

Added:
   
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/beans/CheckIntegrityBean.java
   
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/sql/CheckIntegrity.java
   
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/webapp/editors/maintenance/checkintegrity.jsp
Log:
CMSC-1582 Create a maintenance script to check integrity of MMBase database

Added: 
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/beans/CheckIntegrityBean.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/beans/CheckIntegrityBean.java
                               (rev 0)
+++ 
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/beans/CheckIntegrityBean.java
       2009-11-13 10:37:34 UTC (rev 39678)
@@ -0,0 +1,67 @@
+package com.finalist.cmsc.maintenance.beans;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.mmbase.bridge.Cloud;
+import org.mmbase.bridge.NodeList;
+import org.mmbase.bridge.NodeManager;
+import org.mmbase.bridge.NodeManagerList;
+import org.mmbase.bridge.NotFoundException;
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+
+import com.finalist.cmsc.maintenance.sql.CheckIntegrity;
+import com.finalist.cmsc.sql.SqlExecutor;
+
+public class CheckIntegrityBean {
+   
+   private Cloud cloud;
+   
+   /** MMbase logging system */
+   private static final Logger log = 
Logging.getLoggerInstance(CheckIntegrityBean.class.getName());
+
+   public CheckIntegrityBean(Cloud cloud) {
+      this.cloud = cloud;
+   }
+   
+   public List execute() {
+      NodeManagerList  nodeManagerList = cloud.getNodeManagers();
+      List<String> corruptNodes = new ArrayList<String>();
+      for(NodeManager nodeManager : nodeManagerList) {
+         String nodeManagerName = nodeManager.getName();
+         List<String> list = new ArrayList<String>();
+         
+
+         if (!"object".equalsIgnoreCase(nodeManagerName)) {
+          //  NodeManager parentNodeManager = nodeManager.getParent();
+           // list.add(nodeManager.getName());
+            while(nodeManager != null ) {
+               list.add(nodeManager.getName());
+               try {
+                  nodeManager = nodeManager.getParent();
+               }
+               catch (NotFoundException nfe) {
+                  break;
+               }
+            }
+            String otypeNodeManager = list.get(0);
+            NodeManager typeDef = cloud.getNodeManager("typedef");
+            NodeList nodeList = typeDef.getList("name='"+otypeNodeManager+"'", 
"", "");
+            int otype = 0;
+            if(!nodeList.isEmpty()) {
+               otype = nodeList.getNode(0).getNumber();
+            }
+            log.debug("otype======"+otype);
+            for (int i = 0 ; i < list.size()-1; i++) {
+               String managerName = list.get(i);
+               CheckIntegrity checkIntegrity = new 
CheckIntegrity(otype,managerName,corruptNodes,otypeNodeManager);
+               new SqlExecutor().execute(checkIntegrity);
+            }         
+         }
+      }
+     
+      return corruptNodes;
+   }
+}

Added: 
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/sql/CheckIntegrity.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/sql/CheckIntegrity.java
                             (rev 0)
+++ 
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/java/com/finalist/cmsc/maintenance/sql/CheckIntegrity.java
     2009-11-13 10:37:34 UTC (rev 39678)
@@ -0,0 +1,48 @@
+package com.finalist.cmsc.maintenance.sql;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+import org.mmbase.bridge.BridgeException;
+
+import com.finalist.cmsc.sql.SqlAction;
+
+public class CheckIntegrity extends SqlAction {
+
+   private int otype;
+   
+   private String nodeManager;
+   
+   private List corruptNodes;
+   
+   private String otypeNodeName;
+   
+   public CheckIntegrity(int otype, String nodeManager, List corruptNodes, 
String otypeNodeName) {
+      this.otype = otype;
+      this.nodeManager = nodeManager;
+      this.corruptNodes = corruptNodes;  
+      this.otypeNodeName = otypeNodeName;
+   }
+   @Override
+   public String getSql() {
+      String sql = "select number from "+this.getTable("object")+ " where 
otype="+otype+" and number not in(select number from 
"+this.getTable(nodeManager)+")";
+      
+      return sql;
+   }
+
+   @Override
+   public String process(ResultSet rs) throws BridgeException, SQLException {
+      while (rs.next()) {
+         int nodeNumber = rs.getInt(getFieldname("number"));
+         if(otypeNodeName.equalsIgnoreCase(nodeManager)) {
+            corruptNodes.add(nodeManager+"("+nodeNumber+")");
+         }
+         else {
+            
corruptNodes.add(nodeManager+"("+nodeNumber+")("+otypeNodeName+")");
+         }
+      }
+      return null;
+   }
+
+}

Added: 
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/webapp/editors/maintenance/checkintegrity.jsp
===================================================================
--- 
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/webapp/editors/maintenance/checkintegrity.jsp
                          (rev 0)
+++ 
CMSContainer/trunk/CMSContainer/cmsc/maintenance/src/webapp/editors/maintenance/checkintegrity.jsp
  2009-11-13 10:37:34 UTC (rev 39678)
@@ -0,0 +1,45 @@
+<%...@page language="java" contentType="text/html;charset=UTF-8"
+%><%...@include file="globals.jsp"
+%><%@ page import="com.finalist.cmsc.maintenance.beans.*"
+%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml/DTD/transitional.dtd";>
+<html xmlns="http://www.w3.org/TR/xhtml";>
+<head>
+<title>Check integrity of MMBase database</title>
+<meta http-equiv="pragma" value="no-cache" />
+<meta http-equiv="expires" value="0" />
+<link href="../style.css" type="text/css" rel="stylesheet"/>
+</head>
+   <body>
+      <h2>Check integrity of MMBase database.</h2>
+      <mm:cloud jspvar="cloud" loginpage="../editors/login.jsp" 
rank="administrator">
+      <mm:log jspvar="log">
+      <form method="post">
+         <input type="hidden" name="action" value="check"/>
+
+         <input type="submit" name="action" value="Check"/>
+      </form>
+
+   <mm:import externid="action"/>
+   <mm:present referid="action">
+         <%
+                       java.util.List nodes = new 
CheckIntegrityBean(cloud).execute();
+                        pageContext.setAttribute("list", nodes);
+
+            %>
+           <c:if test="${fn:length(list) > 0}">
+                       <p>Corrupt nodes :</p>
+                       <ul>
+                       <c:forEach var='item' items='${list}'>
+            <li><c:out value='${item}'/></li>
+                       
+         </c:forEach>
+</ul>
+               </c:if>
+               <c:if test="${fn:length(list) == 0}">
+                       No corrupt nodes. 
+               </c:if>
+   </mm:present>
+
+</mm:log>
+</mm:cloud>
+</body>

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to