uber / cadence-web Goto Github PK
View Code? Open in Web Editor NEWWeb UI for visualizing workflows on Cadence
License: Other
Web UI for visualizing workflows on Cadence
License: Other
I'm seeing the following error in some of my running workflows, but I haven't figured out yet how to reproduce consistently:
index.vue:193 TypeError: _summarizeEvents.summarizeEvents[e.eventType] is not a function
at map-timeline-events.js:53
at Array.forEach (<anonymous>)
at exports.default (map-timeline-events.js:22)
at getHistoryTimelineEvents (get-history-timeline-events.js:5)
at index.vue:175
It is very useful to be able to see a list of workflows with the correspondent statuses.
It can be done by emitting a query to a workflow execution for each member of the list. As listing is paginated it shouldn't increase latency too much. If it does then the status should be loaded asynchronously after the list is already rendered.
I'm using cadence web 3.2.2 with cadence server 0.5.7
I execute a workflow with an activity inside, which returns ErrResultPending.
At some point, I cancel the context passed to the ExecuteActivity above.
The activity is requested canceled as a result, but then when I load the workflow in the UI, the history tab is "hanging"
Looking at the javascript console, I see this output:
TypeError: __WEBPACK_IMPORTED_MODULE_2__summarize_events__.a[e.eventType] is not a function at timeline-events.js:40 at Array.forEach (<anonymous>) at timeline-events.js:17 at VueComponent.timelineEvents (history.vue:135) at Watcher.get (vue.esm.js:3142) at Watcher.evaluate (vue.esm.js:3249) at VueComponent.computedGetter [as timelineEvents] (vue.esm.js:3507) at VueComponent.render (history.vue?20ac:1) at VueComponent.Vue._render (vue.esm.js:4544) at VueComponent.updateComponent (vue.esm.js:2788) logError @ vue.esm.js:1741
After clicking on child workflows in compact view under history, UI breaks(mix of parent workflow activities and child workflow activities are shown) and web page needs to be refreshed to show correct data. Earlier this worked fine.
Our team used to see the activity start time, completion time also in the compact view , that's no longer provided. It'll be great to have that.
With the new feature to support long retention for sampled workflows (uber/cadence#1141), users should be able to filter to only workflow ids that were sampled for long retention. The sample is determined by hashing the workflow id and comparing a portion of the hash to a sample threshold. The same may be possible client side if the hash algorithm is the same.
Specially handle the 3 types of MarkerRecorded events - Version, SideEffect, and LocalActivity
Currently the export functionality only dumps what the browser has currently loaded into a file. The server should have an endpoint to stream the results.
Similarly how details
and input
are handled, specially format the stack trace inside the grid.
Having ability to set time when filtering would give more flexibility while using Cadence.
Just one usecase when we needed this desperately was when ~10000 workflows failed in a short time period, and we were unable to see anything happening that day before failures, because it would've required scrolling down through 10000 failed workflows in the list.
On the workflows list page, change the date from the default date, then refresh. You will see the date range not be respected by revert to the defaults.
When viewing the history of a workflow it seems the code is polling for new events with a request like so:
This seems to return a 500 with the following body: {"message":"timeout"}
When this 500 is received, the existing history is cleared and a simple "timeout" error is shown, which makes it hard to use the tool.
What should happen is the XHR should be retried with no change to the UI.
Date picker on the search UI always applies to execution start time. In the case user picks closed executions it makes more sense to apply the time range for execution end time.
History view stops showing events after certain size even though workflow is correctly making progress.
Either via a popup or a hover over, allow inputs and results full screen.
In both workflow list and execution history, fixing the table headers so they float as the user scrolls would be a better user experience.
Cadence UI currently exposes URL of the following form to inspect the status of a running workflow:
https://localhost:8080/domain/cadence-canary/workflows/cron.workflow.sanity/d1e5c195-d8a7-488b-bd5b-d238f97459d2/summary
Would be very nice if the UI could also expose an URL with only the workflow-id which redirects to the currenlty running RunID of that workflow
https://localhost:8080/domain/cadence-canary/workflows/cron.workflow.sanity
Rather than the user pick absolute times, defaulting to the last 24 hours, have the users pick options from within the last X Y (24 hours, 3, days, 7 days, 4 weeks probably) and remember that relative choice to refreshing the page is more predictable if done a day later or more.
Absolute times will still be supported as a "Custom..." option in this dropdown.
Ideally the default range should be configurable by users, but for now showing open workflows for a large range (which is still limited by pagination) would give a better user experience.
One thing I commonly do is copy the workflow name from the name column in the table and paste it into the search. Mysteriously, this produces no results. It takes a while to figure out that there are trailing spaces. Since these spaces should not be there in workflow IDs and names, the web UI could trim them.
When history is huge (~4000 events and large payload), current cadence client GetWorkflowHistory tasks long time (> 5 min) to return result.
As a result, UI freeze and looks like not responding before getting the result.
We need to add support to use long poll with pagination.
UI workflow start time in the summary page shows different timestamp against the start time query from the CLI
Since v3.6.0, activities in the compact view stopped showing the pointer cursor. This could be confusing for new users since the activities are meant to be clickable in order to expose their details.
Ideally by just clicking on schedule event and selecting fail/complete.
Also in summary view where all open activities are shown.
For a more compact view option, having the details column be one line, highlighting the most important properties, would be effective for users scanning for interesting events.
currently domain information is only exposed on the Intro page, and only on mouseover of the recent domain list or on initial entry. A dedicated domain information and configuration page would be desirable.
Domain has some configuration parameters that are currently exposed only through API/CLI:
cadence --env staging --do cadence-canary d desc
Name:cadence-canary, Description:Domain for cadence canaries, OwnerEmail:[email protected], Status:REGISTERED, RetentionInDays:7, EmitMetrics:true
For example, LastFailureReason for activity should be useful info to include.
"mutableStateInCache": "{"ActivityInfos":{"14":{"Version":-24,"ScheduleID":14,"ScheduledEventBatchID":13,"ScheduledEvent":null,"ScheduledTime":"2020-01-08T04:59:25.636Z","StartedID":-124,"StartedEvent":null,"StartedTime":"2020-01-08T04:59:25.668Z","ActivityID":"1","RequestID":"d2eea2f9-8134-4270-9748-b9f7ae3de0ed","Details":"eyJDdXJyZW50SW5kZXgiOjM4MjU0OCwiTnVtQ2FuZGlkYXRlcyI6NDY2MTU1LCJPd25lclVVSUQiOiJlMGU5YzBlZS1kOGVmLTQyM2UtYmVmNC05Zjg3NWY5NmE5YzEifQo=","ScheduleToStartTimeout":21000,"ScheduleToCloseTimeout":28800,"StartToCloseTimeout":24000,"HeartbeatTimeout":30,"CancelRequested":false,"CancelRequestID":-23,"LastHeartBeatUpdatedTime":"2020-01-08T06:16:47.532Z","TimerTaskStatus":12,"Attempt":1,"DomainID":"f89e6f93-8840-4430-8a79-fef018c1125c","StartedIdentity":"140@agent3354-dca1@fx-worker-batch-launching","TaskList":"fx-worker-batch-launching","HasRetryPolicy":true,"InitialInterval":1,"BackoffCoefficient":2,"MaximumInterval":60,"ExpirationTime":"2020-01-08T06:19:24.563Z","MaximumAttempts":5,"NonRetriableErrors":null,"LastFailureReason":"cadenceInternal:Timeout START_TO_CLOSE","LastWorkerIdentity":"140@agent3354-dca1@fx-worker-batch-launching","LastFailureDetails":null,"LastHeartbeatTimeoutVisibility":0}},"TimerInfos":{},"ChildExecutionInfos":{},"RequestCancelInfos":{},"SignalInfos":{},"SignalRequestedIDs":{},"ExecutionInfo":{"DomainID":"f89e6f93-8840-4430-8a79-fef018c1125c","WorkflowID":"7a894e63-7030-4156-a70b-62701f0d7c2a","RunID":"75a9e64d-e37e-48a7-ae4d-5d2c0a01d2b9","ParentDomainID":"","ParentWorkflowID":"","ParentRunID":"","InitiatedID":-7,"CompletionEventBatchID":15,"CompletionEvent":null,"TaskList":"fx-worker-batch-launching","WorkflowTypeName":"BatchStatementWorkflow","WorkflowTimeout":28800,"DecisionTimeoutValue":240,"ExecutionContext":null,"State":2,"CloseStatus":6,"LastFirstEventID":1,"LastEventTaskID":445667987,"NextEventID":16,"LastProcessedEvent":12,"StartTimestamp":"2020-01-07T22:17:02.43Z","LastUpdatedTimestamp":"2020-01-08T06:17:02.443Z","CreateRequestID":"678ddc54-0a54-45b9-a83c-4728a70fb1f6","SignalCount":0,"DecisionVersion":-24,"DecisionScheduleID":-23,"DecisionStartedID":-23,"DecisionRequestID":"emptyUuid","DecisionTimeout":0,"DecisionAttempt":0,"DecisionStartedTimestamp":0,"DecisionScheduledTimestamp":0,"DecisionOriginalScheduledTimestamp":1578435564540788996,"CancelRequested":false,"CancelRequestID":"","StickyTaskList":"","StickyScheduleToStartTimeout":0,"ClientLibraryVersion":"","ClientFeatureVersion":"","ClientImpl":"","AutoResetPoints":{"points":[{"binaryChecksum":"d7b7e8ca04c8ffe21313b5dfbea85132","runId":"75a9e64d-e37e-48a7-ae4d-5d2c0a01d2b9","firstDecisionCompletedId":4,"createdTimeNano":1578435422449596398,"resettable":true}]},"Memo":null,"SearchAttributes":null,"Attempt":0,"HasRetryPolicy":false,"InitialInterval":0,"BackoffCoefficient":0,"MaximumInterval":0,"ExpirationTime":"0001-01-01T00:00:00Z","MaximumAttempts":0,"NonRetriableErrors":null,"BranchToken":"WQsACgAAACQ3NWE5ZTY0ZC1lMzdlLTQ4YTctYWU0ZC01ZDJjMGEwMWQyYjkLABQAAAAkZjRkYzhjOTAtNjEyMy00ODYzLWIxZDEtOGI3NDQyMjUxNzJjDwAeDAAAAAAA","CronSchedule":"","ExpirationSeconds":0},"ExecutionStats":null,"ReplicationState":null,"BufferedEvents":[],"VersionHistories":null}",
When listing workflows, the infinite scroll should request the next page when the user scrolls to the bottom. This sometimes does not work but is not consistent. For instance, resizing the browser window can sometimes trigger the next page.
Cadence web is not currently documented on our main site.
Really excited about this release. It would be great to have a Dockerfile that would allow potential users to try out the UI without installing any dependencies. Bonus points for publishing a container to docker hub or some other registry.
I searched docker hub for the repo, but could not find it. I was assuming uber/cadence-web
but no luck. Would be nice for the README to have this info.
When querying a workflow at the command line it is possible to pass arguments. For example
cadence --ct 100 --do my-domain --env prod wf query --workflow_id my-workflow-id --query_type my-query-type --input 2
But from the UI this is not possible as the following screenshot shows.
Ideally from the web UI users should be able to pass arguments to their query handler. As a first pass I think the users should just get a free from text box where they can type JSON.
Add links to child workflows from execution history for workflows that have them.
Probably due to cadence server API change
Similar to #13, add the ability to restart a workflow with the same input.
History exported from UI has base64 encoded value for firstDecisionCompletedId
for example:
[
{
"eventId":1,
"timestamp":1572983709126469187,
"eventType":"WorkflowExecutionStarted",
"version":300,
"taskId":446074314,
"workflowExecutionStartedEventAttributes":{
"workflowType":{
"name":"PointTierAggregationWorkflow"
},
"taskList":{
"name":"fx-worker-lunacore-0"
},
"input":"some dummy context g==",
"executionStartToCloseTimeoutSeconds":864000,
"taskStartToCloseTimeoutSeconds":10,
"continuedExecutionRunId":"3f5a7b60-0e8d-4278-9d28-f5173b18f164",
"originalExecutionRunId":"0de4c876-6592-4eba-b021-8dd3ec8854b3",
"identity":"",
"firstExecutionRunId":"bc0034d5-03c1-492e-b353-4a4a3cc4ae2c",
"attempt":0,
"prevAutoResetPoints":{
"points":[
{
"binaryChecksum":"51c5b8b69ddba7aa6f967f6af63cbd6c",
"runId":"19343c17-a3c2-4cbe-8a15-5154c7cfe5ed",
"firstDecisionCompletedId":"AAAAAAAAAAQ=",
"createdTimeNano":1562702097534937255,
"expiringTimeNano":1564516497557519770,
"resettable":true
},
{
"binaryChecksum":"277938d0d643a212cb7a152954abc8f3",
"runId":"19343c17-a3c2-4cbe-8a15-5154c7cfe5ed",
"firstDecisionCompletedId":"AAAAAAAAAAw=",
"createdTimeNano":1563306897557479300,
"expiringTimeNano":1564516497557519770,
"resettable":true
},
......
]
},
"header":{
"fields":{
}
}
}
},
{
"eventId":2,
"timestamp":1572983709126505634,
"eventType":"DecisionTaskScheduled",
"version":300,
"taskId":446074315,
"decisionTaskScheduledEventAttributes":{
"taskList":{
"name":"fx-worker-lunacore-0"
},
"startToCloseTimeoutSeconds":10,
"attempt":0
}
},
...
]
Using such file directly in reply test will caused error:
cannot unmarshal string into Go struct field ResetPointInfo.firstDecisionCompletedId of type int64
UI exported history should be same as CLI output:
cadence --do domain wf show -w <wid> -r <rid> --output_filename history.json
Currently it is confusing for the user when they pick time that is half a year back and only see workflows for the last week due to retention.
Also we should make it more clear through some UI messaging that they don't see workflows because they were removed due to retention.
Could not parse body (arg3) argument. Expected Thrift encoded arg3 for endpoint WorkflowService::GetWorkflowExecutionHistory. Got � instead of Thrift. Parsing error was: value must be a valid member of enumeration EventType, got: 41.
The thrift file need to update
Currently, when an activity fails and is being retried, there is no way (afaik) to see the error message that caused the activity to fail.
The UI only shows the number of retry attempts made in the workflow's Summary tab. Using the CLI to describe the workflow, we can only see that the LastFailureReason is cadenceInternal:Generic
.
Could we surface the failed activity's error message in the UI somewhere to help introspect the state of the workflow and to help debug faulty activities?
Add the ability to terminate a running workflow.
In v3.6.0, the workflow graph can't be rendered while the JSON view is active.
We need to make sure that it is human readable in the UI
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.