/******************************************************************************* * Copyright (c) 2011 The Board of Trustees of the Leland Stanford Junior University * as Operator of the SLAC National Accelerator Laboratory. * Copyright (c) 2011 Brookhaven National Laboratory. * EPICS archiver appliance is distributed subject to a Software License Agreement found * in file LICENSE that is included with this distribution. *******************************************************************************/ package org.epics.archiverappliance.engine; import java.io.IOException; import java.util.HashMap; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.epics.archiverappliance.common.BPLAction; import org.epics.archiverappliance.common.BasicDispatcher; import org.epics.archiverappliance.common.GetVersion; import org.epics.archiverappliance.common.ProcessMetricsReport; import org.epics.archiverappliance.config.ConfigService; import org.epics.archiverappliance.engine.bpl.AbortArchiveRequestForAppliance; import org.epics.archiverappliance.engine.bpl.ArchiveChannelObjectDetailsAction; import org.epics.archiverappliance.engine.bpl.ChangeArchivalParamsAction; import org.epics.archiverappliance.engine.bpl.CleanUpAnyImmortalChannels; import org.epics.archiverappliance.engine.bpl.DeletePV; import org.epics.archiverappliance.engine.bpl.GetEngineDataAction; import org.epics.archiverappliance.engine.bpl.GetLatestMetaDataAction; import org.epics.archiverappliance.engine.bpl.PVStatusAction; import org.epics.archiverappliance.engine.bpl.PauseArchivingPV; import org.epics.archiverappliance.engine.bpl.PausePVsOnShutdown; import org.epics.archiverappliance.engine.bpl.ResumeArchivingPV; import org.epics.archiverappliance.engine.bpl.reports.ApplianceMetrics; import org.epics.archiverappliance.engine.bpl.reports.ApplianceMetricsDetails; import org.epics.archiverappliance.engine.bpl.reports.ConnectedPVCountForAppliance; import org.epics.archiverappliance.engine.bpl.reports.CurrentlyDisconnectedPVsAction; import org.epics.archiverappliance.engine.bpl.reports.DroppedEventsBufferOverflowReport; import org.epics.archiverappliance.engine.bpl.reports.DroppedEventsTimestampReport; import org.epics.archiverappliance.engine.bpl.reports.DroppedEventsTypeChangeReport; import org.epics.archiverappliance.engine.bpl.reports.EventRateReport; import org.epics.archiverappliance.engine.bpl.reports.InstanceReportDetails; import org.epics.archiverappliance.engine.bpl.reports.ListAllChannels; import org.epics.archiverappliance.engine.bpl.reports.LostConnectionsReport; import org.epics.archiverappliance.engine.bpl.reports.NeverConnectedPVsAction; import org.epics.archiverappliance.engine.bpl.reports.PVDetails; import org.epics.archiverappliance.engine.bpl.reports.ScanCopyTimeReport; import org.epics.archiverappliance.engine.bpl.reports.ScanMaxTimeReport; import org.epics.archiverappliance.engine.bpl.reports.SilentPVReport; import org.epics.archiverappliance.engine.bpl.reports.StorageRateReport; import org.epics.archiverappliance.engine.bpl.reports.WaveformPVsAction; /** * The main business logic servlet for the engine. All BPLActions are registered here. * @author mshankar * */ @SuppressWarnings("serial") public class BPLServlet extends HttpServlet { private static final Logger logger = Logger.getLogger(BPLServlet.class); private static HashMap<String, Class<? extends BPLAction>> getActions = new HashMap<String, Class<? extends BPLAction>>(); static { getActions.put("/getData.raw", GetEngineDataAction.class); getActions.put("/getMetadata", GetLatestMetaDataAction.class); getActions.put("/status", PVStatusAction.class); getActions.put("/getNeverConnectedPVsForThisAppliance", NeverConnectedPVsAction.class); getActions.put("/getCurrentlyDisconnectedPVsForThisAppliance", CurrentlyDisconnectedPVsAction.class); getActions.put("/getEventRateReport", EventRateReport.class); getActions.put("/getStorageRateReport", StorageRateReport.class); getActions.put("/getPVDetails", PVDetails.class); getActions.put("/getApplianceMetrics", ApplianceMetrics.class); getActions.put("/getApplianceMetricsForAppliance", ApplianceMetricsDetails.class); getActions.put("/getConnectedPVCountForAppliance", ConnectedPVCountForAppliance.class); getActions.put("/changeArchivalParameters", ChangeArchivalParamsAction.class); getActions.put("/getInstanceMetricsForAppliance", InstanceReportDetails.class); getActions.put("/getLostConnectionsReport", LostConnectionsReport.class); getActions.put("/getSilentPVsReport", SilentPVReport.class); getActions.put("/getPVsByDroppedEventsTimestamp",DroppedEventsTimestampReport.class); getActions.put("/getPVsByDroppedEventsBuffer", DroppedEventsBufferOverflowReport.class); getActions.put("/getPVsByDroppedEventsTypeChange", DroppedEventsTypeChangeReport.class); getActions.put("/pauseArchivingPV", PauseArchivingPV.class); getActions.put("/resumeArchivingPV", ResumeArchivingPV.class); getActions.put("/deletePV", DeletePV.class); getActions.put("/listAllChannels", ListAllChannels.class); getActions.put("/getProcessMetrics", ProcessMetricsReport.class); getActions.put("/pausePVsonShutdown", PausePVsOnShutdown.class); getActions.put("/abortArchivingPVForThisAppliance", AbortArchiveRequestForAppliance.class); getActions.put("/cleanUpAnyImmortalChannels", CleanUpAnyImmortalChannels.class); getActions.put("/getVersion", GetVersion.class); getActions.put("/getArchivedWaveforms", WaveformPVsAction.class); getActions.put("/getArchiveChannelObjectDetails", ArchiveChannelObjectDetailsAction.class); getActions.put("/getPVsByScanCopyTime", ScanCopyTimeReport.class); getActions.put("/getPVsByMaxTimeBetweenScans", ScanMaxTimeReport.class); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String path = req.getPathInfo(); logger.info("Beginning request into Engine servlet " + path); BasicDispatcher.dispatch(req, resp, configService, getActions); } private static HashMap<String, Class<? extends BPLAction>> postActions = new HashMap<String, Class<? extends BPLAction>>(); static { postActions.put("/status", PVStatusAction.class); postActions.put("/pauseArchivingPV", PauseArchivingPV.class); postActions.put("/resumeArchivingPV", ResumeArchivingPV.class); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { logger.info("Beginning POST request into Engine servlet " + req.getPathInfo()); BasicDispatcher.dispatch(req, resp, configService, postActions); } private ConfigService configService; @Override public void init(ServletConfig config) throws ServletException { super.init(config); configService = (ConfigService) getServletConfig().getServletContext().getAttribute(ConfigService.CONFIG_SERVICE_NAME); } }