| // Copyright 2023 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Command makemac ensures that MacService instances continue running. |
| // Currently, it simply renews any existing leases. |
| package main |
| |
| import ( |
| "context" |
| "flag" |
| "log" |
| "time" |
| |
| "golang.org/x/build/internal/macservice" |
| "golang.org/x/build/internal/secret" |
| ) |
| |
| var ( |
| apiKey = secret.Flag("api-key", "MacService API key") |
| period = flag.Duration("period", 2*time.Hour, "How often to check leases. As a special case, -period=0 checks exactly once and then exits") |
| ) |
| |
| const renewDuration = "86400s" // 24h |
| |
| func main() { |
| secret.InitFlagSupport(context.Background()) |
| flag.Parse() |
| |
| c := macservice.NewClient(*apiKey) |
| |
| // Always check once at startup. |
| checkAndRenewLeases(c) |
| |
| if *period == 0 { |
| // User only wants a single check. We're done. |
| return |
| } |
| |
| t := time.NewTicker(*period) |
| for range t.C { |
| checkAndRenewLeases(c) |
| } |
| } |
| |
| func checkAndRenewLeases(c *macservice.Client) { |
| log.Printf("Renewing leases...") |
| |
| resp, err := c.Find(macservice.FindRequest{ |
| VMResourceNamespace: macservice.Namespace{ |
| CustomerName: "golang", |
| }, |
| }) |
| if err != nil { |
| log.Printf("Error finding leases: %v", err) |
| return |
| } |
| |
| if len(resp.Instances) == 0 { |
| log.Printf("No leases found") |
| return |
| } |
| |
| for _, i := range resp.Instances { |
| log.Printf("Renewing lease ID: %s; currently expires: %v...", i.Lease.LeaseID, i.Lease.Expires) |
| |
| rr, err := c.Renew(macservice.RenewRequest{ |
| LeaseID: i.Lease.LeaseID, |
| Duration: renewDuration, |
| }) |
| if err == nil { |
| // Extra spaces to make fields line up with the message above. |
| log.Printf("Renewed lease ID: %s; now expires: %v", i.Lease.LeaseID, rr.Expires) |
| } else { |
| log.Printf("Error renewing lease ID: %s: %v", i.Lease.LeaseID, err) |
| } |
| } |
| } |