use of password.pwm.svc.pwnotify.StoredJobState in project pwm by pwm-project.
the class AdminServlet method restreadPwNotifyStatus.
@ActionHandler(action = "readPwNotifyStatus")
public ProcessStatus restreadPwNotifyStatus(final PwmRequest pwmRequest) throws IOException, DatabaseException, PwmUnrecoverableException {
int key = 0;
if (!pwmRequest.getConfig().readSettingAsBoolean(PwmSetting.PW_EXPY_NOTIFY_ENABLE)) {
final DisplayElement displayElement = new DisplayElement(String.valueOf(key++), DisplayElement.Type.string, "Status", "Password Notification Feature is not enabled. See setting: " + PwmSetting.PW_EXPY_NOTIFY_ENABLE.toMenuLocationDebug(null, pwmRequest.getLocale()));
pwmRequest.outputJsonResult(RestResultBean.withData(new PwNotifyStatusBean(Collections.singletonList(displayElement), false)));
return ProcessStatus.Halt;
}
{
ErrorInformation errorInformation = null;
try {
if (!pwmRequest.getPwmApplication().getDatabaseService().getAccessor().isConnected()) {
errorInformation = new ErrorInformation(PwmError.ERROR_DB_UNAVAILABLE, "database is not connected");
}
} catch (PwmUnrecoverableException e) {
errorInformation = e.getErrorInformation();
}
if (errorInformation != null) {
final DisplayElement displayElement = new DisplayElement(String.valueOf(key++), DisplayElement.Type.string, "Status", "Database must be functioning to view Password Notify status. Current database error: " + errorInformation.toDebugStr());
pwmRequest.outputJsonResult(RestResultBean.withData(new PwNotifyStatusBean(Collections.singletonList(displayElement), false)));
return ProcessStatus.Halt;
}
}
final List<DisplayElement> statusData = new ArrayList<>();
final Configuration config = pwmRequest.getConfig();
final Locale locale = pwmRequest.getLocale();
final PwNotifyService pwNotifyService = pwmRequest.getPwmApplication().getPwNotifyService();
final StoredJobState storedJobState = pwNotifyService.getJobState();
final boolean canRunOnthisServer = pwNotifyService.canRunOnThisServer();
statusData.add(new DisplayElement(String.valueOf(key++), DisplayElement.Type.string, "Currently Processing (on this server)", LocaleHelper.booleanString(pwNotifyService.isRunning(), locale, config)));
statusData.add(new DisplayElement(String.valueOf(key++), DisplayElement.Type.string, "This Server is the Job Processor", LocaleHelper.booleanString(canRunOnthisServer, locale, config)));
if (canRunOnthisServer) {
statusData.add(new DisplayElement(String.valueOf(key++), DisplayElement.Type.timestamp, "Next Job Scheduled Time", LocaleHelper.instantString(pwNotifyService.getNextExecutionTime(), locale, config)));
}
if (storedJobState != null) {
statusData.add(new DisplayElement(String.valueOf(key++), DisplayElement.Type.timestamp, "Last Job Start Time", LocaleHelper.instantString(storedJobState.getLastStart(), locale, config)));
statusData.add(new DisplayElement(String.valueOf(key++), DisplayElement.Type.timestamp, "Last Job Completion Time", LocaleHelper.instantString(storedJobState.getLastCompletion(), locale, config)));
if (storedJobState.getLastStart() != null && storedJobState.getLastCompletion() != null) {
statusData.add(new DisplayElement(String.valueOf(key++), DisplayElement.Type.timestamp, "Last Job Duration", TimeDuration.between(storedJobState.getLastStart(), storedJobState.getLastCompletion()).asLongString(locale)));
}
statusData.add(new DisplayElement(String.valueOf(key++), DisplayElement.Type.string, "Last Job Server Instance", storedJobState.getServerInstance()));
if (storedJobState.getLastError() != null) {
statusData.add(new DisplayElement(String.valueOf(key++), DisplayElement.Type.string, "Last Job Error", storedJobState.getLastError().toDebugStr()));
}
}
final boolean startButtonEnabled = !pwNotifyService.isRunning() && canRunOnthisServer;
final PwNotifyStatusBean pwNotifyStatusBean = new PwNotifyStatusBean(statusData, startButtonEnabled);
pwmRequest.outputJsonResult(RestResultBean.withData(pwNotifyStatusBean));
return ProcessStatus.Halt;
}
Aggregations