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

hudson.model.queue.LoadPredictor Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 *
 * Copyright (c) 2010, InfraDNA, Inc.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *
 *
 *
 *
 *******************************************************************************/ 

package hudson.model.queue;

import hudson.Extension;
import hudson.ExtensionList;
import hudson.ExtensionPoint;
import hudson.model.Computer;
import hudson.model.Executor;
import hudson.model.Hudson;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Predicts future load to the system, to assist the scheduling decisions
 *
 * 

When Hudson makes a scheduling decision, Hudson considers predicted * future load — e.g., "We do currently have one available executor, but * we know we need this for something else in 30 minutes, so we can't currently * schedule a build that takes 1 hour." * *

This extension point plugs in such estimation of future load. * * @author Kohsuke Kawaguchi */ public abstract class LoadPredictor implements ExtensionPoint { /** * Estimates load starting from the 'start' timestamp, up to the 'end' * timestamp. * * @param start Where to start enumeration. Always bigger or equal to the * current time of the execution. * @param plan This is the execution plan for which we are making a load * prediction. Never null. While this object is still being partially * constructed when this method is called, some of its properties (like * {@link MappingWorksheet#item} provide access to more contextual * information. * @since 1.380 */ public Iterable predict(MappingWorksheet plan, Computer computer, long start, long end) { // maintain backward compatibility by calling the old signature. return predict(computer, start, end); } /** * Estimates load starting from the 'start' timestamp, up to the 'end' * timestamp. * * @param start Where to start enumeration. Always bigger or equal to the * current time of the execution. * @deprecated as of 1.380 Use * {@link #predict(MappingWorksheet, Computer, long, long)} */ public Iterable predict(Computer computer, long start, long end) { return Collections.emptyList(); } /** * All the registered instances. */ public static ExtensionList all() { return Hudson.getInstance().getExtensionList(LoadPredictor.class); } /** * Considers currently running tasks and their completion. */ @Extension public static class CurrentlyRunningTasks extends LoadPredictor { @Override public Iterable predict(MappingWorksheet plan, final Computer computer, long start, long eternity) { long now = System.currentTimeMillis(); List fl = new ArrayList(); for (Executor e : computer.getExecutors()) { if (e.isIdle()) { continue; } long eta = e.getEstimatedRemainingTimeMillis(); long end = eta < 0 ? eternity : now + eta; // when does this task end? if (end < start) { continue; // should be over by the 'start' time. } fl.add(new FutureLoad(start, end - start, 1)); } return fl; } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy