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;

Reply via email to