...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package logadmin_test
16
17 import (
18 "bytes"
19 "context"
20 "flag"
21 "fmt"
22 "html/template"
23 "log"
24 "net/http"
25 "time"
26
27 "cloud.google.com/go/logging"
28 "cloud.google.com/go/logging/logadmin"
29 "google.golang.org/api/iterator"
30 )
31
32 var (
33 client *logadmin.Client
34 projectID = flag.String("project-id", "", "ID of the project to use")
35 filter string
36 )
37
38 func ExampleClient_Entries_pagination() {
39
40
41
42
43 ctx := context.Background()
44 flag.Parse()
45 if *projectID == "" {
46 log.Fatal("-project-id missing")
47 }
48 var err error
49 client, err = logadmin.NewClient(ctx, *projectID)
50 if err != nil {
51 log.Fatalf("creating logging client: %v", err)
52 }
53
54
55 logName := fmt.Sprintf(`logName = "projects/%s/logs/testlog"`, *projectID)
56
57
58 yesterday := time.Now().Add(-24 * time.Hour).UTC()
59 dayAgo := fmt.Sprintf("timestamp >= %q", yesterday.Format(time.RFC3339))
60
61 filter = fmt.Sprintf("%s AND %s", logName, dayAgo)
62
63 http.HandleFunc("/entries", handleEntries)
64 log.Print("listening on 8080")
65 log.Fatal(http.ListenAndServe(":8080", nil))
66 }
67
68 var pageTemplate = template.Must(template.New("").Parse(`
69 <table>
70 {{range .Entries}}
71 <tr><td>{{.}}</td></tr>
72 {{end}}
73 </table>
74 {{if .Next}}
75 <a href="/entries?pageToken={{.Next}}">Next Page</a>
76 {{end}}
77 `))
78
79 func handleEntries(w http.ResponseWriter, r *http.Request) {
80 ctx := context.Background()
81 it := client.Entries(ctx, logadmin.Filter(filter))
82 var entries []*logging.Entry
83 nextTok, err := iterator.NewPager(it, 5, r.URL.Query().Get("pageToken")).NextPage(&entries)
84 if err != nil {
85 http.Error(w, fmt.Sprintf("problem getting the next page: %v", err), http.StatusInternalServerError)
86 return
87 }
88 data := struct {
89 Entries []*logging.Entry
90 Next string
91 }{
92 entries,
93 nextTok,
94 }
95 var buf bytes.Buffer
96 if err := pageTemplate.Execute(&buf, data); err != nil {
97 http.Error(w, fmt.Sprintf("problem executing page template: %v", err), http.StatusInternalServerError)
98 }
99 if _, err := buf.WriteTo(w); err != nil {
100 log.Printf("writing response: %v", err)
101 }
102 }
103
View as plain text