blob: c5b5623c4ec7da09966565243c36ada03fb095d4 [file] [log] [blame]
import * as _ from 'lodash';
export class Task {}
export class Job {
readonly name: string;
readonly rawName: string;
readonly startTime: string;
readonly state: string;
readonly parents: string[];
readonly workflowName: string;
readonly clusterName: string;
// will load later
config: any;
context: any;
constructor(
rawName: string,
workflowName: string,
clusterName: string,
startTime: string,
state: string,
parents: string[]
) {
this.rawName = rawName;
// try to reduce the name
this.name = _.replace(rawName, workflowName + '_', '');
this.workflowName = workflowName;
this.clusterName = clusterName;
this.startTime = startTime;
this.state = state;
// try to reduce parent names
this.parents = _.map(parents, (parent) =>
_.replace(parent, workflowName + '_', '')
);
}
}
export class Workflow {
readonly name: string;
readonly clusterName: string;
readonly config: any;
readonly jobs: Job[];
readonly context: any;
readonly json: any;
get isJobQueue(): boolean {
return (
this.config &&
this.config.IsJobQueue &&
this.config.IsJobQueue.toLowerCase() == 'true'
);
}
get state(): string {
return this.context.STATE || 'NOT STARTED';
}
constructor(obj: any, clusterName: string) {
this.json = obj;
this.name = obj.id;
this.clusterName = clusterName;
this.config = obj.WorkflowConfig;
this.context = obj.WorkflowContext;
this.jobs = this.parseJobs(obj.Jobs, obj.ParentJobs);
}
protected parseJobs(list: string[], parents: any): Job[] {
const result: Job[] = [];
_.forEach(list, (jobName) => {
result.push(
new Job(
jobName,
this.name,
this.clusterName,
_.get(this.context, ['StartTime', jobName]),
_.get(this.context, ['JOB_STATES', jobName]),
parents[jobName]
)
);
});
return result;
}
}