mirror of
https://github.com/sourcegraph/sourcegraph.git
synced 2026-02-06 19:21:50 +00:00
sg: add --sgtail to start command (#58434)
This commit is contained in:
parent
4b2e494ca2
commit
dd29aab51d
@ -2,7 +2,9 @@ package run
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
"os/exec"
|
||||
|
||||
"github.com/sourcegraph/conc/pool"
|
||||
@ -160,6 +162,14 @@ func getSecrets(ctx context.Context, name string, extSecrets map[string]secrets.
|
||||
return secretsEnv, errs
|
||||
}
|
||||
|
||||
var sgConn net.Conn
|
||||
|
||||
func OpenUnixSocket() error {
|
||||
var err error
|
||||
sgConn, err = net.Dial("unix", "/tmp/sg.sock")
|
||||
return err
|
||||
}
|
||||
|
||||
func startCmd(ctx context.Context, dir string, cmd Command, parentEnv map[string]string) (*startedCmd, error) {
|
||||
sc := &startedCmd{
|
||||
stdoutBuf: &prefixSuffixSaver{N: 32 << 10},
|
||||
@ -182,17 +192,40 @@ func startCmd(ctx context.Context, dir string, cmd Command, parentEnv map[string
|
||||
|
||||
var stdoutWriter, stderrWriter io.Writer
|
||||
logger := newCmdLogger(commandCtx, cmd.Name, std.Out.Output)
|
||||
if cmd.IgnoreStdout {
|
||||
std.Out.WriteLine(output.Styledf(output.StyleSuggestion, "Ignoring stdout of %s", cmd.Name))
|
||||
stdoutWriter = sc.stdoutBuf
|
||||
|
||||
// TODO(JH) sgtail experiment going on, this is a bit ugly, that will do it
|
||||
// for the demo day.
|
||||
if sgConn != nil {
|
||||
sink := func(data string) {
|
||||
sgConn.Write([]byte(fmt.Sprintf("%s: %s\n", cmd.Name, data)))
|
||||
}
|
||||
sgConnLog := process.NewLogger(ctx, sink)
|
||||
|
||||
if cmd.IgnoreStdout {
|
||||
std.Out.WriteLine(output.Styledf(output.StyleSuggestion, "Ignoring stdout of %s", cmd.Name))
|
||||
stdoutWriter = sc.stdoutBuf
|
||||
} else {
|
||||
stdoutWriter = io.MultiWriter(logger, sc.stdoutBuf, sgConnLog)
|
||||
}
|
||||
if cmd.IgnoreStderr {
|
||||
std.Out.WriteLine(output.Styledf(output.StyleSuggestion, "Ignoring stderr of %s", cmd.Name))
|
||||
stderrWriter = sc.stderrBuf
|
||||
} else {
|
||||
stderrWriter = io.MultiWriter(logger, sc.stderrBuf, sgConnLog)
|
||||
}
|
||||
} else {
|
||||
stdoutWriter = io.MultiWriter(logger, sc.stdoutBuf)
|
||||
}
|
||||
if cmd.IgnoreStderr {
|
||||
std.Out.WriteLine(output.Styledf(output.StyleSuggestion, "Ignoring stderr of %s", cmd.Name))
|
||||
stderrWriter = sc.stderrBuf
|
||||
} else {
|
||||
stderrWriter = io.MultiWriter(logger, sc.stderrBuf)
|
||||
if cmd.IgnoreStdout {
|
||||
std.Out.WriteLine(output.Styledf(output.StyleSuggestion, "Ignoring stdout of %s", cmd.Name))
|
||||
stdoutWriter = sc.stdoutBuf
|
||||
} else {
|
||||
stdoutWriter = io.MultiWriter(logger, sc.stdoutBuf)
|
||||
}
|
||||
if cmd.IgnoreStderr {
|
||||
std.Out.WriteLine(output.Styledf(output.StyleSuggestion, "Ignoring stderr of %s", cmd.Name))
|
||||
stderrWriter = sc.stderrBuf
|
||||
} else {
|
||||
stderrWriter = io.MultiWriter(logger, sc.stderrBuf)
|
||||
}
|
||||
}
|
||||
|
||||
if cmd.Preamble != "" {
|
||||
|
||||
@ -8,6 +8,7 @@ import (
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/sourcegraph/conc/pool"
|
||||
@ -85,6 +86,10 @@ sg start -describe single-program
|
||||
Name: "describe",
|
||||
Usage: "Print details about the selected commandset",
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "sgtail",
|
||||
Usage: "Connects to running sgtail instance",
|
||||
},
|
||||
|
||||
&cli.StringSliceFlag{
|
||||
Name: "debug",
|
||||
@ -173,6 +178,8 @@ func constructStartCmdLongHelp() string {
|
||||
return out.String()
|
||||
}
|
||||
|
||||
var sgOnce sync.Once
|
||||
|
||||
func startExec(ctx *cli.Context) error {
|
||||
config, err := getConfig()
|
||||
if err != nil {
|
||||
@ -204,6 +211,12 @@ func startExec(ctx *cli.Context) error {
|
||||
return errors.New("no concurrent sg start with same arguments allowed")
|
||||
}
|
||||
|
||||
if ctx.Bool("sgtail") {
|
||||
if err := run.OpenUnixSocket(); err != nil {
|
||||
return errors.Wrapf(err, "Did you forget to run sgtail first?")
|
||||
}
|
||||
}
|
||||
|
||||
commandset := args[0]
|
||||
set, ok := config.Commandsets[commandset]
|
||||
if !ok {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user