package alma.acs.monitoring.blobber; import java.util.ArrayList; import java.util.List; import alma.ACSErrTypeCommon.wrappers.AcsJCouldntCreateObjectEx; import alma.TMCDB.MonitorCollectorOperations; import alma.acs.container.ContainerServices; import alma.acs.monitoring.DAO.ComponentData; import alma.acs.monitoring.DAO.MonitorDAO; import alma.acs.monitoring.blobber.TestBlobber.TestMonitorPointExpert; /** * BlobberWorker mock. */ public class TestBlobberWorker extends BlobberWorker { private volatile MonitorTestCollector myCollector; // private volatile Long mySafetyMargin = 0L; private volatile Boolean myCanHandle = true; /** * Allows a unit test to read all property data via (@link #fetchData()} * before the next property data can be inserted. */ private final DataLock<BlobData> myBlobDataLock; /** * @param inContainerServices * @param blobberPlugin (mock or real) * @param myBlobDataLock see {@link #myBlobDataLock}. * @throws AcsJCouldntCreateObjectEx */ public TestBlobberWorker(ContainerServices inContainerServices, BlobberPlugin blobberPlugin, DataLock<BlobData> myBlobDataLock) throws AcsJCouldntCreateObjectEx { super(inContainerServices, blobberPlugin); this.myBlobDataLock = myBlobDataLock; } @Override protected void initWorker() { this.myCollector = new MonitorTestCollector(myLogger); } @Override protected MonitorCollectorOperations getMonitorCollector(String inCollectorName) { return this.myCollector; } @Override protected boolean canHandle() { return this.myCanHandle; } protected void setCanHandle(boolean inValue) { this.myCanHandle = inValue; } /** * Fetches the data stored in {@link #storeData(BlobData)}, * with the side effect that the next ComponentData can then be stored. * This mechanism puts the test in the position of the backing database that * can see what property data came in. * @throws InterruptedException */ protected ComponentData fetchData() throws InterruptedException { myLogger.fine("Fetching blobber data."); return this.myBlobDataLock.take(); } // protected void setSafetyMargin(long inMargin) { // this.mySafetyMargin = inMargin; // } protected MonitorTestCollector getCollector() { return this.myCollector; } // protected void setCollector(MonitorTestCollector inCollector) { // this.myCollector = inCollector; // } public static class TestBlobberPlugin extends BlobberPlugin { private final MonitorDAO monitorDAO; private final TestMonitorPointExpert myMonitorPointExpert; public TestBlobberPlugin(ContainerServices containerServices, MonitorDAO monitorDAO, TestMonitorPointExpert myMonitorPointExpert) { super(containerServices); this.monitorDAO = monitorDAO; this.myMonitorPointExpert = myMonitorPointExpert; } @Override public void init() { } @Override public void cleanUp() { } @Override public List<MonitorDAO> getMonitorDAOs() { List<MonitorDAO> ret = new ArrayList<MonitorDAO>(); ret.add(monitorDAO); return ret; } @Override public int getCollectorIntervalSec() { return 60; // TODO old BlobberImpl.COLLECT_INTERVAL_SEC } @Override public boolean isProfilingEnabled() { return false; } @Override public BlobberWatchDog getBlobberWatchDog() { return null; } @Override public MonitorPointExpert getMonitorPointExpert() { return myMonitorPointExpert; } } }