| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // The following enables go generate to generate the doc.go file. |
| //go:generate go run $JIRI_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go -env=CMDLINE_PREFIX=jiri . |
| |
| package main |
| |
| import ( |
| "fmt" |
| "time" |
| |
| "v.io/jiri" |
| "v.io/jiri/tool" |
| "v.io/x/devtools/tooldata" |
| "v.io/x/lib/cmdline" |
| ) |
| |
| func init() { |
| tool.InitializeRunFlags(&cmdOncall.Flags) |
| } |
| |
| // cmdOncall represents the "jiri oncall" command. |
| var cmdOncall = &cmdline.Command{ |
| Runner: jiri.RunnerFunc(runOncall), |
| Name: "oncall", |
| Short: "Manage vanadium oncall schedule", |
| Long: ` |
| Manage vanadium oncall schedule. If no subcommand is given, it shows the LDAP |
| of the current oncall. |
| `, |
| Children: []*cmdline.Command{cmdOncallList}, |
| } |
| |
| // cmdOncallList represents the "jiri oncall list" command. |
| var cmdOncallList = &cmdline.Command{ |
| Runner: jiri.RunnerFunc(runOncallList), |
| Name: "list", |
| Short: "List available oncall schedule", |
| Long: "List available oncall schedule.", |
| } |
| |
| func runOncall(jirix *jiri.X, _ []string) error { |
| shift, err := tooldata.Oncall(jirix, time.Now()) |
| if err != nil { |
| return err |
| } |
| fmt.Fprintf(jirix.Stdout(), "%s,%s\n", shift.Primary, shift.Secondary) |
| return nil |
| } |
| |
| func runOncallList(jirix *jiri.X, _ []string) error { |
| rotation, err := tooldata.LoadOncallRotation(jirix) |
| if err != nil { |
| return err |
| } |
| // Print the schedule with the current oncall marked. |
| layout := "Jan 2, 2006 3:04:05 PM" |
| now := time.Now().Unix() |
| foundOncall := false |
| for i, shift := range rotation.Shifts { |
| prefix := " " |
| if !foundOncall && i < len(rotation.Shifts)-1 { |
| nextDate := rotation.Shifts[i+1].Date |
| nextTimestamp, err := time.Parse(layout, nextDate) |
| if err != nil { |
| fmt.Fprintf(jirix.Stderr(), "Parse(%q, %v) failed: %v", layout, nextDate, err) |
| continue |
| } |
| if now < nextTimestamp.Unix() { |
| prefix = "-> " |
| foundOncall = true |
| } |
| } |
| if i == len(rotation.Shifts)-1 && !foundOncall { |
| prefix = "-> " |
| } |
| fmt.Fprintf(jirix.Stdout(), "%s%25s: %s\n", prefix, shift.Date, shift.Primary) |
| } |
| return nil |
| } |
| |
| func main() { |
| cmdline.Main(cmdOncall) |
| } |