:rocket: Modern cross-platform HTTP load-testing tool written in Go

Overview

cassowary

Go Report Card Build status Mentioned in Awesome Go Go version Current Release godoc Coverage License

English | 中文

Cassowary is a modern HTTP/S, intuitive & cross-platform load testing tool built in Go for developers, testers and sysadmins. Cassowary draws inspiration from awesome projects like k6, ab & httpstat.


Toc

Features

  • 2 Load Testing modes: one standard and one spread mode where URL Paths can be specified from a file (ideal if you want to hit several underlying microservices)
  • CI Friendly: Well-suited to be part of a CI pipeline step
  • Flexible metrics: Cloudwatch metrics, Prometheus metrics (pushing metrics to Prometheus PushGateway), JSON file
  • Configurable: Able to pass in arbitrary HTTP headers, able to configure the HTTP client
  • Supports GET, POST & PUT - POST and PUT data can be defined in a file
  • Cross Platform: One single pre-built binary for Linux, Mac OSX and Windows
  • Importable - Besides the CLI tool cassowary can be imported as a module in your Go app

Installation

Grab a pre-built binary from the GitHub Releases page. You can optionally put the cassowary binary in your PATH so you can run cassowary from any location. Alternative you can:

Homebrew on Mac OSX

You can install cassowary using the Homebrew package manager on Mac:

$ brew update && brew install cassowary

Nix/NixOS

Cassowary can be installed via the Nix package manager.

nix-env -iA cassowary

CentOS/RHEL (RPM)

If you want to roll out your own RPM you can use the spec file cassowary.spec to build an RPM package

Running Cassowary

Regular Load Test

Example running cassowary against www.example.com with 100 requests spread out over 10 concurrent users:

$ ./cassowary run -u http://www.example.com -c 10 -n 100

Starting Load Test with 100 requests using 10 concurrent users

 100% |████████████████████████████████████████| [1s:0s]            1.256773616s


 TCP Connect.....................: Avg/mean=101.90ms 	Median=102.00ms	p(95)=105ms
 Server Processing...............: Avg/mean=100.18ms 	Median=100.50ms	p(95)=103ms
 Content Transfer................: Avg/mean=0.01ms 	Median=0.00ms	p(95)=0ms

Summary:
 Total Req.......................: 100
 Failed Req......................: 0
 DNS Lookup......................: 115.00ms
 Req/s...........................: 79.57

File Slurp Mode

Example running cassowary in file slurp mode where all URL paths are specified from an external file (which can also be fetched from http if specified). By default cassowary will, without the -n flag specified, make one request per path specified in the file. However with the -n flag you can also specify how many request you want cassowary to generate against those URL paths. Example:

$ ./cassowary run -u http://localhost:8000 -c 1 -f urlpath.txt

# NOTE: from v0.10.0 and below file slurp mode had it's own command
# $ ./cassowary run-file -u http://localhost:8000 -c 1 -f urlpath.txt

Starting Load Test with 5 requests using 1 concurrent users

[ omitted ]


$ ./cassowary run -u http://localhost:8000 -c 10 -n 100 -f urlpath.txt

Starting Load Test with 100 requests using 10 concurrent users

 100% |████████████████████████████████████████| [0s:0s]            599.467161ms


 TCP Connect.....................: Avg/mean=1.80ms 	Median=2.00ms	p(95)=3ms
 Server Processing...............: Avg/mean=0.90ms 	Median=0.00ms	p(95)=3ms
 Content Transfer................: Avg/mean=0.00ms 	Median=0.00ms	p(95)=0ms

Summary:
 Total Req.......................: 3925
 Failed Req......................: 0
 DNS Lookup......................: 2.00ms
 Req/s...........................: 6547.48

Exporting Metrics to File

Example exporting cassowary json metrics to a file:

$ ./cassowary run --json-metrics --json-metrics-file=metrics.json -u http://localhost:8000 -c 125 -n 100000

Starting Load Test with 100000 requests using 125 concurrent users

 100% |████████████████████████████████████████| [0s:0s]            984.9862ms


 TCP Connect.....................: Avg/mean=-0.18ms     Median=0.00ms   p(95)=1ms
 Server Processing...............: Avg/mean=0.16ms      Median=0.00ms   p(95)=1ms
 Content Transfer................: Avg/mean=0.01ms      Median=0.00ms   p(95)=0ms

Summary:
 Total Req.......................: 100000
 Failed Req......................: 0
 DNS Lookup......................: 2.00ms
 Req/s...........................: 101524.27

If json-metrics-file flag is missing then the default filename is out.json.

Exporting Metrics to Prometheus

Example exporting cassowary metrics to Prometheus by supplying an Prometheus PushGatway URL:

$ ./cassowary run -u http://localhost:8000 -c 125 -n 100000 -p http://pushgatway:9091

Starting Load Test with 100000 requests using 125 concurrent users

[ omitted for brevity ]

Exporting Metrics to Cloudwatch

Cassowary can export metrics to AWS Cloudwatch just by adding the --cloudwatch flag without a value. Take note that you will need to tell Cassoway which AWS Region you want to use. The easiest way is using an environment variable as shown below:

$ export AWS_REGION=eu-north-1 && ./cassowary run -u http://localhost:8000 -c 125 -n 100000 --cloudwatch

Starting Load Test with 100000 requests using 125 concurrent users

[ omitted for brevity ]

Load Test with POST Data

Example hitting a POST endpoint where POST json data is defined in a file:

$ ./cassowary run -u http://localhost:8000/add-user -c 10 -n 1000 --postfile user.json

Starting Load Test with 1000 requests using 10 concurrent users

[ omitted for brevity ]

Load Test with PATCH Data

Example hitting a PATCH endpoint where PATCH json data is defined in a file:

$ ./cassowary run -u http://localhost:8000/add-user -c 5 -n 200 --patchfile user.json

Starting Load Test with 200 requests using 5 concurrent users

[ omitted for brevity ]

Specifying a Duration for the Load Test

Example specifying a duration for your load test, in the command below we specify that we want send 100 requests over a duration of 30 seconds:

$ ./cassowary run -u http://localhost:8000 -n 100 -d 30

Starting Load Test with 100 requests using 1 concurrent users

[ omitted for brevity ]

Adding HTTP Headers

Example adding an HTTP header when running cassowary

$ ./cassowary run -u http://localhost:8000 -c 10 -n 1000 -H 'Host: www.example.com'

Starting Load Test with 1000 requests using 10 concurrent users

[ omitted for brevity ]

Disabling HTTP keep-alive

Example disabling http keep-alive (by default keep-alive are enabled):

$ ./cassowary run -u http://localhost:8000 -c 10 -n 1000 --disable-keep-alive

Starting Load Test with 1000 requests using 10 concurrent users

[ omitted for brevity ]

Specifying ca certificate

Example specifying ca certificate

$ ./cassowary run -u http://localhost:8000 -c 10 -n 1000 --ca /path/to/ca.pem

Starting Load Test with 1000 requests using 10 concurrent users

[ omitted for brevity ]

x509 Authentication

Example specifying client authentication for mTLS

$ ./cassowary run -u https://localhost:8443 -c 10 -n 1000 --cert /path/to/client.pem --key /path/to/client-key.pem --ca /path/to/ca.pem

Starting Load Test with 1000 requests using 10 concurrent users

[ omitted for brevity ]

Importing cassowary as a module/library

Cassowary can be imported and used as a module in your Go app. Start by fetching the dependency by using go mod:

$ go mod init test && go get github.com/rogerwelin/cassowary/pkg/client

And below show a simple example on how to trigger a load test from your code and printing the results:

package main

import (
        "encoding/json"
	"fmt"

	"github.com/rogerwelin/cassowary/pkg/client"
)

func main() {
	cass := &client.Cassowary{
		BaseURL:               "http://www.example.com",
		ConcurrencyLevel:      1,
		Requests:              10,
		DisableTerminalOutput: true,
	}
	metrics, err := cass.Coordinate()
	if err != nil {
		panic(err)
	}

        // print results
	fmt.Printf("%+v\n", metrics)

        // or print as json
	jsonMetrics, err := json.Marshal(metrics)
	if err != nil {
		panic(err)
	}

	fmt.Println(string(jsonMetrics))
}

More library examples can be found here

Versioning

Cassowary follows semantic versioning. The public library (pkg/client) may break backwards compatibility until it hits a stable v1.0.0 release.

Contributing

Contributions are welcome! To request a feature create a new issue with the label feature-request. Find a bug? Please add an issue with the label bugs. Pull requests are also welcomed but please add an issue on the requested feature first (unless it's a simple bug fix or readme change)

Issues
  • panic: runtime error: index out of range [-1]

    panic: runtime error: index out of range [-1]

    Running a simple test:

    $ cassowary run -u http://localhost:2015 -c 10 -n 100000
    
    Starting Load Test with 100000 requests using 10 concurrent users
    
     100% |████████████████████████████████████████| [3s:0s]            3.000194405s
    panic: runtime error: index out of range [-1]
    
    goroutine 1 [running]:
    main.calcMedian(0x0, 0x0, 0x0, 0x17800)
    	/Users/rogerwelin/programming/cassowary/stats.go:29 +0xd8
    main.(*cassowary).coordinate(0xc00001e700, 0xc00001e700, 0xc00014c120)
    	/Users/rogerwelin/programming/cassowary/load.go:203 +0xe04
    main.validateRun(0xc0000d4c60, 0x0, 0xc000176060)
    	/Users/rogerwelin/programming/cassowary/cli.go:76 +0x35c
    github.com/urfave/cli.HandleAction(0x1453980, 0x150e5c0, 0xc0000d4c60, 0xc0000d4c60, 0x0)
    	/Users/rogerwelin/go/pkg/mod/github.com/urfave/[email protected]/app.go:523 +0xbe
    github.com/urfave/cli.Command.Run(0x14e9f41, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14f1292, 0xf, 0x0, ...)
    	/Users/rogerwelin/go/pkg/mod/github.com/urfave/[email protected]/command.go:174 +0x51c
    github.com/urfave/cli.(*App).Run(0xc000130380, 0xc00001e100, 0x8, 0x8, 0x0, 0x0)
    	/Users/rogerwelin/go/pkg/mod/github.com/urfave/[email protected]/app.go:276 +0x718
    main.runCLI(0xc00001e100, 0x8, 0x8)
    	/Users/rogerwelin/programming/cassowary/cli.go:198 +0x946
    main.main()
    	/Users/rogerwelin/programming/cassowary/main.go:8 +0x45
    

    I'm using this binary on macOS: https://github.com/rogerwelin/cassowary/releases/tag/v0.1.1

    bug 
    opened by mholt 6
  • [Chore Feature Request]: Use cassowary_linux_x86_64.zip instead of cassowary_{VERSION}_Linux_x86_64.tar.gz.zip

    [Chore Feature Request]: Use cassowary_linux_x86_64.zip instead of cassowary_{VERSION}_Linux_x86_64.tar.gz.zip

    Hi @rogerwelin and contributors.

    Thanks to amazing tool. I use cassowary and i want integrate downloads as binary, but i can't download LATEST version always, i need modify my ansible playbook to use. I.e i currently can't download via https://github.com/rogerwelin/cassowary/releases/latest/download/cassowary_Linux_x86_64.tar.gz

    It is possible change release build binary names to cassowary_Linux_x86_64.tar.gz or something static ?

    Thanks again

    feature-request 
    opened by dalisoft 4
  • PATCH support is missing

    PATCH support is missing

    Hi, I needed PATCH support similar to POST and I have modified the code in my local machine and it will be useful for others too. Could you please give me permission to contribute to this open source project with those changes by raising a pull request? thanks.

    question 
    opened by rvinfoblox 3
  • is the Slurp mode gone?

    is the Slurp mode gone?

    I downloaded the latest release and the example for the slurp mode -f option is not working anymore, the option -f is not present anymore, is this intentional?

    Cheers

    opened by maurorappa 3
  • 0.14.0 checksum changed

    0.14.0 checksum changed

    Hello. I am one of the maintainers of Homebrew, a package manager for macOS and Linux.

    We noticed that the checksum of the 0.14.0 release has changed from: 385232478b8552d56429fbe2584950bfbe42e3b611919a31075366a143aae9a9 to: 04fbf1e563378bc37a5ad44e69a3b100647406ea2debae2d38d3c406399628fa

    Did someone re-tag the release (which is the insane thing to do, see the git manual, or did someone malicious gain access to your repo?

    Tags that change are seen as a major security issue on our side, and we need confirmation that this was only a retag.

    In future situations were you need to retag, please create a new tag/release instead.

    See https://github.com/Homebrew/homebrew-core/pull/95741 for the issue on our side.

    opened by iMichka 2
  • panic running the test

    panic running the test

    centos-7 x86_64 VM

    $ cassowary/cassowary -v
    cassowary - 學名 version 0.9.0
    $ cassowary/cassowary run -u https://dev.test -c 500 -n 100000 --disable-keep-alive
    
    Starting Load Test with 100000 requests using 500 concurrent users
    
      14% |█████                                   | [44s:4m36s]            panic: Get "https://dev.test": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
    
    goroutine 262 [running]:
    github.com/rogerwelin/cassowary/pkg/client.(*Cassowary).runLoadTest(0xc0002dc000, 0xc000300000, 0xc00009c060)
            /Users/roger/programmering/cassowary/pkg/client/load.go:93 +0x144a
    github.com/rogerwelin/cassowary/pkg/client.(*Cassowary).Coordinate.func1(0xc0002dc000, 0xc000300000, 0xc00009c060, 0xc000022630)
            /Users/roger/programmering/cassowary/pkg/client/load.go:180 +0x3f
    created by github.com/rogerwelin/cassowary/pkg/client.(*Cassowary).Coordinate
            /Users/roger/programmering/cassowary/pkg/client/load.go:179 +0x2b6````
    opened by mator 2
  • add support for x509 authentication

    add support for x509 authentication

    All our services are behind x509 authentication, could you please add support for it. For instance I provided x509 support for hey tool here https://github.com/vkuznet/hey/tree/x509 via https://github.com/vkuznet/x509proxy

    feature-request 
    opened by vkuznet 2
  • Build issue

    Build issue

    Could you please provide details of how to build the package, a standard Go way fails with many errors, e.g.

    go version
    go version go1.13.3 linux/amd64
    
    go get github.com/rogerwelin/cassowary
    # github.com/rogerwelin/cassowary
    go/src/github.com/rogerwelin/cassowary/cli.go:140:19: cannot use cli.StringFlag literal (type cli.StringFlag) as type cli.Flag in array or slice literal:
            cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
    go/src/github.com/rogerwelin/cassowary/cli.go:145:16: cannot use cli.IntFlag literal (type cli.IntFlag) as type cli.Flag in array or slice literal:
            cli.IntFlag does not implement cli.Flag (Apply method has pointer receiver)
    go/src/github.com/rogerwelin/cassowary/cli.go:150:19: cannot use cli.StringFlag literal (type cli.StringFlag) as type cli.Flag in array or slice literal:
            cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
    go/src/github.com/rogerwelin/cassowary/cli.go:155:19: cannot use cli.StringFlag literal (type cli.StringFlag) as type cli.Flag in array or slice literal:
            cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
    go/src/github.com/rogerwelin/cassowary/cli.go:159:19: cannot use cli.StringFlag literal (type cli.StringFlag) as type cli.Flag in array or slice literal:
            cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
    go/src/github.com/rogerwelin/cassowary/cli.go:163:17: cannot use cli.BoolFlag literal (type cli.BoolFlag) as type cli.Flag in array or slice literal:
            cli.BoolFlag does not implement cli.Flag (Apply method has pointer receiver)
    go/src/github.com/rogerwelin/cassowary/cli.go:167:19: cannot use cli.StringFlag literal (type cli.StringFlag) as type cli.Flag in array or slice literal:
            cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
    go/src/github.com/rogerwelin/cassowary/cli.go:178:19: cannot use cli.StringFlag literal (type cli.StringFlag) as type cli.Flag in array or slice literal:
            cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
    go/src/github.com/rogerwelin/cassowary/cli.go:183:16: cannot use cli.IntFlag literal (type cli.IntFlag) as type cli.Flag in array or slice literal:
            cli.IntFlag does not implement cli.Flag (Apply method has pointer receiver)
    go/src/github.com/rogerwelin/cassowary/cli.go:188:16: cannot use cli.IntFlag literal (type cli.IntFlag) as type cli.Flag in array or slice literal:
            cli.IntFlag does not implement cli.Flag (Apply method has pointer receiver)
    go/src/github.com/rogerwelin/cassowary/cli.go:188:16: too many errors
    
    question 
    opened by vkuznet 2
  • Fails and exits with context deadline exceeded (Client.Timeout exceeded while awaiting headers)

    Fails and exits with context deadline exceeded (Client.Timeout exceeded while awaiting headers)

    When running cassowary run -u http://webapp.local -c 5 -f test_urls2.txt against a service I am gathering evidence on I am met with an abrupt exit, no stats and the following output:

    2021/12/02 04:19:21 Get "http://webapp.local/page-44/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
    

    Is there a way to increase the timeout? To my mind this should fall under "Failed Req" and the final stats output is the expected outcome.

    opened by joedeveloper 1
  • feature request: more percentiles

    feature request: more percentiles

    I find it's often useful to see the p99/p100 behavior of a system. I think a spread of p90, p99, p100 is more informative than p95 only, though I understand it's nice to have a single metric.

    I can see where in the code to start, but I am curious if it violates your design tenets. If so it's not worth doing a PR.

    What do you think?

    opened by mooreniemi 1
  • Add json-metrics-file flag and minor improvements including documentation

    Add json-metrics-file flag and minor improvements including documentation

    Hello @rogerwelin, it's me again.

    I have pushed a small PR which adds a --json-metrics-file=custom_filename.json flag, sometimes you really need it. The default value, if json-metrics is true but the new flag is missing, it's the out.json as previously. The json-metrics flag stays as it's. I also added it to the README.md (the json output feature was missing from there). And last, the c.outPutJSON now returns an error instead of just fmt.Println(err) and the caller (CLI) returns it as well.

    opened by kataras 1
  • Build failure on WSL2

    Build failure on WSL2

    In WSL2 Ubuntu using: brew update && brew install cassowary

    ==> Downloading https://github.com/rogerwelin/cassowary/archive/v0.14.0.tar.gz
    ==> Downloading from https://codeload.github.com/rogerwelin/cassowary/tar.gz/v0.14.0
    # #=O#- #
    ==> go build -ldflags -s -w -X main.version=0.14.0 ./cmd/cassowary
    Last 15 lines from /home/azilber/.cache/Homebrew/Logs/cassowary/01.go:
    go: downloading github.com/matttproud/golang_protobuf_extensions v1.0.1
    go: downloading github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d
    go: downloading github.com/russross/blackfriday/v2 v2.0.1
    go: downloading github.com/shurcooL/sanitized_anchor_name v1.0.0
    go: downloading golang.org/x/image v0.0.0-20210216034530-4410531fe030
    go: downloading github.com/go-fonts/liberation v0.1.1
    go: downloading github.com/phpdave11/gofpdf v1.4.2
    go: downloading github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07
    go: downloading github.com/fogleman/gg v1.3.0
    go: downloading github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af
    go: downloading github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
    go: downloading golang.org/x/text v0.3.5
    go: downloading github.com/jmespath/go-jmespath v0.3.0
    # runtime/cgo
    as: unrecognized option '--gdwarf-5'
    
    opened by azilber 1
  • Enhancement: add plugins

    Enhancement: add plugins

    Have you considered writing a plugin interface for cassowary? I make a lot of use of wrk because of that capability and it's really useful. (That could totally solve #15 without having to add any flags or anything like that, as long as there's a hook point in the right place). Would love to have that here because the feature set and metrics that you've got are far superior.

    I wouldn't mind taking a shot at it, if that's the direction you want this project to go. Just say the word.

    enhancement 
    opened by mostfunkyduck 2
  • Question about timing the server processing

    Question about timing the server processing

    I can see in the line below that what you call ServerProcessing is the time between when the connection's been established and we get the response's first byte.

    https://github.com/rogerwelin/cassowary/blob/master/pkg/client/load.go#L117

    But according to Go's httptrace docs there's a hook called WroteRequest that seems to me more accurate to the start of the remote server process.

    I remember digging a little deeper into the request's lifecycle when I wrote a similar feature but I'm no expert so it's just me being curious.

    Why did you go with GotConn hook instead?

    Thanks in advance.

    question 
    opened by haggen 0
  • passing different request Headers per each request from an external file

    passing different request Headers per each request from an external file

    Is it possible to pass different (random) request Headers per each http request from an external file? if not, would you like to add this feature?

    my use case is following, I would like to load test my application but for different user accounts in order to eliminate non-realistic cache hits. my app expects 'Authorization' request header to identify the end user.

    feature-request 
    opened by gunayus 2
  • [FEATURE REQUEST] Add a `Throughput` in the Summary

    [FEATURE REQUEST] Add a `Throughput` in the Summary

    Hello @rogerwelin,

    First of all I have to say that this is a great project with clean source code, I was able to understand the code flow very quickly, good job!

    I just want to add a Throughput label in the Summary section of the results output. I think it's quite useful for us, who develop web frameworks, to see that number right away. Also, you can move the CLI part package main on a "./cmd/cassowary" directory so we can use the github.com/rogewelin/cassowary package as a library too to take the results directly. I know that you have json output option too but it will require from us to download executable based on the host OS, then exec.Cmd, then read the json file and unmarshal it which it is quite slow operation and requires many steps that can fail.

    • https://en.wikipedia.org/wiki/Measuring_network_throughput

    Thanks again, Gerasimos Maropoulos. Author of Iris web framework

    feature-request 
    opened by kataras 2
Releases(v0.14.1)
Owner
Roger Welin
Cloud Architect, DevOps, gopher, tool builder, software enthusiast, open source contributor
Roger Welin
High-performance GitHub webhook events toolset for Go :rocket:

githubevents GitHub webhook events toolset for Go githubevents is a webhook events toolset for the Go programming language inspired by octokit/webhook

Christian Bargmann 21 Jun 9, 2022
Fast cross-platform HTTP benchmarking tool written in Go

bombardier bombardier is a HTTP(S) benchmarking tool. It is written in Go programming language and uses excellent fasthttp instead of Go's default htt

Максим Федосеев 3.6k Jun 28, 2022
HTTP load testing tool and library. It's over 9000!

Vegeta Vegeta is a versatile HTTP load testing tool built out of a need to drill HTTP services with a constant request rate. It can be used both as a

Tomás Senart 19.8k Jul 2, 2022
Blast is a simple tool for API load testing and batch jobs

Blast Blast makes API requests at a fixed rate. The number of concurrent workers is configurable. The rate may be changed interactively during executi

Dave Brophy 206 Jun 7, 2022
Shared counter (with max limit) for k6 load testing tool

xk6-increment This is a k6 extension using the xk6 system. ❗ This is a proof of concept, isn't supported by the k6 team, and may break in the future.

Michail Safronov 0 Nov 30, 2021
A cross platform CLI for Flyte. Written in Golang. Offers an intuitive interface to Flyte https://flytectl.readthedocs.io/en/latest/

FlyteCTL Flyte's official command-line interface Documentation · Contribution Guide FlyteCTL was designed as a portable and lightweight command-line i

Flyte 26 Jun 2, 2022
Cross-platform beanstalkd queue server admin console.

Overview aurora is a web-based Beanstalkd queue server console written in Go and works on macOS, Linux, and Windows machines. The main idea behind usi

null 563 Jun 25, 2022
Based on the electron Cross-platform Mini browser

Based on the electron Cross-platform Mini browser

池边树下 1 May 1, 2022
Defalyzer: A cross-platform software that focuses on defacement analyzing and mirror tracking

Project Defalyzer is a cross-platform software that focuses on defacement analyz

numaN 12 Apr 28, 2022
Stuff to make standing up sigstore (esp. for testing) easier for e2e/integration testing.

sigstore-scaffolding This repository contains scaffolding to make standing up a full sigstore stack easier and automatable. Our focus is on running on

Ville Aikas 17 May 31, 2022
HTTP load generator, ApacheBench (ab) replacement, formerly known as rakyll/boom

hey is a tiny program that sends some load to a web application. hey was originally called boom and was influenced from Tarek Ziade's tool at tarekzia

Jaana Dogan 13.8k Jun 29, 2022
Frisbee is a Kubernetes-native platform for exploring, testing, and benchmarking distributed applications.

Why Frisbee ? Frisbee is a next generation platform designed to unify chaos testing and perfomance benchmarking. We address the key pain points develo

Computer Architecture and VLSI Systems (CARV) Laboratory 33 Jun 22, 2022
💧 Visual Data Preparation (VDP) is an open-source tool to seamlessly integrate Vision AI with the modern data stack

Website | Community | Blog Get Early Access Visual Data Preparation (VDP) is an open-source tool to streamline the end-to-end visual data processing p

Instill AI 17 May 30, 2022
A dead simple, no frills Go cross compile tool

Gox - Simple Go Cross Compilation Gox is a simple, no-frills tool for Go cross compilation that behaves a lot like standard go build. Gox will paralle

Mitchell Hashimoto 4.3k Jul 1, 2022
a build tool for Go, with a focus on cross-compiling, packaging and deployment

goxc NOTE: goxc has long been in maintenance mode. Ever since Go1.5 supported simple cross-compilation, this tool lost much of its value. There are st

Am Laher 1.7k Jun 16, 2022
Modern Job Scheduler

Kala Kala is a simplistic, modern, and performant job scheduler written in Go. Features: Single binary No dependencies JSON over HTTP API Job Stats Co

AJ Bahnken 1.8k Jun 26, 2022
Resilient, scalable Brainf*ck, in the spirit of modern systems design

Brainf*ck-as-a-Service A little BF interpreter, inspired by modern systems design trends. How to run it? docker-compose up -d bash hello.sh # Should p

Serge Zaitsev 138 Apr 22, 2022
The smart virtual machines manager. A modern CLI for Vagrant Boxes.

The smart virtual machines manager Table of Contents: What is Vermin Install Vermin Usage Contributors TODO What is Vermin Vermin is a smart, simple a

Muhammad Hewedy 123 Jun 15, 2022
Go library providing algorithms optimized to leverage the characteristics of modern CPUs

asm Go library providing algorithms optimized to leverage the characteristics of modern CPUs. Motivation With the development of Cloud technologies, a

Segment 742 Jun 22, 2022