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

ru.taskurotta.service.hz.console.HzQueueStatTask Maven / Gradle / Ivy

The newest version!
package ru.taskurotta.service.hz.console;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.taskurotta.service.console.model.QueueStatVO;
import ru.taskurotta.service.metrics.MetricName;
import ru.taskurotta.service.metrics.handler.MetricsDataHandler;
import ru.taskurotta.service.metrics.handler.NumberDataHandler;
import ru.taskurotta.service.metrics.MetricsDataUtils;
import ru.taskurotta.service.metrics.model.DataPointVO;
import ru.taskurotta.util.ActorUtils;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;

/**
 * Task that computes queue statistics data by metrics handlers.
 * Runs on every HZ node
 * Date: 29.11.13 16:01
 */
public class HzQueueStatTask implements Callable>, Serializable {

    private static final Logger logger = LoggerFactory.getLogger(HzQueueStatTask.class);
    private ArrayList queueNames;
    private String queueNamePrefix;

    public HzQueueStatTask(ArrayList queueNames, String queueNamePrefix) {
        this.queueNames = queueNames;
        this.queueNamePrefix = queueNamePrefix;
    }

    @Override
    public List call() throws Exception {
        logger.debug("Started HzQueueStatTask with queueNames [{}]", this.queueNames);

        List result = null;
        if (queueNames!=null && !queueNames.isEmpty()) {
            result = new ArrayList<>();
            MetricsDataHandler mdh = MetricsDataHandler.getInstance();
            NumberDataHandler ndh = NumberDataHandler.getInstance();
            if (mdh != null && ndh != null) {
                for (String queueName: queueNames) {
                    QueueStatVO item = new QueueStatVO();
                    item.setName(queueName);

                    Number count = ndh.getLastValue(MetricName.QUEUE_SIZE.getValue(), ActorUtils.toPrefixed(queueName, queueNamePrefix));
                    item.setCount(count!=null? (Integer)count: 0);
                    item.setLastActivity(mdh.getLastActivityTime(MetricName.POLL.getValue(), queueName));

                    DataPointVO[] outHour = mdh.getCountsForLastHour(MetricName.SUCCESSFUL_POLL.getValue(), queueName);
                    DataPointVO[] outDay = mdh.getCountsForLastDay(MetricName.SUCCESSFUL_POLL.getValue(), queueName);

                    DataPointVO[] inHour = mdh.getCountsForLastHour(MetricName.ENQUEUE.getValue(), queueName);
                    DataPointVO[] inDay = mdh.getCountsForLastDay(MetricName.ENQUEUE.getValue(), queueName);

                    item.setInDay(MetricsDataUtils.sumUpDataPointsArray(inDay));
                    item.setInHour(MetricsDataUtils.sumUpDataPointsArray(inHour));

                    item.setOutDay(MetricsDataUtils.sumUpDataPointsArray(outDay));
                    item.setOutHour(MetricsDataUtils.sumUpDataPointsArray(outHour));

                    result.add(item);
                }
            } else {
                logger.error("Cannot extract dataHandlers, methodDataHandler["+mdh+"], numberDataHandler["+ndh+"]");
            }

        }
        logger.debug("Result list of QueueStatVO is [{}]", result);
        return result;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy