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

com.hp.octane.integrations.services.WorkerPreflight Maven / Gradle / Ivy

There is a newer version: 2.24.3.5
Show newest version
package com.hp.octane.integrations.services;

import com.hp.octane.integrations.services.configuration.ConfigurationService;
import com.hp.octane.integrations.utils.CIPluginSDKUtils;
import org.apache.logging.log4j.Logger;

import java.util.Date;
import java.util.Map;

public class WorkerPreflight {


    private final static int QUEUE_EMPTY_INTERVAL = 10000;
    private final static int REGULAR_CYCLE_PAUSE = 400;
    private final static int NO_CONNECTION_PAUSE = 30000;
    private final static int AFTER_RECONNECTION_PAUSE = 90000;
    private final Object EMPTY_QUEUE_MONITOR = new Object();

    private ConfigurationService confService;
    private HasQueueService service;
    private Logger logger;

    private boolean previousIterationWasNotConnected;
    private long lastIterationTime = 0;
    private boolean waitAfterConnected = true;

    public WorkerPreflight(HasQueueService service, ConfigurationService confService, Logger logger) {
        this.service = service;
        this.logger = logger;
        this.confService = confService;
    }

    public boolean preflight() {

        lastIterationTime = System.currentTimeMillis();
        CIPluginSDKUtils.doWait(REGULAR_CYCLE_PAUSE);

        if (service.getQueueSize() == 0) {
            CIPluginSDKUtils.doBreakableWait(QUEUE_EMPTY_INTERVAL, EMPTY_QUEUE_MONITOR);
            return false;
        }

        if (confService.getConfiguration().isDisabled()) {
            logger.error(confService.getConfiguration().getLocationForLog() + "client is disabled, removing " + service.getQueueSize() + " items from queue");
            service.clearQueue();
            return false;
        }

        if (!confService.isConnected()) {
            //logger.warn(confService.getConfiguration().geLocationForLog() + "client is not connected. waiting " + NO_CONNECTION_PAUSE / 1000 + " sec");
            CIPluginSDKUtils.doWait(NO_CONNECTION_PAUSE);
            previousIterationWasNotConnected = true;
            return false;
        }
        if (previousIterationWasNotConnected && waitAfterConnected) {
            logger.warn(confService.getConfiguration().getLocationForLog() + "client is connected now. Giving time to events to be sent.");
            CIPluginSDKUtils.doWait(AFTER_RECONNECTION_PAUSE);
            previousIterationWasNotConnected = false;
            return false;
        }

        return true;
    }

    /**
     * Indicate preflight that item is added to queue, If preflight is waiting on emptyList, waiting time will be shortened.
     */
    public void itemAddedToQueue() {
        synchronized (EMPTY_QUEUE_MONITOR) {
            EMPTY_QUEUE_MONITOR.notify();
        }
    }

    public void addMetrics(Map metricsMap){
        metricsMap.put("lastIterationTime", new Date(lastIterationTime));
    }

    public void setWaitAfterConnection(boolean waitAfterConnected) {
        this.waitAfterConnected = waitAfterConnected;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy