Maintainer: @levb Co-Maintainer: @iomodo
A Mattermost plugin somewhat similar to pager duty, allows to have rotations with magic "solar lottery" scheduling, or overrides.
- Solar Lottery is a team rotation scheduler, inspired by PagerDuty OnCall, and its predecessor the early amazon.com pager tool.
- Name from a Philip K. Dick novel "Solar Lottery".
- The main motivation to develop was to automate the Sustaining Engineering Team (SET) schedulng.
- Not a traditional queue, scheduling is based on probabilities, exponentially increasing since the last serve time.
- Features (basic):
- Users have skills, rotations have needs, match and constrain.
- Grace periods after serving shifts, apply within the rotation.
- User "unavailable" events.
- Complete manual control over shifts, or "Autopilot"
- Go the releases page and download the latest release.
- On your Mattermost instance, go to System Console -> Plugin Management and upload it.
- Configure plugin settings as desired.
- Start using the plugin!
- "Ice Breaker" - a simple rotation to select 2 individuals for a weeklt meeting's "ice breaker" 5 minute intro.
- SET - a monthly shift rotation with several skill requirements and constraints.
- Autopilot - an illustration of what happens when running autopilot.
Run autopilot.
Usage: /lotto autopilot [--flags]
.
Flags:
--now=datetime
- Run autopilot as if the time were datetime. Default: now.
Tools to manage rotations.
Usage: /lotto rotation <subcommand> <rotation-ID> [--flags]
.
Subcommands: archive - list - new - show - set autopilot | set fill | set limit | set require | set task
Create a new rotation. Certain parameters can be specified only at creation time and may not be changed later.
Flags:
--beginning=datetime
- Beginning of time for shifts. Default: now.--fill-type=solar-lottery
- Task auto-assign type: onlysolar-lottery
is currently supported.--fuzz int
- increase randomness of task assignment. Works by increasing the user weight doubling time by this many periods. Setting it above 3 will essentially make task assignemts random. Default: 0.--period=(weekly|biweekly|monthly)
- Recurrence period. For shifts, it is directly relevant; for tasks it affects how the user weights are calculated (shorter period leads to stricter rotation rules, much like lower fuzz). Default:weekly
.--task-type=(shift|ticket)
- Currently, a rotation can only have shifts, i.e. recurring tasks, or tickets that are submitted from an external source. Default:shift
.
Archive a rotation.
List active rotations.
Show rotation details.
Change rotation's autopilot settings.
Flags:
--off
- turns autopilot off for the rotation.--create
- automatically create new shifts.--create-prior=duration
- create new shifts this far ahead of their scheduled starts.--schedule
- automatically schedule pending tasks.--schedule-prior=duration
- schedule pending tasks this far ahead of their scheduled starts.--start-finish
- automatically start and finish shifts that are due.--remind-finish
- remind task users ahead ahead of its finish.--remind-finish-prior
- remind this far ahead of the task finish.--remind-start
- remind task users ahead of the start of a task.--remind-start-prior
- remind this far ahead of the task start.
Change rotation's settings for filling (assigning users to) tasks.
Flags:
--fuzz
- adding fuzz slows down the exponential growth of idle users' weights, by adding this many rotation periods to the doubling time.
Change rotation's constraints (limits). A limit is like, "no more than 2 people
with knowledge of netops, intermediate plus. Use any
to indicate any
skill/level.
Flags:
--skill=skill-level[,...]
- specifies the skill and the minimum level that the limit applies to. skill can be any known skill, level is a number 1-4, or omit the -level to indicate that any level for the skill should count (same as setting to 1).--count=number
- specifies the limit for the skill.--clear
- clears the limit for the skill.
Change rotation's requirements (needs). A requirement is like, "at least 2
people with knowledge of netops, intermediate plus. Use any
to indicate any
skill/level.
Flags:
--skill=skill-level[,...]
- specifies the skill and the minimum level for the requirement. skill can be any known skill, level is a number 1-4, or omit the -level to indicate that any level for the skill should count (same as setting to 1).--count=number
- specifies how many users required for the skill.--clear
- clears the requirement for the skill.
Change rotation's defaults for new tasks.
Flags:
--duration
- sets the default duration for new tasks.--grace
- sets the default grace period for new tasks.
Tools to manage tasks.
Usage: /lotto task <subcommand> [<rotation-ID>|<task-ID>] [@user1 @user2...] [--flags]
.
Subcommands: assign - fill - finish - new shift - new ticket - schedule - show - start - unassign
Assign users to tasks.
Flags:
--force
- force assign: ignore the checks for the task's state and limits.
Auto-assign users to tasks to meet the requirements.
Transition a task to the finished
state.
Create a new shift (i.e. recurring) task, sets its status to pending
.
Flags:
--number
- shift's period number to create, 0-based.
Create a new ticket (i.e. on-request) task, sets its status to pending
.
Flags:
--summary
- shift's period number to create, 0-based.
Transition a task to the finished
state.
Transition a task to the scheduled
state.
Display task's details
Display task's details
Tools to manage the user settings and calendars.
Usage: /lotto user <subcommand> [@user1 @user2...] [--flags]
.
Subcommands: disqualify - join - leave - qualify - show - unavailable
Disqualify users from skills.
--skill=skill[,...]
- the skills to remove from the users' profiles (default: all).
Add user(s) to a rotation.
--starting=datetime
- specify the start time in the rotation. Setting it in the past will increase the users' weight immediately; setting it in the future will give the user a grace period until then. (default: all).
Add user(s) to a rotation.
--starting=datetime
- specify the start time in the rotation. Setting it in the past will increase the users' weight immediately; setting it in the future will give the user a grace period until then. (default: all).
Qualify users for skills, with optional skill levels.
Flags:
--skill=skill-level[,...]
- qualifies the user for the skills, at the specified levels. The -level part is optional, is a number 1-4 corresponding to Beginner/Intermediate/Advanced/Expert (default: 1/beginner).
Show user records.
Add or clear times when user(s) are unavailable.
Flags:
--start=datetime
- start of the interval.--finish=datetime
- end of the interval.--clear
- clear all previous events overlapping with the date range.