forked from coop-cloud/abra
NOT WORKING: WIP on adding server-wide logs functionality
This commit is contained in:
parent
236d0f5892
commit
ed859c0243
|
@ -112,6 +112,35 @@ func ValidateApp(c *cli.Context) config.App {
|
||||||
return app
|
return app
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ValidateAppByName ensures the app is valid and takes an app name as an argument, not context.
|
||||||
|
func ValidateAppByName(c *cli.Context, appName string) config.App {
|
||||||
|
if AppName != "" {
|
||||||
|
appName = AppName
|
||||||
|
logrus.Debugf("programmatically setting app name to %s", appName)
|
||||||
|
}
|
||||||
|
|
||||||
|
if appName == "" {
|
||||||
|
ShowSubcommandHelpAndError(c, errors.New("no app provided"))
|
||||||
|
}
|
||||||
|
|
||||||
|
app, err := app.Get(appName)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := recipe.EnsureExists(app.Type); err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := ssh.EnsureHostKey(app.Server); err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
logrus.Debugf("validated '%s' as app argument", appName)
|
||||||
|
|
||||||
|
return app
|
||||||
|
}
|
||||||
|
|
||||||
// ValidateDomain ensures the domain name arg is valid.
|
// ValidateDomain ensures the domain name arg is valid.
|
||||||
func ValidateDomain(c *cli.Context) (string, error) {
|
func ValidateDomain(c *cli.Context) (string, error) {
|
||||||
domainName := c.Args().First()
|
domainName := c.Args().First()
|
||||||
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
package server
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"coopcloud.tech/abra/cli/internal"
|
||||||
|
"coopcloud.tech/abra/pkg/client"
|
||||||
|
"coopcloud.tech/abra/pkg/config"
|
||||||
|
"github.com/docker/docker/api/types"
|
||||||
|
"github.com/docker/docker/api/types/filters"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
var Taillen string
|
||||||
|
var TaillenFlag = &cli.StringFlag{
|
||||||
|
Name: "tail",
|
||||||
|
Aliases: []string{"t"},
|
||||||
|
Value: "5",
|
||||||
|
Destination: &Taillen,
|
||||||
|
Usage: "change how many lines are shown",
|
||||||
|
}
|
||||||
|
|
||||||
|
var serverLogsCommand = &cli.Command{
|
||||||
|
Name: "logs",
|
||||||
|
Aliases: []string{"l"},
|
||||||
|
ArgsUsage: "<server>",
|
||||||
|
Usage: "show logs from all apps from server",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
TaillenFlag,
|
||||||
|
internal.StderrFlag,
|
||||||
|
internal.StdoutFlag,
|
||||||
|
internal.HealthcheckFlag,
|
||||||
|
},
|
||||||
|
Action: func(c *cli.Context) error {
|
||||||
|
serverName, err := internal.ValidateServer(c)
|
||||||
|
serviceName := ""
|
||||||
|
if !internal.Stderr && !internal.Stdout && !internal.Healthcheck {
|
||||||
|
internal.Stderr = true
|
||||||
|
internal.Stdout = true
|
||||||
|
internal.Healthcheck = true
|
||||||
|
}
|
||||||
|
|
||||||
|
logrus.Debugf("flags parsed. --stderr: %t, --stdout: %t, --healthcheck: %t", internal.Stderr, internal.Stdout, internal.Healthcheck)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
appMap, err := config.LoadAppFiles(serverName)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
logOpts := types.ContainerLogsOptions{
|
||||||
|
Details: false,
|
||||||
|
Follow: false,
|
||||||
|
ShowStderr: internal.Stderr,
|
||||||
|
ShowStdout: internal.Stdout,
|
||||||
|
Tail: Taillen,
|
||||||
|
Timestamps: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
var appFiles []config.App
|
||||||
|
for appname, _ := range appMap {
|
||||||
|
app := internal.ValidateAppByName(c, appname)
|
||||||
|
appFiles = append(appFiles, app)
|
||||||
|
}
|
||||||
|
for _, app := range appFiles {
|
||||||
|
fmt.Println(app)
|
||||||
|
logrus.Debugf("checking logs for: %s", app.Name)
|
||||||
|
cl, err := client.New(app.Server)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
logrus.Debugf("tailing logs for all services")
|
||||||
|
filters := filters.NewArgs()
|
||||||
|
filters.Add("name", service)
|
||||||
|
serviceOpts := types.ServiceListOptions{Filters: filters}
|
||||||
|
services, err := cl.ServiceList(c.Context, serviceOpts)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
logs, err := cl.ServiceLogs(c.Context, services[0].ID, logOpts)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
logrus.Info(app.StackName())
|
||||||
|
for {
|
||||||
|
_, err = io.Copy(os.Stdout, logs)
|
||||||
|
if err == io.EOF {
|
||||||
|
break
|
||||||
|
} else if err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
logs.Close()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
|
@ -23,5 +23,6 @@ apps, see available flags on "server add" for more.
|
||||||
serverAddCommand,
|
serverAddCommand,
|
||||||
serverListCommand,
|
serverListCommand,
|
||||||
serverRemoveCommand,
|
serverRemoveCommand,
|
||||||
|
serverLogsCommand,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue