// addDrain adds a logyard drain for the apptail.{appGUID} stream // pointing to ourself (port) func (d *AppLogDrain) addDrain() error { uri := fmt.Sprintf("%s://%v:%v", LINESERVER_PROTO, server.LocalIPMust(), d.port) filter := fmt.Sprintf("apptail.%s", d.appGUID) drainURI, err := drain.ConstructDrainURI( d.drainName, uri, []string{filter}, nil) if err != nil { return err } if err = logyard.AddDrain(d.drainName, drainURI); err != nil { return err } log.Infof("Added drain %v => %v", d.drainName, drainURI) return nil }
func (cmd *add) Run(args []string) (string, error) { if len(args) != 1 { return "", fmt.Errorf("need exactly one positional argument") } name := args[0] uri := cmd.uri uri, err := drain.ConstructDrainURI(name, cmd.uri, cmd.filters, cmd.params) if err != nil { return "", err } if err = logyard.AddDrain(name, uri); err != nil { return "", err } if cmd.json { data, err := json.Marshal(map[string]string{ "name": name, "uri": uri}) return string(data), err } else { return fmt.Sprintf("Added drain %s: %s\n", name, uri), nil } }
func (cmd *stream) Run(args []string) (string, error) { ipaddr, err := server.LocalIP() if err != nil { return "", err } rand.Seed(time.Now().UnixNano()) port := 7000 + rand.Intn(1000) addr := fmt.Sprintf("%s:%d", ipaddr, port) srv, err := lineserver.NewLineServer(CLI_STREAM_PROTO, addr) if err != nil { return "", err } go srv.Start() // Debug mode allows one to debug just the logyard related logs, // without any magical stripping. debugMode := false if len(args) == 1 && args[0] == "debug" { debugMode = true args = []string{ "systail.logyard", "systail.apptail", "systail.logyard_sieve", "systail.systail", } } name := fmt.Sprintf("tmp.logyard-cli.%s-%d", ipaddr, port) uri, err := drain.ConstructDrainURI( name, fmt.Sprintf("%s://%s", CLI_STREAM_PROTO, addr), args, map[string]string{"format": "raw"}) if err != nil { return "", err } if err = logyard.AddDrain(name, uri); err != nil { return "", err } log.Infof("Added drain %s", uri) deleteDrain := func() { if err := logyard.DeleteDrain(name); err != nil { log.Fatal(err) } fmt.Println("") log.Infof("Deleted drain %s", name) } defer deleteDrain() handleKeyboardInterrupt(func() { deleteDrain() os.Exit(1) }) cli_stream.Stream(srv.Ch, cli_stream.MessagePrinterOptions{ cmd.raw, cmd.raw || debugMode, cmd.time, cmd.nocolor, cmd.nodeid, cmd.json}) return "", nil }