mirror of
https://github.com/dokku/dokku.git
synced 2025-12-28 16:06:40 +01:00
Dokku uses a few external images for various bits of functionality, but these must be manually updated every so often due to being referenced in code. By moving the references to Dockerfiles, we can take advantage of dependabot to issue automatic PRs when they are out of date.
129 lines
3.5 KiB
Go
129 lines
3.5 KiB
Go
package logs
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"path/filepath"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/dokku/dokku/plugins/common"
|
|
)
|
|
|
|
// CommandDefault displays recent log output
|
|
func CommandDefault(appName string, num int64, process string, tail, quiet bool) error {
|
|
if err := common.VerifyAppName(appName); err != nil {
|
|
return err
|
|
}
|
|
|
|
if !common.IsDeployed(appName) {
|
|
return fmt.Errorf("App %s has not been deployed", appName)
|
|
}
|
|
|
|
s := common.GetAppScheduler(appName)
|
|
t := strconv.FormatBool(tail)
|
|
q := strconv.FormatBool(quiet)
|
|
n := strconv.FormatInt(num, 10)
|
|
|
|
_, err := common.CallPlugnTrigger(common.PlugnTriggerInput{
|
|
Args: []string{s, appName, process, t, q, n},
|
|
StreamStdio: true,
|
|
Trigger: "scheduler-logs",
|
|
})
|
|
return err
|
|
}
|
|
|
|
// CommandFailed shows the last failed deploy logs
|
|
func CommandFailed(appName string, allApps bool) error {
|
|
if allApps {
|
|
return common.RunCommandAgainstAllAppsSerially(GetFailedLogs, "logs:failed")
|
|
}
|
|
|
|
if err := common.VerifyAppName(appName); err != nil {
|
|
return err
|
|
}
|
|
|
|
return GetFailedLogs(appName)
|
|
}
|
|
|
|
// CommandReport displays a logs report for one or more apps
|
|
func CommandReport(appName string, format string, infoFlag string) error {
|
|
if len(appName) == 0 {
|
|
apps, err := common.DokkuApps()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, appName := range apps {
|
|
if err := ReportSingleApp(appName, format, infoFlag); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
return ReportSingleApp(appName, format, infoFlag)
|
|
}
|
|
|
|
// CommandSet sets or clears a logs property for an app
|
|
func CommandSet(appName string, property string, value string) error {
|
|
if err := validateSetValue(appName, property, value); err != nil {
|
|
return err
|
|
}
|
|
|
|
common.CommandPropertySet("logs", appName, property, value, DefaultProperties, GlobalProperties)
|
|
if property == "vector-sink" {
|
|
common.LogVerboseQuiet(fmt.Sprintf("Writing updated vector config to %s", filepath.Join(common.GetDataDirectory("logs"), "vector.json")))
|
|
return writeVectorConfig()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// CommandVectorLogs tails the log output for the vector container
|
|
func CommandVectorLogs(lines int, tail bool) error {
|
|
if !common.ContainerExists(vectorContainerName) {
|
|
return errors.New("Vector container does not exist")
|
|
}
|
|
|
|
if !common.ContainerIsRunning(vectorContainerName) {
|
|
common.LogWarn("Vector container is not running")
|
|
}
|
|
|
|
common.LogInfo1Quiet("Vector container logs")
|
|
common.LogVerboseQuietContainerLogsTail(vectorContainerName, lines, tail)
|
|
|
|
return nil
|
|
}
|
|
|
|
// CommandVectorStart starts a new vector container
|
|
// or starts an existing one if it already exists
|
|
func CommandVectorStart(vectorImage string) error {
|
|
common.LogInfo2("Starting vector container")
|
|
common.LogVerbose("Ensuring vector configuration exists")
|
|
if err := writeVectorConfig(); err != nil {
|
|
return err
|
|
}
|
|
|
|
if vectorImage == "" {
|
|
vectorImage = common.PropertyGetDefault("logs", "--global", "vector-image", getComputedVectorImage())
|
|
}
|
|
|
|
common.LogVerbose("Starting vector container")
|
|
if err := startVectorContainer(vectorImage); err != nil {
|
|
return err
|
|
}
|
|
|
|
common.LogVerbose("Waiting for 10 seconds")
|
|
if err := common.ContainerWaitTilReady(vectorContainerName, 10*time.Second); err != nil {
|
|
return errors.New("Vector container did not start properly, run logs:vector-logs for more details")
|
|
}
|
|
|
|
common.LogVerbose("Vector container is running")
|
|
return nil
|
|
}
|
|
|
|
// CommandVectorStop stops and removes an existing vector container
|
|
func CommandVectorStop() error {
|
|
common.LogInfo2Quiet("Stopping and removing vector container")
|
|
return stopVectorContainer()
|
|
}
|