diff options
Diffstat (limited to 'base/common/src/com/netscape/cms/jobs/RequestInQueueJob.java')
-rw-r--r-- | base/common/src/com/netscape/cms/jobs/RequestInQueueJob.java | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/base/common/src/com/netscape/cms/jobs/RequestInQueueJob.java b/base/common/src/com/netscape/cms/jobs/RequestInQueueJob.java new file mode 100644 index 000000000..b04461941 --- /dev/null +++ b/base/common/src/com/netscape/cms/jobs/RequestInQueueJob.java @@ -0,0 +1,217 @@ +// --- BEGIN COPYRIGHT BLOCK --- +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// (C) 2007 Red Hat, Inc. +// All rights reserved. +// --- END COPYRIGHT BLOCK --- +package com.netscape.cms.jobs; + +import java.text.DateFormat; +import java.util.Date; +import java.util.Locale; + +import com.netscape.certsrv.apps.CMS; +import com.netscape.certsrv.authority.IAuthority; +import com.netscape.certsrv.base.EBaseException; +import com.netscape.certsrv.base.IConfigStore; +import com.netscape.certsrv.base.IExtendedPluginInfo; +import com.netscape.certsrv.base.ISubsystem; +import com.netscape.certsrv.jobs.IJob; +import com.netscape.certsrv.jobs.IJobCron; +import com.netscape.certsrv.jobs.IJobsScheduler; +import com.netscape.certsrv.notification.IEmailFormProcessor; +import com.netscape.certsrv.request.IRequestList; +import com.netscape.certsrv.request.IRequestQueue; +import com.netscape.certsrv.request.RequestStatus; + +/** + * A job for the Jobs Scheduler. This job checks in the internal ldap + * db for requests currently in the request queue and send a summary + * report to the administrator + * <p> + * the $TOKENS that are available for the this jobs's summary outer form are:<br> + * <UL> + * $InstanceID $SummaryTotalNum $ExecutionTime + * </UL> + * + * @version $Revision$, $Date$ + * @see com.netscape.certsrv.jobs.IJob + * @see com.netscape.cms.jobs.AJobBase + */ +public class RequestInQueueJob extends AJobBase + implements IJob, Runnable, IExtendedPluginInfo { + protected static final String PROP_SUBSYSTEM_ID = "subsystemId"; + + IAuthority mSub = null; + IRequestQueue mReqQ = null; + private boolean mSummary = false; + + /* Holds configuration parameters accepted by this implementation. + * This list is passed to the configuration console so configuration + * for instances of this implementation can be configured through the + * console. + */ + protected static String[] mConfigParams = + new String[] { + "enabled", + "cron", + "subsystemId", + "summary.enabled", + "summary.emailSubject", + "summary.emailTemplate", + "summary.senderEmail", + "summary.recipientEmail" + }; + + /** + * holds help text for this plugin + */ + public String[] getExtendedPluginInfo(Locale locale) { + String s[] = { + IExtendedPluginInfo.HELP_TEXT + + "; A job that checks for enrollment requests in the " + + "queue, and reports to recipientEmail", + "cron;string;Format: minute hour dayOfMonth month " + + "dayOfWeek. Use '*' for 'every'. For dayOfWeek, 0 is Sunday", + "summary.senderEmail;string;Specify the address to be used " + + "as the email's 'sender'. Bounces go to this address.", + "summary.recipientEmail;string;Who should receive summaries", + "enabled;boolean;Enable this plugin", + "summary.enabled;boolean;Enable the summary. You must enabled " + + "this for the job to work.", + "summary.emailSubject;string;Subject of summary email", + "summary.emailTemplate;string;Fully qualified pathname of " + + "template file of email to be sent", + "subsystemId;choice(ca,ra);The type of subsystem this job is " + + "for", + IExtendedPluginInfo.HELP_TOKEN + + ";configuration-jobrules-requestinqueuejob", + }; + + return s; + } + + /** + * initialize from the configuration file + * + * @param id String name of this instance + * @param implName string name of this implementation + * @param config configuration store for this instance + * @exception EBaseException + */ + public void init(ISubsystem owner, String id, String implName, IConfigStore config) throws + EBaseException { + mConfig = config; + mId = id; + mImplName = implName; + + // read from the configuration file + String sub = mConfig.getString(PROP_SUBSYSTEM_ID); + + mSub = (IAuthority) + CMS.getSubsystem(sub); + if (mSub == null) { + // take this as disable + mSummary = false; + return; + } + + mReqQ = mSub.getRequestQueue(); + + mCron = mConfig.getString(IJobCron.PROP_CRON); + if (mCron == null) { + return; + } + + // parse cron string into a JobCron class + IJobsScheduler scheduler = (IJobsScheduler) owner; + + mJobCron = scheduler.createJobCron(mCron); + + // initialize the summary related config info + IConfigStore sc = mConfig.getSubStore(PROP_SUMMARY); + + if (sc.getBoolean(PROP_ENABLED, false)) { + mSummary = true; + mSummaryMailSubject = sc.getString(PROP_EMAIL_SUBJECT); + mMailForm = sc.getString(PROP_EMAIL_TEMPLATE); + // mItemForm = sc.getString(PROP_ITEM_TEMPLATE); + mSummarySenderEmail = sc.getString(PROP_SENDER_EMAIL); + mSummaryReceiverEmail = sc.getString(PROP_RECEIVER_EMAIL); + } else { + mSummary = false; + } + } + + /** + * summarize the queue status and mail it + */ + public void run() { + if (mSummary == false) + return; + + Date date = CMS.getCurrentDate(); + DateFormat dateFormat = DateFormat.getDateTimeInstance(); + String nowString = dateFormat.format(date); + + int count = 0; + IRequestList list = + mReqQ.listRequestsByStatus(RequestStatus.PENDING); + + while (list != null && list.hasMoreElements()) { + list.nextRequestId(); + + /* This is way too slow + // get request from request id + IRequest req = null; + try { + req = mReqQ.findRequest(rid); + } catch (EBaseException e) { + System.out.println(e.toString()); + } + */ + count++; + } + + // if (count == 0) return; + + String contentForm = null; + + contentForm = getTemplateContent(mMailForm); + + buildContentParams(IEmailFormProcessor.TOKEN_ID, mId); + buildContentParams(IEmailFormProcessor.TOKEN_SUMMARY_TOTAL_NUM, + String.valueOf(count)); + buildContentParams(IEmailFormProcessor.TOKEN_EXECUTION_TIME, + nowString); + + IEmailFormProcessor emailFormProcessor = CMS.getEmailFormProcessor(); + String mailContent = + emailFormProcessor.getEmailContent(contentForm, + mContentParams); + + mailSummary(mailContent); + } + + /** + * Returns a list of configuration parameter names. + * The list is passed to the configuration console so instances of + * this implementation can be configured through the console. + * + * @return String array of configuration parameter names. + */ + public String[] getConfigParams() { + return mConfigParams; + } +} |