Files
goreplay/index.html
T
2016-07-13 19:19:14 +03:00

493 lines
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-us">
<head>
<!-- Required meta tags always come first -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>Gor - test your system with real data</title>
<meta name="description" content="Gor is an open-source tool for capturing and replaying live HTTP traffic into a test environment in order to continuously test your system with real data.">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" integrity="sha384-y3tfxAZXuh4HwSYylfB+J125MxIs6mR5FOHamPBG064zB+AFeWH94NdvaCBm8qnd" crossorigin="anonymous">
<link href='https://fonts.googleapis.com/css?family=Armata' rel='stylesheet' type='text/css'>
<style type="text/css">
* {
font-family: 'Armata', sans-serif;
}
body {
background: #eee;
max-width: 120rem;
}
.container-fluid {
max-width: 120rem;
}
nav h1 {
display: inline;
line-height: 5rem;
/*font-size: ;*/
}
.navbar {
font-size: 200%;
padding: 1rem 4rem;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
}
.navbar .navbar-brand {
font-size: 3rem;
}
.navbar .navbar-brand + span {
font-size: smaller;
line-height: 5.5rem;
opacity: 0.8;
}
.navbar ul a {
font-size: smaller;
color: #333;
line-height: 4.5rem;
margin-left: 2rem;
}
.trustedby {
white-space: nowrap;
margin-top: 4rem;
}
.trustedby img {
margin-right: 1.9rem;
}
p {
font-size: xx-large;
color: #666;
}
h3 {
color: #aaa;
}
.success-story {
margin-top: 4rem;
padding: 2rem;
padding-bottom: 1rem;
background-color: white;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
width: 50%;
float: left;
}
.success-story p {
font-size: 1.1rem;
}
.success-story:nth-child(2n) {
margin-left: 2rem;
width: calc(50% - 2rem);
}
.pro {
background-color: white;
padding: 2rem;
padding-bottom: 1rem;
margin-top: 2.5rem;
}
.pro p {
font-size: 1.5rem;
margin-top: 1rem;
}
.pro table th {
border-top: none;
}
.pro table thead a {
color: #666;
margin-left: 1rem;
}
.pro th {
font-size: 2rem;
}
.pro center p {
font-size: 1rem;
}
.pro ul li {
font-size: larger;
line-height: 200%;
}
b {
font-family: Helvetica, Arial;
font-size: 1.1em;
}
tr td:first-child {
text-align: right;
padding-right: 4rem;
text-transform: uppercase;
}
tr td.yes {
background: url("./ok-xxl.png") no-repeat 12px;
background-size: 20px 20px;
}
tr td.no {
background: url("./minus.png") no-repeat 10px;
background-size: 24px 24px;
}
@media (max-width: 48em) {
.navbar {
font-size: 150%;
padding: 1rem;
}
.navbar ul {
float: none !important;
}
.navbar .navbar-brand {
font-size: 2rem;
}
.navbar .navbar-brand + span {
font-size: 1.2rem;
line-height: 2rem;
opacity: 0.8;
display: block;
}
nav h1 {
line-height: 2rem;
/*font-size: ;*/
}
.container-fluid {
padding: 1rem !important;
}
.container-fluid p {
font-size: 1.2rem;
}
h3 {
font-size: 1em;
}
.trustedby {
margin-top: 2rem;
overflow: hidden;
}
.trustedby hr {
margin-bottom: 0;
}
.success-story {
float: none;
padding: 1rem;
width: 100%;
margin: 0;
margin-top: 1rem;
}
.success-story:nth-child(2n) {
width: 100%;
margin: 0;
margin-top: 1rem;
}
.success-story p {
font-size: 1rem;
}
.clearfix + hr {
margin-top: 1rem !important;
}
.pro {
margin-top: 1rem;
padding: 1rem;
}
.pro h1 {
font-size: 1.5rem;
}
.pro p {
font-size: 1rem;
}
.pro p small {
font-size: 1rem;
}
.pro ul {
padding-left: 1rem;
}
.pro li {
font-size: 0.9rem !important;
margin: 0;
}
h2 {
font-size: 1rem;
line-height: 1.5rem;
}
.madein {
margin-top: 1rem;
display: block;
float: none !important;
}
}
</style>
<script type="text/javascript">
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t){var e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};analytics.SNIPPET_VERSION="3.1.0";
analytics.load("13VMP6M3MB7QCbIlXPgCx0QVXyRb10Mh");
analytics.page()
}}();
</script>
<meta name="google-site-verification" content="3kM-NWpR_jpkF3L1pa4JH9gX0wtztcojEmbZLew2hHQ" />
</head>
<body>
<nav class="navbar navbar-light bg-faded">
<h1>
<a class="navbar-brand" href="/">Gor</a>
<span>&mdash;&nbsp;&nbsp;test your system with real data</span>
</h1>
<ul class="nav navbar-nav pull-xs-right">
<li class="nav-item">
<a class="nav-link" href="#pro">Pro</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#about">About</a>
</li>
<!-- <li class="nav-item">
<a class="nav-link" href="#about">About</a>
</li> -->
</ul>
</nav>
<div class="container-fluid" style="padding: 4rem">
<p>
Gor is an <a href="http://github.com/buger/gor">open-source</a> tool for capturing and replaying live HTTP traffic into a test environment in order to continuously test your system with real data. It can be used to increase confidence in code deployments, configuration changes and infrastructure changes.
</p>
<div class="trustedby" style="overflow: hidden;">
<h3>Trusted by hundreds of companies</h3>
<hr/>
<br/>
<img src="./trustedby/govuk.png" height="50px"/>
<img src="./trustedby/guardian.png" height="50px"/>
<img src="./trustedby/tomtom.png" height="50px"/>
<img src="./trustedby/3scale.png" height="50px"/>
<img src="https://www.tubemogul.com/wp-content/themes/tubemogul/_img/_logos/tubemogul_full.svg" height="50px" width="187px" />
<img src="./trustedby/videology.png" height="50px"/>
</div>
<div class="success-story">
<blockquote>
<p><i>Gor enabled us to put the Router "into production" a long time before we were entirely comfortable that it was "production ready" and without any risk. We could tell that it was doing the right thing from the access logs/stats of the Gor and the Router's own error logs.</i></p>
<footer><a href="https://twitter.com/dancarley">Dan Carley</a> from <cite><a href="https://gdstechnology.blog.gov.uk/2013/12/13/putting-the-router-through-its-paces/#replay-production-traffic">Government Digital Service</a></cite></footer>
</blockquote>
</div>
<div class="success-story">
<blockquote>
<p><i>Traffic from our production load balancers stream a small slice of traffic to Gor which then streams it to multiple QA environments. We soak test our new and old versions of our web service and the compare their metrics to discover bugs. Great stuff!</i></p>
<footer>Sahil Verma from <cite><a href="http://videologygroup.com">Videology</a></cite></footer>
</blockquote>
</div>
<div class="clearfix"></div>
<hr style="margin-top: 2.5rem"/>
<div class="pro" id="pro">
<table class="table table-responsive">
<thead>
<th></th>
<th width="23%"><a href="http://github.com/buger/gor" style="margin:0">OSS</a></th>
<th width="23%">PRO</th>
<th width="23%">ENTERPRISE</th>
</thead>
<tbody>
<tr>
<td class="text-muted" scope="row"><small>AUDIENCE</small></td>
<td><b>Developers</b></td>
<td><b>Small Business</b></td>
<td><b>MedLarge Companies</b></td>
</tr>
<tr>
<td class="text-muted" scope="row"><small><a href="https://github.com/buger/gor/wiki/Replaying-HTTP-traffic">Support for HTTP traffic</a></small></td>
<td class="yes"></td>
<td class="yes"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted" scope="row"><small><a href="https://github.com/buger/gor/wiki/Capturing-and-replaying-traffic">Replaying to multiple targets</a></small></td>
<td class="yes"></td>
<td class="yes"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted" scope="row"><small><a href="https://github.com/buger/gor/wiki/Rate-limiting">Rate limiting</a></small></td>
<td class="yes"></td>
<td class="yes"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted" scope="row"><small><a href="https://github.com/buger/gor/wiki/Request-filtering">Basic filtering and rewriting</a></small></td>
<td class="yes"></td>
<td class="yes"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted" scope="row"><small><a href="https://github.com/buger/gor/wiki/Middleware">Middleware</a></small></td>
<td class="yes"></td>
<td class="yes"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted" scope="row"><small><a href="https://github.com/buger/gor/wiki/Saving-and-Replaying-from-file">Replaying from file</a></small></td>
<td class="yes"></td>
<td class="yes"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted" scope="row"><small><a href="https://github.com/buger/gor/wiki/Saving-and-Replaying-from-file#performance-testing">Load testing</a></small></td>
<td class="yes"></td>
<td class="yes"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted" scope="row"><small><a href="https://github.com/buger/gor/wiki/Exporting-to-ElasticSearch"></a>ElasticSearch export</a></small></td>
<td class="yes"></td>
<td class="yes"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted" scope="row"><small>Saving and replying from S3</small></td>
<td class="no"></td>
<td class="yes"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted" scope="row"><small><a href="https://github.com/buger/gor/wiki/%5BPRO%5D-Replaying-Binary-protocols">Support for binary protocols (Thrift, ProtocolBuffers)</a></small></td>
<td class="no"></td>
<td class="yes"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted" scope="row"><small>Priority Bug Fixes</small></td>
<td class="no"></td>
<td class="yes"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted" scope="row"><small>Support for TLS encrypted traffic</small></td>
<td class="no"></td>
<td class="no"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted"scope="row"><small>Features Requests</small></td>
<td class="no"></td>
<td class="no"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted"scope="row"><small>Phone/Skype Support </small></td>
<td class="no"></td>
<td class="no"></td>
<td class="yes"></td>
</tr>
<tr>
<td class="text-muted"scope="row"><small>DEDICATED SUPPORT</small></td>
<td><b>None</b></td>
<td><b>Email</b><br/><small class="text-muted">4 hours included</small></td>
<td><b>Email, Onboarding Session</b><br/><small class="text-muted">20 hours included</small></td>
</tr>
<tr>
<td class="text-muted"scope="row"><small>LICENSE</small></td>
<td><b>LGPL</b></td>
<td><b>Commercial</b><br/><small class="text-muted">No Custom Terms</small></td>
<td><b>Commercial</b><br/><small class="text-muted">With Custom Terms</small></td>
</tr>
<tr>
<td class="text-muted"scope="row"><small>PRICING</small></td>
<td><b>Free</b></td>
<td><b>$950 / year</b><br/><small class="text-muted">Unlimited Usage</small></td>
<td><b>$2950 / year</b><br/><small class="text-muted"><b>Unlimited Usage</b></small></td>
</tr>
<tr>
<td class="text-muted"scope="row"><small>PURCHASING</small></td>
<td><b>n/a</b></td>
<td><b>Credit Card</b></td>
<td><b>Credit Card, Bank transfer</b></td>
</tr>
<tr>
<td></td>
<td><a class="btn btn-secondary btn-lg" href="http://github.com/buger/gor/wiki"style="width: 100%; display: block;">Get started</a></td>
<td><script src="https://gumroad.com/js/gumroad.js"></script>
<a class="gumroad-button btn btn-success btn-lg" href="https://gum.co/kscZR" style="width: 100%; display: block;">Buy</a></td>
<td><a class="btn btn-primary btn-lg" href="https://buger.typeform.com/to/VXBBwm" style="width: 100%; display: block;">Get a quote</a></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
var timer = setInterval(function(){
if (document.querySelector(".gumroad-button span")) {
document.querySelector(".gumroad-button").removeChild(document.querySelector(".gumroad-button span"))
document.querySelector(".gumroad-button").className = "btn btn-success btn-lg";
clearInterval(timer);
}
}, 500)
</script>
<br/>
<center>
<p>All sales come with a two week, 100% money back guarantee.<br/>
Looking to embed Gor in your virtual server or appliance?<br/>
<a href="https://github.com/buger/gor/wiki/Commercial-FAQ">Read the Commercial FAQ</a>.
</p>
</center>
</div>
<div class="pro" id="about">
<h1>How Gor works and why it is made</h1>
<p><small>No matter how many tests and fixtures you have, they just cant cover all cases. Humans, browsers, and robots all do strange things to affect the frequency of requests, URL weighting, size of headers, etc. There is a whole layer of errors that just cant found via automated and manual testing: concurrency, server environment specific bugs, some bugs can occur from requests called in a particular order, and way more. You need to be sure that your app isn't tripped up by an edge-case that only presented itself after we'd gone live.</small></p>
<p><small>Gor is not a proxy: placing another component in the critical path of production traffic is too risky. Instead, Gor analyze traffic coming to your service, not affecting its functionality, and the price is few percents of CPU.</small></p>
<p><small>The most basic setup is:</small><br/>
<pre style="padding: 1rem; border-top: 1px solid #ccc; border-bottom: 1px solid #ccc">
# Assuming that your service running on port 80
gor --input-raw :80 --output-http "http://staging.com"</pre>
</p>
<p><small>You can modify and filter captured requested before replaying them. You can even replay them at higher speed for load testing. See <a href="https://github.com/buger/gor">full documentation</a>.</small></p>
</div>
</div>
<div class="container-fluid" style="background-color: #666; padding: 4rem;">
<h2 style="color: white">Questions, comments, & concerns? Lets chat: <a href="mailto:hello@gortool.com" style="color: lightgreen;">hello@gortool.com</a></h2>
</br>
</div>
<div class="container-fluid" style="background-color: #333; color: #eee; padding: 2rem;">
<a href="https://github.com/buger/gor" style="font-size: 1.2rem; color: #eee;vertical-align: middle;">Github</a>
<a href="https://twitter.com/buger" style="margin-left: 1rem; font-size: 1.2rem; color: #eee;vertical-align: middle;">Twitter</a>
<a href="#pro" style="margin-left: 1rem; font-size: 1.2rem; color: #eee;vertical-align: middle;">Pro</a>
<a href="#about" style="margin-left: 1rem; font-size: 1.2rem; color: #eee;vertical-align: middle;">About</a>
<span class="madein pull-xs-right"><small>
Copyright © 2016 Replay Software LLC.<br/>Made in Syberia, Russia.
</small></span>
</div>
</body>
</html>