This PR adds an endpoint returning a schedule quality score, overloaded
users and comments on the existing issues (e.g. balance issues or gaps).
## Limitations
- Since working hours editor is not implemented yet, there are only two
scores taken into account: balance score and a score representing the
ratio of time when someone is on-call to the whole time period.
- Time period is now set to be constant (90 days from today), so **in
some cases the results will be inaccurate** (when rotations don't align
with the time period)
- It only takes primary rotations into account (overrides are ignored)
## Usage
`GET /api/internal/v1/schedules/<pk>/quality?date=<TOMORROW_DATE>`
Note that `date` should be tomorrow date, because we can only be sure
about changing tomorrow's shifts (some of the shifts for current day
could be "deleted" but still show up in the UI).
## Example response
```json
{
"total_score": 90,
"comments": ["Schedule has no gaps", "Schedule is well-balanced, but still can be improved"],
"overloaded_users": ["USSZ5WRH2CUA9", "U74XJZSSQGBIH"]
}
```
Issue: #118
372 lines
7.6 KiB
Text
372 lines
7.6 KiB
Text
BEGIN:VCALENDAR
|
|
PRODID:-//Google Inc//Google Calendar 70.9054//EN
|
|
VERSION:2.0
|
|
CALSCALE:GREGORIAN
|
|
METHOD:PUBLISH
|
|
X-WR-CALNAME:test quality
|
|
X-WR-TIMEZONE:Europe/London
|
|
BEGIN:VEVENT
|
|
DTSTART:20220801T123000Z
|
|
DTEND:20220801T133000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:1i2ossr8fu92o1dbs22claq3sc@google.com
|
|
CREATED:20220801T130437Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220801T130437Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220801T124500Z
|
|
DTEND:20220801T141500Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:2qmvpinkik8tgjo878i6jqeb8r@google.com
|
|
CREATED:20220801T125755Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220801T132011Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user2
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220826T120000Z
|
|
DTEND:20220826T130000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:42tt0i1c81bb8bb6mtu56a3edc@google.com
|
|
CREATED:20220826T133351Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220826T133351Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:test
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220826T160000Z
|
|
DTEND:20220826T170000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:3rv6jio1sjlpp97vrdv3jodc8t@google.com
|
|
CREATED:20220826T133429Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220826T133429Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART;VALUE=DATE:20220902
|
|
DTEND;VALUE=DATE:20220903
|
|
DTSTAMP:20220913T120725Z
|
|
UID:36lqrnjaatjj89jj6kspnhi0dg@google.com
|
|
CREATED:20220902T135038Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220902T135111Z
|
|
LOCATION:
|
|
SEQUENCE:1
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220909T074500Z
|
|
DTEND:20220909T084500Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:347r8td6i8c8l7u0ji2tdag4cf@google.com
|
|
CREATED:20220909T081157Z
|
|
DESCRIPTION:user1
|
|
LAST-MODIFIED:20220909T081157Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user2
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220909T043000Z
|
|
DTEND:20220909T053000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:454s5d2crv34ul4m2ia2gv8sl7@google.com
|
|
CREATED:20220909T084213Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220909T084213Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220909T121500Z
|
|
DTEND:20220909T131500Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:2dk7q3tgfpgel1vfn4vnm6i9ht@google.com
|
|
CREATED:20220909T081937Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220909T084237Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:wrong
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220909T123000Z
|
|
DTEND:20220909T133000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:16bn4ncbjqjb61ms5uh6uqujnh@google.com
|
|
CREATED:20220909T081927Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220909T084306Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:wrong
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220909T081500Z
|
|
DTEND:20220909T094500Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:4e2qpkou72ng9bv5iie6es0e6b@google.com
|
|
CREATED:20220909T081607Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220909T084403Z
|
|
LOCATION:
|
|
SEQUENCE:1
|
|
STATUS:CONFIRMED
|
|
SUMMARY:wrong
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220909T040000Z
|
|
DTEND:20220909T060000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:3qapm9eac8440arhffqjb4htcj@google.com
|
|
CREATED:20220909T084202Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220909T084413Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user2
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220909T013000Z
|
|
DTEND:20220909T020000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:3jftc5rfca54eqff8biqrjrnqg@google.com
|
|
CREATED:20220909T084447Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220909T090233Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART;VALUE=DATE:20220905
|
|
DTEND;VALUE=DATE:20220906
|
|
DTSTAMP:20220913T120725Z
|
|
UID:7ufaiu3a37bjov1bcoqeo8ouaa@google.com
|
|
CREATED:20220909T102119Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220909T102119Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:TRANSPARENT
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART;VALUE=DATE:20220906
|
|
DTEND;VALUE=DATE:20220907
|
|
DTSTAMP:20220913T120725Z
|
|
UID:70eg0ug77ldh42kv9upvv5ssdi@google.com
|
|
CREATED:20220909T102129Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220909T102129Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:wrong
|
|
TRANSP:TRANSPARENT
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220908T160000Z
|
|
DTEND:20220908T220000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:12t2h95vf6iatpcb05naq6elb3@google.com
|
|
CREATED:20220908T100114Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220909T102443Z
|
|
LOCATION:
|
|
SEQUENCE:2
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user2
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220909T173000Z
|
|
DTEND:20220909T210000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:0ogq7upkb5ogo2cm1ivm4e6gkn@google.com
|
|
CREATED:20220909T082000Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220909T130430Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:wrong
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART;VALUE=DATE:20220912
|
|
DTEND;VALUE=DATE:20220916
|
|
DTSTAMP:20220913T120725Z
|
|
UID:038fgoffuoabpigf51vj2vftda@google.com
|
|
CREATED:20220909T130453Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220909T130453Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:TRANSPARENT
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART;VALUE=DATE:20220917
|
|
DTEND;VALUE=DATE:20220918
|
|
DTSTAMP:20220913T120725Z
|
|
UID:4eko47gsiub8u71bi82ujv43js@google.com
|
|
CREATED:20220909T130606Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220909T130606Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:TRANSPARENT
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220919T030000Z
|
|
DTEND:20220919T054500Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:6l0fc9avshgq5rtmbpg0sps4f0@google.com
|
|
CREATED:20220912T130920Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220912T130926Z
|
|
LOCATION:
|
|
SEQUENCE:3
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220919T070000Z
|
|
DTEND:20220919T083000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:0n8e27of565bauhem1i9a4er3s@google.com
|
|
CREATED:20220912T131012Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220912T131030Z
|
|
LOCATION:
|
|
SEQUENCE:1
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220919T110000Z
|
|
DTEND:20220919T120000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:1rvhjpoickat4qca0fsqpdqq42@google.com
|
|
CREATED:20220912T131036Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220912T131036Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220919T193000Z
|
|
DTEND:20220919T210000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:79sqpvf4spfiia88rnu701mlnc@google.com
|
|
CREATED:20220912T130953Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220912T131100Z
|
|
LOCATION:
|
|
SEQUENCE:3
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220919T150000Z
|
|
DTEND:20220919T180000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:59mb4c40bm6622lbqgsaat010g@google.com
|
|
CREATED:20220912T131055Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220913T094319Z
|
|
LOCATION:
|
|
SEQUENCE:1
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART;VALUE=DATE:20220920
|
|
DTEND;VALUE=DATE:20220924
|
|
DTSTAMP:20220913T120725Z
|
|
UID:50fcgnlamfpqg6bpben2i665df@google.com
|
|
CREATED:20220913T094442Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220913T094523Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:TRANSPARENT
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220926T070000Z
|
|
DTEND:20220926T100000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:5eulnlhlqhj3p2n3qol93s4bit@google.com
|
|
CREATED:20220913T095624Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220913T095624Z
|
|
LOCATION:
|
|
SEQUENCE:0
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user1
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
BEGIN:VEVENT
|
|
DTSTART:20220926T150000Z
|
|
DTEND:20220926T180000Z
|
|
DTSTAMP:20220913T120725Z
|
|
UID:56dlpijqm7ri172v4jl4m6uo70@google.com
|
|
CREATED:20220913T095650Z
|
|
DESCRIPTION:
|
|
LAST-MODIFIED:20220913T095900Z
|
|
LOCATION:
|
|
SEQUENCE:1
|
|
STATUS:CONFIRMED
|
|
SUMMARY:user2
|
|
TRANSP:OPAQUE
|
|
END:VEVENT
|
|
END:VCALENDAR
|