blob: d6668b29386ee67ec7ec725c61eccd7651191e55 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
var vscode = require('vscode');
let util = require('./util.js');
var log;
var ow;
var props;
function register(_ow, context, _log, _props) {
ow = _ow;
log = _log;
props = _props;
var defaultDisposable = vscode.commands.registerCommand('extension.wsk.trigger', defaultAction);
var listDisposable = vscode.commands.registerCommand('extension.wsk.trigger.list', listAction);
var createDisposable = vscode.commands.registerCommand('extension.wsk.trigger.create', createAction);
var updateDisposable = vscode.commands.registerCommand('extension.wsk.trigger.update', updateAction);
var deleteDisposable = vscode.commands.registerCommand('extension.wsk.trigger.delete', deleteAction);
var getDisposable = vscode.commands.registerCommand('extension.wsk.trigger.get', getAction);
var fireDisposable = vscode.commands.registerCommand('extension.wsk.trigger.fire', fireAction);
context.subscriptions.push(defaultDisposable, listDisposable, createDisposable, updateDisposable, deleteDisposable, getDisposable, fireDisposable);
}
function defaultAction(params) {
log.show(true);
log.appendLine('\n$ wsk trigger');
log.appendLine('available commands:');
log.appendLine(' create create new trigger');
log.appendLine(' update update an existing trigger');
log.appendLine(' fire fire trigger event');
log.appendLine(' get get trigger');
log.appendLine(' delete delete trigger');
log.appendLine(' list list all triggers');
}
function listAction(params) {
if (!props.validate()){
return;
}
log.show(true);
log.appendLine('\n$ wsk trigger list');
list();
}
function list() {
if (!props.validate()){
return;
}
return getList().then(function (triggers) {
util.appendHeading('triggers');
for (var x=0; x<triggers.length; x ++){
util.appendEntry(triggers[x]);
}
}).catch(function(error) {
log.appendLine(error.toString())
});
}
function getList() {
return new Promise(function (fulfill, reject){
return ow.triggers.list().then(function (triggers) {
fulfill(triggers);
}).catch(function(error) {
log.appendLine(error.toString())
});
});
}
function getListAsStringArray() {
return getList().then(function (triggers) {
var result = [];
for (var x=0; x<triggers.length; x ++){
var name = util.formatQualifiedName(triggers[x]);
result.push(name)
}
return result;
})
}
function createAction(params) {
if (!props.validate()){
return;
}
vscode.window.showInputBox({placeHolder:'Enter a name for your trigger:'})
.then(function(trigger){
if (trigger == undefined) {
return;
}
vscode.window.showInputBox({
placeHolder:'Enter parameters to bind (-p key value) or leave blank for no parameters:',
value:''
}).then(function (parametersString) {
var pString = ''
if (parametersString != undefined) {
pString = parametersString
}
log.show(true);
log.appendLine('\n$ wsk trigger create ' + trigger + ' ' + pString);
var activityInterval = setInterval(function() {
log.append('.');
},300);
var startTime = new Date().getTime();
var invocationParams = {
triggerName: trigger,
blocking:true
}
if (pString.length>0) {
var params = util.parseParametersString(pString);
var paramsArray = [];
for (var key in params) {
var object = {};
object.key = key;
object.value = params[key];
paramsArray.push(object)
}
invocationParams.trigger = {
"parameters":paramsArray
};
}
ow.triggers.create(invocationParams)
.then(function(result) {
var totalTime = startTime - (new Date().getTime());
clearInterval(activityInterval);
log.appendLine(JSON.stringify(result, null, 4))
log.appendLine('>> completed in ' + (-totalTime) + 'ms');
})
.catch(function(error) {
clearInterval(activityInterval);
util.printOpenWhiskError(error);
});
});
});
}
function updateAction(params) {
if (!props.validate()){
return;
}
var YES = 'Yes';
var NO = 'No';
vscode.window.showQuickPick(getListAsStringArray(), {placeHolder:'Select a trigger to update:'})
.then(function(trigger){
if (trigger == undefined) {
return;
}
var triggerString = trigger.toString();
var startIndex = triggerString.indexOf('/');
var namespace = triggerString.substring(0, startIndex);
var triggerToUpdate = triggerString.substring(startIndex+1);
vscode.window.showInputBox({
placeHolder:'Enter parameters to bind (-p key value) or leave blank for no parameters:',
value:''
}).then(function (parametersString) {
var pString = ''
if (parametersString != undefined) {
pString = parametersString
}
log.show(true);
log.appendLine('\n$ wsk trigger update ' + trigger + ' ' + pString);
vscode.window.showWarningMessage('Are you sure you want to overwrite ' + trigger, YES, NO)
.then( function(selection) {
if (selection === YES) {
var activityInterval = setInterval(function() {
log.append('.');
},300);
var startTime = new Date().getTime();
var invocationParams = {
triggerName: triggerToUpdate,
blocking:true,
namespace: namespace
}
if (pString.length>0) {
var params = util.parseParametersString(pString);
var paramsArray = [];
for (var key in params) {
var object = {};
object.key = key;
object.value = params[key];
paramsArray.push(object)
}
invocationParams.trigger = {
"parameters":paramsArray
};
}
ow.triggers.update(invocationParams)
.then(function(result) {
var totalTime = startTime - (new Date().getTime());
clearInterval(activityInterval);
log.appendLine(JSON.stringify(result, null, 4))
log.appendLine('>> completed in ' + (-totalTime) + 'ms');
})
.catch(function(error) {
clearInterval(activityInterval);
util.printOpenWhiskError(error);
});
} else {
log.appendLine('cancelled by user')
}
});
});
});
}
function deleteAction(params) {
if (!props.validate()){
return;
}
vscode.window.showQuickPick(getListAsStringArray(), {placeHolder:'Select a trigger to delete:'})
.then(function(trigger){
if (trigger == undefined) {
return;
}
var triggerString = trigger.toString();
var startIndex = triggerString.indexOf('/');
var namespace = triggerString.substring(0, startIndex);
var triggerToDelete = triggerString.substring(startIndex+1);
log.show(true);
log.appendLine('\n$ wsk trigger delete ' + triggerToDelete);
var options = {
triggerName: triggerToDelete
};
var YES = 'Yes';
var NO = 'No';
vscode.window.showWarningMessage('Are you sure you want to delete ' + triggerToDelete, YES, NO)
.then( function(selection) {
if (selection === YES) {
ow.triggers.delete(options)
.then(function(result) {
var message = 'OpenWhisk trigger deleted: ' + util.formatQualifiedName(result);
log.appendLine(message);
vscode.window.showInformationMessage(message);
})
.catch(function(error) {
util.printOpenWhiskError(error);
});
}
});
});
}
function getAction(params) {
if (!props.validate()){
return;
}
vscode.window.showQuickPick(getListAsStringArray(), {placeHolder:'Select a trigger to fetch:'})
.then(function(trigger){
if (trigger == undefined) {
return;
}
var triggerString = trigger.toString();
var startIndex = triggerString.indexOf('/');
var namespace = triggerString.substring(0, startIndex);
var triggerToGet = triggerString.substring(startIndex+1);
log.appendLine('\n$ wsk trigger get ' + triggerToGet);
var activityInterval = setInterval(function() {
log.append('.');
},300);
var startTime = new Date().getTime();
var invocationParams = {
triggerName: triggerToGet,
blocking:true,
namespace: namespace
}
ow.triggers.get(invocationParams)
.then(function(result) {
var totalTime = startTime - (new Date().getTime());
clearInterval(activityInterval);
log.appendLine(JSON.stringify(result, null, 4))
log.appendLine('>> completed in ' + (-totalTime) + 'ms');
})
.catch(function(error) {
clearInterval(activityInterval);
util.printOpenWhiskError(error);
});
});
}
function fireAction(params) {
if (!props.validate()){
return;
}
vscode.window.showQuickPick(getListAsStringArray(), {placeHolder:'Select a trigger to fire:'})
.then(function(trigger){
if (trigger == undefined) {
return;
}
var triggerString = trigger.toString();
var startIndex = triggerString.indexOf('/');
var namespace = triggerString.substring(0, startIndex);
var triggerToFire = triggerString.substring(startIndex+1);
vscode.window.showInputBox({
placeHolder:'Enter parameters (-p key value) or leave blank for no parameters:',
value:''
}).then(function (parametersString) {
var pString = ''
if (parametersString != undefined) {
pString = parametersString
}
log.show(true);
log.appendLine('\n$ wsk trigger fire ' + trigger + ' ' + pString);
var activityInterval = setInterval(function() {
log.append('.');
},300);
var startTime = new Date().getTime();
var invocationParams = {
triggerName: triggerToFire,
blocking:true,
namespace: namespace
}
if (pString.length>0) {
invocationParams.params = util.parseParametersString(pString);
}
ow.triggers.invoke(invocationParams)
.then(function(result) {
var totalTime = startTime - (new Date().getTime());
clearInterval(activityInterval);
log.appendLine(`\nok: triggered ${trigger}`);
log.appendLine(JSON.stringify(result, null, 4));
log.appendLine('>> completed in ' + (-totalTime) + 'ms');
})
.catch(function(error) {
clearInterval(activityInterval);
util.printOpenWhiskError(error);
});
});
});
}
module.exports = {
register: register,
list:list,
getListAsStringArray:getListAsStringArray
};