67 lines
2.0 KiB
Go
67 lines
2.0 KiB
Go
package cli
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
|
|
"gitea.maximumdirect.net/eric/weatherreporter/internal/app"
|
|
)
|
|
|
|
type outputOptions struct {
|
|
Quiet bool
|
|
}
|
|
|
|
func writeActionResult(stdout, stderr io.Writer, value any, opts outputOptions, writeStatus func(io.Writer)) error {
|
|
if opts.Quiet {
|
|
return nil
|
|
}
|
|
if writeStatus != nil && stderr != nil {
|
|
writeStatus(stderr)
|
|
}
|
|
return writeJSON(stdout, value)
|
|
}
|
|
|
|
func writeJSON(stdout io.Writer, value any) error {
|
|
encoder := json.NewEncoder(stdout)
|
|
encoder.SetIndent("", " ")
|
|
return encoder.Encode(value)
|
|
}
|
|
|
|
func writeBatchStatus(stderr io.Writer, result *app.BatchResult) {
|
|
if stderr == nil || result == nil {
|
|
return
|
|
}
|
|
for _, item := range result.Reports {
|
|
if item.Status == "failed" {
|
|
_, _ = fmt.Fprintf(stderr, "report=%s status=failed error=%q\n", item.ReportID, item.Error)
|
|
continue
|
|
}
|
|
if item.Status == "canceled" {
|
|
_, _ = fmt.Fprintf(stderr, "report=%s status=canceled\n", item.ReportID)
|
|
continue
|
|
}
|
|
_, _ = fmt.Fprintf(stderr, "report=%s status=succeeded output=%q\n", item.ReportID, item.OutputPath)
|
|
}
|
|
if result.Notification != nil {
|
|
_, _ = fmt.Fprintf(stderr, "batchNotification status=%q", result.Notification.Status)
|
|
if result.Notification.Reason != "" {
|
|
_, _ = fmt.Fprintf(stderr, " reason=%q", result.Notification.Reason)
|
|
}
|
|
if result.Notification.RunID != "" {
|
|
_, _ = fmt.Fprintf(stderr, " runId=%q", result.Notification.RunID)
|
|
}
|
|
if result.Notification.PipelineID != "" {
|
|
_, _ = fmt.Fprintf(stderr, " pipelineId=%q", result.Notification.PipelineID)
|
|
}
|
|
if result.Notification.BundleID != "" {
|
|
_, _ = fmt.Fprintf(stderr, " bundleId=%q", result.Notification.BundleID)
|
|
}
|
|
if result.Notification.Error != "" {
|
|
_, _ = fmt.Fprintf(stderr, " error=%q", result.Notification.Error)
|
|
}
|
|
_, _ = fmt.Fprintln(stderr)
|
|
}
|
|
_, _ = fmt.Fprintf(stderr, "batch=%s total=%d succeeded=%d failed=%d canceled=%d\n", result.Batch, result.Total, result.Succeeded, result.Failed, result.Canceled)
|
|
}
|