Commit 60482f06 authored by Robert Griesemer's avatar Robert Griesemer

godoc: use http GET for remote search instead of rpc

(this will allow the use of golang.org for remote
searches)

R=rsc
CC=golang-dev
https://golang.org/cl/734041
parent 6eb251f2
...@@ -1344,6 +1344,12 @@ func search(c *http.Conn, r *http.Request) { ...@@ -1344,6 +1344,12 @@ func search(c *http.Conn, r *http.Request) {
query := strings.TrimSpace(r.FormValue("q")) query := strings.TrimSpace(r.FormValue("q"))
result := lookup(query) result := lookup(query)
if r.FormValue("f") == "text" {
contents := applyTemplate(searchText, "searchText", result)
serveText(c, contents)
return
}
var title string var title string
if result.Hit != nil { if result.Hit != nil {
title = fmt.Sprintf(`Results for query %q`, query) title = fmt.Sprintf(`Results for query %q`, query)
...@@ -1383,25 +1389,3 @@ func indexer() { ...@@ -1383,25 +1389,3 @@ func indexer() {
time.Sleep(1 * 60e9) // try once a minute time.Sleep(1 * 60e9) // try once a minute
} }
} }
// ----------------------------------------------------------------------------
// IndexServer
type Query struct {
Query string
}
type Result struct {
Result []byte
}
type IndexServer struct{}
func (s *IndexServer) Lookup(query *Query, result *Result) os.Error {
result.Result = applyTemplate(searchText, "searchText", lookup(query.Query))
return nil
}
...@@ -34,15 +34,11 @@ import ( ...@@ -34,15 +34,11 @@ import (
"log" "log"
"os" "os"
pathutil "path" pathutil "path"
"rpc"
"runtime" "runtime"
"time" "time"
) )
const ( const defaultAddr = ":6060" // default webserver address
defaultAddr = ":6060" // default webserver address
golangAddr = "golang.org:http"
)
var ( var (
// periodic sync // periodic sync
...@@ -158,30 +154,32 @@ func loggingHandler(h http.Handler) http.Handler { ...@@ -158,30 +154,32 @@ func loggingHandler(h http.Handler) http.Handler {
} }
func remoteLookup(query string) (result *Result, err os.Error) { func remoteSearch(query string) (res *http.Response, err os.Error) {
var client *rpc.Client search := "/search?f=text&q=" + http.URLEscape(query)
// list of addresses to try
var addrs []string
if *serverAddr != "" { if *serverAddr != "" {
// try server only // explicit server address - only try this one
client, err = rpc.DialHTTP("tcp", *serverAddr) addrs = []string{*serverAddr}
if err != nil {
return
}
} else { } else {
// try local default client first, followed by golang.org addrs = []string{
client, err = rpc.DialHTTP("tcp", defaultAddr) defaultAddr,
if err != nil { "golang.org",
log.Stderrf("trying %s (no local webserver found at %s)", golangAddr, defaultAddr) }
client, err = rpc.Dial("tcp", golangAddr)
if err != nil {
return
} }
// remote search
for _, addr := range addrs {
url := "http://" + addr + search
res, _, err = http.Get(url)
if err == nil && res.StatusCode == http.StatusOK {
break
} }
} }
result = new(Result) if err == nil && res.StatusCode != http.StatusOK {
err = client.Call("IndexServer.Lookup", &Query{query}, result) err = os.NewError(res.Status)
if err != nil {
return nil, err
} }
return return
...@@ -256,10 +254,6 @@ func main() { ...@@ -256,10 +254,6 @@ func main() {
// TODO(gri): Do we still need this? // TODO(gri): Do we still need this?
time.Sleep(1e9) time.Sleep(1e9)
// Register index server.
rpc.Register(new(IndexServer))
rpc.HandleHTTP()
// Start http server. // Start http server.
if err := http.ListenAndServe(*httpAddr, handler); err != nil { if err := http.ListenAndServe(*httpAddr, handler); err != nil {
log.Exitf("ListenAndServe %s: %v", *httpAddr, err) log.Exitf("ListenAndServe %s: %v", *httpAddr, err)
...@@ -277,11 +271,11 @@ func main() { ...@@ -277,11 +271,11 @@ func main() {
if *query { if *query {
// Command-line queries. // Command-line queries.
for i := 0; i < flag.NArg(); i++ { for i := 0; i < flag.NArg(); i++ {
result, err := remoteLookup(flag.Arg(i)) res, err := remoteSearch(flag.Arg(i))
if err != nil { if err != nil {
log.Exitf("remoteLookup: %s", err) log.Exitf("remoteSearch: %s", err)
} }
os.Stdout.Write(result.Result) io.Copy(os.Stdout, res.Body)
} }
return return
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment