in integration_test/gce-testing-internal/gce/gce_testing.go [593:628]
func hasMatchingLog(ctx context.Context, logger *log.Logger, vm *VM, logNameRegex string, window time.Duration, query string) (bool, *cloudlogging.Entry, error) {
start := time.Now().Add(-window)
t := start.Format(time.RFC3339)
filter := fmt.Sprintf(`logName=~"projects/%s/logs/%s" AND resource.labels.instance_id="%d" AND timestamp > "%s"`, vm.Project, logNameRegex, vm.ID, t)
if query != "" {
filter += fmt.Sprintf(` AND %s`, query)
}
logger.Println(filter)
logClient, err := logClients.new(vm.Project)
if err != nil {
return false, nil, fmt.Errorf("hasMatchingLog() failed to obtain logClient for project %v: %v", vm.Project, err)
}
it := logClient.Entries(ctx, logadmin.Filter(filter))
found := false
var first *cloudlogging.Entry
// Loop through the iterator printing out each matching log entry. We could return true on the
// first match, but it's nice for debugging to print out all matches into the logs.
for {
entry, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
return false, nil, err
}
logger.Printf("Found matching log entry: %v", entry)
found = true
if first == nil {
first = entry
}
}
return found, first, nil
}