Page MenuHomePhabricator

Replace the chart in Maniphest Reports with a chart driven by Facts
ClosedPublic

Authored by epriestley on Tue, Apr 30, 3:42 PM.

Details

Summary

Depends on D20485. Ref T13279. This removes the ad-hoc charting in Maniphest and replaces it with a Facts-based chart.

(To do this, we build a dashboard panel inline and render it.)

Test Plan

Diff Detail

Repository
rP Phabricator
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

epriestley created this revision.Tue, Apr 30, 3:42 PM
epriestley requested review of this revision.Tue, Apr 30, 3:43 PM
epriestley added inline comments.Tue, Apr 30, 3:52 PM
src/applications/fact/chart/PhabricatorChartFunctionArgument.php
57

By this, I mean that the type should probably be "user" or "project" or whatever (not just "phid"), so we can accept @alice instead of PHID-USER-abcd. But I'm not yet sure how low-level the user-facing stuff is going to be.

src/applications/fact/fact/PhabricatorFact.php
45

This is a little crude for now. The x.y.z.project and x.y.z.owner facts are facts about tasks tagged with projects and assigned to users, and have an object dimension value for which project/owner was tagged/assigned.

For example, if a task is created with alice as an owner, we'll get a row like:

2019-04-30 11:23:45 • tasks.count.create.owner • PHID-TASK-abcd • PHID-USER-alice • +1

..meaning "one task, PHID-TASK-abcd, was created on April 30th with alice as the owner".

So this code is saying "when you chart an owner/project fact, you should specify the PHID of the owner/project you care about", and the rest of the changes here are adding the right WHERE clause for that.

src/applications/maniphest/controller/ManiphestReportController.php
402–403

We count two types of events for open tasks:

  • *.create is when a new task is created into an open status.
  • *.status is when a task is changed from a closed status into an open status (or a negative value, when an open task is closed).

To get the overall open task count for an install, we have to combine these. However, in other views, we might care about reopened tasks separately (e.g., how much of our timeline slippage is due to making mistakes and needing to rework things?), which is why they're tracked separately.

Likewise, above, we count three types of events for project tasks:

  • *.create is when a task is created with a project already tagged.
  • *.status is when a closed task is reopened (or closed).
  • *.assign is when a tag is added or removed.

To show an overall chart, we add these together. In other views, we might care about rework or new scope to help us understand timelines.

amckinley accepted this revision.Tue, May 21, 9:34 PM
This revision is now accepted and ready to land.Tue, May 21, 9:34 PM