6
0
mirror of https://git.mills.io/prologic/msgbus.git synced 2024-07-05 09:31:32 +00:00
prologic-msgbus/cmd/msgbus/pub.go
2022-03-17 12:47:57 +10:00

69 lines
1.4 KiB
Go

package main
import (
"io/ioutil"
"log"
"os"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"git.mills.io/prologic/msgbus/client"
)
// pubCmd represents the pub command
var pubCmd = &cobra.Command{
Use: "pub [flags] <topic> [<message>|-]",
Aliases: []string{"put"},
Short: "Publish a new message",
Long: `This publishes a new message either from positional command-line
arguments or from standard input if - is used as the first and only argument.
This is an asynchronous operation and does not wait for a response unless the
-w/--wait option is also present.`,
Args: cobra.MinimumNArgs(1),
Run: func(cmd *cobra.Command, args []string) {
uri := viper.GetString("uri")
client := client.NewClient(uri, nil)
topic := args[0]
message := ""
if len(args) == 2 {
message = args[1]
}
publish(client, topic, message)
},
}
func init() {
RootCmd.AddCommand(pubCmd)
pubCmd.Flags().BoolP(
"wait", "w", false,
"Waits for a response and prints it before terminating",
)
}
const defaultTopic = "hello"
func publish(client *client.Client, topic, message string) {
if topic == "" {
topic = defaultTopic
}
if message == "" || message == "-" {
buf, err := ioutil.ReadAll(os.Stdin)
if err != nil {
log.Fatalf("error reading message from stdin: %s", err)
}
message = string(buf[:])
}
err := client.Publish(topic, message)
if err != nil {
log.Fatalf("error publishing message: %s", err)
}
}