// --- 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
*
* the $TOKENS that are available for the this jobs's summary outer form are:
*
* $InstanceID $SummaryTotalNum $ExecutionTime
*
*
* @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;
}
}