mirror of
https://github.com/openfaas/faas.git
synced 2025-06-21 00:06:38 +00:00
Merge master into breakout_swarm
Signed-off-by: Alex Ellis <alexellis2@gmail.com>
This commit is contained in:
146
gateway/vendor/github.com/nats-io/go-nats/examples/nats-bench.go
generated
vendored
Normal file
146
gateway/vendor/github.com/nats-io/go-nats/examples/nats-bench.go
generated
vendored
Normal file
@ -0,0 +1,146 @@
|
||||
// Copyright 2015 Apcera Inc. All rights reserved.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/nats-io/go-nats"
|
||||
"github.com/nats-io/go-nats/bench"
|
||||
)
|
||||
|
||||
// Some sane defaults
|
||||
const (
|
||||
DefaultNumMsgs = 100000
|
||||
DefaultNumPubs = 1
|
||||
DefaultNumSubs = 0
|
||||
DefaultMessageSize = 128
|
||||
)
|
||||
|
||||
func usage() {
|
||||
log.Fatalf("Usage: nats-bench [-s server (%s)] [--tls] [-np NUM_PUBLISHERS] [-ns NUM_SUBSCRIBERS] [-n NUM_MSGS] [-ms MESSAGE_SIZE] [-csv csvfile] <subject>\n", nats.DefaultURL)
|
||||
}
|
||||
|
||||
var benchmark *bench.Benchmark
|
||||
|
||||
func main() {
|
||||
var urls = flag.String("s", nats.DefaultURL, "The nats server URLs (separated by comma)")
|
||||
var tls = flag.Bool("tls", false, "Use TLS Secure Connection")
|
||||
var numPubs = flag.Int("np", DefaultNumPubs, "Number of Concurrent Publishers")
|
||||
var numSubs = flag.Int("ns", DefaultNumSubs, "Number of Concurrent Subscribers")
|
||||
var numMsgs = flag.Int("n", DefaultNumMsgs, "Number of Messages to Publish")
|
||||
var msgSize = flag.Int("ms", DefaultMessageSize, "Size of the message.")
|
||||
var csvFile = flag.String("csv", "", "Save bench data to csv file")
|
||||
|
||||
log.SetFlags(0)
|
||||
flag.Usage = usage
|
||||
flag.Parse()
|
||||
|
||||
args := flag.Args()
|
||||
if len(args) != 1 {
|
||||
usage()
|
||||
}
|
||||
|
||||
if *numMsgs <= 0 {
|
||||
log.Fatal("Number of messages should be greater than zero.")
|
||||
}
|
||||
|
||||
// Setup the option block
|
||||
opts := nats.GetDefaultOptions()
|
||||
opts.Servers = strings.Split(*urls, ",")
|
||||
for i, s := range opts.Servers {
|
||||
opts.Servers[i] = strings.Trim(s, " ")
|
||||
}
|
||||
opts.Secure = *tls
|
||||
|
||||
benchmark = bench.NewBenchmark("NATS", *numSubs, *numPubs)
|
||||
|
||||
var startwg sync.WaitGroup
|
||||
var donewg sync.WaitGroup
|
||||
|
||||
donewg.Add(*numPubs + *numSubs)
|
||||
|
||||
// Run Subscribers first
|
||||
startwg.Add(*numSubs)
|
||||
for i := 0; i < *numSubs; i++ {
|
||||
go runSubscriber(&startwg, &donewg, opts, *numMsgs, *msgSize)
|
||||
}
|
||||
startwg.Wait()
|
||||
|
||||
// Now Publishers
|
||||
startwg.Add(*numPubs)
|
||||
pubCounts := bench.MsgsPerClient(*numMsgs, *numPubs)
|
||||
for i := 0; i < *numPubs; i++ {
|
||||
go runPublisher(&startwg, &donewg, opts, pubCounts[i], *msgSize)
|
||||
}
|
||||
|
||||
log.Printf("Starting benchmark [msgs=%d, msgsize=%d, pubs=%d, subs=%d]\n", *numMsgs, *msgSize, *numPubs, *numSubs)
|
||||
|
||||
startwg.Wait()
|
||||
donewg.Wait()
|
||||
|
||||
benchmark.Close()
|
||||
|
||||
fmt.Print(benchmark.Report())
|
||||
|
||||
if len(*csvFile) > 0 {
|
||||
csv := benchmark.CSV()
|
||||
ioutil.WriteFile(*csvFile, []byte(csv), 0644)
|
||||
fmt.Printf("Saved metric data in csv file %s\n", *csvFile)
|
||||
}
|
||||
}
|
||||
|
||||
func runPublisher(startwg, donewg *sync.WaitGroup, opts nats.Options, numMsgs int, msgSize int) {
|
||||
nc, err := opts.Connect()
|
||||
if err != nil {
|
||||
log.Fatalf("Can't connect: %v\n", err)
|
||||
}
|
||||
defer nc.Close()
|
||||
startwg.Done()
|
||||
|
||||
args := flag.Args()
|
||||
subj := args[0]
|
||||
var msg []byte
|
||||
if msgSize > 0 {
|
||||
msg = make([]byte, msgSize)
|
||||
}
|
||||
|
||||
start := time.Now()
|
||||
|
||||
for i := 0; i < numMsgs; i++ {
|
||||
nc.Publish(subj, msg)
|
||||
}
|
||||
nc.Flush()
|
||||
benchmark.AddPubSample(bench.NewSample(numMsgs, msgSize, start, time.Now(), nc))
|
||||
|
||||
donewg.Done()
|
||||
}
|
||||
|
||||
func runSubscriber(startwg, donewg *sync.WaitGroup, opts nats.Options, numMsgs int, msgSize int) {
|
||||
nc, err := opts.Connect()
|
||||
if err != nil {
|
||||
log.Fatalf("Can't connect: %v\n", err)
|
||||
}
|
||||
|
||||
args := flag.Args()
|
||||
subj := args[0]
|
||||
|
||||
received := 0
|
||||
start := time.Now()
|
||||
nc.Subscribe(subj, func(msg *nats.Msg) {
|
||||
received++
|
||||
if received >= numMsgs {
|
||||
benchmark.AddSubSample(bench.NewSample(numMsgs, msgSize, start, time.Now(), nc))
|
||||
donewg.Done()
|
||||
nc.Close()
|
||||
}
|
||||
})
|
||||
nc.Flush()
|
||||
startwg.Done()
|
||||
}
|
46
gateway/vendor/github.com/nats-io/go-nats/examples/nats-pub.go
generated
vendored
Normal file
46
gateway/vendor/github.com/nats-io/go-nats/examples/nats-pub.go
generated
vendored
Normal file
@ -0,0 +1,46 @@
|
||||
// Copyright 2012-2016 Apcera Inc. All rights reserved.
|
||||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"log"
|
||||
|
||||
"github.com/nats-io/go-nats"
|
||||
)
|
||||
|
||||
// NOTE: Use tls scheme for TLS, e.g. nats-pub -s tls://demo.nats.io:4443 foo hello
|
||||
func usage() {
|
||||
log.Fatalf("Usage: nats-pub [-s server (%s)] <subject> <msg> \n", nats.DefaultURL)
|
||||
}
|
||||
|
||||
func main() {
|
||||
var urls = flag.String("s", nats.DefaultURL, "The nats server URLs (separated by comma)")
|
||||
|
||||
log.SetFlags(0)
|
||||
flag.Usage = usage
|
||||
flag.Parse()
|
||||
|
||||
args := flag.Args()
|
||||
if len(args) < 2 {
|
||||
usage()
|
||||
}
|
||||
|
||||
nc, err := nats.Connect(*urls)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer nc.Close()
|
||||
|
||||
subj, msg := args[0], []byte(args[1])
|
||||
|
||||
nc.Publish(subj, msg)
|
||||
nc.Flush()
|
||||
|
||||
if err := nc.LastError(); err != nil {
|
||||
log.Fatal(err)
|
||||
} else {
|
||||
log.Printf("Published [%s] : '%s'\n", subj, msg)
|
||||
}
|
||||
}
|
60
gateway/vendor/github.com/nats-io/go-nats/examples/nats-qsub.go
generated
vendored
Normal file
60
gateway/vendor/github.com/nats-io/go-nats/examples/nats-qsub.go
generated
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
// Copyright 2012-2016 Apcera Inc. All rights reserved.
|
||||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"log"
|
||||
"os"
|
||||
"runtime"
|
||||
|
||||
"github.com/nats-io/go-nats"
|
||||
)
|
||||
|
||||
// NOTE: Use tls scheme for TLS, e.g. nats-qsub -s tls://demo.nats.io:4443 foo
|
||||
func usage() {
|
||||
log.Fatalf("Usage: nats-qsub [-s server] [-t] <subject> <queue-group>\n")
|
||||
}
|
||||
|
||||
func printMsg(m *nats.Msg, i int) {
|
||||
log.Printf("[#%d] Received on [%s] Queue[%s] Pid[%d]: '%s'\n", i, m.Subject, m.Sub.Queue, os.Getpid(), string(m.Data))
|
||||
}
|
||||
|
||||
func main() {
|
||||
var urls = flag.String("s", nats.DefaultURL, "The nats server URLs (separated by comma)")
|
||||
var showTime = flag.Bool("t", false, "Display timestamps")
|
||||
|
||||
log.SetFlags(0)
|
||||
flag.Usage = usage
|
||||
flag.Parse()
|
||||
|
||||
args := flag.Args()
|
||||
if len(args) < 2 {
|
||||
usage()
|
||||
}
|
||||
|
||||
nc, err := nats.Connect(*urls)
|
||||
if err != nil {
|
||||
log.Fatalf("Can't connect: %v\n", err)
|
||||
}
|
||||
|
||||
subj, queue, i := args[0], args[1], 0
|
||||
|
||||
nc.QueueSubscribe(subj, queue, func(msg *nats.Msg) {
|
||||
i++
|
||||
printMsg(msg, i)
|
||||
})
|
||||
nc.Flush()
|
||||
|
||||
if err := nc.LastError(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
log.Printf("Listening on [%s]\n", subj)
|
||||
if *showTime {
|
||||
log.SetFlags(log.LstdFlags)
|
||||
}
|
||||
|
||||
runtime.Goexit()
|
||||
}
|
48
gateway/vendor/github.com/nats-io/go-nats/examples/nats-req.go
generated
vendored
Normal file
48
gateway/vendor/github.com/nats-io/go-nats/examples/nats-req.go
generated
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
// Copyright 2012-2016 Apcera Inc. All rights reserved.
|
||||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/nats-io/go-nats"
|
||||
)
|
||||
|
||||
// NOTE: Use tls scheme for TLS, e.g. nats-req -s tls://demo.nats.io:4443 foo hello
|
||||
func usage() {
|
||||
log.Fatalf("Usage: nats-req [-s server (%s)] <subject> <msg> \n", nats.DefaultURL)
|
||||
}
|
||||
|
||||
func main() {
|
||||
var urls = flag.String("s", nats.DefaultURL, "The nats server URLs (separated by comma)")
|
||||
|
||||
log.SetFlags(0)
|
||||
flag.Usage = usage
|
||||
flag.Parse()
|
||||
|
||||
args := flag.Args()
|
||||
if len(args) < 2 {
|
||||
usage()
|
||||
}
|
||||
|
||||
nc, err := nats.Connect(*urls)
|
||||
if err != nil {
|
||||
log.Fatalf("Can't connect: %v\n", err)
|
||||
}
|
||||
defer nc.Close()
|
||||
subj, payload := args[0], []byte(args[1])
|
||||
|
||||
msg, err := nc.Request(subj, []byte(payload), 100*time.Millisecond)
|
||||
if err != nil {
|
||||
if nc.LastError() != nil {
|
||||
log.Fatalf("Error in Request: %v\n", nc.LastError())
|
||||
}
|
||||
log.Fatalf("Error in Request: %v\n", err)
|
||||
}
|
||||
|
||||
log.Printf("Published [%s] : '%s'\n", subj, payload)
|
||||
log.Printf("Received [%v] : '%s'\n", msg.Subject, string(msg.Data))
|
||||
}
|
60
gateway/vendor/github.com/nats-io/go-nats/examples/nats-rply.go
generated
vendored
Normal file
60
gateway/vendor/github.com/nats-io/go-nats/examples/nats-rply.go
generated
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
// Copyright 2012-2016 Apcera Inc. All rights reserved.
|
||||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"log"
|
||||
"runtime"
|
||||
|
||||
"github.com/nats-io/go-nats"
|
||||
)
|
||||
|
||||
// NOTE: Use tls scheme for TLS, e.g. nats-rply -s tls://demo.nats.io:4443 foo hello
|
||||
func usage() {
|
||||
log.Fatalf("Usage: nats-rply [-s server][-t] <subject> <response>\n")
|
||||
}
|
||||
|
||||
func printMsg(m *nats.Msg, i int) {
|
||||
log.Printf("[#%d] Received on [%s]: '%s'\n", i, m.Subject, string(m.Data))
|
||||
}
|
||||
|
||||
func main() {
|
||||
var urls = flag.String("s", nats.DefaultURL, "The nats server URLs (separated by comma)")
|
||||
var showTime = flag.Bool("t", false, "Display timestamps")
|
||||
|
||||
log.SetFlags(0)
|
||||
flag.Usage = usage
|
||||
flag.Parse()
|
||||
|
||||
args := flag.Args()
|
||||
if len(args) < 2 {
|
||||
usage()
|
||||
}
|
||||
|
||||
nc, err := nats.Connect(*urls)
|
||||
if err != nil {
|
||||
log.Fatalf("Can't connect: %v\n", err)
|
||||
}
|
||||
|
||||
subj, reply, i := args[0], args[1], 0
|
||||
|
||||
nc.Subscribe(subj, func(msg *nats.Msg) {
|
||||
i++
|
||||
printMsg(msg, i)
|
||||
nc.Publish(msg.Reply, []byte(reply))
|
||||
})
|
||||
nc.Flush()
|
||||
|
||||
if err := nc.LastError(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
log.Printf("Listening on [%s]\n", subj)
|
||||
if *showTime {
|
||||
log.SetFlags(log.LstdFlags)
|
||||
}
|
||||
|
||||
runtime.Goexit()
|
||||
}
|
59
gateway/vendor/github.com/nats-io/go-nats/examples/nats-sub.go
generated
vendored
Normal file
59
gateway/vendor/github.com/nats-io/go-nats/examples/nats-sub.go
generated
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
// Copyright 2012-2016 Apcera Inc. All rights reserved.
|
||||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"log"
|
||||
"runtime"
|
||||
|
||||
"github.com/nats-io/go-nats"
|
||||
)
|
||||
|
||||
// NOTE: Use tls scheme for TLS, e.g. nats-sub -s tls://demo.nats.io:4443 foo
|
||||
func usage() {
|
||||
log.Fatalf("Usage: nats-sub [-s server] [-t] <subject> \n")
|
||||
}
|
||||
|
||||
func printMsg(m *nats.Msg, i int) {
|
||||
log.Printf("[#%d] Received on [%s]: '%s'\n", i, m.Subject, string(m.Data))
|
||||
}
|
||||
|
||||
func main() {
|
||||
var urls = flag.String("s", nats.DefaultURL, "The nats server URLs (separated by comma)")
|
||||
var showTime = flag.Bool("t", false, "Display timestamps")
|
||||
|
||||
log.SetFlags(0)
|
||||
flag.Usage = usage
|
||||
flag.Parse()
|
||||
|
||||
args := flag.Args()
|
||||
if len(args) < 1 {
|
||||
usage()
|
||||
}
|
||||
|
||||
nc, err := nats.Connect(*urls)
|
||||
if err != nil {
|
||||
log.Fatalf("Can't connect: %v\n", err)
|
||||
}
|
||||
|
||||
subj, i := args[0], 0
|
||||
|
||||
nc.Subscribe(subj, func(msg *nats.Msg) {
|
||||
i += 1
|
||||
printMsg(msg, i)
|
||||
})
|
||||
nc.Flush()
|
||||
|
||||
if err := nc.LastError(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
log.Printf("Listening on [%s]\n", subj)
|
||||
if *showTime {
|
||||
log.SetFlags(log.LstdFlags)
|
||||
}
|
||||
|
||||
runtime.Goexit()
|
||||
}
|
Reference in New Issue
Block a user