@Override public void onException(Exception exception) { if (!feed.isConnected()) { if (log.isTraceEnabled()) log.trace( "Read of {} in {} gave exception (while not connected or not yet connected): {}", new Object[] {this, getBriefDescription(), exception}); } else { logProblem("exception", exception); } if (config.hasExceptionHandler()) { try { setSensor(config.getOnException().apply(exception)); } catch (Exception e) { if (feed.isConnected()) { log.warn("unable to compute " + getBriefDescription() + "; on exception=" + exception, e); } else { if (log.isDebugEnabled()) log.debug( "unable to compute " + getBriefDescription() + "; exception=" + exception + " (when inactive)", e); } } } }
/** Tests change in processing property when processing starts and finishes. */ public void testProcessingPC() { listener .expects(once()) .method("propertyChanged") .with(same(feed), eq(AbstractFeed.PROP_PROCESSING), eq(false), eq(true)) .id("started"); listener .expects(once()) .method("propertyChanged") .with(same(feed), eq(AbstractFeed.PROP_PROCESSING), eq(true), eq(false)) .after("started") .id("finished"); listener .expects(once()) .method("propertyChanged") .with(same(feed), eq(AbstractFeed.PROP_PROCESSING), eq(true), eq(false)) .after("finished"); feed.processingStarted(); feed.processingStarted(); feed.processingFinished(); feed.processingFinished(); disableLogging(); feed.processingFinished(); enableLogging(); listener.verify(); }
@SuppressWarnings("unchecked") @Override public void onFailure(V val) { if (!config.hasFailureHandler()) { onException( new Exception( "checkSuccess of " + this + " from " + entity + " was false but poller has no failure handler")); } else { logProblem("failure", val); try { Object v = coerce(config.getOnFailure().apply(val)); if (v != PollConfig.UNSET) { entity.setAttribute(sensor, v); } } catch (Exception e) { if (feed.isConnected()) { log.warn("Error computing " + entity + "->" + sensor + "; val=" + val + ": " + e, e); } else { if (log.isDebugEnabled()) log.debug( "Error computing " + entity + " ->" + sensor + "; val=" + val + " (when inactive)", e); } } } }
@SuppressWarnings("unchecked") @Override public void onSuccess(V val) { if (lastWasProblem) { if (currentProblemLoggedAsWarning) { log.info("Success (following previous problem) reading " + entity + "->" + sensor); } else { log.debug("Success (following previous problem) reading " + entity + "->" + sensor); } lastWasProblem = false; currentProblemStartTime = null; currentProblemLoggedAsWarning = false; } lastSuccessTime = System.currentTimeMillis(); if (log.isTraceEnabled()) log.trace("poll for {}->{} got: {}", new Object[] {entity, sensor, val}); try { Object v = transformValue(val); if (v != PollConfig.UNSET) { entity.setAttribute(sensor, v); } } catch (Exception e) { if (feed.isConnected()) { log.warn("unable to compute " + entity + "->" + sensor + "; on val=" + val, e); } else { if (log.isDebugEnabled()) log.debug( "unable to compute " + entity + " ->" + sensor + "; val=" + val + " (when inactive)", e); } } }
@Override public void onSuccess(V val) { if (lastWasProblem) { if (currentProblemLoggedAsWarning) { log.info("Success (following previous problem) reading " + getBriefDescription()); } else { log.debug("Success (following previous problem) reading " + getBriefDescription()); } lastWasProblem = false; currentProblemStartTime = null; currentProblemLoggedAsWarning = false; } lastSuccessTime = System.currentTimeMillis(); if (log.isTraceEnabled()) log.trace("poll for {} got: {}", new Object[] {getBriefDescription(), val}); try { setSensor(transformValueOnSuccess(val)); } catch (Exception e) { if (feed.isConnected()) { log.warn("unable to compute " + getBriefDescription() + "; on val=" + val, e); } else { if (log.isDebugEnabled()) log.debug( "unable to compute " + getBriefDescription() + "; val=" + val + " (when inactive)", e); } } }
@Override public void onFailure(V val) { if (!config.hasFailureHandler()) { onException( new Exception( "checkSuccess of " + this + " for " + getBriefDescription() + " was false but poller has no failure handler")); } else { logProblem("failure", val); try { setSensor(config.hasFailureHandler() ? config.getOnFailure().apply((V) val) : val); } catch (Exception e) { if (feed.isConnected()) { log.warn("Error computing " + getBriefDescription() + "; val=" + val + ": " + e, e); } else { if (log.isDebugEnabled()) log.debug( "Error computing " + getBriefDescription() + "; val=" + val + " (when inactive)", e); } } } }
protected void setUp() throws Exception { super.setUp(); listener = new Mock(IFeedListener.class); feed = new DummyNetworkFeed(); feed.addListener((IFeedListener) listener.proxy()); }
@SuppressWarnings("unchecked") @Override public void onException(Exception exception) { if (!feed.isConnected()) { if (log.isDebugEnabled()) log.debug( "Read of {} from {} gave exception (while not connected or not yet connected): {}", new Object[] {this, entity, exception}); } else { logProblem("exception", exception); } if (config.hasExceptionHandler()) { try { Object v = transformError(exception); if (v != PollConfig.UNSET) { entity.setAttribute(sensor, v); } } catch (Exception e) { if (feed.isConnected()) { log.warn( "unable to compute " + entity + "->" + sensor + "; on exception=" + exception, e); } else { if (log.isDebugEnabled()) log.debug( "unable to compute " + entity + " ->" + sensor + "; exception=" + exception + " (when inactive)", e); } } } }
/** Tests firing propery change events on invalidness reasons changes. */ public void testInvalidnessReasonPC() { listener .expects(once()) .method("propertyChanged") .with(same(feed), eq(AbstractFeed.PROP_INVALIDNESS_REASON), NULL, eq("r1")) .id("1"); listener .expects(once()) .method("propertyChanged") .with(same(feed), eq(AbstractFeed.PROP_INVALIDNESS_REASON), eq("r1"), eq("r2")) .after("1") .id("2"); listener .expects(once()) .method("propertyChanged") .with(same(feed), eq(AbstractFeed.PROP_INVALIDNESS_REASON), eq("r2"), NULL) .after("2"); feed.setInvalidnessReason("r1"); feed.setInvalidnessReason("r2"); feed.setInvalidnessReason(null); listener.verify(); }
/** Tests that events for identical values aren't fired. */ public void testSkipIdenticalPropertyValues() { feed.firePropertyChanged("test", null, null); feed.firePropertyChanged("test", "a", "a"); listener.verify(); }