From c8848e8cc841479f82a9b47c0e6964019ba9f5c0 Mon Sep 17 00:00:00 2001 From: Stokes Player Date: Thu, 19 Jan 2023 10:05:38 -0500 Subject: [PATCH] Fixing completed count to use group status --- .../src/sources/RelevantRunSpecsDataSource.ts | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/packages/data-context/src/sources/RelevantRunSpecsDataSource.ts b/packages/data-context/src/sources/RelevantRunSpecsDataSource.ts index ea38d1f3760b..d57aa005e0be 100644 --- a/packages/data-context/src/sources/RelevantRunSpecsDataSource.ts +++ b/packages/data-context/src/sources/RelevantRunSpecsDataSource.ts @@ -4,7 +4,7 @@ import debugLib from 'debug' import { isEqual } from 'lodash' import type { DataContext } from '../DataContext' -import type { CloudSpecStatus, Query, RelevantRun, CurrentProjectRelevantRunSpecs, CloudSpecRun, CloudRun } from '../gen/graphcache-config.gen' +import type { CloudSpecStatus, Query, RelevantRun, CurrentProjectRelevantRunSpecs, CloudSpecRun, CloudRun, CloudRunGroup, CloudRunGroupStatusEnum } from '../gen/graphcache-config.gen' import { Poller } from '../polling' import type { CloudRunStatus } from '@packages/graphql/src/gen/cloud-source-types.gen' @@ -20,6 +20,10 @@ const RELEVANT_RUN_SPEC_OPERATION_DOC = gql` status groupIds } + groups { + id + status + } } query RelevantRunSpecsDataSource_Specs( @@ -86,15 +90,26 @@ export class RelevantRunSpecsDataSource { return this.#cached.runSpecs } - #calculateSpecMetadata (specs: CloudSpecRun[]) { + #calculateSpecMetadata (specs: CloudSpecRun[], groups: CloudRunGroup[]) { //mimic logic in Cloud to sum up the count of groups per spec to give the total spec counts - const countGroupsForSpec = (specs: CloudSpecRun[]) => { + const countGroupsForSpecs = (specs: CloudSpecRun[]) => { return specs.map((spec) => spec.groupIds?.length || 0).reduce((acc, curr) => acc += curr, 0) } + const groupStatusById = groups.reduce>((acc, curr) => { + acc[curr.id] = curr.status + + return acc + }, {}) + return { - totalSpecs: countGroupsForSpec(specs), - completedSpecs: countGroupsForSpec(specs.filter((spec) => !INCOMPLETE_STATUSES.includes(spec.status || 'UNCLAIMED'))), + totalSpecs: countGroupsForSpecs(specs), + completedSpecs: + specs.flatMap((spec) => spec.groupIds) // pull out the group ids + .filter((groupId): groupId is string => !!groupId) //make sure there are no undefined values + .map((groupId) => groupStatusById[groupId]) //find the status for that group + .filter((status) => !INCOMPLETE_STATUSES.includes(status || 'UNCLAIMED')) //filter to only "complete" statuses + .length, //count them } } @@ -154,7 +169,7 @@ export class RelevantRunSpecsDataSource { if (cloudProject.current && cloudProject.current.runNumber && cloudProject.current.status) { runSpecsToReturn.runSpecs.current = { - ...this.#calculateSpecMetadata(cloudProject.current.specs || []), + ...this.#calculateSpecMetadata(cloudProject.current.specs || [], cloudProject.current.groups || []), runNumber: cloudProject.current.runNumber, } @@ -163,7 +178,7 @@ export class RelevantRunSpecsDataSource { if (cloudProject.next && cloudProject.next.runNumber && cloudProject.next.status) { runSpecsToReturn.runSpecs.next = { - ...this.#calculateSpecMetadata(cloudProject.next.specs || []), + ...this.#calculateSpecMetadata(cloudProject.next.specs || [], cloudProject.next.groups || []), runNumber: cloudProject.next.runNumber, }