parent
a5bd5cd3b1
commit
a7a06808db
@ -0,0 +1,146 @@
|
||||
import {
|
||||
IpluginDetails,
|
||||
IpluginInputArgs,
|
||||
IpluginOutputArgs,
|
||||
} from '../../../../FlowHelpers/1.0.0/interfaces/interfaces';
|
||||
|
||||
/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */
|
||||
const details = (): IpluginDetails => ({
|
||||
name: 'Tags: Requeue',
|
||||
description: `
|
||||
Place the file back in the staging queue with specific tags.
|
||||
|
||||
Only Nodes/Workers which match the tags will be able to process the file.
|
||||
|
||||
The tags must have one of the following: 'requireCPU', 'requireGPU', or 'requireCPUorGPU'.
|
||||
|
||||
The above tells the server what type of worker is required to process the file.
|
||||
|
||||
Subsequent tags must not use the reserved word 'require' in them.
|
||||
|
||||
You can set the 'Node Tags' in the Node options panel.
|
||||
|
||||
The the item tags in the staging section must be a subset of the required tags for a worker to process the file.
|
||||
`,
|
||||
style: {
|
||||
borderColor: 'yellow',
|
||||
},
|
||||
tags: '',
|
||||
isStartPlugin: false,
|
||||
pType: '',
|
||||
requiresVersion: '2.20.01',
|
||||
sidebarPosition: -1,
|
||||
icon: 'faRedo',
|
||||
inputs: [
|
||||
{
|
||||
label: 'Use Basic Queue Tags',
|
||||
name: 'useBasicQueueTags',
|
||||
type: 'boolean',
|
||||
defaultValue: 'true',
|
||||
inputUI: {
|
||||
type: 'switch',
|
||||
},
|
||||
tooltip: 'Use basic queue tags or custom tags.',
|
||||
},
|
||||
{
|
||||
label: 'Basic Queue Tags',
|
||||
name: 'basicQueueTags',
|
||||
type: 'string',
|
||||
defaultValue: 'requireCPU',
|
||||
inputUI: {
|
||||
type: 'dropdown',
|
||||
displayConditions: {
|
||||
logic: 'AND',
|
||||
sets: [
|
||||
{
|
||||
logic: 'AND',
|
||||
inputs: [
|
||||
{
|
||||
name: 'useBasicQueueTags',
|
||||
value: 'true',
|
||||
condition: '===',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
options: [
|
||||
'requireCPU',
|
||||
'requireGPU',
|
||||
'requireGPU:nvenc',
|
||||
'requireGPU:qsv',
|
||||
'requireGPU:vaapi',
|
||||
'requireGPU:videotoolbox',
|
||||
'requireGPU:amf',
|
||||
'requireCPUorGPU',
|
||||
],
|
||||
},
|
||||
tooltip: 'Specify tags to requeue file with.',
|
||||
},
|
||||
{
|
||||
label: 'Custom Queue Tags',
|
||||
name: 'customQueueTags',
|
||||
type: 'string',
|
||||
defaultValue: 'requireCPUorGPU,tag1',
|
||||
inputUI: {
|
||||
type: 'textarea',
|
||||
style: {
|
||||
height: '100px',
|
||||
},
|
||||
displayConditions: {
|
||||
logic: 'AND',
|
||||
sets: [
|
||||
{
|
||||
logic: 'AND',
|
||||
inputs: [
|
||||
{
|
||||
name: 'useBasicQueueTags',
|
||||
value: 'true',
|
||||
condition: '!==',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
tooltip: `
|
||||
requireGPU:nvenc,tag1,tag2
|
||||
requireCPUorGPU,tag1,tag2
|
||||
requireCPU,tag1,tag2
|
||||
requireGPU,tag1,tag2,tag3
|
||||
requireGPU,tag1
|
||||
requireGPU,{{{args.userVariables.global.test}}}
|
||||
requireCPUorGPU,tag1,tag2
|
||||
`,
|
||||
},
|
||||
],
|
||||
outputs: [
|
||||
{
|
||||
number: 1,
|
||||
tooltip: 'Continue to next plugin',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const plugin = (args: IpluginInputArgs): IpluginOutputArgs => {
|
||||
const lib = require('../../../../../methods/lib')();
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign
|
||||
args.inputs = lib.loadDefaultValues(args.inputs, details);
|
||||
|
||||
const basicQueueTags = String(args.inputs.basicQueueTags);
|
||||
const customQueueTags = String(args.inputs.customQueueTags);
|
||||
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
args.variables.queueTags = args.inputs.useBasicQueueTags ? basicQueueTags : customQueueTags;
|
||||
|
||||
return {
|
||||
outputFileObj: args.inputFileObj,
|
||||
outputNumber: 1,
|
||||
variables: args.variables,
|
||||
};
|
||||
};
|
||||
export {
|
||||
details,
|
||||
plugin,
|
||||
};
|
||||
@ -0,0 +1,139 @@
|
||||
import {
|
||||
IpluginDetails,
|
||||
IpluginInputArgs,
|
||||
IpluginOutputArgs,
|
||||
} from '../../../../FlowHelpers/1.0.0/interfaces/interfaces';
|
||||
|
||||
/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */
|
||||
const details = (): IpluginDetails => ({
|
||||
name: 'Tags: Worker Type',
|
||||
description: `
|
||||
Requeues the item into the staging section if the current worker
|
||||
does not match the required worker type and tags.
|
||||
|
||||
You can set the 'Node Tags' in the Node options panel.
|
||||
|
||||
The current tags must be a subset of the required tags.
|
||||
`,
|
||||
style: {
|
||||
borderColor: 'yellow',
|
||||
},
|
||||
tags: '',
|
||||
isStartPlugin: false,
|
||||
pType: '',
|
||||
requiresVersion: '2.20.01',
|
||||
sidebarPosition: -1,
|
||||
icon: 'faFilter',
|
||||
inputs: [
|
||||
{
|
||||
label: 'Required Transcode Worker Type',
|
||||
name: 'requiredWorkerType',
|
||||
type: 'string',
|
||||
defaultValue: 'CPUorGPU',
|
||||
inputUI: {
|
||||
type: 'dropdown',
|
||||
options: [
|
||||
'CPUorGPU',
|
||||
'CPU',
|
||||
'GPU',
|
||||
'GPU:nvenc',
|
||||
'GPU:qsv',
|
||||
'GPU:vaapi',
|
||||
'GPU:videotoolbox',
|
||||
'GPU:amf',
|
||||
],
|
||||
},
|
||||
tooltip: 'Specify worker type',
|
||||
},
|
||||
{
|
||||
label: 'Required Node Tags',
|
||||
name: 'requiredNodeTags',
|
||||
type: 'string',
|
||||
defaultValue: '',
|
||||
inputUI: {
|
||||
type: 'textarea',
|
||||
style: {
|
||||
height: '100px',
|
||||
},
|
||||
},
|
||||
tooltip: `
|
||||
tag1,tag2
|
||||
`,
|
||||
},
|
||||
],
|
||||
outputs: [
|
||||
{
|
||||
number: 1,
|
||||
tooltip: 'Continue to next plugin',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const plugin = (args: IpluginInputArgs): IpluginOutputArgs => {
|
||||
const lib = require('../../../../../methods/lib')();
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign
|
||||
args.inputs = lib.loadDefaultValues(args.inputs, details);
|
||||
|
||||
const requiredWorkerType = String(args.inputs.requiredWorkerType);
|
||||
const requiredNodeTags = String(args.inputs.requiredNodeTags);
|
||||
|
||||
let requiredTags = [];
|
||||
let currentTags = [];
|
||||
|
||||
requiredTags.push(`require${requiredWorkerType}`);
|
||||
if (requiredNodeTags) {
|
||||
requiredTags = requiredTags.concat(requiredNodeTags.split(',').map((tag) => tag.trim()));
|
||||
}
|
||||
|
||||
const currentWorkerType = args.workerType;
|
||||
|
||||
if (requiredWorkerType === 'CPUorGPU') {
|
||||
currentTags.push('requireCPUorGPU');
|
||||
} else if (currentWorkerType === 'transcodecpu') {
|
||||
currentTags.push('requireCPU');
|
||||
} else if (currentWorkerType === 'transcodegpu') {
|
||||
if (args.nodeHardwareType && args.nodeHardwareType !== '-') {
|
||||
currentTags.push(`requireGPU:${args.nodeHardwareType}`);
|
||||
} else {
|
||||
currentTags.push('requireGPU');
|
||||
}
|
||||
}
|
||||
|
||||
if (args.nodeTags) {
|
||||
currentTags = currentTags.concat(args.nodeTags.split(',').map((tag) => tag.trim()));
|
||||
}
|
||||
|
||||
args.jobLog(`Required Tags: ${requiredTags.join(',')}`);
|
||||
args.jobLog(`Current Tags: ${currentTags.join(',')}`);
|
||||
|
||||
let isSubset = true;
|
||||
|
||||
for (let i = 0; i < currentTags.length; i += 1) {
|
||||
if (!requiredTags.includes(currentTags[i])) {
|
||||
isSubset = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (isSubset) {
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
args.variables.queueTags = '';
|
||||
args.jobLog('Worker type and tags are subset of required tags');
|
||||
} else {
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
args.variables.queueTags = requiredTags.join(',');
|
||||
args.jobLog('Worker type and tags are not subset of required tags,'
|
||||
+ ` requeueing with tags ${args.variables.queueTags}`);
|
||||
}
|
||||
|
||||
return {
|
||||
outputFileObj: args.inputFileObj,
|
||||
outputNumber: 1,
|
||||
variables: args.variables,
|
||||
};
|
||||
};
|
||||
export {
|
||||
details,
|
||||
plugin,
|
||||
};
|
||||
Loading…
Reference in new issue