All Downloads are FREE. Search and download functionalities are using the official Maven repository.

se.l4.vibe.internal.builder.TriggerHolder Maven / Gradle / Ivy

There is a newer version: 0.4.0
Show newest version
package se.l4.vibe.internal.builder;

import se.l4.vibe.event.Events;
import se.l4.vibe.probes.Probe;
import se.l4.vibe.probes.Sampler;
import se.l4.vibe.trigger.Condition;
import se.l4.vibe.trigger.Trigger;
import se.l4.vibe.trigger.TriggerEvent;
import se.l4.vibe.trigger.TriggerListener;

/**
 * Holds information about a trigger on a time series.
 * 
 * @author Andreas Holstenson
 *
 * @param 
 * @param 
 */
public class TriggerHolder
{
	private final Trigger trigger;
	private final Condition condition;
	private final long maxEvery;
	private final boolean sendOnNormal;
	private final TriggerListener listener;

	public TriggerHolder(
			Trigger trigger, 
			Condition condition,
			long maxEvery,
			boolean sendOnNormal,
			TriggerListener listener)
	{
		this.trigger = trigger;
		this.condition = condition;
		this.maxEvery = maxEvery;
		this.sendOnNormal = sendOnNormal;
		this.listener = listener;
	}

	public Runnable create(final Sampler series, final Events events)
	{
		final Probe probe = trigger.forSampler(series);
		return new Runnable()
		{
			private long lastEvent;
			
			@Override
			public void run()
			{
				Output value = probe.read();
				if(condition.matches(value))
				{
					long now = System.currentTimeMillis();
					
					if(lastEvent > 0 && maxEvery > 0)
					{
						// Check if we should send an event or not
						long diff = now - lastEvent;
						if(diff < maxEvery)
						{
							// Within the interval
							return;
						}
					}
					
					lastEvent = now;
					String desc = trigger.toString() + " " + condition.toString() + " (value is " + value + ")";
					listener.onEvent(new TriggerEvent(desc, true));
				}
				else if(sendOnNormal && lastEvent > 0)
				{
					String desc = "value is now " + value + ", no longer matching: " + trigger.toString() + " " + condition.toString();
					listener.onEvent(new TriggerEvent(desc, false));
					
					// Reset last event time
					lastEvent = 0;
				}
			}
		};
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy