github.com/vmware/govmomi@v0.51.0/examples/tasks/main.go (about) 1 // © Broadcom. All Rights Reserved. 2 // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. 3 // SPDX-License-Identifier: Apache-2.0 4 5 package main 6 7 import ( 8 "context" 9 "flag" 10 "time" 11 12 "github.com/dougm/pretty" 13 14 "github.com/vmware/govmomi/task" 15 16 "github.com/vmware/govmomi/examples" 17 "github.com/vmware/govmomi/vim25" 18 "github.com/vmware/govmomi/vim25/methods" 19 "github.com/vmware/govmomi/vim25/types" 20 ) 21 22 func main() { 23 // example use against vCenter with optional time filters: 24 // go run main.go -url $GOVMOMI_URL -insecure $GOVMOMI_INSECURE -b 8h -f 25 begin := flag.Duration("b", 10*time.Minute, "Begin time (filtered by started time)") // default BeginTime is 10min ago 26 end := flag.Duration("e", 0, "End time (filtered by started time)") 27 follow := flag.Bool("f", false, "Follow task stream") 28 29 examples.Run(func(ctx context.Context, c *vim25.Client) error { 30 m := task.NewManager(c) 31 32 ref := c.ServiceContent.RootFolder 33 34 now, err := methods.GetCurrentTime(ctx, c) // vCenter server time (UTC) 35 if err != nil { 36 return err 37 } 38 39 filter := types.TaskFilterSpec{ 40 Entity: &types.TaskFilterSpecByEntity{ 41 Entity: ref, 42 Recursion: types.TaskFilterSpecRecursionOptionAll, 43 }, 44 Time: &types.TaskFilterSpecByTime{ 45 TimeType: types.TaskFilterSpecTimeOptionStartedTime, 46 BeginTime: types.NewTime(now.Add(*begin * -1)), 47 }, 48 } 49 50 if *end != 0 { 51 filter.Time.EndTime = types.NewTime(now.Add(*end * -1)) 52 } 53 54 collector, err := m.CreateCollectorForTasks(ctx, filter) 55 if err != nil { 56 return err 57 } 58 59 defer collector.Destroy(ctx) 60 61 for { 62 tasks, err := collector.ReadNextTasks(ctx, 10) 63 if err != nil { 64 return err 65 } 66 67 if len(tasks) == 0 { 68 if *follow { 69 time.Sleep(time.Second) 70 continue 71 } 72 break 73 } 74 75 for i := range tasks { 76 pretty.Println(tasks[i]) 77 } 78 } 79 80 return nil 81 }) 82 }