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:
parent
0b7d4c855d
commit
1669b802cc
4 changed files with 62 additions and 27 deletions
26
api.go
26
api.go
|
@ -497,13 +497,29 @@ func getImagesSearch(srv *Server, version float64, w http.ResponseWriter, r *htt
|
|||
return err
|
||||
}
|
||||
|
||||
term := r.Form.Get("term")
|
||||
outs, err := srv.ImagesSearch(term)
|
||||
if err != nil {
|
||||
var (
|
||||
buffer *bytes.Buffer
|
||||
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 writeJSON(w, http.StatusOK, outs)
|
||||
if version < 1.9 { // Send as a valid JSON array
|
||||
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 {
|
||||
|
|
18
commands.go
18
commands.go
|
@ -1655,30 +1655,28 @@ func (cli *DockerCli) CmdSearch(args ...string) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
outs := []registry.SearchResult{}
|
||||
err = json.Unmarshal(body, &outs)
|
||||
if err != nil {
|
||||
outs := engine.NewTable("star_count", 0)
|
||||
if _, err := outs.ReadFrom(bytes.NewReader(body)); err != nil {
|
||||
return err
|
||||
}
|
||||
w := tabwriter.NewWriter(cli.out, 10, 1, 3, ' ', 0)
|
||||
fmt.Fprintf(w, "NAME\tDESCRIPTION\tSTARS\tOFFICIAL\tTRUSTED\n")
|
||||
for _, out := range outs {
|
||||
if (*trusted && !out.IsTrusted) || (*stars > out.StarCount) {
|
||||
for _, out := range outs.Data {
|
||||
if (*trusted && !out.GetBool("is_trusted")) || (*stars > out.GetInt("star_count")) {
|
||||
continue
|
||||
}
|
||||
desc := strings.Replace(out.Description, "\n", " ", -1)
|
||||
desc := strings.Replace(out.Get("description"), "\n", " ", -1)
|
||||
desc = strings.Replace(desc, "\r", " ", -1)
|
||||
if !*noTrunc && len(desc) > 45 {
|
||||
desc = utils.Trunc(desc, 42) + "..."
|
||||
}
|
||||
fmt.Fprintf(w, "%s\t%s\t%d\t", out.Name, desc, out.StarCount)
|
||||
if out.IsOfficial {
|
||||
fmt.Fprintf(w, "%s\t%s\t%d\t", out.Get("name"), desc, out.GetInt("star_count"))
|
||||
if out.GetBool("is_official") {
|
||||
fmt.Fprint(w, "[OK]")
|
||||
|
||||
}
|
||||
fmt.Fprint(w, "\t")
|
||||
if out.IsTrusted {
|
||||
if out.GetBool("is_trusted") {
|
||||
fmt.Fprint(w, "[OK]")
|
||||
}
|
||||
fmt.Fprint(w, "\n")
|
||||
|
|
|
@ -956,30 +956,28 @@ Search images
|
|||
HTTP/1.1 200 OK
|
||||
Content-Type: application/json
|
||||
|
||||
[
|
||||
{
|
||||
{
|
||||
"description": "",
|
||||
"is_official": false,
|
||||
"is_trusted": false,
|
||||
"name": "wma55/u1210sshd",
|
||||
"star_count": 0
|
||||
},
|
||||
{
|
||||
}
|
||||
{
|
||||
"description": "",
|
||||
"is_official": false,
|
||||
"is_trusted": false,
|
||||
"name": "jdswinbank/sshd",
|
||||
"star_count": 0
|
||||
},
|
||||
{
|
||||
}
|
||||
{
|
||||
"description": "",
|
||||
"is_official": false,
|
||||
"is_trusted": false,
|
||||
"name": "vgauthier/sshd",
|
||||
"star_count": 0
|
||||
}
|
||||
}
|
||||
...
|
||||
]
|
||||
|
||||
:query term: term to search
|
||||
:statuscode 200: no error
|
||||
|
|
31
server.go
31
server.go
|
@ -151,6 +151,10 @@ func jobInitApi(job *engine.Job) engine.Status {
|
|||
job.Error(err)
|
||||
return engine.StatusErr
|
||||
}
|
||||
if err := job.Eng.Register("search", srv.ImagesSearch); err != nil {
|
||||
job.Error(err)
|
||||
return engine.StatusErr
|
||||
}
|
||||
return engine.StatusOK
|
||||
}
|
||||
|
||||
|
@ -507,16 +511,35 @@ func (srv *Server) recursiveLoad(address, tmpImageDir string) error {
|
|||
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())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
job.Error(err)
|
||||
return engine.StatusErr
|
||||
}
|
||||
results, err := r.SearchRepositories(term)
|
||||
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 {
|
||||
|
|
Loading…
Add table
Reference in a new issue