├── .gitignore ├── Dockerfile ├── Godeps ├── Godeps.json └── Readme ├── README.md ├── fig.yml └── nsq_to_slack.go /.gitignore: -------------------------------------------------------------------------------- 1 | Godeps/_workspace 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang:1.3.3 2 | 3 | # install godep 4 | RUN go get github.com/tools/godep 5 | 6 | # copy source code 7 | ADD . /go/src/github.com/bsphere/nsq_to_slack 8 | 9 | # install godep dependencies 10 | WORKDIR /go/src/github.com/bsphere/nsq_to_slack 11 | 12 | RUN godep restore 13 | 14 | WORKDIR /go 15 | 16 | # build and install the source code 17 | RUN go install github.com/bsphere/nsq_to_slack 18 | 19 | ENTRYPOINT ["/go/bin/nsq_to_slack"] 20 | -------------------------------------------------------------------------------- /Godeps/Godeps.json: -------------------------------------------------------------------------------- 1 | { 2 | "ImportPath": "github.com/bsphere/nsq_to_slack", 3 | "GoVersion": "go1.4", 4 | "Packages": [ 5 | "./..." 6 | ], 7 | "Deps": [ 8 | { 9 | "ImportPath": "github.com/Bowery/slack", 10 | "Rev": "12fa50d4146c25c17ca03e924b0c563d0d4cf57b" 11 | }, 12 | { 13 | "ImportPath": "github.com/bitly/go-nsq", 14 | "Comment": "v1.0.4-9-g8c8eba2", 15 | "Rev": "8c8eba2ac6823ce1ba17b3a353eaf5811a21a7f5" 16 | }, 17 | { 18 | "ImportPath": "github.com/mreiferson/go-snappystream", 19 | "Comment": "v0.2.3", 20 | "Rev": "028eae7ab5c4c9e2d1cb4c4ca1e53259bbe7e504" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /Godeps/Readme: -------------------------------------------------------------------------------- 1 | This directory tree is generated automatically by godep. 2 | 3 | Please do not edit. 4 | 5 | See https://github.com/tools/godep for more information. 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | nsq_to_slack 2 | ============ 3 | 4 | dump messages from NSQ to Slack. 5 | 6 | Usage 7 | ----- 8 | 9 | ``` 10 | nsq_to_slack -channel="#events" -from="Announcer" -topic="events" -token="slack_auth_token" -lookupd="http://localhost:4161" 11 | ``` 12 | -------------------------------------------------------------------------------- /fig.yml: -------------------------------------------------------------------------------- 1 | nsqtoslack: 2 | build: . 3 | links: 4 | - nsqlookupd 5 | 6 | nsqd: 7 | image: nsqio/nsqd 8 | command: --broadcast-address=172.17.42.1 --lookupd-tcp-address=nsqlookupd:4160 9 | links: 10 | - nsqlookupd 11 | ports: 12 | - "4150:4150" 13 | - "4151:4151" 14 | 15 | nsqlookupd: 16 | image: nsqio/nsqlookupd 17 | ports: 18 | - "4160:4160" 19 | - "4161:4161" 20 | -------------------------------------------------------------------------------- /nsq_to_slack.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "flag" 5 | "log" 6 | "strconv" 7 | "sync" 8 | "time" 9 | 10 | "github.com/Bowery/slack" 11 | nsq "github.com/bitly/go-nsq" 12 | ) 13 | 14 | func main() { 15 | var lookupd, topic, channel, from, token string 16 | 17 | flag.StringVar(&lookupd, "lookupd", "http://127.0.0.1:4161", "lookupd HTTP address") 18 | flag.StringVar(&topic, "topic", "", "NSQD topic") 19 | flag.StringVar(&channel, "channel", "", "Slack channel") 20 | flag.StringVar(&from, "from", "nsq_to_slack", "Slack username") 21 | flag.StringVar(&token, "token", "", "Slack auth token") 22 | flag.Parse() 23 | 24 | if lookupd == "" || topic == "" || channel == "" || from == "" || token == "" { 25 | 26 | flag.PrintDefaults() 27 | log.Fatal("invalid options") 28 | } 29 | 30 | client := slack.NewClient(token) 31 | 32 | nsqChannel := "nsq_to_slack" + strconv.FormatInt(time.Now().Unix(), 10) //+ 33 | // "#ephemeral" 34 | 35 | c, err := nsq.NewConsumer(topic, nsqChannel, nsq.NewConfig()) 36 | if err != nil { 37 | log.Fatal(err) 38 | } 39 | 40 | c.AddHandler(nsq.HandlerFunc(func(m *nsq.Message) error { 41 | if err := client.SendMessage(channel, string(m.Body), from); err != nil { 42 | log.Print(err) 43 | } 44 | 45 | m.Finish() 46 | 47 | return nil 48 | })) 49 | 50 | if err := c.ConnectToNSQLookupd(lookupd); err != nil { 51 | log.Fatal(err) 52 | } 53 | 54 | if err := client.SendMessage(channel, "nsq_to_slack announcing messages from topic '"+topic+ 55 | "' to this channel.", from); err != nil { 56 | log.Print(err) 57 | } 58 | 59 | var wg sync.WaitGroup 60 | wg.Add(1) 61 | wg.Wait() 62 | } 63 | --------------------------------------------------------------------------------