You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by re...@apache.org on 2018/09/11 05:28:12 UTC

svn commit: r1840515 [4/15] - in /aurora/site: publish/blog/aurora-0-21-0-released/ publish/documentation/0.21.0/ publish/documentation/0.21.0/additional-resources/ publish/documentation/0.21.0/additional-resources/presentations/ publish/documentation/...

Added: aurora/site/publish/documentation/0.21.0/features/services/index.html
URL: http://svn.apache.org/viewvc/aurora/site/publish/documentation/0.21.0/features/services/index.html?rev=1840515&view=auto
==============================================================================
--- aurora/site/publish/documentation/0.21.0/features/services/index.html (added)
+++ aurora/site/publish/documentation/0.21.0/features/services/index.html Tue Sep 11 05:28:10 2018
@@ -0,0 +1,260 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+	<title>Apache Aurora</title>
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+    <link href="/assets/css/main.css" rel="stylesheet">
+	<!-- Analytics -->
+	<script type="text/javascript">
+		  var _gaq = _gaq || [];
+		  _gaq.push(['_setAccount', 'UA-45879646-1']);
+		  _gaq.push(['_setDomainName', 'apache.org']);
+		  _gaq.push(['_trackPageview']);
+
+		  (function() {
+		    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+		    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+		    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+		  })();
+	</script>
+  </head>
+  <body>
+    <div class="container-fluid section-header">
+  <div class="container">
+    <div class="nav nav-bar">
+    <a href="/"><img src="/assets/img/aurora_logo_dkbkg.svg" width="300" alt="Transparent Apache Aurora logo with dark background"/></a>
+    <ul class="nav navbar-nav navbar-right">
+      <li><a href="/documentation/latest/">Documentation</a></li>
+      <li><a href="/community/">Community</a></li>
+      <li><a href="/downloads/">Downloads</a></li>
+      <li><a href="/blog/">Blog</a></li>
+    </ul>
+    </div>
+  </div>
+</div>
+	
+    <div class="container-fluid">
+      <div class="container content">
+        <div class="col-md-12 documentation">
+<h5 class="page-header text-uppercase">Documentation
+<select onChange="window.location.href='/documentation/' + this.value + '/features/services/'"
+        value="0.21.0">
+  <option value="0.21.0"
+    selected="selected">
+    0.21.0
+      (latest)
+  </option>
+  <option value="0.20.0"
+    >
+    0.20.0
+  </option>
+  <option value="0.19.1"
+    >
+    0.19.1
+  </option>
+  <option value="0.19.0"
+    >
+    0.19.0
+  </option>
+  <option value="0.18.1"
+    >
+    0.18.1
+  </option>
+  <option value="0.18.0"
+    >
+    0.18.0
+  </option>
+  <option value="0.17.0"
+    >
+    0.17.0
+  </option>
+  <option value="0.16.0"
+    >
+    0.16.0
+  </option>
+  <option value="0.15.0"
+    >
+    0.15.0
+  </option>
+  <option value="0.14.0"
+    >
+    0.14.0
+  </option>
+  <option value="0.13.0"
+    >
+    0.13.0
+  </option>
+  <option value="0.12.0"
+    >
+    0.12.0
+  </option>
+  <option value="0.11.0"
+    >
+    0.11.0
+  </option>
+  <option value="0.10.0"
+    >
+    0.10.0
+  </option>
+  <option value="0.9.0"
+    >
+    0.9.0
+  </option>
+  <option value="0.8.0"
+    >
+    0.8.0
+  </option>
+  <option value="0.7.0-incubating"
+    >
+    0.7.0-incubating
+  </option>
+  <option value="0.6.0-incubating"
+    >
+    0.6.0-incubating
+  </option>
+  <option value="0.5.0-incubating"
+    >
+    0.5.0-incubating
+  </option>
+</select>
+</h5>
+<h1 id="long-running-services">Long-running Services</h1>
+
+<p>Jobs that are always restart on completion, whether successful or unsuccessful,
+are called services. This is useful for long-running processes
+such as webservices that should always be running, unless stopped explicitly.</p>
+
+<h2 id="service-specification">Service Specification</h2>
+
+<p>A job is identified as a service by the presence of the flag
+`<code>service=True</code> in the <a href="../../reference/configuration/#job-objects"><code>Job</code></a> object.
+The <code>Service</code> alias can be used as shorthand for <code>Job</code> with <code>service=True</code>.</p>
+
+<p>Example (available in the <a href="../../getting-started/vagrant/">Vagrant environment</a>):</p>
+<pre class="highlight plaintext"><code>$ cat /vagrant/examples/jobs/hello_world.aurora
+hello = Process(
+  name = 'hello',
+  cmdline = """
+    while true; do
+      echo hello world
+      sleep 10
+    done
+  """)
+
+task = SequentialTask(
+  processes = [hello],
+  resources = Resources(cpu = 1.0, ram = 128*MB, disk = 128*MB)
+)
+
+jobs = [
+  Service(
+    task = task,
+    cluster = 'devcluster',
+    role = 'www-data',
+    environment = 'prod',
+    name = 'hello'
+  )
+]
+</code></pre>
+
+<p>Jobs without the service bit set only restart up to <code>max_task_failures</code> times and only if they
+terminated unsuccessfully either due to human error or machine failure (see the
+<a href="../../reference/configuration/#job-objects"><code>Job</code></a> object for details).</p>
+
+<h2 id="ports">Ports</h2>
+
+<p>In order to be useful, most services have to bind to one or more ports. Aurora enables this
+usecase via the <a href="../../reference/configuration/#thermos-namespace"><code>thermos.ports</code> namespace</a> that
+allows to request arbitrarily named ports:</p>
+<pre class="highlight plaintext"><code>nginx = Process(
+  name = 'nginx',
+  cmdline = './run_nginx.sh -port {{thermos.ports[http]}}'
+)
+</code></pre>
+
+<p>When this process is included in a job, the job will be allocated a port, and the command line
+will be replaced with something like:</p>
+<pre class="highlight plaintext"><code>./run_nginx.sh -port 42816
+</code></pre>
+
+<p>Where 42816 happens to be the allocated port.</p>
+
+<p>For details on how to enable clients to discover this dynamically assigned port, see our
+<a href="../service-discovery/">Service Discovery</a> documentation.</p>
+
+<h2 id="health-checking">Health Checking</h2>
+
+<p>Typically, the Thermos executor monitors processes within a task only by liveness of the forked
+process. In addition to that, Aurora has support for rudimentary health checking: Either via HTTP
+via custom shell scripts.</p>
+
+<p>For example, simply by requesting a <code>health</code> port, a process can request to be health checked
+via repeated calls to the <code>/health</code> endpoint:</p>
+<pre class="highlight plaintext"><code>nginx = Process(
+  name = 'nginx',
+  cmdline = './run_nginx.sh -port {{thermos.ports[health]}}'
+)
+</code></pre>
+
+<p>Please see the
+<a href="../../reference/configuration/#healthcheckconfig-objects">configuration reference</a>
+for configuration options for this feature.</p>
+
+<p>Starting with the 0.17.0 release, job updates rely only on task health-checks by introducing
+a <code>min_consecutive_successes</code> parameter on the HealthCheckConfig object. This parameter represents
+the number of successful health checks needed before a task is moved into the <code>RUNNING</code> state. Tasks
+that do not have enough successful health checks within the first <code>n</code> attempts, are moved to the
+<code>FAILED</code> state, where <code>n = ceil(initial_interval_secs/interval_secs) + max_consecutive_failures +
+min_consecutive_successes</code>. In order to accommodate variability during task warm up, <code>initial_interval_secs</code>
+will act as a grace period. Any health-check failures during the first <code>m</code> attempts are ignored and
+do not count towards <code>max_consecutive_failures</code>, where <code>m = ceil(initial_interval_secs/interval_secs)</code>.</p>
+
+<p>As <a href="../job-updates/">job updates</a> are based only on health-checks, it is not necessary to set
+<code>watch_secs</code> to the worst-case update time, it can instead be set to 0. The scheduler considers a
+task that is in the <code>RUNNING</code> to be healthy and proceeds to updating the next batch of instances.
+For details on how to control health checks, please see the
+<a href="../../reference/configuration/#healthcheckconfig-objects">HealthCheckConfig</a> configuration object.
+Existing jobs that do not configure a health-check can fall-back to using <code>watch_secs</code> to
+monitor a task before considering it healthy.</p>
+
+<p>You can pause health checking by touching a file inside of your sandbox, named <code>.healthchecksnooze</code>.
+As long as that file is present, health checks will be disabled, enabling users to gather core
+dumps or other performance measurements without worrying about Aurora&rsquo;s health check killing
+their process.</p>
+
+<p>WARNING: Remember to remove this when you are done, otherwise your instance will have permanently
+disabled health checks.</p>
+
+</div>
+
+      </div>
+    </div>
+  	<div class="container-fluid section-footer buffer">
+      <div class="container">
+        <div class="row">
+		  <div class="col-md-2 col-md-offset-1"><h3>Quick Links</h3>
+		  <ul>
+		    <li><a href="/downloads/">Downloads</a></li>
+            <li><a href="/community/">Mailing Lists</a></li>
+			<li><a href="http://issues.apache.org/jira/browse/AURORA">Issue Tracking</a></li>
+			<li><a href="/documentation/latest/contributing/">How To Contribute</a></li>     
+		  </ul>
+	      </div>
+		  <div class="col-md-2"><h3>The ASF</h3>
+          <ul>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+            <li><a href="http://www.apache.org/security/">Security</a></li>
+          </ul>
+		  </div>
+		  <div class="col-md-6">
+			<p class="disclaimer">&copy; 2014-2017 <a href="http://www.apache.org/">Apache Software Foundation</a>. Licensed under the <a href="http://www.apache.org/licenses/">Apache License v2.0</a>. The <a href="https://www.flickr.com/photos/trondk/12706051375/">Aurora Borealis IX photo</a> displayed on the homepage is available under a <a href="https://creativecommons.org/licenses/by-nc-nd/2.0/">Creative Commons BY-NC-ND 2.0 license</a>. Apache, Apache Aurora, and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+        </div>
+      </div>
+    </div>
+
+  </body>
+</html>

Added: aurora/site/publish/documentation/0.21.0/features/sla-metrics/index.html
URL: http://svn.apache.org/viewvc/aurora/site/publish/documentation/0.21.0/features/sla-metrics/index.html?rev=1840515&view=auto
==============================================================================
--- aurora/site/publish/documentation/0.21.0/features/sla-metrics/index.html (added)
+++ aurora/site/publish/documentation/0.21.0/features/sla-metrics/index.html Tue Sep 11 05:28:10 2018
@@ -0,0 +1,392 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+	<title>Apache Aurora</title>
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+    <link href="/assets/css/main.css" rel="stylesheet">
+	<!-- Analytics -->
+	<script type="text/javascript">
+		  var _gaq = _gaq || [];
+		  _gaq.push(['_setAccount', 'UA-45879646-1']);
+		  _gaq.push(['_setDomainName', 'apache.org']);
+		  _gaq.push(['_trackPageview']);
+
+		  (function() {
+		    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+		    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+		    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+		  })();
+	</script>
+  </head>
+  <body>
+    <div class="container-fluid section-header">
+  <div class="container">
+    <div class="nav nav-bar">
+    <a href="/"><img src="/assets/img/aurora_logo_dkbkg.svg" width="300" alt="Transparent Apache Aurora logo with dark background"/></a>
+    <ul class="nav navbar-nav navbar-right">
+      <li><a href="/documentation/latest/">Documentation</a></li>
+      <li><a href="/community/">Community</a></li>
+      <li><a href="/downloads/">Downloads</a></li>
+      <li><a href="/blog/">Blog</a></li>
+    </ul>
+    </div>
+  </div>
+</div>
+	
+    <div class="container-fluid">
+      <div class="container content">
+        <div class="col-md-12 documentation">
+<h5 class="page-header text-uppercase">Documentation
+<select onChange="window.location.href='/documentation/' + this.value + '/features/sla-metrics/'"
+        value="0.21.0">
+  <option value="0.21.0"
+    selected="selected">
+    0.21.0
+      (latest)
+  </option>
+  <option value="0.20.0"
+    >
+    0.20.0
+  </option>
+  <option value="0.19.1"
+    >
+    0.19.1
+  </option>
+  <option value="0.19.0"
+    >
+    0.19.0
+  </option>
+  <option value="0.18.1"
+    >
+    0.18.1
+  </option>
+  <option value="0.18.0"
+    >
+    0.18.0
+  </option>
+  <option value="0.17.0"
+    >
+    0.17.0
+  </option>
+  <option value="0.16.0"
+    >
+    0.16.0
+  </option>
+  <option value="0.15.0"
+    >
+    0.15.0
+  </option>
+  <option value="0.14.0"
+    >
+    0.14.0
+  </option>
+  <option value="0.13.0"
+    >
+    0.13.0
+  </option>
+  <option value="0.12.0"
+    >
+    0.12.0
+  </option>
+  <option value="0.11.0"
+    >
+    0.11.0
+  </option>
+  <option value="0.10.0"
+    >
+    0.10.0
+  </option>
+  <option value="0.9.0"
+    >
+    0.9.0
+  </option>
+  <option value="0.8.0"
+    >
+    0.8.0
+  </option>
+  <option value="0.7.0-incubating"
+    >
+    0.7.0-incubating
+  </option>
+  <option value="0.6.0-incubating"
+    >
+    0.6.0-incubating
+  </option>
+  <option value="0.5.0-incubating"
+    >
+    0.5.0-incubating
+  </option>
+</select>
+</h5>
+<h1 id="aurora-sla-measurement">Aurora SLA Measurement</h1>
+
+<ul>
+<li><a href="#overview">Overview</a></li>
+<li><a href="#metric-details">Metric Details</a>
+
+<ul>
+<li><a href="#platform-uptime">Platform Uptime</a></li>
+<li><a href="#job-uptime">Job Uptime</a></li>
+<li><a href="#median-time-to-assigned-(mtta)">Median Time To Assigned (MTTA)</a></li>
+<li><a href="#median-time-to-starting-(mtts)">Median Time To Starting (MTTS)</a></li>
+<li><a href="#median-time-to-running-(mttr)">Median Time To Running (MTTR)</a></li>
+</ul></li>
+<li><a href="#limitations">Limitations</a></li>
+</ul>
+
+<h2 id="overview">Overview</h2>
+
+<p>The primary goal of the feature is collection and monitoring of Aurora job SLA (Service Level
+Agreements) metrics that defining a contractual relationship between the Aurora/Mesos platform
+and hosted services.</p>
+
+<p>The Aurora SLA feature is by default only enabled for service (non-cron)
+production jobs (<code>&quot;production=True&quot;</code> in your <code>.aurora</code> config). It can be enabled for
+non-production services by an operator via the scheduler command line flag <code>-sla_non_prod_metrics</code>.</p>
+
+<p>Counters that track SLA measurements are computed periodically within the scheduler.
+The individual instance metrics are refreshed every minute (configurable via
+<code>sla_stat_refresh_interval</code>). The instance counters are subsequently aggregated by
+relevant grouping types before exporting to scheduler <code>/vars</code> endpoint (when using <code>vagrant</code>
+that would be <code>http://192.168.33.7:8081/vars</code>)</p>
+
+<h2 id="metric-details">Metric Details</h2>
+
+<h3 id="platform-uptime">Platform Uptime</h3>
+
+<p><em>Aggregate amount of time a job spends in a non-runnable state due to platform unavailability
+or scheduling delays. This metric tracks Aurora/Mesos uptime performance and reflects on any
+system-caused downtime events (tasks LOST or DRAINED). Any user-initiated task kills/restarts
+will not degrade this metric.</em></p>
+
+<p><strong>Collection scope:</strong></p>
+
+<ul>
+<li>Per job - <code>sla_&lt;job_key&gt;_platform_uptime_percent</code></li>
+<li>Per cluster - <code>sla_cluster_platform_uptime_percent</code></li>
+</ul>
+
+<p><strong>Units:</strong> percent</p>
+
+<p>A fault in the task environment may cause the Aurora/Mesos to have different views on the task state
+or lose track of the task existence. In such cases, the service task is marked as LOST and
+rescheduled by Aurora. For example, this may happen when the task stays in ASSIGNED or STARTING
+for too long or the Mesos agent becomes unhealthy (or disappears completely). The time between
+task entering LOST and its replacement reaching RUNNING state is counted towards platform downtime.</p>
+
+<p>Another example of a platform downtime event is the administrator-requested task rescheduling. This
+happens during planned Mesos agent maintenance when all agent tasks are marked as DRAINED and
+rescheduled elsewhere.</p>
+
+<p>To accurately calculate Platform Uptime, we must separate platform incurred downtime from user
+actions that put a service instance in a non-operational state. It is simpler to isolate
+user-incurred downtime and treat all other downtime as platform incurred.</p>
+
+<p>Currently, a user can cause a healthy service (task) downtime in only two ways: via <code>killTasks</code>
+or <code>restartShards</code> RPCs. For both, their affected tasks leave an audit state transition trail
+relevant to uptime calculations. By applying a special &ldquo;SLA meaning&rdquo; to exposed task state
+transition records, we can build a deterministic downtime trace for every given service instance.</p>
+
+<p>A task going through a state transition carries one of three possible SLA meanings
+(see <a href="https://github.com/apache/aurora/blob/rel/0.21.0/src/main/java/org/apache/aurora/scheduler/sla/SlaAlgorithm.java">SlaAlgorithm.java</a> for
+sla-to-task-state mapping):</p>
+
+<ul>
+<li><p>Task is UP: starts a period where the task is considered to be up and running from the Aurora
+platform standpoint.</p></li>
+<li><p>Task is DOWN: starts a period where the task cannot reach the UP state for some
+non-user-related reason. Counts towards instance downtime.</p></li>
+<li><p>Task is REMOVED from SLA: starts a period where the task is not expected to be UP due to
+user initiated action or failure. We ignore this period for the uptime calculation purposes.</p></li>
+</ul>
+
+<p>This metric is recalculated over the last sampling period (last minute) to account for
+any UP/DOWN/REMOVED events. It ignores any UP/DOWN events not immediately adjacent to the
+sampling interval as well as adjacent REMOVED events.</p>
+
+<h3 id="job-uptime">Job Uptime</h3>
+
+<p><em>Percentage of the job instances considered to be in RUNNING state for the specified duration
+relative to request time. This is a purely application side metric that is considering aggregate
+uptime of all RUNNING instances. Any user- or platform initiated restarts directly affect
+this metric.</em></p>
+
+<p><strong>Collection scope:</strong> We currently expose job uptime values at 5 pre-defined
+percentiles (50th,75th,90th,95th and 99th):</p>
+
+<ul>
+<li><code>sla_&lt;job_key&gt;_job_uptime_50_00_sec</code></li>
+<li><code>sla_&lt;job_key&gt;_job_uptime_75_00_sec</code></li>
+<li><code>sla_&lt;job_key&gt;_job_uptime_90_00_sec</code></li>
+<li><code>sla_&lt;job_key&gt;_job_uptime_95_00_sec</code></li>
+<li><code>sla_&lt;job_key&gt;_job_uptime_99_00_sec</code></li>
+</ul>
+
+<p><strong>Units:</strong> seconds
+You can also get customized real-time stats from aurora client. See <code>aurora sla -h</code> for
+more details.</p>
+
+<h3 id="median-time-to-assigned-mtta">Median Time To Assigned (MTTA)</h3>
+
+<p><em>Median time a job spends waiting for its tasks to be assigned to a host. This is a combined
+metric that helps track the dependency of scheduling performance on the requested resources
+(user scope) as well as the internal scheduler bin-packing algorithm efficiency (platform scope).</em></p>
+
+<p><strong>Collection scope:</strong></p>
+
+<ul>
+<li>Per job - <code>sla_&lt;job_key&gt;_mtta_ms</code></li>
+<li>Per cluster - <code>sla_cluster_mtta_ms</code></li>
+<li>Per instance size (small, medium, large, x-large, xx-large). Size are defined in:
+<a href="https://github.com/apache/aurora/blob/rel/0.21.0/src/main/java/org/apache/aurora/scheduler/resources/ResourceBag.java">ResourceBag.java</a>
+
+<ul>
+<li>By CPU:</li>
+<li><code>sla_cpu_small_mtta_ms</code></li>
+<li><code>sla_cpu_medium_mtta_ms</code></li>
+<li><code>sla_cpu_large_mtta_ms</code></li>
+<li><code>sla_cpu_xlarge_mtta_ms</code></li>
+<li><code>sla_cpu_xxlarge_mtta_ms</code></li>
+<li>By RAM:</li>
+<li><code>sla_ram_small_mtta_ms</code></li>
+<li><code>sla_ram_medium_mtta_ms</code></li>
+<li><code>sla_ram_large_mtta_ms</code></li>
+<li><code>sla_ram_xlarge_mtta_ms</code></li>
+<li><code>sla_ram_xxlarge_mtta_ms</code></li>
+<li>By DISK:</li>
+<li><code>sla_disk_small_mtta_ms</code></li>
+<li><code>sla_disk_medium_mtta_ms</code></li>
+<li><code>sla_disk_large_mtta_ms</code></li>
+<li><code>sla_disk_xlarge_mtta_ms</code></li>
+<li><code>sla_disk_xxlarge_mtta_ms</code></li>
+</ul></li>
+</ul>
+
+<p><strong>Units:</strong> milliseconds</p>
+
+<p>MTTA only considers instances that have already reached ASSIGNED state and ignores those
+that are still PENDING. This ensures straggler instances (e.g. with unreasonable resource
+constraints) do not affect metric curves.</p>
+
+<h3 id="median-time-to-starting-mtts">Median Time To Starting (MTTS)</h3>
+
+<p><em>Median time a job waits for its tasks to reach STARTING state. This is a comprehensive metric
+reflecting on the overall time it takes for the Aurora/Mesos to start initializing the sandbox
+for a task.</em></p>
+
+<p><strong>Collection scope:</strong></p>
+
+<ul>
+<li>Per job - <code>sla_&lt;job_key&gt;_mtts_ms</code></li>
+<li>Per cluster - <code>sla_cluster_mtts_ms</code></li>
+<li>Per instance size (small, medium, large, x-large, xx-large). Size are defined in:
+<a href="https://github.com/apache/aurora/blob/rel/0.21.0/src/main/java/org/apache/aurora/scheduler/resources/ResourceBag.java">ResourceBag.java</a>
+
+<ul>
+<li>By CPU:</li>
+<li><code>sla_cpu_small_mtts_ms</code></li>
+<li><code>sla_cpu_medium_mtts_ms</code></li>
+<li><code>sla_cpu_large_mtts_ms</code></li>
+<li><code>sla_cpu_xlarge_mtts_ms</code></li>
+<li><code>sla_cpu_xxlarge_mtts_ms</code></li>
+<li>By RAM:</li>
+<li><code>sla_ram_small_mtts_ms</code></li>
+<li><code>sla_ram_medium_mtts_ms</code></li>
+<li><code>sla_ram_large_mtts_ms</code></li>
+<li><code>sla_ram_xlarge_mtts_ms</code></li>
+<li><code>sla_ram_xxlarge_mtts_ms</code></li>
+<li>By DISK:</li>
+<li><code>sla_disk_small_mtts_ms</code></li>
+<li><code>sla_disk_medium_mtts_ms</code></li>
+<li><code>sla_disk_large_mtts_ms</code></li>
+<li><code>sla_disk_xlarge_mtts_ms</code></li>
+<li><code>sla_disk_xxlarge_mtts_ms</code></li>
+</ul></li>
+</ul>
+
+<p><strong>Units:</strong> milliseconds</p>
+
+<p>MTTS only considers instances in STARTING state. This ensures straggler instances (e.g. with
+unreasonable resource constraints) do not affect metric curves.</p>
+
+<h3 id="median-time-to-running-mttr">Median Time To Running (MTTR)</h3>
+
+<p><em>Median time a job waits for its tasks to reach RUNNING state. This is a comprehensive metric
+reflecting on the overall time it takes for the Aurora/Mesos to start executing user content.</em></p>
+
+<p><strong>Collection scope:</strong></p>
+
+<ul>
+<li>Per job - <code>sla_&lt;job_key&gt;_mttr_ms</code></li>
+<li>Per cluster - <code>sla_cluster_mttr_ms</code></li>
+<li>Per instance size (small, medium, large, x-large, xx-large). Size are defined in:
+<a href="https://github.com/apache/aurora/blob/rel/0.21.0/src/main/java/org/apache/aurora/scheduler/resources/ResourceBag.java">ResourceBag.java</a>
+
+<ul>
+<li>By CPU:</li>
+<li><code>sla_cpu_small_mttr_ms</code></li>
+<li><code>sla_cpu_medium_mttr_ms</code></li>
+<li><code>sla_cpu_large_mttr_ms</code></li>
+<li><code>sla_cpu_xlarge_mttr_ms</code></li>
+<li><code>sla_cpu_xxlarge_mttr_ms</code></li>
+<li>By RAM:</li>
+<li><code>sla_ram_small_mttr_ms</code></li>
+<li><code>sla_ram_medium_mttr_ms</code></li>
+<li><code>sla_ram_large_mttr_ms</code></li>
+<li><code>sla_ram_xlarge_mttr_ms</code></li>
+<li><code>sla_ram_xxlarge_mttr_ms</code></li>
+<li>By DISK:</li>
+<li><code>sla_disk_small_mttr_ms</code></li>
+<li><code>sla_disk_medium_mttr_ms</code></li>
+<li><code>sla_disk_large_mttr_ms</code></li>
+<li><code>sla_disk_xlarge_mttr_ms</code></li>
+<li><code>sla_disk_xxlarge_mttr_ms</code></li>
+</ul></li>
+</ul>
+
+<p><strong>Units:</strong> milliseconds</p>
+
+<p>MTTR only considers instances in RUNNING state. This ensures straggler instances (e.g. with
+unreasonable resource constraints) do not affect metric curves.</p>
+
+<h2 id="limitations">Limitations</h2>
+
+<ul>
+<li><p>The availability of Aurora SLA metrics is bound by the scheduler availability.</p></li>
+<li><p>All metrics are calculated at a pre-defined interval (currently set at 1 minute).
+Scheduler restarts may result in missed collections.</p></li>
+</ul>
+
+</div>
+
+      </div>
+    </div>
+  	<div class="container-fluid section-footer buffer">
+      <div class="container">
+        <div class="row">
+		  <div class="col-md-2 col-md-offset-1"><h3>Quick Links</h3>
+		  <ul>
+		    <li><a href="/downloads/">Downloads</a></li>
+            <li><a href="/community/">Mailing Lists</a></li>
+			<li><a href="http://issues.apache.org/jira/browse/AURORA">Issue Tracking</a></li>
+			<li><a href="/documentation/latest/contributing/">How To Contribute</a></li>     
+		  </ul>
+	      </div>
+		  <div class="col-md-2"><h3>The ASF</h3>
+          <ul>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+            <li><a href="http://www.apache.org/security/">Security</a></li>
+          </ul>
+		  </div>
+		  <div class="col-md-6">
+			<p class="disclaimer">&copy; 2014-2017 <a href="http://www.apache.org/">Apache Software Foundation</a>. Licensed under the <a href="http://www.apache.org/licenses/">Apache License v2.0</a>. The <a href="https://www.flickr.com/photos/trondk/12706051375/">Aurora Borealis IX photo</a> displayed on the homepage is available under a <a href="https://creativecommons.org/licenses/by-nc-nd/2.0/">Creative Commons BY-NC-ND 2.0 license</a>. Apache, Apache Aurora, and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+        </div>
+      </div>
+    </div>
+
+  </body>
+</html>

Added: aurora/site/publish/documentation/0.21.0/features/sla-requirements/index.html
URL: http://svn.apache.org/viewvc/aurora/site/publish/documentation/0.21.0/features/sla-requirements/index.html?rev=1840515&view=auto
==============================================================================
--- aurora/site/publish/documentation/0.21.0/features/sla-requirements/index.html (added)
+++ aurora/site/publish/documentation/0.21.0/features/sla-requirements/index.html Tue Sep 11 05:28:10 2018
@@ -0,0 +1,334 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+	<title>Apache Aurora</title>
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+    <link href="/assets/css/main.css" rel="stylesheet">
+	<!-- Analytics -->
+	<script type="text/javascript">
+		  var _gaq = _gaq || [];
+		  _gaq.push(['_setAccount', 'UA-45879646-1']);
+		  _gaq.push(['_setDomainName', 'apache.org']);
+		  _gaq.push(['_trackPageview']);
+
+		  (function() {
+		    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+		    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+		    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+		  })();
+	</script>
+  </head>
+  <body>
+    <div class="container-fluid section-header">
+  <div class="container">
+    <div class="nav nav-bar">
+    <a href="/"><img src="/assets/img/aurora_logo_dkbkg.svg" width="300" alt="Transparent Apache Aurora logo with dark background"/></a>
+    <ul class="nav navbar-nav navbar-right">
+      <li><a href="/documentation/latest/">Documentation</a></li>
+      <li><a href="/community/">Community</a></li>
+      <li><a href="/downloads/">Downloads</a></li>
+      <li><a href="/blog/">Blog</a></li>
+    </ul>
+    </div>
+  </div>
+</div>
+	
+    <div class="container-fluid">
+      <div class="container content">
+        <div class="col-md-12 documentation">
+<h5 class="page-header text-uppercase">Documentation
+<select onChange="window.location.href='/documentation/' + this.value + '/features/sla-requirements/'"
+        value="0.21.0">
+  <option value="0.21.0"
+    selected="selected">
+    0.21.0
+      (latest)
+  </option>
+  <option value="0.20.0"
+    >
+    0.20.0
+  </option>
+  <option value="0.19.1"
+    >
+    0.19.1
+  </option>
+  <option value="0.19.0"
+    >
+    0.19.0
+  </option>
+  <option value="0.18.1"
+    >
+    0.18.1
+  </option>
+  <option value="0.18.0"
+    >
+    0.18.0
+  </option>
+  <option value="0.17.0"
+    >
+    0.17.0
+  </option>
+  <option value="0.16.0"
+    >
+    0.16.0
+  </option>
+  <option value="0.15.0"
+    >
+    0.15.0
+  </option>
+  <option value="0.14.0"
+    >
+    0.14.0
+  </option>
+  <option value="0.13.0"
+    >
+    0.13.0
+  </option>
+  <option value="0.12.0"
+    >
+    0.12.0
+  </option>
+  <option value="0.11.0"
+    >
+    0.11.0
+  </option>
+  <option value="0.10.0"
+    >
+    0.10.0
+  </option>
+  <option value="0.9.0"
+    >
+    0.9.0
+  </option>
+  <option value="0.8.0"
+    >
+    0.8.0
+  </option>
+  <option value="0.7.0-incubating"
+    >
+    0.7.0-incubating
+  </option>
+  <option value="0.6.0-incubating"
+    >
+    0.6.0-incubating
+  </option>
+  <option value="0.5.0-incubating"
+    >
+    0.5.0-incubating
+  </option>
+</select>
+</h5>
+<h1 id="sla-requirements">SLA Requirements</h1>
+
+<ul>
+<li><a href="#overview">Overview</a></li>
+<li><a href="#default-sla">Default SLA</a></li>
+<li><a href="#custom-sla">Custom SLA</a>
+
+<ul>
+<li><a href="#count-based">Count-based</a></li>
+<li><a href="#percentage-based">Percentage-based</a></li>
+<li><a href="#coordinator-based">Coordinator-based</a></li>
+</ul></li>
+</ul>
+
+<h2 id="overview">Overview</h2>
+
+<p>Aurora guarantees SLA requirements for jobs. These requirements limit the impact of cluster-wide
+maintenance operations on the jobs. For instance, when an operator upgrades
+the OS on all the Mesos agent machines, the tasks scheduled on them needs to be drained.
+By specifying the SLA requirements a job can make sure that it has enough instances to
+continue operating safely without incurring downtime.</p>
+
+<blockquote>
+<p>SLA is defined as minimum number of active tasks required for a job every duration window.
+A task is active if it was in <code>RUNNING</code> state during the last duration window.</p>
+</blockquote>
+
+<p>There is a <a href="#default-sla">default</a> SLA guarantee for
+<a href="../../features/multitenancy/#configuration-tiers">preferred</a> tier jobs and it is also possible to
+specify <a href="#custom-sla">custom</a> SLA requirements.</p>
+
+<h2 id="default-sla">Default SLA</h2>
+
+<p>Aurora guarantees a default SLA requirement for tasks in
+<a href="../../features/multitenancy/#configuration-tiers">preferred</a> tier.</p>
+
+<blockquote>
+<p>95% of tasks in a job will be <code>active</code> for every 30 mins.</p>
+</blockquote>
+
+<h2 id="custom-sla">Custom SLA</h2>
+
+<p>For jobs that require different SLA requirements, Aurora allows jobs to specify their own
+SLA requirements via the <code>SlaPolicies</code>. There are 3 different ways to express SLA requirements.</p>
+
+<h3 id="count-based"><a href="../../reference/configuration/#countslapolicy-objects">Count-based</a></h3>
+
+<p>For jobs that need a minimum <code>number</code> of instances to be running all the time,
+<a href="../../reference/configuration/#countslapolicy-objects"><code>CountSlaPolicy</code></a>
+provides the ability to express the minimum number of required active instances (i.e. number of
+tasks that are <code>RUNNING</code> for at least <code>duration_secs</code>). For instance, if we have a
+<code>replicated-service</code> that has 3 instances and needs at least 2 instances every 30 minutes to be
+treated healthy, the SLA requirement can be expressed with a
+<a href="../../reference/configuration/#countslapolicy-objects"><code>CountSlaPolicy</code></a> like below,</p>
+<pre class="highlight python"><code><span style="background-color: #f8f8f8">Job</span><span style="background-color: #f8f8f8">(</span>
+  <span style="background-color: #f8f8f8">name</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'replicated-service'</span><span style="background-color: #f8f8f8">,</span>
+  <span style="background-color: #f8f8f8">role</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'www-data'</span><span style="background-color: #f8f8f8">,</span>
+  <span style="background-color: #f8f8f8">instances</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #009999">3</span><span style="background-color: #f8f8f8">,</span>
+  <span style="background-color: #f8f8f8">sla_policy</span> <span style="color: #000000;font-weight: bold">=</span> <span style="background-color: #f8f8f8">CountSlaPolicy</span><span style="background-color: #f8f8f8">(</span>
+    <span style="background-color: #f8f8f8">count</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #009999">2</span><span style="background-color: #f8f8f8">,</span>
+    <span style="background-color: #f8f8f8">duration_secs</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #009999">1800</span>
+  <span style="background-color: #f8f8f8">)</span>
+  <span style="color: #000000;font-weight: bold">...</span>
+<span style="background-color: #f8f8f8">)</span>
+</code></pre>
+
+<h3 id="percentage-based"><a href="../../reference/configuration/#percentageslapolicy-objects">Percentage-based</a></h3>
+
+<p>For jobs that need a minimum <code>percentage</code> of instances to be running all the time,
+<a href="../../reference/configuration/#percentageslapolicy-objects"><code>PercentageSlaPolicy</code></a> provides the
+ability to express the minimum percentage of required active instances (i.e. percentage of tasks
+that are <code>RUNNING</code> for at least <code>duration_secs</code>). For instance, if we have a <code>webservice</code> that
+has 10000 instances for handling peak load and cannot have more than 0.1% of the instances down
+for every 1 hr, the SLA requirement can be expressed with a
+<a href="../../reference/configuration/#percentageslapolicy-objects"><code>PercentageSlaPolicy</code></a> like below,</p>
+<pre class="highlight python"><code><span style="background-color: #f8f8f8">Job</span><span style="background-color: #f8f8f8">(</span>
+  <span style="background-color: #f8f8f8">name</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'frontend-service'</span><span style="background-color: #f8f8f8">,</span>
+  <span style="background-color: #f8f8f8">role</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'www-data'</span><span style="background-color: #f8f8f8">,</span>
+  <span style="background-color: #f8f8f8">instances</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #009999">10000</span><span style="background-color: #f8f8f8">,</span>
+  <span style="background-color: #f8f8f8">sla_policy</span> <span style="color: #000000;font-weight: bold">=</span> <span style="background-color: #f8f8f8">PercentageSlaPolicy</span><span style="background-color: #f8f8f8">(</span>
+    <span style="background-color: #f8f8f8">percentage</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #009999">99.9</span><span style="background-color: #f8f8f8">,</span>
+    <span style="background-color: #f8f8f8">duration_secs</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #009999">3600</span>
+  <span style="background-color: #f8f8f8">)</span>
+  <span style="color: #000000;font-weight: bold">...</span>
+<span style="background-color: #f8f8f8">)</span>
+</code></pre>
+
+<h3 id="coordinator-based"><a href="../../reference/configuration/#coordinatorslapolicy-objects">Coordinator-based</a></h3>
+
+<p>When none of the above methods are enough to describe the SLA requirements for a job, then the SLA
+calculation can be off-loaded to a custom service called the <code>Coordinator</code>. The <code>Coordinator</code> needs
+to expose an endpoint that will be called to check if removal of a task will affect the SLA
+requirements for the job. This is useful to control the number of tasks that undergoes maintenance
+at a time, without affected the SLA for the application.</p>
+
+<p>Consider the example, where we have a <code>storage-service</code> stores 2 replicas of an object. Each replica
+is distributed across the instances, such that replicas are stored on different hosts. In addition
+a consistent-hash is used for distributing the data across the instances.</p>
+
+<p>When an instance needs to be drained (say for host-maintenance), we have to make sure that at least 1 of
+the 2 replicas remains available. In such a case, a <code>Coordinator</code> service can be used to maintain
+the SLA guarantees required for the job.</p>
+
+<p>The job can be configured with a
+<a href="../../reference/configuration/#coordinatorslapolicy-objects"><code>CoordinatorSlaPolicy</code></a> to specify the
+coordinator endpoint and the field in the response JSON that indicates if the SLA will be affected
+or not affected, when the task is removed.</p>
+<pre class="highlight python"><code><span style="background-color: #f8f8f8">Job</span><span style="background-color: #f8f8f8">(</span>
+  <span style="background-color: #f8f8f8">name</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'storage-service'</span><span style="background-color: #f8f8f8">,</span>
+  <span style="background-color: #f8f8f8">role</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'www-data'</span><span style="background-color: #f8f8f8">,</span>
+  <span style="background-color: #f8f8f8">sla_policy</span> <span style="color: #000000;font-weight: bold">=</span> <span style="background-color: #f8f8f8">CoordinatorSlaPolicy</span><span style="background-color: #f8f8f8">(</span>
+    <span style="background-color: #f8f8f8">coordinator_url</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'http://coordinator.example.com'</span><span style="background-color: #f8f8f8">,</span>
+    <span style="background-color: #f8f8f8">status_key</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'drain'</span>
+  <span style="background-color: #f8f8f8">)</span>
+  <span style="color: #000000;font-weight: bold">...</span>
+<span style="background-color: #f8f8f8">)</span>
+</code></pre>
+
+<h4 id="coordinator-interface-experimental">Coordinator Interface [Experimental]</h4>
+
+<p>When a <a href="../../reference/configuration/#coordinatorslapolicy-objects"><code>CoordinatorSlaPolicy</code></a> is
+specified for a job, any action that requires removing a task
+(such as drains) will be required to get approval from the <code>Coordinator</code> before proceeding. The
+coordinator service needs to expose a HTTP endpoint, that can take a <code>task-key</code> param
+(<code>&lt;cluster&gt;/&lt;role&gt;/&lt;env&gt;/&lt;name&gt;/&lt;instance&gt;</code>) and a json body describing the task
+details, force maintenance countdown (ms) and other params and return a response json that will
+contain the boolean status for allowing or disallowing the task&rsquo;s removal.</p>
+
+<h5 id="request">Request:</h5>
+<pre class="highlight javascript"><code><span style="background-color: #f8f8f8">POST</span> <span style="color: #000000;font-weight: bold">/</span>
+  <span style="background-color: #f8f8f8">?</span><span style="background-color: #f8f8f8">task</span><span style="color: #000000;font-weight: bold">=&lt;</span><span style="background-color: #f8f8f8">cluster</span><span style="color: #000000;font-weight: bold">&gt;</span><span style="color: #009926">/&lt;role&gt;/</span><span style="color: #000000;font-weight: bold">&lt;</span><span style="background-color: #f8f8f8">env</span><span style="color: #000000;font-weight: bold">&gt;</span><span style="color: #009926">/&lt;name&gt;/</span><span style="color: #000000;font-weight: bold">&lt;</span><span style="background-color: #f8f8f8">instance</span><span style="color: #000000;font-weight: bold">&gt;</span>
+
+<span style="background-color: #f8f8f8">{</span>
+  <span style="color: #d14">"forceMaintenanceCountdownMs"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #d14">"604755646"</span><span style="background-color: #f8f8f8">,</span>
+  <span style="color: #d14">"task"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #d14">"cluster/role/devel/job/1"</span><span style="background-color: #f8f8f8">,</span>
+  <span style="color: #d14">"taskConfig"</span><span style="background-color: #f8f8f8">:</span> <span style="background-color: #f8f8f8">{</span>
+    <span style="color: #d14">"assignedTask"</span><span style="background-color: #f8f8f8">:</span> <span style="background-color: #f8f8f8">{</span>
+      <span style="color: #d14">"taskId"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #d14">"taskA"</span><span style="background-color: #f8f8f8">,</span>
+      <span style="color: #d14">"slaveHost"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #d14">"a"</span><span style="background-color: #f8f8f8">,</span>
+      <span style="color: #d14">"task"</span><span style="background-color: #f8f8f8">:</span> <span style="background-color: #f8f8f8">{</span>
+        <span style="color: #d14">"job"</span><span style="background-color: #f8f8f8">:</span> <span style="background-color: #f8f8f8">{</span>
+          <span style="color: #d14">"role"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #d14">"role"</span><span style="background-color: #f8f8f8">,</span>
+          <span style="color: #d14">"environment"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #d14">"devel"</span><span style="background-color: #f8f8f8">,</span>
+          <span style="color: #d14">"name"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #d14">"job"</span>
+        <span style="background-color: #f8f8f8">},</span>
+        <span style="background-color: #f8f8f8">...</span>
+      <span style="background-color: #f8f8f8">},</span>
+      <span style="color: #d14">"assignedPorts"</span><span style="background-color: #f8f8f8">:</span> <span style="background-color: #f8f8f8">{</span>
+        <span style="color: #d14">"http"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #009999">1000</span>
+      <span style="background-color: #f8f8f8">},</span>
+      <span style="color: #d14">"instanceId"</span><span style="color: #a61717;background-color: #e3d2d2">:</span> <span style="color: #009999">1</span>
+      <span style="background-color: #f8f8f8">...</span>
+    <span style="background-color: #f8f8f8">},</span>
+    <span style="background-color: #f8f8f8">...</span>
+  <span style="background-color: #f8f8f8">}</span>
+<span style="background-color: #f8f8f8">}</span>
+</code></pre>
+
+<h5 id="response">Response:</h5>
+<pre class="highlight json"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+  </span><span style="color: #000080">"drain"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #000000;font-weight: bold">true</span><span style="color: #bbbbbb">
+</span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
+</span></code></pre>
+
+<p>If Coordinator allows removal of the task, then the task’s
+<a href="../../reference/configuration/#httplifecycleconfig-objects">termination lifecycle</a>
+is triggered. If Coordinator does not allow removal, then the request will be retried again in the
+future.</p>
+
+<h4 id="coordinator-actions">Coordinator Actions</h4>
+
+<p>Coordinator endpoint get its own lock and this is used to serializes calls to the Coordinator.
+It guarantees that only one concurrent request is sent to a coordinator endpoint. This allows
+coordinators to simply look the current state of the tasks to determine its SLA (without having
+to worry about in-flight and pending requests). However if there are multiple coordinators,
+maintenance can be done in parallel across all the coordinators.</p>
+
+<p><em>Note: Single concurrent request to a coordinator endpoint does not translate as exactly-once
+guarantee. The coordinator must be able to handle duplicate drain
+requests for the same task.</em></p>
+
+</div>
+
+      </div>
+    </div>
+  	<div class="container-fluid section-footer buffer">
+      <div class="container">
+        <div class="row">
+		  <div class="col-md-2 col-md-offset-1"><h3>Quick Links</h3>
+		  <ul>
+		    <li><a href="/downloads/">Downloads</a></li>
+            <li><a href="/community/">Mailing Lists</a></li>
+			<li><a href="http://issues.apache.org/jira/browse/AURORA">Issue Tracking</a></li>
+			<li><a href="/documentation/latest/contributing/">How To Contribute</a></li>     
+		  </ul>
+	      </div>
+		  <div class="col-md-2"><h3>The ASF</h3>
+          <ul>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+            <li><a href="http://www.apache.org/security/">Security</a></li>
+          </ul>
+		  </div>
+		  <div class="col-md-6">
+			<p class="disclaimer">&copy; 2014-2017 <a href="http://www.apache.org/">Apache Software Foundation</a>. Licensed under the <a href="http://www.apache.org/licenses/">Apache License v2.0</a>. The <a href="https://www.flickr.com/photos/trondk/12706051375/">Aurora Borealis IX photo</a> displayed on the homepage is available under a <a href="https://creativecommons.org/licenses/by-nc-nd/2.0/">Creative Commons BY-NC-ND 2.0 license</a>. Apache, Apache Aurora, and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+        </div>
+      </div>
+    </div>
+
+  </body>
+</html>

Added: aurora/site/publish/documentation/0.21.0/features/webhooks/index.html
URL: http://svn.apache.org/viewvc/aurora/site/publish/documentation/0.21.0/features/webhooks/index.html?rev=1840515&view=auto
==============================================================================
--- aurora/site/publish/documentation/0.21.0/features/webhooks/index.html (added)
+++ aurora/site/publish/documentation/0.21.0/features/webhooks/index.html Tue Sep 11 05:28:10 2018
@@ -0,0 +1,257 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+	<title>Apache Aurora</title>
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+    <link href="/assets/css/main.css" rel="stylesheet">
+	<!-- Analytics -->
+	<script type="text/javascript">
+		  var _gaq = _gaq || [];
+		  _gaq.push(['_setAccount', 'UA-45879646-1']);
+		  _gaq.push(['_setDomainName', 'apache.org']);
+		  _gaq.push(['_trackPageview']);
+
+		  (function() {
+		    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+		    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+		    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+		  })();
+	</script>
+  </head>
+  <body>
+    <div class="container-fluid section-header">
+  <div class="container">
+    <div class="nav nav-bar">
+    <a href="/"><img src="/assets/img/aurora_logo_dkbkg.svg" width="300" alt="Transparent Apache Aurora logo with dark background"/></a>
+    <ul class="nav navbar-nav navbar-right">
+      <li><a href="/documentation/latest/">Documentation</a></li>
+      <li><a href="/community/">Community</a></li>
+      <li><a href="/downloads/">Downloads</a></li>
+      <li><a href="/blog/">Blog</a></li>
+    </ul>
+    </div>
+  </div>
+</div>
+	
+    <div class="container-fluid">
+      <div class="container content">
+        <div class="col-md-12 documentation">
+<h5 class="page-header text-uppercase">Documentation
+<select onChange="window.location.href='/documentation/' + this.value + '/features/webhooks/'"
+        value="0.21.0">
+  <option value="0.21.0"
+    selected="selected">
+    0.21.0
+      (latest)
+  </option>
+  <option value="0.20.0"
+    >
+    0.20.0
+  </option>
+  <option value="0.19.1"
+    >
+    0.19.1
+  </option>
+  <option value="0.19.0"
+    >
+    0.19.0
+  </option>
+  <option value="0.18.1"
+    >
+    0.18.1
+  </option>
+  <option value="0.18.0"
+    >
+    0.18.0
+  </option>
+  <option value="0.17.0"
+    >
+    0.17.0
+  </option>
+  <option value="0.16.0"
+    >
+    0.16.0
+  </option>
+  <option value="0.15.0"
+    >
+    0.15.0
+  </option>
+  <option value="0.14.0"
+    >
+    0.14.0
+  </option>
+  <option value="0.13.0"
+    >
+    0.13.0
+  </option>
+  <option value="0.12.0"
+    >
+    0.12.0
+  </option>
+  <option value="0.11.0"
+    >
+    0.11.0
+  </option>
+  <option value="0.10.0"
+    >
+    0.10.0
+  </option>
+  <option value="0.9.0"
+    >
+    0.9.0
+  </option>
+  <option value="0.8.0"
+    >
+    0.8.0
+  </option>
+  <option value="0.7.0-incubating"
+    >
+    0.7.0-incubating
+  </option>
+  <option value="0.6.0-incubating"
+    >
+    0.6.0-incubating
+  </option>
+  <option value="0.5.0-incubating"
+    >
+    0.5.0-incubating
+  </option>
+</select>
+</h5>
+<h1 id="webhooks">Webhooks</h1>
+
+<p>Aurora has an optional feature which allows operator to specify a file to configure a HTTP webhook
+to receive task state change events. It can be enabled with a scheduler flag eg
+<code>-webhook_config=/path/to/webhook.json</code>. At this point, webhooks are still considered <em>experimental</em>.</p>
+
+<p>Below is a sample configuration:</p>
+<pre class="highlight json"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+  </span><span style="color: #000080">"headers"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+    </span><span style="color: #000080">"Content-Type"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #d14">"application/vnd.kafka.json.v1+json"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+    </span><span style="color: #000080">"Producer-Type"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #d14">"reliable"</span><span style="color: #bbbbbb">
+  </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
+  </span><span style="color: #000080">"targetURL"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #d14">"http://localhost:5000/"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+  </span><span style="color: #000080">"timeoutMsec"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">5</span><span style="color: #bbbbbb">
+</span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
+</span></code></pre>
+
+<p>And an example of a response that you will get back:</p>
+<pre class="highlight json"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+    </span><span style="color: #000080">"task"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb">
+    </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+        </span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">0</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+        </span><span style="color: #000080">"assignedTask"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+            </span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">0</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+            </span><span style="color: #000080">"taskId"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"vagrant-test-http_example-8-a6cf7ec5-d793-49c7-b10f-0e14ab80bfff"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+            </span><span style="color: #000080">"task"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">-1819348376</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"job"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+                    </span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">803049425</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                    </span><span style="color: #000080">"role"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"vagrant"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                    </span><span style="color: #000080">"environment"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"test"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                    </span><span style="color: #000080">"name"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"http_example"</span><span style="color: #bbbbbb">
+                    </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"owner"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+                    </span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">226895216</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                    </span><span style="color: #000080">"user"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"vagrant"</span><span style="color: #bbbbbb">
+                    </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"isService"</span><span style="background-color: #f8f8f8">:</span><span style="color: #000000;font-weight: bold">true</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"numCpus"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">0.1</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"ramMb"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">16</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"diskMb"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">8</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"priority"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">0</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"maxTaskFailures"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">1</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"production"</span><span style="background-color: #f8f8f8">:</span><span style="color: #000000;font-weight: bold">false</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"resources"</span><span style="background-color: #f8f8f8">:[</span><span style="color: #bbbbbb">
+                    </span><span style="background-color: #f8f8f8">{</span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">729800451</span><span style="background-color: #f8f8f8">,</span><span style="color: #000080">"setField"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"NUM_CPUS"</span><span style="background-color: #f8f8f8">,</span><span style="color: #000080">"value"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">0.1</span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
+                    </span><span style="background-color: #f8f8f8">{</span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">552899914</span><span style="background-color: #f8f8f8">,</span><span style="color: #000080">"setField"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"RAM_MB"</span><span style="background-color: #f8f8f8">,</span><span style="color: #000080">"value"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">16</span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
+                    </span><span style="background-color: #f8f8f8">{</span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">-1547868317</span><span style="background-color: #f8f8f8">,</span><span style="color: #000080">"setField"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"DISK_MB"</span><span style="background-color: #f8f8f8">,</span><span style="color: #000080">"value"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">8</span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
+                    </span><span style="background-color: #f8f8f8">{</span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">1957328227</span><span style="background-color: #f8f8f8">,</span><span style="color: #000080">"setField"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"NAMED_PORT"</span><span style="background-color: #f8f8f8">,</span><span style="color: #000080">"value"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"http"</span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
+                    </span><span style="background-color: #f8f8f8">{</span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">1954229436</span><span style="background-color: #f8f8f8">,</span><span style="color: #000080">"setField"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"NAMED_PORT"</span><span style="background-color: #f8f8f8">,</span><span style="color: #000080">"value"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"tcp"</span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
+                    </span><span style="background-color: #f8f8f8">],</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"constraints"</span><span style="background-color: #f8f8f8">:[],</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"requestedPorts"</span><span style="background-color: #f8f8f8">:[</span><span style="color: #d14">"http"</span><span style="background-color: #f8f8f8">,</span><span style="color: #d14">"tcp"</span><span style="background-color: #f8f8f8">],</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"taskLinks"</span><span style="background-color: #f8f8f8">:{</span><span style="color: #000080">"http"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"http://%host%:%port:http%"</span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"contactEmail"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"vagrant@localhost"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                </span><span style="color: #000080">"executorConfig"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+                    </span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">-1194797325</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                    </span><span style="color: #000080">"name"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"AuroraExecutor"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                    </span><span style="color: #000080">"data"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #d14">"{\"environment\": \"test\", \"health_check_config\": {\"initial_interval_secs\": 5.0, \"health_checker\": { \"http\": {\"expected_response_code\": 0, \"endpoint\": \"/health\", \"expected_response\": \"ok\"}}, \"max_consecutive_failures\": 0, \"timeout_secs\": 1.0, \"interval_secs\": 1.0}, \"name\": \"http_example\", \"service\": true, \"max_task_failures\": 1, \"cron_collision_policy\": \"KILL_EXISTING\", \"enable_hooks\": false, \"cluster\": \"devcluster\", \"task\": {\"processes\": [{\"daemon\": false, \"name\": \"echo_ports\", \"ephemeral\": false, \"max_failures\": 1, \"min_duration\": 5, \"cmdline\": \"echo \\\"tcp port: {{thermos.ports[tcp]}}; http port: {{thermos.ports[http]}}; alias: {{thermos.ports[alias]}}\\\"\", \"final\": false}, {\"daemon\": false, \"name\": \"stage_server\", \"ephemeral\": 
 false, \"max_failures\": 1, \"min_duration\": 5, \"cmdline\": \"cp /vagrant/src/test/sh/org/apache/aurora/e2e/http_example.py .\", \"final\": false}, {\"daemon\": false, \"name\": \"run_server\", \"ephemeral\": false, \"max_failures\": 1, \"min_duration\": 5, \"cmdline\": \"python http_example.py {{thermos.ports[http]}}\", \"final\": false}], \"name\": \"http_example\", \"finalization_wait\": 30, \"max_failures\": 1, \"max_concurrency\": 0, \"resources\": {\"disk\": 8388608, \"ram\": 16777216, \"cpu\": 0.1}, \"constraints\": [{\"order\": [\"echo_ports\", \"stage_server\", \"run_server\"]}]}, \"production\": false, \"role\": \"vagrant\", \"contact\": \"vagrant@localhost\", \"announce\": {\"primary_port\": \"http\", \"portmap\": {\"alias\": \"http\"}}, \"lifecycle\": {\"http\": {\"graceful_shutdown_endpoint\": \"/quitquitquit\", \"port\": \"health\", \"shutdown_endpoint\": \"/abortabortabort\"}}, \"priority\": 0}"</span><span style="background-color: #f8f8f8">},</span><span style="col
 or: #bbbbbb">
+                    </span><span style="color: #000080">"metadata"</span><span style="background-color: #f8f8f8">:[],</span><span style="color: #bbbbbb">
+                    </span><span style="color: #000080">"container"</span><span style="background-color: #f8f8f8">:{</span><span style="color: #bbbbbb">
+                        </span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">-1955376216</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                        </span><span style="color: #000080">"setField"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"MESOS"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+                        </span><span style="color: #000080">"value"</span><span style="background-color: #f8f8f8">:{</span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">31</span><span style="background-color: #f8f8f8">}}</span><span style="color: #bbbbbb">
+                    </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
+                    </span><span style="color: #000080">"assignedPorts"</span><span style="background-color: #f8f8f8">:{},</span><span style="color: #bbbbbb">
+                    </span><span style="color: #000080">"instanceId"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">8</span><span style="color: #bbbbbb">
+        </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
+        </span><span style="color: #000080">"status"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"PENDING"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+        </span><span style="color: #000080">"failureCount"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">0</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+        </span><span style="color: #000080">"taskEvents"</span><span style="background-color: #f8f8f8">:[</span><span style="color: #bbbbbb">
+            </span><span style="background-color: #f8f8f8">{</span><span style="color: #000080">"cachedHashCode"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">0</span><span style="background-color: #f8f8f8">,</span><span style="color: #000080">"timestamp"</span><span style="background-color: #f8f8f8">:</span><span style="color: #009999">1464992060258</span><span style="background-color: #f8f8f8">,</span><span style="color: #000080">"status"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"PENDING"</span><span style="background-color: #f8f8f8">,</span><span style="color: #000080">"scheduler"</span><span style="background-color: #f8f8f8">:</span><span style="color: #d14">"aurora"</span><span style="background-color: #f8f8f8">}]</span><span style="color: #bbbbbb">
+        </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
+        </span><span style="color: #000080">"oldState"</span><span style="background-color: #f8f8f8">:{}}</span><span style="color: #bbbbbb">
+</span></code></pre>
+
+<p>By default, the webhook watches all TaskStateChanges and sends events to configured endpoint. If you
+are only interested in certain types of TaskStateChange (transition to <code>LOST</code> or <code>FAILED</code> statuses),
+you can specify a whitelist of the desired task statuses in webhook.json. The webhook will only send
+the corresponding events for the whitelisted statuses to the configured endpoint.</p>
+<pre class="highlight json"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+  </span><span style="color: #000080">"headers"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+    </span><span style="color: #000080">"Content-Type"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #d14">"application/vnd.kafka.json.v1+json"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+    </span><span style="color: #000080">"Producer-Type"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #d14">"reliable"</span><span style="color: #bbbbbb">
+  </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
+  </span><span style="color: #000080">"targetURL"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #d14">"http://localhost:5000/"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+  </span><span style="color: #000080">"timeoutMsec"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">50</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+  </span><span style="color: #000080">"statuses"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #d14">"LOST"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb"> </span><span style="color: #d14">"FAILED"</span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
+</span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
+</span></code></pre>
+
+<p>If you want to whitelist all TaskStateChanges, you can add a wildcard character <code>*</code> to your whitelist
+like below, or simply leave out the <code>statuses</code> field in webhook.json.</p>
+<pre class="highlight json"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+  </span><span style="color: #000080">"headers"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
+    </span><span style="color: #000080">"Content-Type"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #d14">"application/vnd.kafka.json.v1+json"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+    </span><span style="color: #000080">"Producer-Type"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #d14">"reliable"</span><span style="color: #bbbbbb">
+  </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
+  </span><span style="color: #000080">"targetURL"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #d14">"http://localhost:5000/"</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+  </span><span style="color: #000080">"timeoutMsec"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">50</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
+  </span><span style="color: #000080">"statuses"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #d14">"*"</span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
+</span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
+</span></code></pre>
+
+</div>
+
+      </div>
+    </div>
+  	<div class="container-fluid section-footer buffer">
+      <div class="container">
+        <div class="row">
+		  <div class="col-md-2 col-md-offset-1"><h3>Quick Links</h3>
+		  <ul>
+		    <li><a href="/downloads/">Downloads</a></li>
+            <li><a href="/community/">Mailing Lists</a></li>
+			<li><a href="http://issues.apache.org/jira/browse/AURORA">Issue Tracking</a></li>
+			<li><a href="/documentation/latest/contributing/">How To Contribute</a></li>     
+		  </ul>
+	      </div>
+		  <div class="col-md-2"><h3>The ASF</h3>
+          <ul>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+            <li><a href="http://www.apache.org/security/">Security</a></li>
+          </ul>
+		  </div>
+		  <div class="col-md-6">
+			<p class="disclaimer">&copy; 2014-2017 <a href="http://www.apache.org/">Apache Software Foundation</a>. Licensed under the <a href="http://www.apache.org/licenses/">Apache License v2.0</a>. The <a href="https://www.flickr.com/photos/trondk/12706051375/">Aurora Borealis IX photo</a> displayed on the homepage is available under a <a href="https://creativecommons.org/licenses/by-nc-nd/2.0/">Creative Commons BY-NC-ND 2.0 license</a>. Apache, Apache Aurora, and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+        </div>
+      </div>
+    </div>
+
+  </body>
+</html>

Added: aurora/site/publish/documentation/0.21.0/getting-started/overview/index.html
URL: http://svn.apache.org/viewvc/aurora/site/publish/documentation/0.21.0/getting-started/overview/index.html?rev=1840515&view=auto
==============================================================================
--- aurora/site/publish/documentation/0.21.0/getting-started/overview/index.html (added)
+++ aurora/site/publish/documentation/0.21.0/getting-started/overview/index.html Tue Sep 11 05:28:10 2018
@@ -0,0 +1,261 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+	<title>Apache Aurora</title>
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+    <link href="/assets/css/main.css" rel="stylesheet">
+	<!-- Analytics -->
+	<script type="text/javascript">
+		  var _gaq = _gaq || [];
+		  _gaq.push(['_setAccount', 'UA-45879646-1']);
+		  _gaq.push(['_setDomainName', 'apache.org']);
+		  _gaq.push(['_trackPageview']);
+
+		  (function() {
+		    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+		    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+		    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+		  })();
+	</script>
+  </head>
+  <body>
+    <div class="container-fluid section-header">
+  <div class="container">
+    <div class="nav nav-bar">
+    <a href="/"><img src="/assets/img/aurora_logo_dkbkg.svg" width="300" alt="Transparent Apache Aurora logo with dark background"/></a>
+    <ul class="nav navbar-nav navbar-right">
+      <li><a href="/documentation/latest/">Documentation</a></li>
+      <li><a href="/community/">Community</a></li>
+      <li><a href="/downloads/">Downloads</a></li>
+      <li><a href="/blog/">Blog</a></li>
+    </ul>
+    </div>
+  </div>
+</div>
+	
+    <div class="container-fluid">
+      <div class="container content">
+        <div class="col-md-12 documentation">
+<h5 class="page-header text-uppercase">Documentation
+<select onChange="window.location.href='/documentation/' + this.value + '/getting-started/overview/'"
+        value="0.21.0">
+  <option value="0.21.0"
+    selected="selected">
+    0.21.0
+      (latest)
+  </option>
+  <option value="0.20.0"
+    >
+    0.20.0
+  </option>
+  <option value="0.19.1"
+    >
+    0.19.1
+  </option>
+  <option value="0.19.0"
+    >
+    0.19.0
+  </option>
+  <option value="0.18.1"
+    >
+    0.18.1
+  </option>
+  <option value="0.18.0"
+    >
+    0.18.0
+  </option>
+  <option value="0.17.0"
+    >
+    0.17.0
+  </option>
+  <option value="0.16.0"
+    >
+    0.16.0
+  </option>
+  <option value="0.15.0"
+    >
+    0.15.0
+  </option>
+  <option value="0.14.0"
+    >
+    0.14.0
+  </option>
+  <option value="0.13.0"
+    >
+    0.13.0
+  </option>
+  <option value="0.12.0"
+    >
+    0.12.0
+  </option>
+  <option value="0.11.0"
+    >
+    0.11.0
+  </option>
+  <option value="0.10.0"
+    >
+    0.10.0
+  </option>
+  <option value="0.9.0"
+    >
+    0.9.0
+  </option>
+  <option value="0.8.0"
+    >
+    0.8.0
+  </option>
+  <option value="0.7.0-incubating"
+    >
+    0.7.0-incubating
+  </option>
+  <option value="0.6.0-incubating"
+    >
+    0.6.0-incubating
+  </option>
+  <option value="0.5.0-incubating"
+    >
+    0.5.0-incubating
+  </option>
+</select>
+</h5>
+<h1 id="aurora-system-overview">Aurora System Overview</h1>
+
+<p>Apache Aurora is a service scheduler that runs on top of Apache Mesos, enabling you to run
+long-running services, cron jobs, and ad-hoc jobs that take advantage of Apache Mesos&rsquo; scalability,
+fault-tolerance, and resource isolation.</p>
+
+<h2 id="components">Components</h2>
+
+<p>It is important to have an understanding of the components that make up
+a functioning Aurora cluster.</p>
+
+<p><img alt="Aurora Components" src="../../images/components.png" /></p>
+
+<ul>
+<li><p><strong>Aurora scheduler</strong>
+The scheduler is your primary interface to the work you run in your cluster.  You will
+instruct it to run jobs, and it will manage them in Mesos for you.  You will also frequently use
+the scheduler&rsquo;s read-only web interface as a heads-up display for what&rsquo;s running in your cluster.</p></li>
+<li><p><strong>Aurora client</strong>
+The client (<code>aurora</code> command) is a command line tool that exposes primitives that you can use to
+interact with the scheduler. The client operates on</p></li>
+</ul>
+
+<p>Aurora also provides an admin client (<code>aurora_admin</code> command) that contains commands built for
+  cluster administrators.  You can use this tool to do things like manage user quotas and manage
+  graceful maintenance on machines in cluster.</p>
+
+<ul>
+<li><p><strong>Aurora executor</strong>
+The executor (a.k.a. Thermos executor) is responsible for carrying out the workloads described in
+the Aurora DSL (<code>.aurora</code> files).  The executor is what actually executes user processes.  It will
+also perform health checking of tasks and register tasks in ZooKeeper for the purposes of dynamic
+service discovery.</p></li>
+<li><p><strong>Aurora observer</strong>
+The observer provides browser-based access to the status of individual tasks executing on worker
+machines.  It gives insight into the processes executing, and facilitates browsing of task sandbox
+directories.</p></li>
+<li><p><strong>ZooKeeper</strong>
+<a href="http://zookeeper.apache.org">ZooKeeper</a> is a distributed consensus system.  In an Aurora cluster
+it is used for reliable election of the leading Aurora scheduler and Mesos master.  It is also
+used as a vehicle for service discovery, see <a href="../../features/service-discovery/">Service Discovery</a></p></li>
+<li><p><strong>Mesos master</strong>
+The master is responsible for tracking worker machines and performing accounting of their
+resources.  The scheduler interfaces with the master to control the cluster.</p></li>
+<li><p><strong>Mesos agent</strong>
+The agent receives work assigned by the scheduler and executes them.  It interfaces with Linux
+isolation systems like cgroups, namespaces and Docker to manage the resource consumption of tasks.
+When a user task is launched, the agent will launch the executor (in the context of a Linux cgroup
+or Docker container depending upon the environment), which will in turn fork user processes.</p></li>
+</ul>
+
+<p>In earlier versions of Mesos and Aurora, the Mesos agent was known as the Mesos slave.</p>
+
+<h2 id="jobs-tasks-and-processes">Jobs, Tasks and Processes</h2>
+
+<p>Aurora is a Mesos framework used to schedule <em>jobs</em> onto Mesos. Mesos
+cares about individual <em>tasks</em>, but typical jobs consist of dozens or
+hundreds of task replicas. Aurora provides a layer on top of Mesos with
+its <code>Job</code> abstraction. An Aurora <code>Job</code> consists of a task template and
+instructions for creating near-identical replicas of that task (modulo
+things like &ldquo;instance id&rdquo; or specific port numbers which may differ from
+machine to machine).</p>
+
+<p>How many tasks make up a Job is complicated. On a basic level, a Job consists of
+one task template and instructions for creating near-identical replicas of that task
+(otherwise referred to as &ldquo;instances&rdquo; or &ldquo;shards&rdquo;).</p>
+
+<p>A task can merely be a single <em>process</em> corresponding to a single
+command line, such as <code>python2.7 my_script.py</code>. However, a task can also
+consist of many separate processes, which all run within a single
+sandbox. For example, running multiple cooperating agents together,
+such as <code>logrotate</code>, <code>installer</code>, master, or agent processes. This is
+where Thermos comes in. While Aurora provides a <code>Job</code> abstraction on
+top of Mesos <code>Tasks</code>, Thermos provides a <code>Process</code> abstraction
+underneath Mesos <code>Task</code>s and serves as part of the Aurora framework&rsquo;s
+executor.</p>
+
+<p>You define <code>Job</code>s,<code>Task</code>s, and <code>Process</code>es in a configuration file.
+Configuration files are written in Python, and make use of the
+<a href="https://github.com/wickman/pystachio">Pystachio</a> templating language,
+along with specific Aurora, Mesos, and Thermos commands and methods.
+The configuration files typically end with a <code>.aurora</code> extension.</p>
+
+<p>Summary:</p>
+
+<ul>
+<li>Aurora manages jobs made of tasks.</li>
+<li>Mesos manages tasks made of processes.</li>
+<li>Thermos manages processes.</li>
+<li>All that is defined in <code>.aurora</code> configuration files</li>
+</ul>
+
+<p><img alt="Aurora hierarchy" src="../../images/aurora_hierarchy.png" /></p>
+
+<p>Each <code>Task</code> has a <em>sandbox</em> created when the <code>Task</code> starts and garbage
+collected when it finishes. All of a <code>Task&#39;</code>s processes run in its
+sandbox, so processes can share state by using a shared current working
+directory.</p>
+
+<p>The sandbox garbage collection policy considers many factors, most
+importantly age and size. It makes a best-effort attempt to keep
+sandboxes around as long as possible post-task in order for service
+owners to inspect data and logs, should the <code>Task</code> have completed
+abnormally. But you can&rsquo;t design your applications assuming sandboxes
+will be around forever, e.g. by building log saving or other
+checkpointing mechanisms directly into your application or into your
+<code>Job</code> description.</p>
+
+</div>
+
+      </div>
+    </div>
+  	<div class="container-fluid section-footer buffer">
+      <div class="container">
+        <div class="row">
+		  <div class="col-md-2 col-md-offset-1"><h3>Quick Links</h3>
+		  <ul>
+		    <li><a href="/downloads/">Downloads</a></li>
+            <li><a href="/community/">Mailing Lists</a></li>
+			<li><a href="http://issues.apache.org/jira/browse/AURORA">Issue Tracking</a></li>
+			<li><a href="/documentation/latest/contributing/">How To Contribute</a></li>     
+		  </ul>
+	      </div>
+		  <div class="col-md-2"><h3>The ASF</h3>
+          <ul>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+            <li><a href="http://www.apache.org/security/">Security</a></li>
+          </ul>
+		  </div>
+		  <div class="col-md-6">
+			<p class="disclaimer">&copy; 2014-2017 <a href="http://www.apache.org/">Apache Software Foundation</a>. Licensed under the <a href="http://www.apache.org/licenses/">Apache License v2.0</a>. The <a href="https://www.flickr.com/photos/trondk/12706051375/">Aurora Borealis IX photo</a> displayed on the homepage is available under a <a href="https://creativecommons.org/licenses/by-nc-nd/2.0/">Creative Commons BY-NC-ND 2.0 license</a>. Apache, Apache Aurora, and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+        </div>
+      </div>
+    </div>
+
+  </body>
+</html>