mirror of
https://github.com/tuna/tunasync.git
synced 2025-04-21 04:42:46 +00:00
Merge pull request #126 from lrh3321/master
Add `--format` and `--status` for tunasynctl
This commit is contained in:
commit
3809df6cfb
@ -8,6 +8,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"text/template"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/BurntSushi/toml"
|
"github.com/BurntSushi/toml"
|
||||||
@ -160,8 +161,31 @@ func listJobs(c *cli.Context) error {
|
|||||||
"of all jobs from manager server: %s", err.Error()),
|
"of all jobs from manager server: %s", err.Error()),
|
||||||
1)
|
1)
|
||||||
}
|
}
|
||||||
|
if statusStr := c.String("status"); statusStr != "" {
|
||||||
|
filteredJobs := make([]tunasync.WebMirrorStatus, 0, len(jobs))
|
||||||
|
var statuses []tunasync.SyncStatus
|
||||||
|
for _, s := range strings.Split(statusStr, ",") {
|
||||||
|
var status tunasync.SyncStatus
|
||||||
|
err = status.UnmarshalJSON([]byte("\"" + strings.TrimSpace(s) + "\""))
|
||||||
|
if err != nil {
|
||||||
|
return cli.NewExitError(
|
||||||
|
fmt.Sprintf("Error parsing status: %s", err.Error()),
|
||||||
|
1)
|
||||||
|
}
|
||||||
|
statuses = append(statuses, status)
|
||||||
|
}
|
||||||
|
for _, job := range jobs {
|
||||||
|
for _, s := range statuses {
|
||||||
|
if job.Status == s {
|
||||||
|
filteredJobs = append(filteredJobs, job)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
genericJobs = filteredJobs
|
||||||
|
} else {
|
||||||
genericJobs = jobs
|
genericJobs = jobs
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
var jobs []tunasync.MirrorStatus
|
var jobs []tunasync.MirrorStatus
|
||||||
args := c.Args()
|
args := c.Args()
|
||||||
@ -196,6 +220,37 @@ func listJobs(c *cli.Context) error {
|
|||||||
genericJobs = jobs
|
genericJobs = jobs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if format := c.String("format"); format != "" {
|
||||||
|
tpl := template.New("")
|
||||||
|
_, err := tpl.Parse(format)
|
||||||
|
if err != nil {
|
||||||
|
return cli.NewExitError(
|
||||||
|
fmt.Sprintf("Error parsing format template: %s", err.Error()),
|
||||||
|
1)
|
||||||
|
}
|
||||||
|
switch jobs := genericJobs.(type) {
|
||||||
|
case []tunasync.WebMirrorStatus:
|
||||||
|
for _, job := range jobs {
|
||||||
|
err = tpl.Execute(os.Stdout, job)
|
||||||
|
if err != nil {
|
||||||
|
return cli.NewExitError(
|
||||||
|
fmt.Sprintf("Error printing out information: %s", err.Error()),
|
||||||
|
1)
|
||||||
|
}
|
||||||
|
fmt.Println()
|
||||||
|
}
|
||||||
|
case []tunasync.MirrorStatus:
|
||||||
|
for _, job := range jobs {
|
||||||
|
err = tpl.Execute(os.Stdout, job)
|
||||||
|
if err != nil {
|
||||||
|
return cli.NewExitError(
|
||||||
|
fmt.Sprintf("Error printing out information: %s", err.Error()),
|
||||||
|
1)
|
||||||
|
}
|
||||||
|
fmt.Println()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
b, err := json.MarshalIndent(genericJobs, "", " ")
|
b, err := json.MarshalIndent(genericJobs, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return cli.NewExitError(
|
return cli.NewExitError(
|
||||||
@ -203,6 +258,8 @@ func listJobs(c *cli.Context) error {
|
|||||||
1)
|
1)
|
||||||
}
|
}
|
||||||
fmt.Println(string(b))
|
fmt.Println(string(b))
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -506,6 +563,14 @@ func main() {
|
|||||||
Name: "all, a",
|
Name: "all, a",
|
||||||
Usage: "List all jobs of all workers",
|
Usage: "List all jobs of all workers",
|
||||||
},
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "status, s",
|
||||||
|
Usage: "Filter output based on status provided",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "format, f",
|
||||||
|
Usage: "Pretty-print containers using a Go template",
|
||||||
|
},
|
||||||
}...),
|
}...),
|
||||||
Action: initializeWrapper(listJobs),
|
Action: initializeWrapper(listJobs),
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user