Skip to content

Commit 6de9d53

Browse files
committed
Show flow nums
Show flow nums in tree/table views if not 1 or None. Dim flow=None in tree/table/graph views. Show all flow nums in command menu. Also update mock data.
1 parent c6ae6ae commit 6de9d53

File tree

20 files changed

+319
-97
lines changed

20 files changed

+319
-97
lines changed

src/components/cylc/commandMenu/Menu.vue

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ import { mapGetters, mapState } from 'vuex'
126126
import WorkflowState from '@/model/WorkflowState.model'
127127
import { eventBus } from '@/services/eventBus'
128128
import CopyBtn from '@/components/core/CopyBtn.vue'
129+
import { upperFirst } from 'lodash-es'
130+
import { formatFlowNums } from '@/utils/tasks'
129131
130132
export default {
131133
name: 'CommandMenu',
@@ -199,14 +201,14 @@ export default {
199201
// can happen briefly when switching workflows
200202
return
201203
}
202-
let ret = this.node.type
204+
let ret = upperFirst(this.node.type)
203205
if (this.node.type !== 'cycle') {
204206
// NOTE: cycle point nodes don't have associated node data at present
205-
ret += ' - '
207+
ret += ' '
206208
if (this.node.type === 'workflow') {
207-
ret += this.node.node.statusMsg || this.node.node.status || 'state unknown'
209+
ret += upperFirst(this.node.node.statusMsg || this.node.node.status || 'state unknown')
208210
} else {
209-
ret += this.node.node.state || 'state unknown'
211+
ret += upperFirst(this.node.node.state || 'state unknown')
210212
if (this.node.node.isHeld) {
211213
ret += ' (held)'
212214
}
@@ -216,6 +218,9 @@ export default {
216218
if (this.node.node.isRunahead) {
217219
ret += ' (runahead)'
218220
}
221+
if (this.node.node.flowNums) {
222+
ret += ` • Flows: ${formatFlowNums(this.node.node.flowNums)}`
223+
}
219224
}
220225
}
221226
return ret
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<!--
2+
Copyright (C) NIWA & British Crown (Met Office) & Contributors.
3+
4+
This program is free software: you can redistribute it and/or modify
5+
it under the terms of the GNU General Public License as published by
6+
the Free Software Foundation, either version 3 of the License, or
7+
(at your option) any later version.
8+
9+
This program is distributed in the hope that it will be useful,
10+
but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
GNU General Public License for more details.
13+
14+
You should have received a copy of the GNU General Public License
15+
along with this program. If not, see <http://www.gnu.org/licenses/>.
16+
-->
17+
18+
<template>
19+
<v-chip
20+
v-if="showFlowNums"
21+
label
22+
density="compact"
23+
size="small"
24+
class="ml-1 cursor-default"
25+
:prepend-icon="mdiLabelOutline"
26+
data-cy="flow-num-chip"
27+
>
28+
{{ flowNumsStr }}
29+
<v-tooltip location="right">
30+
Flows: {{ flowNumsStr }}
31+
</v-tooltip>
32+
</v-chip>
33+
</template>
34+
35+
<script setup>
36+
import { formatFlowNums } from '@/utils/tasks'
37+
import { mdiLabelOutline } from '@mdi/js'
38+
import { computed } from 'vue'
39+
40+
const props = defineProps({
41+
flowNums: {
42+
type: String,
43+
required: false,
44+
},
45+
})
46+
47+
const flowNumsStr = computed(
48+
() => props.flowNums && formatFlowNums(props.flowNums)
49+
)
50+
51+
/** Hide flow=1 and flow=None by default */
52+
const showFlowNums = computed(
53+
() => flowNumsStr.value && !['1', 'None'].includes(flowNumsStr.value)
54+
)
55+
56+
</script>

src/components/cylc/table/Table.vue

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
2828
v-model:items-per-page="itemsPerPage"
2929
>
3030
<template v-slot:item.task.name="{ item }">
31-
<div class="d-flex align-content-center flex-nowrap">
31+
<div
32+
class="d-flex align-center flex-nowrap"
33+
:class="{ 'flow-none': isFlowNone(item.task.node.flowNums) }"
34+
:data-cy-task-name="item.task.name"
35+
>
3236
<div style="width: 2em;">
3337
<Task
3438
v-command-menu="item.task"
@@ -44,7 +48,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
4448
:previous-state="item.previousJob?.node?.state"
4549
/>
4650
</div>
47-
<div>{{ item.task.name }}</div>
51+
{{ item.task.name }}
52+
<FlowNumsChip
53+
:flowNums="item.task.node.flowNums"
54+
class="ml-2"
55+
/>
4856
</div>
4957
</template>
5058
<template v-slot:item.task.node.task.meanElapsedTime="{ item }">
@@ -110,13 +118,17 @@ import {
110118
datetimeComparator,
111119
numberComparator,
112120
} from '@/components/cylc/table/sort'
113-
import { dtMean } from '@/utils/tasks'
121+
import {
122+
dtMean,
123+
isFlowNone,
124+
} from '@/utils/tasks'
114125
import { useCyclePointsOrderDesc } from '@/composables/localStorage'
115126
import {
116127
initialOptions,
117128
updateInitialOptionsEvent,
118129
useInitialOptions
119130
} from '@/utils/initialOptions'
131+
import FlowNumsChip from '@/components/cylc/common/FlowNumsChip.vue'
120132
121133
export default {
122134
name: 'TableComponent',
@@ -132,6 +144,7 @@ export default {
132144
},
133145
134146
components: {
147+
FlowNumsChip,
135148
Task,
136149
Job,
137150
},
@@ -243,6 +256,7 @@ export default {
243256
icons: {
244257
mdiChevronDown
245258
},
259+
isFlowNone,
246260
itemsPerPageOptions: [
247261
{ value: 10, title: '10' },
248262
{ value: 20, title: '20' },

src/components/cylc/tree/TreeItem.vue

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
2020
v-show="!filteredOutNodesCache.get(node)"
2121
class="c-treeitem"
2222
:data-node-type="node.type"
23+
:data-node-name="node.name"
2324
>
2425
<div
2526
class="node d-flex align-center"
@@ -64,7 +65,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
6465
/>
6566
<span class="mx-1">{{ node.name }}</span>
6667
</template>
67-
<template v-else-if="node.type === 'task'">
68+
<div
69+
v-else-if="node.type === 'task'"
70+
class="d-flex align-center"
71+
:class="{ 'flow-none': isFlowNone(node.node.flowNums) }"
72+
>
6873
<!-- Task summary -->
6974
<Task
7075
v-command-menu="node"
@@ -86,7 +91,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
8691
/>
8792
</div>
8893
<span class="mx-1">{{ node.name }}</span>
89-
</template>
94+
<FlowNumsChip :flowNums="node.node.flowNums"/>
95+
</div>
9096
<template v-else-if="node.type === 'job'">
9197
<Job
9298
v-command-menu="node"
@@ -176,22 +182,27 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
176182
</template>
177183

178184
<script>
179-
import { mdiChevronRight } from '@mdi/js'
185+
import {
186+
mdiChevronRight,
187+
} from '@mdi/js'
180188
import Task from '@/components/cylc/Task.vue'
181189
import Job from '@/components/cylc/Job.vue'
182190
import JobDetails from '@/components/cylc/tree/JobDetails.vue'
183191
import {
192+
jobMessageOutputs,
184193
latestJob,
185-
jobMessageOutputs
194+
isFlowNone,
186195
} from '@/utils/tasks'
187196
import { getIndent, getNodeChildren } from '@/components/cylc/tree/util'
188197
import { once } from '@/utils'
189198
import { useToggle } from '@vueuse/core'
199+
import FlowNumsChip from '@/components/cylc/common/FlowNumsChip.vue'
190200
191201
export default {
192202
name: 'TreeItem',
193203
194204
components: {
205+
FlowNumsChip,
195206
Task,
196207
Job,
197208
JobDetails,
@@ -252,6 +263,7 @@ export default {
252263
253264
return {
254265
isExpanded,
266+
isFlowNone,
255267
latestJob,
256268
renderChildren,
257269
toggleExpandCollapse,

src/services/mock/checkpoint/get_checkpoint.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
meanElapsedTime
8383
name
8484
}
85+
flowNums
8586
}
8687
8788
fragment JobData on Job {

src/services/mock/json/workflows/multi.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@
145145
"isQueued": true,
146146
"isRunahead": false,
147147
"name": "foo",
148+
"flowNums": "[1]",
148149
"task": {
149150
"meanElapsedTime": 0,
150151
"__typename": "Task"
@@ -162,6 +163,7 @@
162163
"isQueued": false,
163164
"isRunahead": false,
164165
"name": "foo",
166+
"flowNums": "[1]",
165167
"task": {
166168
"meanElapsedTime": 0,
167169
"__typename": "Task"

src/services/mock/json/workflows/one.json

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@
115115
"isQueued": false,
116116
"isRunahead": false,
117117
"cyclePoint": "20000102T0000Z",
118+
"flowNums": "[1]",
118119
"firstParent": {
119120
"id": "~user/one//20000102T0000Z/root",
120121
"name": "root",
@@ -133,6 +134,7 @@
133134
"isQueued": false,
134135
"isRunahead": false,
135136
"cyclePoint": "20000102T0000Z",
137+
"flowNums": "[1]",
136138
"firstParent": {
137139
"id": "~user/one//20000102T0000Z/SUCCEEDED",
138140
"name": "SUCCEEDED",
@@ -152,6 +154,7 @@
152154
"isQueued": false,
153155
"isRunahead": false,
154156
"cyclePoint": "20000102T0000Z",
157+
"flowNums": "[1,2]",
155158
"firstParent": {
156159
"id": "~user/one//20000102T0000Z/BAD",
157160
"name": "BAD",
@@ -170,6 +173,7 @@
170173
"isQueued": false,
171174
"isRunahead": false,
172175
"cyclePoint": "20000102T0000Z",
176+
"flowNums": "[1]",
173177
"firstParent": {
174178
"id": "~user/one//20000102T0000Z/BAD",
175179
"name": "BAD",
@@ -183,11 +187,12 @@
183187
{
184188
"id": "~user/one//20000102T0000Z/sleepy",
185189
"name": "sleepy",
186-
"state": "",
190+
"state": "submitted",
187191
"isHeld": false,
188192
"isQueued": false,
189193
"isRunahead": false,
190194
"cyclePoint": "20000102T0000Z",
195+
"flowNums": "[]",
191196
"firstParent": {
192197
"id": "~user/one//20000102T0000Z/root",
193198
"name": "root",
@@ -206,6 +211,7 @@
206211
"isQueued": false,
207212
"isRunahead": false,
208213
"cyclePoint": "20000102T0000Z",
214+
"flowNums": "[1]",
209215
"firstParent": {
210216
"id": "~user/one//20000102T0000Z/SUCCEEDED",
211217
"name": "SUCCEEDED",
@@ -220,11 +226,12 @@
220226
{
221227
"id": "~user/one//20000102T0000Z/waiting",
222228
"name": "waiting",
223-
"state": "",
229+
"state": "waiting",
224230
"isHeld": false,
225231
"isQueued": false,
226232
"isRunahead": false,
227233
"cyclePoint": "20000102T0000Z",
234+
"flowNums": "[1]",
228235
"firstParent": {
229236
"id": "~user/one//20000102T0000Z/root",
230237
"name": "root",
@@ -402,6 +409,20 @@
402409
"finishedTime": "2020-11-08T22:57:19Z",
403410
"state": "succeeded",
404411
"submitNum": 1
412+
},
413+
{
414+
"id": "~user/one//20000102T0000Z/sleepy/1",
415+
"firstParent": {
416+
"id": "~user/one//20000102T0000Z/sleepy"
417+
},
418+
"jobRunnerName": "background",
419+
"jobId": "61983",
420+
"platform": "localhost",
421+
"startedTime": "",
422+
"submittedTime": "2020-11-08T23:02:09Z",
423+
"finishedTime": "",
424+
"state": "submitted",
425+
"submitNum": 1
405426
}
406427
],
407428
"edges": [

src/styles/cylc/_tree.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ $icon-width: 1.5rem;
9797
.node-data {
9898
display: flex;
9999
flex-wrap: nowrap;
100+
align-items: center;
100101
.node-summary {
101102
display: flex;
102103
flex-wrap: nowrap;

src/styles/index.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,9 @@ html {
9696
.apexcharts-text {
9797
font-size: 0.9rem;
9898
}
99+
100+
.c-tree, .c-table, .c-graph {
101+
.flow-none {
102+
opacity: 0.6;
103+
}
104+
}

0 commit comments

Comments
 (0)