use of com.serotonin.timer.FixedRateTrigger in project ma-core-public by infiniteautomation.
the class MonitoredValuesTest method loadTest.
public void loadTest() {
// Setup a Timer
RealTimeTimer timer = new OrderedRealTimeTimer();
ThreadPoolExecutor executor = new OrderedThreadPoolExecutor(0, 100, 30L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), new MangoThreadFactory("high", Thread.MAX_PRIORITY), new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
System.out.println("Rejected: " + r.toString());
}
}, false, timer.getTimeSource());
timer.init(executor);
// Create a monitor
IntegerMonitor monitor = new IntegerMonitor(MONITOR_ID, new TranslatableMessage("internal.monitor.BATCH_ENTRIES"), new ValueMonitorOwner() {
@Override
public void reset(String monitorId) {
IntegerMonitor mon = (IntegerMonitor) MONITORED_VALUES.getValueMonitor(MONITOR_ID);
mon.reset();
}
});
MONITORED_VALUES.addIfMissingStatMonitor(monitor);
// Start a task to count up
new TimeoutTask(new FixedRateTrigger(0, period), new TimeoutClient() {
@Override
public void scheduleTimeout(long fireTime) {
IntegerMonitor mon = (IntegerMonitor) MONITORED_VALUES.getValueMonitor(MONITOR_ID);
mon.addValue(1);
}
@Override
public String getThreadName() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getTaskId() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getQueueSize() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void rejected(RejectedTaskReason reason) {
// TODO Auto-generated method stub
}
}, timer);
// Start a task to count down
new TimeoutTask(new FixedRateTrigger(0, period), new TimeoutClient() {
@Override
public void scheduleTimeout(long fireTime) {
IntegerMonitor mon = (IntegerMonitor) MONITORED_VALUES.getValueMonitor(MONITOR_ID);
mon.addValue(-1);
}
@Override
public String getThreadName() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getTaskId() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getQueueSize() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void rejected(RejectedTaskReason reason) {
// TODO Auto-generated method stub
}
}, timer);
// Start a task to read
new TimeoutTask(new FixedRateTrigger(0, period), new TimeoutClient() {
@Override
public void scheduleTimeout(long fireTime) {
IntegerMonitor mon = (IntegerMonitor) MONITORED_VALUES.getValueMonitor(MONITOR_ID);
mon.getValue();
}
@Override
public String getThreadName() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getTaskId() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getQueueSize() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void rejected(RejectedTaskReason reason) {
// TODO Auto-generated method stub
}
}, timer);
// Start a task to reset
new TimeoutTask(new FixedRateTrigger(0, period), new TimeoutClient() {
@Override
public void scheduleTimeout(long fireTime) {
IntegerMonitor mon = (IntegerMonitor) MONITORED_VALUES.getValueMonitor(MONITOR_ID);
mon.reset();
}
@Override
public String getThreadName() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getTaskId() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getQueueSize() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void rejected(RejectedTaskReason reason) {
// TODO Auto-generated method stub
}
}, timer);
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
use of com.serotonin.timer.FixedRateTrigger in project ma-core-public by infiniteautomation.
the class PublisherRT method initialize.
protected void initialize(SendThread sendThread) {
this.sendThread = sendThread;
sendThread.initialize(false);
for (T p : vo.getPoints()) pointRTs.add(new PublishedPointRT<T>(p, this));
if (vo.isSendSnapshot()) {
// Add a schedule to send the snapshot
long snapshotPeriodMillis = Common.getMillis(vo.getSnapshotSendPeriodType(), vo.getSnapshotSendPeriods());
snapshotTask = new TimeoutTask(new FixedRateTrigger(0, snapshotPeriodMillis), this);
}
checkForDisabledPoints();
}
use of com.serotonin.timer.FixedRateTrigger in project ma-core-public by infiniteautomation.
the class DataPointRT method initializeIntervalLogging.
//
// / Interval logging
//
/**
*/
public void initializeIntervalLogging(long nextPollTime, boolean quantize) {
if (vo.getLoggingType() != DataPointVO.LoggingTypes.INTERVAL && vo.getLoggingType() != DataPointVO.LoggingTypes.ON_CHANGE_INTERVAL)
return;
synchronized (intervalLoggingLock) {
long loggingPeriodMillis = Common.getMillis(vo.getIntervalLoggingPeriodType(), vo.getIntervalLoggingPeriod());
long delay = loggingPeriodMillis;
if (quantize) {
// Quantize the start.
// Compute delay only if we are offset from the next poll time
long nextPollOffset = (nextPollTime % loggingPeriodMillis);
if (nextPollOffset != 0)
delay = loggingPeriodMillis - nextPollOffset;
LOG.debug("First interval log should be at: " + (nextPollTime + delay));
}
if (vo.getLoggingType() == DataPointVO.LoggingTypes.INTERVAL) {
intervalValue = pointValue;
if (vo.getIntervalLoggingType() == DataPointVO.IntervalLoggingTypes.AVERAGE) {
intervalStartTime = timer == null ? Common.timer.currentTimeMillis() : timer.currentTimeMillis();
if (averagingValues.size() > 0) {
Double nullValue = null;
AnalogStatistics stats = new AnalogStatistics(intervalStartTime - loggingPeriodMillis, intervalStartTime, nullValue, averagingValues);
PointValueTime newValue = new PointValueTime(stats.getAverage(), intervalStartTime);
valueCache.logPointValueAsync(newValue, null);
// Fire logged Events
fireEvents(null, newValue, null, false, false, true, false, false);
averagingValues.clear();
}
}
// Are we using a custom timer?
if (this.timer == null)
intervalLoggingTask = new TimeoutTask(new FixedRateTrigger(delay, loggingPeriodMillis), createIntervalLoggingTimeoutClient());
else
intervalLoggingTask = new TimeoutTask(new FixedRateTrigger(delay, loggingPeriodMillis), createIntervalLoggingTimeoutClient(), this.timer);
} else if (vo.getLoggingType() == DataPointVO.LoggingTypes.ON_CHANGE_INTERVAL) {
rescheduleChangeInterval(delay);
}
}
}
use of com.serotonin.timer.FixedRateTrigger in project ma-core-public by infiniteautomation.
the class PollingDataSource method beginPolling.
//
//
// Data source interface
//
@Override
public void beginPolling() {
if (cronPattern == null) {
long delay = 0;
if (quantize) {
// Quantize the start.
long now = Common.timer.currentTimeMillis();
delay = pollingPeriodMillis - (now % pollingPeriodMillis);
if (LOG.isDebugEnabled())
LOG.debug("First poll should be at: " + (now + delay));
}
timerTask = new TimeoutTask(new FixedRateTrigger(delay, pollingPeriodMillis), this.timeoutClient);
} else {
try {
timerTask = new TimeoutTask(new CronTimerTrigger(cronPattern), this.timeoutClient);
} catch (ParseException e) {
// Should not happen
throw new RuntimeException(e);
}
}
super.beginPolling();
}
use of com.serotonin.timer.FixedRateTrigger in project ma-core-public by infiniteautomation.
the class FixedRateTest method main.
public static void main(String[] args) {
RealTimeTimer timer = new RealTimeTimer();
timer.setTimeSource(new TimeSource() {
int count = 10;
@Override
public long currentTimeMillis() {
long time;
if (count-- > 0)
time = System.currentTimeMillis();
else
time = System.currentTimeMillis() - 1000001000;
System.out.println("Returning " + new Date(time));
return time;
}
});
timer.init();
long period = 5000;
long delay = period - (System.currentTimeMillis() % period);
FixedRateTrigger trigger = new FixedRateTrigger(delay, period);
TimerTask task = new TimerTask(trigger, "Test Timer Task") {
@Override
public void run(long runtime) {
System.out.println("executed at " + new Date(runtime));
}
@Override
public void rejected(RejectedTaskReason reason) {
System.out.println("task rejected: " + reason.getDescription());
}
};
timer.schedule(task);
try {
synchronized (timer) {
timer.wait(30000);
}
} catch (InterruptedException e) {
// no op
}
timer.cancel();
}
Aggregations