OLD | NEW |
| 1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be found |
| 3 // in the LICENSE file. |
| 4 |
1 package main | 5 package main |
2 | 6 |
3 import ( | 7 import ( |
4 "database/sql" | 8 "database/sql" |
5 "flag" | 9 "flag" |
6 "fmt" | 10 "fmt" |
7 "html/template" | 11 "html/template" |
8 "io/ioutil" | 12 "io/ioutil" |
9 "log" | 13 "log" |
10 "math/rand" | 14 "math/rand" |
(...skipping 12 matching lines...) Expand all Loading... |
23 var ( | 27 var ( |
24 // indexTemplate is the main index.html page we serve. | 28 // indexTemplate is the main index.html page we serve. |
25 indexTemplate *template.Template = nil | 29 indexTemplate *template.Template = nil |
26 | 30 |
27 // db is the database, nil if we don't have an SQL database to store dat
a into. | 31 // db is the database, nil if we don't have an SQL database to store dat
a into. |
28 db *sql.DB = nil | 32 db *sql.DB = nil |
29 ) | 33 ) |
30 | 34 |
31 // flags | 35 // flags |
32 var ( | 36 var ( |
33 » port = flag.String("port", ":8000", "HTTP service address (e.g., ':8000'
)") | 37 » port = flag.String("port", ":8000", "HTTP service address (e.g., '
:8000')") |
| 38 » doOauth = flag.Bool("oauth", true, "Run through the OAuth 2.0 flow on
startup.") |
| 39 » gitRepoDir = flag.String("git_repo_dir", "../../../skia", "Directory loc
ation for the Skia repo.") |
| 40 ) |
| 41 |
| 42 var ( |
| 43 » data *Data |
34 ) | 44 ) |
35 | 45 |
36 func init() { | 46 func init() { |
37 rand.Seed(time.Now().UnixNano()) | 47 rand.Seed(time.Now().UnixNano()) |
38 | 48 |
39 // Change the current working directory to the directory of the executab
le. | 49 // Change the current working directory to the directory of the executab
le. |
40 var err error | 50 var err error |
41 cwd, err := filepath.Abs(filepath.Dir(os.Args[0])) | 51 cwd, err := filepath.Abs(filepath.Dir(os.Args[0])) |
42 if err != nil { | 52 if err != nil { |
43 log.Fatalln(err) | 53 log.Fatalln(err) |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 }() | 99 }() |
90 } | 100 } |
91 | 101 |
92 // reportError formats an HTTP error response and also logs the detailed error m
essage. | 102 // reportError formats an HTTP error response and also logs the detailed error m
essage. |
93 func reportError(w http.ResponseWriter, r *http.Request, err error, message stri
ng) { | 103 func reportError(w http.ResponseWriter, r *http.Request, err error, message stri
ng) { |
94 log.Println("Error:", message, err) | 104 log.Println("Error:", message, err) |
95 w.Header().Set("Content-Type", "text/plain") | 105 w.Header().Set("Content-Type", "text/plain") |
96 http.Error(w, message, 500) | 106 http.Error(w, message, 500) |
97 } | 107 } |
98 | 108 |
| 109 // jsonHandler handles the GET for the JSON requests. |
| 110 func jsonHandler(w http.ResponseWriter, r *http.Request) { |
| 111 log.Printf("JSON Handler: %q\n", r.URL.Path) |
| 112 if r.Method == "GET" { |
| 113 w.Header().Set("Content-Type", "application/json") |
| 114 data.AsJSON(w) |
| 115 } |
| 116 } |
| 117 |
99 // mainHandler handles the GET and POST of the main page. | 118 // mainHandler handles the GET and POST of the main page. |
100 func mainHandler(w http.ResponseWriter, r *http.Request) { | 119 func mainHandler(w http.ResponseWriter, r *http.Request) { |
101 log.Printf("Main Handler: %q\n", r.URL.Path) | 120 log.Printf("Main Handler: %q\n", r.URL.Path) |
102 if r.Method == "GET" { | 121 if r.Method == "GET" { |
103 w.Header().Set("Content-Type", "text/html") | 122 w.Header().Set("Content-Type", "text/html") |
104 if err := indexTemplate.Execute(w, struct{}{}); err != nil { | 123 if err := indexTemplate.Execute(w, struct{}{}); err != nil { |
105 log.Println("ERROR: Failed to expand template:", err) | 124 log.Println("ERROR: Failed to expand template:", err) |
106 } | 125 } |
107 } | 126 } |
108 } | 127 } |
109 | 128 |
110 func main() { | 129 func main() { |
111 flag.Parse() | 130 flag.Parse() |
| 131 |
| 132 log.Println("Begin loading data.") |
| 133 var err error |
| 134 data, err = NewData(*doOauth, *gitRepoDir) |
| 135 if err != nil { |
| 136 log.Fatalln("Failed initial load of data from BigQuery: ", err) |
| 137 } |
| 138 |
112 // Resources are served directly. | 139 // Resources are served directly. |
113 http.Handle("/res/", autogzip.Handle(http.FileServer(http.Dir("./")))) | 140 http.Handle("/res/", autogzip.Handle(http.FileServer(http.Dir("./")))) |
114 | 141 |
115 http.HandleFunc("/", autogzip.HandleFunc(mainHandler)) | 142 http.HandleFunc("/", autogzip.HandleFunc(mainHandler)) |
| 143 http.HandleFunc("/json/", autogzip.HandleFunc(jsonHandler)) |
| 144 |
| 145 log.Println("Ready to serve.") |
116 log.Fatal(http.ListenAndServe(*port, nil)) | 146 log.Fatal(http.ListenAndServe(*port, nil)) |
117 } | 147 } |
OLD | NEW |