Skip to content

Report warnings from the timebox resolver

Alex Kalderimis requested to merge ajk-timebox-report-warnings into master

What does this MR do and why?

If the timebox resolver is not able to produce a result, it adds an error to the timebox report object.

These errors include a localized message, as well as a static code indicating the class of error (one of [MISSING_DATES, UNSUPPORTED, TOO_MANY_EVENTS]).

This is an example of the errors-as-data approach.

The TimeboxReport object now looks like this:

OBJECT: TimeboxReport
Historically accurate report about the timebox.

fields:
┌────────────────┬────────────────────────┬────────────────────────┬───────────┐
│name            │type                    │description             │deprecated?│
│                │                        │                        │           │
├────────────────┼────────────────────────┼────────────────────────┼───────────┤
│burnupTimeSeries│[BurnupChartDailyTotals!│Daily scope and         │No         │
│                │]                       │completed totals for    │           │
│                │                        │burnup charts.          │           │
├────────────────┼────────────────────────┼────────────────────────┼───────────┤
│stats           │TimeReportStats         │Represents the time     │No         │
│                │                        │report stats for the    │           │
│                │                        │timebox.                │           │
├────────────────┼────────────────────────┼────────────────────────┼───────────┤
│error           │TimeReportError         │Explains why we could   │No         │
│                │                        │generate a timebox      │           │
│                │                        │report.                 │           │
└────────────────┴────────────────────────┴────────────────────────┴───────────┘

When TimeboxReport.error is not null, then burnupTimeSeries and stats are not null - i.e. this is a sum-type-ish object.

How to set up and validate locally

Run the following query for a project that has some milestones that lack a start date, a due date, or both:

query {
  project(fullPath: "a/b/c") {
    milestones {
      title
      report {
        error { code } # only use this field on this branch
        burnupTimeSeries { completedCount }
    }
  }
}

In %15.0, this returns no data, and contains an error explaining why (for one milestone).

On current master, this return null for milestones for which a report cannot be generated. No error is generated.

On this branch it always returns a report, and for each milestone for which a report cannot be generated, the error field contains an object with a code.

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Alex Kalderimis

Merge request reports

Loading