package org.sef4j.testwebapp.service;
import java.util.concurrent.TimeUnit;
import org.sef4j.core.helpers.proptree.dto.PropTreeNodeDTO;
import org.sef4j.core.helpers.tasks.PeriodicTask;
import org.sef4j.core.util.AsyncUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Component;
@Component
public class MetricsStatsPublisher {
private static final Logger LOG = LoggerFactory.getLogger(MetricsStatsPublisher.class);
private static final String TOPIC_PENDING_COUNT = "/topic/pendingCount";
@Autowired
protected MetricsStatsTreeRegistry metricsStatsTreeRegistry;
@Autowired
private SimpMessagingTemplate simpMessageSender;
protected PeriodicTask pendingCountBroadcastPublisherPeriodicTask = new PeriodicTask("pendingCountPublisherPeriodicTask",
() -> pendingCountBroadcastPublisherPeriodicTask(),
15, TimeUnit.SECONDS, AsyncUtils.defaultScheduledThreadPool());
// ------------------------------------------------------------------------
public MetricsStatsPublisher() {
}
// ------------------------------------------------------------------------
public void startPendingCountPublisherPeriodicTask() {
LOG.info("startPendingCountPublisherPeriodicTask");
pendingCountBroadcastPublisherPeriodicTask.start();
}
public void stopPendingCountPublisherPeriodicTask() {
LOG.info("stopPendingCountPublisherPeriodicTask");
pendingCountBroadcastPublisherPeriodicTask.stop();
}
public void pendingCountBroadcastPublisherPeriodicTask() {
PropTreeNodeDTO res = metricsStatsTreeRegistry.findAllPending();
if (res.getChildMap().isEmpty()) {
LOG.info("pendingCountPublisherPeriodicTask ... skip sending");
return;
}
LOG.info("pendingCountPublisherPeriodicTask ... sending message to " + TOPIC_PENDING_COUNT);
simpMessageSender.convertAndSend(TOPIC_PENDING_COUNT, res);
}
}