update taskbuffer and add gitlab ci

This commit is contained in:
2016-08-01 13:17:15 +02:00
parent 8a414b9a7d
commit 24e96926e3
16 changed files with 257 additions and 103 deletions

View File

@ -1,7 +1,7 @@
import plugins = require("./taskbuffer.plugins");
import {Task} from "./taskbuffer.classes.task";
import {Task,ITaskFunction} from "./taskbuffer.classes.task";
export let emptyTaskFunction = function(){
export let emptyTaskFunction:ITaskFunction = function(){
let done = plugins.Q.defer();
done.resolve();
return done.promise;
@ -31,8 +31,8 @@ export let isTaskTouched = (taskArg:Task, touchedTasksArray:Task[]):boolean => {
export let runTask = function(taskArg:Task,optionsArg:{touchedTasksArray:Task[]} = {touchedTasksArray:[]}){
let done = plugins.Q.defer();
updateTaskStatus(taskArg,"running");
done.promise.then(function(){updateTaskStatus(taskArg,"idle")})
taskArg.running = true;
done.promise.then(function(){taskArg.running = false});
let localDeferred = plugins.Q.defer();
let touchedTasksArray:Task[];
if(optionsArg.touchedTasksArray){
@ -73,24 +73,12 @@ export let runTask = function(taskArg:Task,optionsArg:{touchedTasksArray:Task[]}
export let runBufferedTask = (taskArg:Task) => {
let recursiveBufferRunner = () => {
if(taskArg.bufferCounter > 0){
taskArg.runningBuffered = true;
taskArg.bufferCounter--;
runTask(taskArg)
.then(recursiveBufferRunner);
} else {
taskArg.runningBuffered = false;
}
}
}
export let updateTaskStatus = (taskArg,statusArg:string) => {
switch (statusArg) {
case "running":
taskArg.running = true;
taskArg.idle = false;
break;
case "idle":
taskArg.running = false;
taskArg.idle = true;
break;
default:
throw new Error("status not recognised");
}
}
};

View File

@ -1,39 +1,47 @@
import * as plugins from "./taskbuffer.plugins"
import * as helpers from "./taskbuffer.classes.helpers"
export interface ITaskFunction {
():PromiseLike<any>;
}
export class Task {
name:string;
task:any;
running:boolean;
idle:boolean;
buffered:boolean;
running:boolean = false;
runningBuffered:boolean = false;
idle:boolean = true;
buffered:boolean = false;
bufferCounter:number;
bufferMax:number;
private _counterTriggerAbsolute:number;
bufferMax:number = 1;
private _counterTriggerAbsolute:number = 0;
private _state:string;
preTask:Task;
afterTask:Task;
constructor(optionsArg:{
taskFunction:any,
taskFunction:ITaskFunction,
preTask?:Task,
afterTask?:Task,
buffered?:boolean,
bufferMax?:number,
name?:string
}){
if (!optionsArg){optionsArg = {taskFunction:function(){}}}
var options = optionsArg;
this.task = optionsArg.taskFunction;
this.preTask = options.preTask;
this.afterTask = options.afterTask;
this.running = false;
this.idle = true;
this.idle = !this.running && !this.runningBuffered;
this.buffered = options.buffered;
this.bufferMax = options.bufferMax;
this.name = options.name;
}
/**
* trigger the task. Will trigger buffered if this.buffered is true
*/
trigger(){
let done = plugins.Q.defer();
if(this.buffered) {
@ -46,15 +54,25 @@ export class Task {
};
return done.promise;
};
/**
* trigger task unbuffered.
*/
triggerUnBuffered(){
return helpers.runTask(this);
}
/**
* trigger task buffered.
*/
triggerBuffered(){
var done = plugins.Q.defer();
if(!(this.bufferCounter >= this.bufferMax)){
this.bufferCounter++
}
helpers.runBufferedTask(this);
};
if(!this.runningBuffered){
helpers.runBufferedTask(this);
};
return done.promise;
}

View File

@ -10,7 +10,7 @@ export class Taskchain extends Task {
log?:boolean,
taskArray:Task[]
}){
let options = plugins.lodash.assign(
let options = plugins.lodash.merge(
{
name:"unnamed Taskchain",
log:false
@ -25,7 +25,7 @@ export class Taskchain extends Task {
this._oraObject.text(this.name + " running: Task" + this.taskArray[taskCounter].name);
this.taskArray[taskCounter].trigger()
.then(()=>{
this._oraObject.log(this.taskArray[taskCounter].name,"ok");
plugins.beautylog.ok(this.taskArray[taskCounter].name);
taskCounter++;
iterateTasks();
});
@ -42,6 +42,9 @@ export class Taskchain extends Task {
super(options);
this.taskArray = optionsArg.taskArray;
this._oraObject = new plugins.beautylog.Ora("Taskchain idle","blue");
if(optionsArg.log === true){
this._oraObject.start();
};
}
addTask(taskArg:Task){
this.taskArray.push(taskArg);

View File

@ -1,19 +1,19 @@
import * as plugins from "./taskbuffer.plugins"
import * as helpers from "./taskbuffer.classes.helpers"
import {Task} from "./taskbuffer.classes.task"
import { Task } from "./taskbuffer.classes.task"
export class Taskparallel extends Task {
taskArray:Task[];
constructor(optionsArg:{
taskArray:Task[]
taskArray: Task[];
constructor(optionsArg: {
taskArray: Task[]
}){
let options = plugins.lodash.assign(
let options = plugins.lodash.merge(
optionsArg,
{
taskFunction:() => {
taskFunction: () => {
let done = plugins.Q.defer();
let promiseArray; // stores promises of all tasks, since they run in parallel
this.taskArray.forEach(function(taskArg:Task){
let promiseArray:PromiseLike<any>[] = []; // stores promises of all tasks, since they run in parallel
this.taskArray.forEach(function (taskArg) {
promiseArray.push(taskArg.trigger());
})
plugins.Q.all(promiseArray)
@ -21,8 +21,9 @@ export class Taskparallel extends Task {
return done.promise;
}
}
)
);
super(options);
this.taskArray = optionsArg.taskArray;
}
}