This is an automated email from the ASF dual-hosted git repository. heneveld pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/brooklyn-ui.git
commit e898e660599f9e105d6a3a3016ef2d37d3732f10 Author: Alex Heneveld <[email protected]> AuthorDate: Wed Nov 2 09:08:52 2022 +0000 use suppressSecret for tasks and workflow output api; add workflow yaml with re-run ability --- .../components/providers/activity-api.provider.js | 8 +++---- .../components/providers/entity-api.provider.js | 8 +++---- .../inspect/activities/detail/detail.controller.js | 28 ++++++++++++++++++++++ .../main/inspect/activities/detail/detail.less | 1 + .../inspect/activities/detail/detail.template.html | 13 +++++++++- .../app/views/main/inspect/inspect.controller.js | 4 ++-- 6 files changed, 51 insertions(+), 11 deletions(-) diff --git a/ui-modules/app-inspector/app/components/providers/activity-api.provider.js b/ui-modules/app-inspector/app/components/providers/activity-api.provider.js index 27deb5cc..4c6169ee 100644 --- a/ui-modules/app-inspector/app/components/providers/activity-api.provider.js +++ b/ui-modules/app-inspector/app/components/providers/activity-api.provider.js @@ -44,17 +44,17 @@ function ActivityApi($http) { }; function getActivities() { - return $http.get('/v1/activities', {observable: true, ignoreLoadingBar: true}); + return $http.get('/v1/activities', {observable: true, ignoreLoadingBar: true, params: { suppressSecrets: true }}); } function getActivity(activityId) { - return $http.get('/v1/activities/' + activityId, {observable: true, ignoreLoadingBar: true}); + return $http.get('/v1/activities/' + activityId, {observable: true, ignoreLoadingBar: true, params: { suppressSecrets: true }}); } function getActivityChildren(activityId) { - return $http.get('/v1/activities/' + activityId + '/children?includeBackground=true', {observable: true, ignoreLoadingBar: true}); + return $http.get('/v1/activities/' + activityId + '/children', {observable: true, ignoreLoadingBar: true, params: { suppressSecrets: true, includeBackground: true }}); } function getActivityDescendants(activityId, maxDepth) { return $http.get('/v1/activities/' + activityId + '/children/recurse'+ - (maxDepth ? '?maxDepth='+maxDepth : ''), {observable: true, ignoreLoadingBar: true}); + (maxDepth ? '?maxDepth='+maxDepth : ''), {observable: true, ignoreLoadingBar: true, params: { suppressSecrets: true }}); } function getActivityStream(activityId, streamType) { return $http.get('/v1/activities/' + activityId + '/stream/' + encodeURIComponent(streamType), {observable: true, ignoreLoadingBar: true, transformResponse: (data)=> { diff --git a/ui-modules/app-inspector/app/components/providers/entity-api.provider.js b/ui-modules/app-inspector/app/components/providers/entity-api.provider.js index 6c0f1613..fea4517b 100644 --- a/ui-modules/app-inspector/app/components/providers/entity-api.provider.js +++ b/ui-modules/app-inspector/app/components/providers/entity-api.provider.js @@ -138,10 +138,10 @@ function EntityApi($http, $q) { } function getEntityActivities(applicationId, entityId) { - return $http.get('/v1/applications/' + applicationId + '/entities/' + entityId + '/activities', {observable: true, ignoreLoadingBar: true}); + return $http.get('/v1/applications/' + applicationId + '/entities/' + entityId + '/activities', {observable: true, ignoreLoadingBar: true, params: { suppressSecrets: true }}); } function getEntityActivitiesDeep(applicationId, entityId) { - return $http.get('/v1/applications/' + applicationId + '/entities/' + entityId + '/activities', {observable: true, ignoreLoadingBar: true, params: { recurse: true }}); + return $http.get('/v1/applications/' + applicationId + '/entities/' + entityId + '/activities', {observable: true, ignoreLoadingBar: true, params: { recurse: true, suppressSecrets: true }}); } function getEntityLocations(applicationId, entityId) { @@ -192,10 +192,10 @@ function EntityApi($http, $q) { return $http.post('/v1/applications/'+ applicationId +'/entities/' + entityId + '/adjuncts/' + adjunctId + '/config/' + configId, body); } function getWorkflows(applicationId, entityId) { - return $http.get('/v1/applications/'+ applicationId +'/entities/' + entityId + '/workflows/', {observable: true, ignoreLoadingBar: true}); + return $http.get('/v1/applications/'+ applicationId +'/entities/' + entityId + '/workflows/', {observable: true, ignoreLoadingBar: true, params: { suppressSecrets: true }}); } function getWorkflow(applicationId, entityId, workflowId) { - return $http.get('/v1/applications/'+ applicationId +'/entities/' + entityId + '/workflows/' + workflowId, {observable: true, ignoreLoadingBar: true}); + return $http.get('/v1/applications/'+ applicationId +'/entities/' + entityId + '/workflows/' + workflowId, {observable: true, ignoreLoadingBar: true, params: { suppressSecrets: true }}); } function replayWorkflow(applicationId, entityId, workflowId, step, options) { return $http.post('/v1/applications/'+ applicationId +'/entities/' + entityId + '/workflows/' + workflowId diff --git a/ui-modules/app-inspector/app/views/main/inspect/activities/detail/detail.controller.js b/ui-modules/app-inspector/app/views/main/inspect/activities/detail/detail.controller.js index f09de2bf..6589760f 100644 --- a/ui-modules/app-inspector/app/views/main/inspect/activities/detail/detail.controller.js +++ b/ui-modules/app-inspector/app/views/main/inspect/activities/detail/detail.controller.js @@ -20,6 +20,9 @@ import {HIDE_INTERSTITIAL_SPINNER_EVENT} from 'brooklyn-ui-utils/interstitial-sp import template from "./detail.template.html"; import modalTemplate from './kilt.modal.template.html'; import {makeTaskStubFromWorkflowRecord} from "../activities.controller"; +import jsyaml from 'js-yaml'; +import runWorkflowModalTemplate from "../../run-workflow-modal.template.html"; +import {runWorkflowController} from "../../inspect.controller"; export const detailState = { name: 'main.inspect.activities.detail', @@ -243,6 +246,10 @@ function DetailController($scope, $state, $stateParams, $location, $log, $uibMod vm.model.workflow.tag = workflowTag; loadWorkflow(workflowTag); } + const workflowYaml = vm.model.activity.tags.find(t => t.workflow_yaml); + if (workflowYaml) { + $scope.workflow_yaml = workflowYaml.workflow_yaml; + } } function saveActivity(response) { @@ -311,6 +318,27 @@ function DetailController($scope, $state, $stateParams, $location, $log, $uibMod } vm.isNonEmpty = Utils.isNonEmpty; + vm.yaml = jsyaml.dump; + + vm.openInRunModel = function (workflowYaml) { + $uibModal.open({ + animation: true, + template: runWorkflowModalTemplate, + controller: ['$scope', '$http', '$uibModalInstance', 'applicationId', 'entityId', 'workflowYaml', runWorkflowController], + size: 'lg', + resolve: { + applicationId: ()=>(applicationId), + entityId: ()=>(entityId), + workflowYaml: ()=>(workflowYaml), + } + }).result.then((closeData)=> { + $state.go('main.inspect.activities.detail', { + applicationId: applicationId, + entityId: closeData.entityId, + activityId: closeData.id + }); + }); + } vm.getStreamIdsInOrder = function () { // sort with known streams first, in preferred order diff --git a/ui-modules/app-inspector/app/views/main/inspect/activities/detail/detail.less b/ui-modules/app-inspector/app/views/main/inspect/activities/detail/detail.less index 2011eda9..9ad5dd5b 100644 --- a/ui-modules/app-inspector/app/views/main/inspect/activities/detail/detail.less +++ b/ui-modules/app-inspector/app/views/main/inspect/activities/detail/detail.less @@ -171,6 +171,7 @@ .result-parent.big-result { border: 1px solid @gray-lighter; .result-body { + white-space: pre; padding: 4px; } } diff --git a/ui-modules/app-inspector/app/views/main/inspect/activities/detail/detail.template.html b/ui-modules/app-inspector/app/views/main/inspect/activities/detail/detail.template.html index b8c245c6..04a68636 100644 --- a/ui-modules/app-inspector/app/views/main/inspect/activities/detail/detail.template.html +++ b/ui-modules/app-inspector/app/views/main/inspect/activities/detail/detail.template.html @@ -95,7 +95,7 @@ </div> <div class="col-md-6 summary-item" ng-if="vm.model.activity.result!=undefined"> <div class="summary-item-label">Result</div> - <div class="summary-item-value result-parent" ng-class="{ 'big-result': (''+vm.model.activity.result).length > 10 }"><div class="result-body">{{::vm.model.activity.result}}</div></div> + <div class="summary-item-value result-parent" ng-class="{ 'big-result': (''+vm.model.activity.result).length > 10 }"><div class="result-body">{{::vm.yaml(vm.model.activity.result)}}</div></div> </div> </div> </div> @@ -338,6 +338,17 @@ <pre>{{vm.model.activity.detailedStatus}}</pre> </br-collapsible> + <br-collapsible ng-if="workflow_yaml" state="vm.model.accordion.workflowYamlOpen"> + <heading> Workflow Definition</heading> + <div class="blueprint-copy-holder"> + <a class="text-muted blueprint-button" ng-click="vm.openInRunModel(workflow_yaml)" + title="Open in Run Workflow"> + <i class="fa fa-arrow-circle-o-right"></i> + </a> + </div> + <pre>{{workflow_yaml}}</pre> + </br-collapsible> + <br-collapsible ng-if="vm.model.activity.id || vm.model.workflow.data" state="vm.model.accordion.jsonOpen"> <heading> JSON</heading> <b>Activity</b> diff --git a/ui-modules/app-inspector/app/views/main/inspect/inspect.controller.js b/ui-modules/app-inspector/app/views/main/inspect/inspect.controller.js index e3ab4fe2..61dd014f 100644 --- a/ui-modules/app-inspector/app/views/main/inspect/inspect.controller.js +++ b/ui-modules/app-inspector/app/views/main/inspect/inspect.controller.js @@ -144,8 +144,8 @@ export function addChildController($scope, $http, $uibModalInstance, application } } -export function runWorkflowController($scope, $http, $uibModalInstance, applicationId, entityId) { - $scope.workflowYaml = 'steps:\n - '; +export function runWorkflowController($scope, $http, $uibModalInstance, applicationId, entityId, workflowYaml) { + $scope.workflowYaml = workflowYaml || 'steps:\n - '; $scope.errorMessage = null; $scope.running = false; $scope.runWorkflow = runWorkflow;
