1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

move search to a job

Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
This commit is contained in:
Victor Vieux 2014-01-15 14:43:12 -08:00
parent 0b7d4c855d
commit 1669b802cc
4 changed files with 62 additions and 27 deletions

26
api.go
View file

@ -497,13 +497,29 @@ func getImagesSearch(srv *Server, version float64, w http.ResponseWriter, r *htt
return err return err
} }
term := r.Form.Get("term") var (
outs, err := srv.ImagesSearch(term) buffer *bytes.Buffer
if err != nil { job = srv.Eng.Job("search", r.Form.Get("term"))
)
if version >= 1.9 {
job.Stdout.Add(w)
} else {
buffer = bytes.NewBuffer(nil)
job.Stdout.Add(buffer)
}
if err := job.Run(); err != nil {
return err return err
} }
if version < 1.9 { // Send as a valid JSON array
return writeJSON(w, http.StatusOK, outs) outs := engine.NewTable("", 0)
if _, err := outs.ReadFrom(buffer); err != nil {
return err
}
if _, err := outs.WriteListTo(w); err != nil {
return err
}
}
return nil
} }
func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {

View file

@ -1655,30 +1655,28 @@ func (cli *DockerCli) CmdSearch(args ...string) error {
if err != nil { if err != nil {
return err return err
} }
outs := engine.NewTable("star_count", 0)
outs := []registry.SearchResult{} if _, err := outs.ReadFrom(bytes.NewReader(body)); err != nil {
err = json.Unmarshal(body, &outs)
if err != nil {
return err return err
} }
w := tabwriter.NewWriter(cli.out, 10, 1, 3, ' ', 0) w := tabwriter.NewWriter(cli.out, 10, 1, 3, ' ', 0)
fmt.Fprintf(w, "NAME\tDESCRIPTION\tSTARS\tOFFICIAL\tTRUSTED\n") fmt.Fprintf(w, "NAME\tDESCRIPTION\tSTARS\tOFFICIAL\tTRUSTED\n")
for _, out := range outs { for _, out := range outs.Data {
if (*trusted && !out.IsTrusted) || (*stars > out.StarCount) { if (*trusted && !out.GetBool("is_trusted")) || (*stars > out.GetInt("star_count")) {
continue continue
} }
desc := strings.Replace(out.Description, "\n", " ", -1) desc := strings.Replace(out.Get("description"), "\n", " ", -1)
desc = strings.Replace(desc, "\r", " ", -1) desc = strings.Replace(desc, "\r", " ", -1)
if !*noTrunc && len(desc) > 45 { if !*noTrunc && len(desc) > 45 {
desc = utils.Trunc(desc, 42) + "..." desc = utils.Trunc(desc, 42) + "..."
} }
fmt.Fprintf(w, "%s\t%s\t%d\t", out.Name, desc, out.StarCount) fmt.Fprintf(w, "%s\t%s\t%d\t", out.Get("name"), desc, out.GetInt("star_count"))
if out.IsOfficial { if out.GetBool("is_official") {
fmt.Fprint(w, "[OK]") fmt.Fprint(w, "[OK]")
} }
fmt.Fprint(w, "\t") fmt.Fprint(w, "\t")
if out.IsTrusted { if out.GetBool("is_trusted") {
fmt.Fprint(w, "[OK]") fmt.Fprint(w, "[OK]")
} }
fmt.Fprint(w, "\n") fmt.Fprint(w, "\n")

View file

@ -956,21 +956,20 @@ Search images
HTTP/1.1 200 OK HTTP/1.1 200 OK
Content-Type: application/json Content-Type: application/json
[
{ {
"description": "", "description": "",
"is_official": false, "is_official": false,
"is_trusted": false, "is_trusted": false,
"name": "wma55/u1210sshd", "name": "wma55/u1210sshd",
"star_count": 0 "star_count": 0
}, }
{ {
"description": "", "description": "",
"is_official": false, "is_official": false,
"is_trusted": false, "is_trusted": false,
"name": "jdswinbank/sshd", "name": "jdswinbank/sshd",
"star_count": 0 "star_count": 0
}, }
{ {
"description": "", "description": "",
"is_official": false, "is_official": false,
@ -979,7 +978,6 @@ Search images
"star_count": 0 "star_count": 0
} }
... ...
]
:query term: term to search :query term: term to search
:statuscode 200: no error :statuscode 200: no error

View file

@ -151,6 +151,10 @@ func jobInitApi(job *engine.Job) engine.Status {
job.Error(err) job.Error(err)
return engine.StatusErr return engine.StatusErr
} }
if err := job.Eng.Register("search", srv.ImagesSearch); err != nil {
job.Error(err)
return engine.StatusErr
}
return engine.StatusOK return engine.StatusOK
} }
@ -507,16 +511,35 @@ func (srv *Server) recursiveLoad(address, tmpImageDir string) error {
return nil return nil
} }
func (srv *Server) ImagesSearch(term string) ([]registry.SearchResult, error) { func (srv *Server) ImagesSearch(job *engine.Job) engine.Status {
if n := len(job.Args); n != 1 {
job.Errorf("Usage: %s TERM", job.Name)
return engine.StatusErr
}
term := job.Args[0]
r, err := registry.NewRegistry(nil, srv.HTTPRequestFactory(nil), auth.IndexServerAddress()) r, err := registry.NewRegistry(nil, srv.HTTPRequestFactory(nil), auth.IndexServerAddress())
if err != nil { if err != nil {
return nil, err job.Error(err)
return engine.StatusErr
} }
results, err := r.SearchRepositories(term) results, err := r.SearchRepositories(term)
if err != nil { if err != nil {
return nil, err job.Error(err)
return engine.StatusErr
} }
return results.Results, nil outs := engine.NewTable("star_count", 0)
for _, result := range results.Results {
out := &engine.Env{}
out.Import(result)
outs.Add(out)
}
outs.ReverseSort()
if _, err := outs.WriteTo(job.Stdout); err != nil {
job.Error(err)
return engine.StatusErr
}
return engine.StatusOK
} }
func (srv *Server) ImageInsert(job *engine.Job) engine.Status { func (srv *Server) ImageInsert(job *engine.Job) engine.Status {