/******************************************************************************* * 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.mgmt; import java.io.IOException; import java.util.HashMap; import java.util.LinkedList; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.epics.archiverappliance.common.BPLAction; import org.epics.archiverappliance.common.BasicDispatcher; import org.epics.archiverappliance.common.ProcessMetricsChartData; import org.epics.archiverappliance.common.ProcessMetricsReport; import org.epics.archiverappliance.config.ConfigService; import org.epics.archiverappliance.mgmt.bpl.AbortArchiveRequest; import org.epics.archiverappliance.mgmt.bpl.AbortArchiveRequestForAppliance; import org.epics.archiverappliance.mgmt.bpl.AddAliasAction; import org.epics.archiverappliance.mgmt.bpl.AddExternalArchiverServer; import org.epics.archiverappliance.mgmt.bpl.AddExternalArchiverServerArchives; import org.epics.archiverappliance.mgmt.bpl.AggregatedApplianceInfo; import org.epics.archiverappliance.mgmt.bpl.ArchivePVAction; import org.epics.archiverappliance.mgmt.bpl.ArchivedPVsAction; import org.epics.archiverappliance.mgmt.bpl.ArchivedPVsNotInListAction; import org.epics.archiverappliance.mgmt.bpl.ChangeArchivalParamsAction; import org.epics.archiverappliance.mgmt.bpl.ChangeTypeForPV; import org.epics.archiverappliance.mgmt.bpl.ChannelArchiverListView; import org.epics.archiverappliance.mgmt.bpl.ConsolidatePBFilesForOnePV; import org.epics.archiverappliance.mgmt.bpl.DeletePV; import org.epics.archiverappliance.mgmt.bpl.ExportConfig; import org.epics.archiverappliance.mgmt.bpl.ExportConfigForThisInstance; import org.epics.archiverappliance.mgmt.bpl.GetAllPVs; import org.epics.archiverappliance.mgmt.bpl.GetApplianceInfo; import org.epics.archiverappliance.mgmt.bpl.GetAppliancesInCluster; import org.epics.archiverappliance.mgmt.bpl.GetMatchingPVsForAppliance; import org.epics.archiverappliance.mgmt.bpl.GetPVStatusAction; import org.epics.archiverappliance.mgmt.bpl.GetPVTypeInfo; import org.epics.archiverappliance.mgmt.bpl.GetPVsForThisAppliance; import org.epics.archiverappliance.mgmt.bpl.GetPausedPVsForThisAppliance; import org.epics.archiverappliance.mgmt.bpl.GetStoresForPV; import org.epics.archiverappliance.mgmt.bpl.GetVersions; import org.epics.archiverappliance.mgmt.bpl.ImportChannelArchiverConfigAction; import org.epics.archiverappliance.mgmt.bpl.ImportConfig; import org.epics.archiverappliance.mgmt.bpl.ImportConfigForAppliance; import org.epics.archiverappliance.mgmt.bpl.ImportDataFromPlugin; import org.epics.archiverappliance.mgmt.bpl.ModifyMetaFieldsAction; import org.epics.archiverappliance.mgmt.bpl.NamedFlagsGet; import org.epics.archiverappliance.mgmt.bpl.NamedFlagsSet; import org.epics.archiverappliance.mgmt.bpl.PauseArchivingPV; import org.epics.archiverappliance.mgmt.bpl.PutPVTypeInfo; import org.epics.archiverappliance.mgmt.bpl.RefreshPVDataFromChannelArchivers; import org.epics.archiverappliance.mgmt.bpl.RemoveAliasAction; import org.epics.archiverappliance.mgmt.bpl.RemoveExternalArchiverServer; import org.epics.archiverappliance.mgmt.bpl.RenamePVAction; import org.epics.archiverappliance.mgmt.bpl.ReshardPV; import org.epics.archiverappliance.mgmt.bpl.ResumeArchivingPV; import org.epics.archiverappliance.mgmt.bpl.SkipAliasCheckAction; import org.epics.archiverappliance.mgmt.bpl.UnarchivedPVsAction; import org.epics.archiverappliance.mgmt.bpl.UploadChannelArchiverConfigAction; import org.epics.archiverappliance.mgmt.bpl.cahdlers.CompareWithChannelArchiver; import org.epics.archiverappliance.mgmt.bpl.reports.ApplianceMetrics; import org.epics.archiverappliance.mgmt.bpl.reports.ApplianceMetricsDetails; import org.epics.archiverappliance.mgmt.bpl.reports.CurrentlyDisconnectedPVs; import org.epics.archiverappliance.mgmt.bpl.reports.DroppedEventsBufferOverflowReport; import org.epics.archiverappliance.mgmt.bpl.reports.DroppedEventsTimestampReport; import org.epics.archiverappliance.mgmt.bpl.reports.DroppedEventsTypeChangeReport; import org.epics.archiverappliance.mgmt.bpl.reports.EventRateReport; import org.epics.archiverappliance.mgmt.bpl.reports.InstanceReport; import org.epics.archiverappliance.mgmt.bpl.reports.InstanceReportDetails; import org.epics.archiverappliance.mgmt.bpl.reports.LostConnectionsReport; import org.epics.archiverappliance.mgmt.bpl.reports.NeverConnectedPVsAction; import org.epics.archiverappliance.mgmt.bpl.reports.NeverConnectedPVsForThisAppliance; import org.epics.archiverappliance.mgmt.bpl.reports.PVDetails; import org.epics.archiverappliance.mgmt.bpl.reports.PVsByStorageConsumed; import org.epics.archiverappliance.mgmt.bpl.reports.PausedPVsReport; import org.epics.archiverappliance.mgmt.bpl.reports.RecentlyAddedPVs; import org.epics.archiverappliance.mgmt.bpl.reports.RecentlyAddedPVsforThisInstance; import org.epics.archiverappliance.mgmt.bpl.reports.RecentlyChangedPVs; import org.epics.archiverappliance.mgmt.bpl.reports.RecentlyChangedPVsforThisInstance; import org.epics.archiverappliance.mgmt.bpl.reports.ScanCopyTimeReport; import org.epics.archiverappliance.mgmt.bpl.reports.ScanMaxTimeReport; import org.epics.archiverappliance.mgmt.bpl.reports.SilentPVReport; import org.epics.archiverappliance.mgmt.bpl.reports.StorageRateReport; import org.epics.archiverappliance.mgmt.bpl.reports.StorageReport; import org.epics.archiverappliance.mgmt.bpl.reports.StorageReportDetails; import org.epics.archiverappliance.mgmt.bpl.reports.WaveformPVsAction; import org.epics.archiverappliance.mgmt.policy.GetApplianceProps; import org.epics.archiverappliance.mgmt.policy.GetPolicyList; import org.epics.archiverappliance.mgmt.policy.GetPolicyText; /** * The main business logic servlet for mgmt. All BPLActions are registered here. * @author mshankar * */ @SuppressWarnings("serial") public class BPLServlet extends HttpServlet { private static HashMap<String, Class<? extends BPLAction>> getActions = new HashMap<String, Class<? extends BPLAction>>(); private static LinkedList<String> actionsSequenceForDocs = new LinkedList<String>(); static { // BPL related to PVs/appliances etc addAction("/getAllPVs", GetAllPVs.class); addAction("/getPVStatus", GetPVStatusAction.class); addAction("/getPVTypeInfo", GetPVTypeInfo.class); addAction("/archivePV", ArchivePVAction.class); addAction("/pauseArchivingPV", PauseArchivingPV.class); addAction("/resumeArchivingPV", ResumeArchivingPV.class); addAction("/getStoresForPV", GetStoresForPV.class); addAction("/consolidateDataForPV", ConsolidatePBFilesForOnePV.class); addAction("/deletePV", DeletePV.class); addAction("/abortArchivingPV", AbortArchiveRequest.class); addAction("/abortArchivingPVForThisAppliance", AbortArchiveRequestForAppliance.class); addAction("/changeArchivalParameters", ChangeArchivalParamsAction.class); addAction("/getPVDetails", PVDetails.class); addAction("/getApplianceInfo", GetApplianceInfo.class); addAction("/getAppliancesInCluster", GetAppliancesInCluster.class); addAction("/renamePV", RenamePVAction.class); addAction("/reshardPV", ReshardPV.class); addAction("/addAlias", AddAliasAction.class); addAction("/removeAlias", RemoveAliasAction.class); addAction("/skipAliasCheck", SkipAliasCheckAction.class); addAction("/changeTypeForPV", ChangeTypeForPV.class); addAction("/getVersions", GetVersions.class); addAction("/modifyMetaFields", ModifyMetaFieldsAction.class); addAction("/getNamedFlag", NamedFlagsGet.class); addAction("/setNamedFlag", NamedFlagsSet.class); // BPL related to reports addAction("/getNeverConnectedPVs", NeverConnectedPVsAction.class); addAction("/getNeverConnectedPVsForThisAppliance", NeverConnectedPVsForThisAppliance.class); addAction("/getCurrentlyDisconnectedPVs", CurrentlyDisconnectedPVs.class); addAction("/getEventRateReport", EventRateReport.class); addAction("/getStorageRateReport", StorageRateReport.class); addAction("/getRecentlyAddedPVs", RecentlyAddedPVs.class); addAction("/getRecentlyAddedPVsForThisInstance", RecentlyAddedPVsforThisInstance.class); addAction("/getRecentlyModifiedPVs", RecentlyChangedPVs.class); addAction("/getRecentlyModifiedPVsForThisInstance", RecentlyChangedPVsforThisInstance.class); addAction("/getStorageMetrics", StorageReport.class); addAction("/getStorageMetricsForAppliance", StorageReportDetails.class); addAction("/getPVsByStorageConsumed", PVsByStorageConsumed.class); addAction("/getLostConnectionsReport", LostConnectionsReport.class); addAction("/getSilentPVsReport", SilentPVReport.class); addAction("/getPVsForThisAppliance", GetPVsForThisAppliance.class); addAction("/getPVsByDroppedEventsTimestamp",DroppedEventsTimestampReport.class); addAction("/getPVsByDroppedEventsBuffer", DroppedEventsBufferOverflowReport.class); addAction("/getPVsByDroppedEventsTypeChange", DroppedEventsTypeChangeReport.class); addAction("/getPausedPVsReport", PausedPVsReport.class); addAction("/getPausedPVsForThisAppliance", GetPausedPVsForThisAppliance.class); addAction("/getArchivedWaveforms", WaveformPVsAction.class); addAction("/getPVsByScanCopyTime", ScanCopyTimeReport.class); addAction("/getPVsByMaxTimeBetweenScans", ScanMaxTimeReport.class); // Others. addAction("/getPolicyText", GetPolicyText.class); addAction("/exportConfig", ExportConfig.class); addAction("/exportConfigForAppliance", ExportConfigForThisInstance.class); addAction("/getInstanceMetrics", InstanceReport.class); addAction("/getInstanceMetricsForAppliance", InstanceReportDetails.class); addAction("/getApplianceMetrics", ApplianceMetrics.class); addAction("/getApplianceMetricsForAppliance", ApplianceMetricsDetails.class); addAction("/getExternalArchiverServers", ChannelArchiverListView.class); addAction("/addExternalArchiverServer", AddExternalArchiverServer.class); addAction("/addExternalArchiverServerArchives", AddExternalArchiverServerArchives.class); addAction("/removeExternalArchiverServer", RemoveExternalArchiverServer.class); addAction("/test/compareWithChannelArchiver", CompareWithChannelArchiver.class); addAction("/getAggregatedApplianceInfo", AggregatedApplianceInfo.class); addAction("/importDataFromPlugin", ImportDataFromPlugin.class); addAction("/getPolicyList", GetPolicyList.class); addAction("/getApplianceProperties", GetApplianceProps.class); addAction("/webAppReady", WebappReady.class); addAction("/getProcessMetrics", ProcessMetricsReport.class); addAction("/getProcessMetricsDataForAppliance", ProcessMetricsChartData.class); addAction("/refreshPVDataFromChannelArchivers", RefreshPVDataFromChannelArchivers.class); addAction("/getMatchingPVsForThisAppliance", GetMatchingPVsForAppliance.class); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { BasicDispatcher.dispatch(req, resp, configService, getActions); } private ConfigService configService; @Override public void init() throws ServletException { super.init(); configService = (ConfigService) getServletConfig().getServletContext().getAttribute(ConfigService.CONFIG_SERVICE_NAME); } private static HashMap<String, Class<? extends BPLAction>> postActions = new HashMap<String, Class<? extends BPLAction>>(); static { addPostAction("/importChannelArchiverConfiguration", ImportChannelArchiverConfigAction.class); addPostAction("/uploadChannelArchiverConfiguration", UploadChannelArchiverConfigAction.class); addPostAction("/importConfig", ImportConfig.class); addPostAction("/importConfigForAppliance", ImportConfigForAppliance.class); addPostAction("/archivePV", ArchivePVAction.class); addPostAction("/getPVStatus", GetPVStatusAction.class); addPostAction("/pauseArchivingPV", PauseArchivingPV.class); addPostAction("/resumeArchivingPV", ResumeArchivingPV.class); addPostAction("/putPVTypeInfo", PutPVTypeInfo.class); addPostAction("/unarchivedPVs", UnarchivedPVsAction.class); addPostAction("/archivedPVs", ArchivedPVsAction.class); addPostAction("/archivedPVsForThisAppliance", ArchivedPVsAction.class); addPostAction("/archivedPVsNotInList", ArchivedPVsNotInListAction.class); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { BasicDispatcher.dispatch(req, resp, configService, postActions); } /** * Add so that we can maintain the sequence of addition as well. * @param path * @param bplClassName */ private static void addAction(String path, Class<? extends BPLAction> bplClassName) { getActions.put(path, bplClassName); actionsSequenceForDocs.add(path); } private static void addPostAction(String path, Class<? extends BPLAction> bplClassName) { postActions.put(path, bplClassName); if(!actionsSequenceForDocs.contains(path)) { actionsSequenceForDocs.add(path); } } /** * The main method here is used only to generate documentation for the scripting guide. * No other functionality is provided * @param args   * @throws IOException   */ public static void main(String[] args) throws IOException { System.out.println("#Path mappings for mgmt BPLs"); for(String path : actionsSequenceForDocs) { Class<? extends BPLAction> classObj = getActions.get(path); if(classObj == null) { classObj = postActions.get(path); } if(classObj == null) { System.err.println("Invalid registration for " + path); } System.out.println(path + "=" + classObj.getName()); } } }