photoprism/internal/commands/status.go
Michael Mayer 7940786ce9 UX: Refactor config options to be more intuitive
Make sure to update your local config files when upgrading as
the name of some config values has changed. The default
config path has changed from "settings" to "config".
2020-12-18 09:11:42 +01:00

55 lines
1.2 KiB
Go

package commands
import (
"fmt"
"io/ioutil"
"net/http"
"time"
"github.com/photoprism/photoprism/internal/config"
"github.com/tidwall/gjson"
"github.com/urfave/cli"
)
// StatusCommand performs a server health check.
var StatusCommand = cli.Command{
Name: "status",
Usage: "Performs a server health check",
Action: statusAction,
}
// statusAction shows the server health status
func statusAction(ctx *cli.Context) error {
conf := config.NewConfig(ctx)
client := &http.Client{Timeout: 10 * time.Second}
url := fmt.Sprintf("http://%s:%d/api/v1/status", conf.HttpHost(), conf.HttpPort())
req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
return err
}
var status string
if resp, err := client.Do(req); err != nil {
return fmt.Errorf("can't connect to %s:%d", conf.HttpHost(), conf.HttpPort())
} else if resp.StatusCode != 200 {
return fmt.Errorf("server running at %s:%d, bad status %d\n", conf.HttpHost(), conf.HttpPort(), resp.StatusCode)
} else if body, err := ioutil.ReadAll(resp.Body); err != nil {
return err
} else {
status = string(body)
}
message := gjson.Get(status, "status").String()
if message != "" {
fmt.Println(message)
} else {
fmt.Println("unknown")
}
return nil
}