]> Cypherpunks repositories - gostls13.git/commitdiff
misc/dashboard/codereview: simplify parallel operations for front page, and capture...
authorDavid Symonds <dsymonds@golang.org>
Fri, 27 Apr 2012 13:16:54 +0000 (23:16 +1000)
committerDavid Symonds <dsymonds@golang.org>
Fri, 27 Apr 2012 13:16:54 +0000 (23:16 +1000)
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6128044

misc/dashboard/codereview/dashboard/front.go
misc/dashboard/codereview/dashboard/gc.go

index a687e859668e9db39a9eef1e21d4bcdb419e8169..20605cb164545e8d0846d3e557a27aafc747ba9b 100644 (file)
@@ -8,6 +8,7 @@ import (
        "io"
        "net/http"
        "sync"
+       "time"
 
        "appengine"
        "appengine/datastore"
@@ -34,42 +35,42 @@ func handleFront(w http.ResponseWriter, r *http.Request) {
                Filter("Closed =", false).
                Order("-Modified")
 
-       if data.UserIsReviewer {
+       tableFetch := func(index int, f func(tbl *clTable) error) {
                wg.Add(1)
                go func() {
                        defer wg.Done()
-                       tbl := &data.Tables[0]
-                       q := activeCLs.Filter("Reviewer =", currentPerson).Limit(10)
-                       tbl.Title = "CLs assigned to you for review"
-                       tbl.Assignable = true
-                       if _, err := q.GetAll(c, &tbl.CLs); err != nil {
+                       start := time.Now()
+                       if err := f(&data.Tables[index]); err != nil {
                                errc <- err
                        }
+                       data.Timing[index] = time.Now().Sub(start)
                }()
        }
 
-       wg.Add(1)
-       go func() {
-               defer wg.Done()
-               tbl := &data.Tables[1]
+       if data.UserIsReviewer {
+               tableFetch(0, func(tbl *clTable) error {
+                       q := activeCLs.Filter("Reviewer =", currentPerson).Limit(10)
+                       tbl.Title = "CLs assigned to you for review"
+                       tbl.Assignable = true
+                       _, err := q.GetAll(c, &tbl.CLs)
+                       return err
+               })
+       }
+
+       tableFetch(1, func(tbl *clTable) error {
                q := activeCLs.Filter("Author =", currentPerson).Limit(10)
                tbl.Title = "CLs sent by you"
                tbl.Assignable = true
-               if _, err := q.GetAll(c, &tbl.CLs); err != nil {
-                       errc <- err
-               }
-       }()
+               _, err := q.GetAll(c, &tbl.CLs)
+               return err
+       })
 
-       wg.Add(1)
-       go func() {
-               defer wg.Done()
-               tbl := &data.Tables[2]
+       tableFetch(2, func(tbl *clTable) error {
                q := activeCLs.Limit(50)
                tbl.Title = "Other active CLs"
                tbl.Assignable = true
                if _, err := q.GetAll(c, &tbl.CLs); err != nil {
-                       errc <- err
-                       return
+                       return err
                }
                // filter
                if data.UserIsReviewer {
@@ -81,22 +82,19 @@ func handleFront(w http.ResponseWriter, r *http.Request) {
                                }
                        }
                }
-       }()
+               return nil
+       })
 
-       wg.Add(1)
-       go func() {
-               defer wg.Done()
-               tbl := &data.Tables[3]
+       tableFetch(3, func(tbl *clTable) error {
                q := datastore.NewQuery("CL").
                        Filter("Closed =", true).
                        Order("-Modified").
                        Limit(10)
                tbl.Title = "Recently closed CLs"
                tbl.Assignable = false
-               if _, err := q.GetAll(c, &tbl.CLs); err != nil {
-                       errc <- err
-               }
-       }()
+               _, err := q.GetAll(c, &tbl.CLs)
+               return err
+       })
 
        wg.Wait()
 
@@ -119,6 +117,7 @@ func handleFront(w http.ResponseWriter, r *http.Request) {
 
 type frontPageData struct {
        Tables [4]clTable
+       Timing [4]time.Duration
 
        Reviewers      []string
        UserIsReviewer bool
@@ -175,6 +174,10 @@ var frontPage = template.Must(template.New("front").Funcs(template.FuncMap{
         color: blue;
        text-decoration: none;  /* no link underline */
       }
+      address {
+        font-size: 10px;
+       text-align: right;
+      }
       .email {
         font-family: monospace;
       }
@@ -235,6 +238,11 @@ var frontPage = template.Must(template.New("front").Funcs(template.FuncMap{
 {{end}}
 {{end}}
 
+<hr />
+<address>
+datastore timing: {{range .Timing}} {{.}}{{end}}
+</address>
+
   </body>
 </html>
 `))
index f8cb7fae76f17539a4c65e6f9c290594c4a90341..d196ac9c570c14300d8be2a504c7044e0e81912e 100644 (file)
@@ -4,10 +4,10 @@ package dashboard
 
 import (
        "net/http"
+       "time"
 
        "appengine"
        "appengine/datastore"
-       "time"
 )
 
 func init() {