%@ include file="adminHeaders.jsp" %> <% /* $Id$ */ /** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ boolean maintenanceUnderway = org.apache.manifoldcf.crawler.system.ManifoldCF.checkMaintenanceUnderway(); %>
<%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.QueueStatus")%> <% if (maintenanceUnderway == false) { int k; // Read the document selection parameters. // The status report is connection based, so the connection has to be selected before anything else makes sense. String statusConnection = variableContext.getParameter("statusconnection"); if (statusConnection == null) statusConnection = ""; // Which jobs we care about also figure in the selection part of the query. It is the user's responsibility to pick jobs // that are in desired states. String[] statusJobIdentifiers = variableContext.getParameterValues("statusjobs"); if (statusJobIdentifiers == null) statusJobIdentifiers = new String[0]; // We can select documents from the queue based on the earliest time they can be acted upon. This is specified in // a delta in minutes offset from "now". Empty means that we don't want to select on that criteria. String activeTimeOffsetMinutes = variableContext.getParameter("statusscheduleoffset"); if (activeTimeOffsetMinutes == null) activeTimeOffsetMinutes = ""; // There is a selection criteria also based on the document state; these are integers defined in IJobManager. String[] documentStateTypes; if (variableContext.getParameter("statusdocumentstates_posted") != null) { documentStateTypes = variableContext.getParameterValues("statusdocumentstates"); if (documentStateTypes == null) documentStateTypes = new String[0]; } else documentStateTypes = null; // There is a selection criteria based on the document status; these are also integers defined in IJobManager. String[] documentStatusTypes; if (variableContext.getParameter("statusdocumentstatuses_posted") != null) { documentStatusTypes = variableContext.getParameterValues("statusdocumentstatuses"); if (documentStatusTypes == null) documentStatusTypes = new String[0]; } else documentStatusTypes = null; // Match string for the document identifier String identifierMatch = variableContext.getParameter("statusidentifiermatch"); if (identifierMatch == null) identifierMatch = ""; String statusBucketDesc = variableContext.getParameter("statusbucketdesc"); if (statusBucketDesc == null) statusBucketDesc = "(.*)"; // From the passed-in selection values, calculate the actual selection criteria that we'll use in the queries. IRepositoryConnectionManager connMgr = RepositoryConnectionManagerFactory.make(threadContext); IRepositoryConnection[] connList = connMgr.getAllConnections(); IJobManager jobManager = JobManagerFactory.make(threadContext); // Repository connection name: This simply needs to be mapped to an eligible list of identifiers. IJobDescription[] eligibleList = null; HashMap selectedJobs = null; if (statusConnection.length() > 0) { eligibleList = jobManager.findJobsForConnection(statusConnection); selectedJobs = new HashMap(); k = 0; while (k < statusJobIdentifiers.length) { Long identifier = new Long(statusJobIdentifiers[k++]); selectedJobs.put(identifier,identifier); } } // Time offset: Need to calculate the actual time in ms since epoch to use to query against the "checktime" field. // Note that the checktime field is actually nullable and will only have a value when the document is in certain states; // therefore, the query itself will only include checktime for those states where it makes sense. An empty value // means "from the beginning of time", or is equivalent to time 0. long nowTime = 0L; if (activeTimeOffsetMinutes.length() > 0) { nowTime = System.currentTimeMillis() + (new Long(activeTimeOffsetMinutes).longValue()) * 60000L; if (nowTime < 0L) nowTime = 0L; } else nowTime = System.currentTimeMillis(); // Translate the states from a string to a number that will be understood by IJobManager. int[] matchingStates; if (documentStateTypes == null) { matchingStates = new int[]{IJobManager.DOCSTATE_NEVERPROCESSED,IJobManager.DOCSTATE_PREVIOUSLYPROCESSED,IJobManager.DOCSTATE_OUTOFSCOPE}; } else { matchingStates = new int[documentStateTypes.length]; k = 0; while (k < matchingStates.length) { matchingStates[k] = new Integer(documentStateTypes[k]).intValue(); k++; } } HashMap matchingStatesHash = new HashMap(); k = 0; while (k < matchingStates.length) { Integer state = new Integer(matchingStates[k++]); matchingStatesHash.put(state,state); } // Convert the status from a string to a number that will be understood by IJobManager int[] matchingStatuses; if (documentStatusTypes == null) { matchingStatuses = new int[]{IJobManager.DOCSTATUS_INACTIVE,IJobManager.DOCSTATUS_PROCESSING,IJobManager.DOCSTATUS_EXPIRING, IJobManager.DOCSTATUS_DELETING,IJobManager.DOCSTATUS_READYFORPROCESSING,IJobManager.DOCSTATUS_READYFOREXPIRATION, IJobManager.DOCSTATUS_WAITINGFORPROCESSING,IJobManager.DOCSTATUS_WAITINGFOREXPIRATION,IJobManager.DOCSTATUS_WAITINGFOREVER, IJobManager.DOCSTATUS_HOPCOUNTEXCEEDED}; } else { matchingStatuses = new int[documentStatusTypes.length]; k = 0; while (k < matchingStatuses.length) { matchingStatuses[k] = new Integer(documentStatusTypes[k]).intValue(); k++; } } HashMap matchingStatusesHash = new HashMap(); k = 0; while (k < matchingStatuses.length) { Integer status = new Integer(matchingStatuses[k++]); matchingStatusesHash.put(status,status); } %> <% } else { %> |