blob: a61e1220fbce7aa51809a2c8034f47e6cd338ca0 [file] [log] [blame]
// 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)
}
}
}