You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by jc...@apache.org on 2016/09/28 18:23:59 UTC

svn commit: r1762695 [6/19] - in /aurora/site: data/ publish/ publish/documentation/0.10.0/ publish/documentation/0.10.0/build-system/ publish/documentation/0.10.0/client-cluster-configuration/ publish/documentation/0.10.0/client-commands/ publish/docu...

Added: aurora/site/publish/documentation/0.16.0/features/service-discovery/index.html
URL: http://svn.apache.org/viewvc/aurora/site/publish/documentation/0.16.0/features/service-discovery/index.html?rev=1762695&view=auto
==============================================================================
--- aurora/site/publish/documentation/0.16.0/features/service-discovery/index.html (added)
+++ aurora/site/publish/documentation/0.16.0/features/service-discovery/index.html Wed Sep 28 18:23:53 2016
@@ -0,0 +1,174 @@
+<!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/service-discovery/'"
+        value="0.16.0">
+  <option value="0.16.0"
+    selected="selected">
+    0.16.0
+      (latest)
+  </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="service-discovery">Service Discovery</h1>
+
+<p>It is possible for the Aurora executor to announce tasks into ServerSets for
+the purpose of service discovery.  ServerSets use the Zookeeper <a href="http://zookeeper.apache.org/doc/trunk/recipes.html#sc_outOfTheBox">group membership pattern</a>
+of which there are several reference implementations:</p>
+
+<ul>
+<li><a href="https://github.com/apache/mesos/blob/master/src/zookeeper/group.cpp">C++</a></li>
+<li><a href="https://github.com/twitter/commons/blob/master/src/java/com/twitter/common/zookeeper/ServerSetImpl.java#L221">Java</a></li>
+<li><a href="https://github.com/twitter/commons/blob/master/src/python/twitter/common/zookeeper/serverset/serverset.py#L51">Python</a></li>
+</ul>
+
+<p>These can also be used natively in Finagle using the <a href="https://github.com/twitter/finagle/blob/master/finagle-serversets/src/main/scala/com/twitter/finagle/zookeeper/ZookeeperServerSetCluster.scala">ZookeeperServerSetCluster</a>.</p>
+
+<p>For more information about how to configure announcing, see the <a href="../../reference/configuration/">Configuration Reference</a>.</p>
+
+<h2 id="using-mesos-discoveryinfo">Using Mesos DiscoveryInfo</h2>
+
+<p>Experimental support for populating DiscoveryInfo in Mesos is introduced in Aurora. This can be used to build
+custom service discovery system not using zookeeper. Please see <code>Service Discovery</code> section in
+<a href="http://mesos.apache.org/documentation/latest/app-framework-development-guide/">Mesos Framework Development guide</a> for
+explanation of the protobuf message in Mesos.</p>
+
+<p>To use this feature, please enable <code>--populate_discovery_info</code> flag on scheduler. All jobs started by scheduler
+afterwards will have their portmap populated to Mesos and discoverable in <code>/state</code> endpoint in Mesos master and agent.</p>
+
+<h3 id="using-mesos-dns">Using Mesos DNS</h3>
+
+<p>An example is using <a href="https://github.com/mesosphere/mesos-dns">Mesos-DNS</a>, which is able to generate multiple DNS
+records. With current implementation, the example job with key <code>devcluster/vagrant/test/http-example</code> generates at
+least the following:</p>
+
+<ol>
+<li>An A record for <code>http_example.test.vagrant.aurora.mesos</code> (which only includes IP address);</li>
+<li>A <a href="https://en.wikipedia.org/wiki/SRV_record">SRV record</a> for
+<code>_http_example.test.vagrant._tcp.aurora.mesos</code>, which includes IP address and every port. This should only
+be used if the service has one port.</li>
+<li>A SRV record <code>_{port-name}._http_example.test.vagrant._tcp.aurora.mesos</code> for each port name
+defined. This should be used when the service has multiple ports.</li>
+</ol>
+
+<p>Things to note:</p>
+
+<ol>
+<li>The domain part (&ldquo;.mesos&rdquo; in above example) can be configured in <a href="http://mesosphere.github.io/mesos-dns/docs/configuration-parameters.html">Mesos DNS</a>;</li>
+<li>Right now, portmap and port aliases in announcer object are not reflected in DiscoveryInfo, therefore not visible in
+Mesos DNS records either. This is because they are only resolved in thermos executors.</li>
+</ol>
+
+</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-2016 <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.16.0/features/services/index.html
URL: http://svn.apache.org/viewvc/aurora/site/publish/documentation/0.16.0/features/services/index.html?rev=1762695&view=auto
==============================================================================
--- aurora/site/publish/documentation/0.16.0/features/services/index.html (added)
+++ aurora/site/publish/documentation/0.16.0/features/services/index.html Wed Sep 28 18:23:53 2016
@@ -0,0 +1,215 @@
+<!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.16.0">
+  <option value="0.16.0"
+    selected="selected">
+    0.16.0
+      (latest)
+  </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>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-2016 <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.16.0/features/sla-metrics/index.html
URL: http://svn.apache.org/viewvc/aurora/site/publish/documentation/0.16.0/features/sla-metrics/index.html?rev=1762695&view=auto
==============================================================================
--- aurora/site/publish/documentation/0.16.0/features/sla-metrics/index.html (added)
+++ aurora/site/publish/documentation/0.16.0/features/sla-metrics/index.html Wed Sep 28 18:23:53 2016
@@ -0,0 +1,364 @@
+<!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.16.0">
+  <option value="0.16.0"
+    selected="selected">
+    0.16.0
+      (latest)
+  </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.16.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.16.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.16.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.16.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-2016 <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.16.0/features/webhooks/index.html
URL: http://svn.apache.org/viewvc/aurora/site/publish/documentation/0.16.0/features/webhooks/index.html?rev=1762695&view=auto
==============================================================================
--- aurora/site/publish/documentation/0.16.0/features/webhooks/index.html (added)
+++ aurora/site/publish/documentation/0.16.0/features/webhooks/index.html Wed Sep 28 18:23:53 2016
@@ -0,0 +1,202 @@
+<!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.16.0">
+  <option value="0.16.0"
+    selected="selected">
+    0.16.0
+      (latest)
+  </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:
+<code>json
+{
+    &quot;task&quot;:
+    {
+        &quot;cachedHashCode&quot;:0,
+        &quot;assignedTask&quot;: {
+            &quot;cachedHashCode&quot;:0,
+            &quot;taskId&quot;:&quot;vagrant-test-http_example-8-a6cf7ec5-d793-49c7-b10f-0e14ab80bfff&quot;,
+            &quot;task&quot;: {
+                &quot;cachedHashCode&quot;:-1819348376,
+                &quot;job&quot;: {
+                    &quot;cachedHashCode&quot;:803049425,
+                    &quot;role&quot;:&quot;vagrant&quot;,
+                    &quot;environment&quot;:&quot;test&quot;,
+                    &quot;name&quot;:&quot;http_example&quot;
+                    },
+                &quot;owner&quot;: {
+                    &quot;cachedHashCode&quot;:226895216,
+                    &quot;user&quot;:&quot;vagrant&quot;
+                    },
+                &quot;isService&quot;:true,
+                &quot;numCpus&quot;:0.1,
+                &quot;ramMb&quot;:16,
+                &quot;diskMb&quot;:8,
+                &quot;priority&quot;:0,
+                &quot;maxTaskFailures&quot;:1,
+                &quot;production&quot;:false,
+                &quot;resources&quot;:[
+                    {&quot;cachedHashCode&quot;:729800451,&quot;setField&quot;:&quot;NUM_CPUS&quot;,&quot;value&quot;:0.1},
+                    {&quot;cachedHashCode&quot;:552899914,&quot;setField&quot;:&quot;RAM_MB&quot;,&quot;value&quot;:16},
+                    {&quot;cachedHashCode&quot;:-1547868317,&quot;setField&quot;:&quot;DISK_MB&quot;,&quot;value&quot;:8},
+                    {&quot;cachedHashCode&quot;:1957328227,&quot;setField&quot;:&quot;NAMED_PORT&quot;,&quot;value&quot;:&quot;http&quot;},
+                    {&quot;cachedHashCode&quot;:1954229436,&quot;setField&quot;:&quot;NAMED_PORT&quot;,&quot;value&quot;:&quot;tcp&quot;}
+                    ],
+                &quot;constraints&quot;:[],
+                &quot;requestedPorts&quot;:[&quot;http&quot;,&quot;tcp&quot;],
+                &quot;taskLinks&quot;:{&quot;http&quot;:&quot;http://%host%:%port:http%&quot;},
+                &quot;contactEmail&quot;:&quot;vagrant@localhost&quot;,
+                &quot;executorConfig&quot;: {
+                    &quot;cachedHashCode&quot;:-1194797325,
+                    &quot;name&quot;:&quot;AuroraExecutor&quot;,
+                    &quot;data&quot;: &quot;{\&quot;environment\&quot;: \&quot;test\&quot;, \&quot;health_check_config\&quot;: {\&quot;initial_interval_secs\&quot;: 5.0, \&quot;health_checker\&quot;: { \&quot;http\&quot;: {\&quot;expected_response_code\&quot;: 0, \&quot;endpoint\&quot;: \&quot;/health\&quot;, \&quot;expected_response\&quot;: \&quot;ok\&quot;}}, \&quot;max_consecutive_failures\&quot;: 0, \&quot;timeout_secs\&quot;: 1.0, \&quot;interval_secs\&quot;: 1.0}, \&quot;name\&quot;: \&quot;http_example\&quot;, \&quot;service\&quot;: true, \&quot;max_task_failures\&quot;: 1, \&quot;cron_collision_policy\&quot;: \&quot;KILL_EXISTING\&quot;, \&quot;enable_hooks\&quot;: false, \&quot;cluster\&quot;: \&quot;devcluster\&quot;, \&quot;task\&quot;: {\&quot;processes\&quot;: [{\&quot;daemon\&quot;: false, \&quot;name\&quot;: \&quot;echo_ports\&quot;, \&quot;ephemeral\&quot;: false, \&quot;max_failures\&quot;: 1, \&quot;min_duration\&quot;: 5, \&quot;cmdline\&quot;: \&quot;echo \\\&quo
 t;tcp port: {{thermos.ports[tcp]}}; http port: {{thermos.ports[http]}}; alias: {{thermos.ports[alias]}}\\\&quot;\&quot;, \&quot;final\&quot;: false}, {\&quot;daemon\&quot;: false, \&quot;name\&quot;: \&quot;stage_server\&quot;, \&quot;ephemeral\&quot;: false, \&quot;max_failures\&quot;: 1, \&quot;min_duration\&quot;: 5, \&quot;cmdline\&quot;: \&quot;cp /vagrant/src/test/sh/org/apache/aurora/e2e/http_example.py .\&quot;, \&quot;final\&quot;: false}, {\&quot;daemon\&quot;: false, \&quot;name\&quot;: \&quot;run_server\&quot;, \&quot;ephemeral\&quot;: false, \&quot;max_failures\&quot;: 1, \&quot;min_duration\&quot;: 5, \&quot;cmdline\&quot;: \&quot;python http_example.py {{thermos.ports[http]}}\&quot;, \&quot;final\&quot;: false}], \&quot;name\&quot;: \&quot;http_example\&quot;, \&quot;finalization_wait\&quot;: 30, \&quot;max_failures\&quot;: 1, \&quot;max_concurrency\&quot;: 0, \&quot;resources\&quot;: {\&quot;disk\&quot;: 8388608, \&quot;ram\&quot;: 16777216, \&quot;cpu\&quot;: 0.1}, 
 \&quot;constraints\&quot;: [{\&quot;order\&quot;: [\&quot;echo_ports\&quot;, \&quot;stage_server\&quot;, \&quot;run_server\&quot;]}]}, \&quot;production\&quot;: false, \&quot;role\&quot;: \&quot;vagrant\&quot;, \&quot;contact\&quot;: \&quot;vagrant@localhost\&quot;, \&quot;announce\&quot;: {\&quot;primary_port\&quot;: \&quot;http\&quot;, \&quot;portmap\&quot;: {\&quot;alias\&quot;: \&quot;http\&quot;}}, \&quot;lifecycle\&quot;: {\&quot;http\&quot;: {\&quot;graceful_shutdown_endpoint\&quot;: \&quot;/quitquitquit\&quot;, \&quot;port\&quot;: \&quot;health\&quot;, \&quot;shutdown_endpoint\&quot;: \&quot;/abortabortabort\&quot;}}, \&quot;priority\&quot;: 0}&quot;},
+                    &quot;metadata&quot;:[],
+                    &quot;container&quot;:{
+                        &quot;cachedHashCode&quot;:-1955376216,
+                        &quot;setField&quot;:&quot;MESOS&quot;,
+                        &quot;value&quot;:{&quot;cachedHashCode&quot;:31}}
+                    },
+                    &quot;assignedPorts&quot;:{},
+                    &quot;instanceId&quot;:8
+        },
+        &quot;status&quot;:&quot;PENDING&quot;,
+        &quot;failureCount&quot;:0,
+        &quot;taskEvents&quot;:[
+            {&quot;cachedHashCode&quot;:0,&quot;timestamp&quot;:1464992060258,&quot;status&quot;:&quot;PENDING&quot;,&quot;scheduler&quot;:&quot;aurora&quot;}]
+        },
+        &quot;oldState&quot;:{}}
+</code></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-2016 <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.16.0/getting-started/overview/index.html
URL: http://svn.apache.org/viewvc/aurora/site/publish/documentation/0.16.0/getting-started/overview/index.html?rev=1762695&view=auto
==============================================================================
--- aurora/site/publish/documentation/0.16.0/getting-started/overview/index.html (added)
+++ aurora/site/publish/documentation/0.16.0/getting-started/overview/index.html Wed Sep 28 18:23:53 2016
@@ -0,0 +1,233 @@
+<!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.16.0">
+  <option value="0.16.0"
+    selected="selected">
+    0.16.0
+      (latest)
+  </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-2016 <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.16.0/getting-started/tutorial/index.html
URL: http://svn.apache.org/viewvc/aurora/site/publish/documentation/0.16.0/getting-started/tutorial/index.html?rev=1762695&view=auto
==============================================================================
--- aurora/site/publish/documentation/0.16.0/getting-started/tutorial/index.html (added)
+++ aurora/site/publish/documentation/0.16.0/getting-started/tutorial/index.html Wed Sep 28 18:23:53 2016
@@ -0,0 +1,383 @@
+<!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/tutorial/'"
+        value="0.16.0">
+  <option value="0.16.0"
+    selected="selected">
+    0.16.0
+      (latest)
+  </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-tutorial">Aurora Tutorial</h1>
+
+<p>This tutorial shows how to use the Aurora scheduler to run (and &ldquo;<code>printf-debug</code>&rdquo;)
+a hello world program on Mesos. This is the recommended document for new Aurora users
+to start getting up to speed on the system.</p>
+
+<ul>
+<li><a href="#setup-install-aurora">Prerequisite</a></li>
+<li><a href="#the-script">The Script</a></li>
+<li><a href="#aurora-configuration">Aurora Configuration</a></li>
+<li><a href="#creating-the-job">Creating the Job</a></li>
+<li><a href="#watching-the-job-run">Watching the Job Run</a></li>
+<li><a href="#cleanup">Cleanup</a></li>
+<li><a href="#next-steps">Next Steps</a></li>
+</ul>
+
+<h2 id="prerequisite">Prerequisite</h2>
+
+<p>This tutorial assumes you are running <a href="../vagrant/">Aurora locally using Vagrant</a>.
+However, in general the instructions are also applicable to any other
+<a href="../../operations/installation/">Aurora installation</a>.</p>
+
+<p>Unless otherwise stated, all commands are to be run from the root of the aurora
+repository clone.</p>
+
+<h2 id="the-script">The Script</h2>
+
+<p>Our &ldquo;hello world&rdquo; application is a simple Python script that loops
+forever, displaying the time every few seconds. Copy the code below and
+put it in a file named <code>hello_world.py</code> in the root of your Aurora repository clone
+(Note: this directory is the same as <code>/vagrant</code> inside the Vagrant VMs).</p>
+
+<p>The script has an intentional bug, which we will explain later on.</p>
+
+<!-- NOTE: If you are changing this file, be sure to also update examples/vagrant/test_tutorial.sh.
+-->
+<pre class="highlight python"><code><span style="color: #000000;font-weight: bold">import</span> <span style="color: #555555">time</span>
+
+<span style="color: #000000;font-weight: bold">def</span> <span style="color: #990000;font-weight: bold">main</span><span style="background-color: #f8f8f8">():</span>
+  <span style="background-color: #f8f8f8">SLEEP_DELAY</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #009999">10</span>
+  <span style="color: #999988;font-style: italic"># Python experts - ignore this blatant bug.</span>
+  <span style="color: #000000;font-weight: bold">for</span> <span style="background-color: #f8f8f8">i</span> <span style="color: #000000;font-weight: bold">in</span> <span style="background-color: #f8f8f8">xrang</span><span style="background-color: #f8f8f8">(</span><span style="color: #009999">100</span><span style="background-color: #f8f8f8">):</span>
+    <span style="color: #000000;font-weight: bold">print</span><span style="background-color: #f8f8f8">(</span><span style="color: #d14">"Hello world! The time is now: </span><span style="color: #d14">%</span><span style="color: #d14">s. Sleeping for </span><span style="color: #d14">%</span><span style="color: #d14">d secs"</span> <span style="color: #000000;font-weight: bold">%</span> <span style="background-color: #f8f8f8">(</span>
+      <span style="background-color: #f8f8f8">time</span><span style="color: #000000;font-weight: bold">.</span><span style="background-color: #f8f8f8">asctime</span><span style="background-color: #f8f8f8">(),</span> <span style="background-color: #f8f8f8">SLEEP_DELAY</span><span style="background-color: #f8f8f8">))</span>
+    <span style="background-color: #f8f8f8">time</span><span style="color: #000000;font-weight: bold">.</span><span style="background-color: #f8f8f8">sleep</span><span style="background-color: #f8f8f8">(</span><span style="background-color: #f8f8f8">SLEEP_DELAY</span><span style="background-color: #f8f8f8">)</span>
+
+<span style="color: #000000;font-weight: bold">if</span> <span style="background-color: #f8f8f8">__name__</span> <span style="color: #000000;font-weight: bold">==</span> <span style="color: #d14">"__main__"</span><span style="background-color: #f8f8f8">:</span>
+  <span style="background-color: #f8f8f8">main</span><span style="background-color: #f8f8f8">()</span>
+</code></pre>
+
+<h2 id="aurora-configuration">Aurora Configuration</h2>
+
+<p>Once we have our script/program, we need to create a <em>configuration
+file</em> that tells Aurora how to manage and launch our Job. Save the below
+code in the file <code>hello_world.aurora</code>.</p>
+
+<!-- NOTE: If you are changing this file, be sure to also update examples/vagrant/test_tutorial.sh.
+-->
+<pre class="highlight python"><code><span style="background-color: #f8f8f8">pkg_path</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'/vagrant/hello_world.py'</span>
+
+<span style="color: #999988;font-style: italic"># we use a trick here to make the configuration change with</span>
+<span style="color: #999988;font-style: italic"># the contents of the file, for simplicity.  in a normal setting, packages would be</span>
+<span style="color: #999988;font-style: italic"># versioned, and the version number would be changed in the configuration.</span>
+<span style="color: #000000;font-weight: bold">import</span> <span style="color: #555555">hashlib</span>
+<span style="color: #000000;font-weight: bold">with</span> <span style="color: #0086B3">open</span><span style="background-color: #f8f8f8">(</span><span style="background-color: #f8f8f8">pkg_path</span><span style="background-color: #f8f8f8">,</span> <span style="color: #d14">'rb'</span><span style="background-color: #f8f8f8">)</span> <span style="color: #000000;font-weight: bold">as</span> <span style="background-color: #f8f8f8">f</span><span style="background-color: #f8f8f8">:</span>
+  <span style="background-color: #f8f8f8">pkg_checksum</span> <span style="color: #000000;font-weight: bold">=</span> <span style="background-color: #f8f8f8">hashlib</span><span style="color: #000000;font-weight: bold">.</span><span style="background-color: #f8f8f8">md5</span><span style="background-color: #f8f8f8">(</span><span style="background-color: #f8f8f8">f</span><span style="color: #000000;font-weight: bold">.</span><span style="background-color: #f8f8f8">read</span><span style="background-color: #f8f8f8">())</span><span style="color: #000000;font-weight: bold">.</span><span style="background-color: #f8f8f8">hexdigest</span><span style="background-color: #f8f8f8">()</span>
+
+<span style="color: #999988;font-style: italic"># copy hello_world.py into the local sandbox</span>
+<span style="background-color: #f8f8f8">install</span> <span style="color: #000000;font-weight: bold">=</span> <span style="background-color: #f8f8f8">Process</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">'fetch_package'</span><span style="background-color: #f8f8f8">,</span>
+  <span style="background-color: #f8f8f8">cmdline</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'cp </span><span style="color: #d14">%</span><span style="color: #d14">s . &amp;&amp; echo </span><span style="color: #d14">%</span><span style="color: #d14">s &amp;&amp; chmod +x hello_world.py'</span> <span style="color: #000000;font-weight: bold">%</span> <span style="background-color: #f8f8f8">(</span><span style="background-color: #f8f8f8">pkg_path</span><span style="background-color: #f8f8f8">,</span> <span style="background-color: #f8f8f8">pkg_checksum</span><span style="background-color: #f8f8f8">))</span>
+
+<span style="color: #999988;font-style: italic"># run the script</span>
+<span style="background-color: #f8f8f8">hello_world</span> <span style="color: #000000;font-weight: bold">=</span> <span style="background-color: #f8f8f8">Process</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">'hello_world'</span><span style="background-color: #f8f8f8">,</span>
+  <span style="background-color: #f8f8f8">cmdline</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'python -u hello_world.py'</span><span style="background-color: #f8f8f8">)</span>
+
+<span style="color: #999988;font-style: italic"># describe the task</span>
+<span style="background-color: #f8f8f8">hello_world_task</span> <span style="color: #000000;font-weight: bold">=</span> <span style="background-color: #f8f8f8">SequentialTask</span><span style="background-color: #f8f8f8">(</span>
+  <span style="background-color: #f8f8f8">processes</span> <span style="color: #000000;font-weight: bold">=</span> <span style="background-color: #f8f8f8">[</span><span style="background-color: #f8f8f8">install</span><span style="background-color: #f8f8f8">,</span> <span style="background-color: #f8f8f8">hello_world</span><span style="background-color: #f8f8f8">],</span>
+  <span style="background-color: #f8f8f8">resources</span> <span style="color: #000000;font-weight: bold">=</span> <span style="background-color: #f8f8f8">Resources</span><span style="background-color: #f8f8f8">(</span><span style="background-color: #f8f8f8">cpu</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #009999">1</span><span style="background-color: #f8f8f8">,</span> <span style="background-color: #f8f8f8">ram</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #009999">1</span><span style="color: #000000;font-weight: bold">*</span><span style="background-color: #f8f8f8">MB</span><span style="background-color: #f8f8f8">,</span> <span style="background-color: #f8f8f8">disk</span><span style="color: #000000;font-weight: bold">=</span><span style="color: #009999">8</span><span style="color: #000000;font-weight: bold">*</span><span style="background-color: #f8f8f8">MB</span><span style="background-color: #f8f8f8">)
 )</span>
+
+<span style="background-color: #f8f8f8">jobs</span> <span style="color: #000000;font-weight: bold">=</span> <span style="background-color: #f8f8f8">[</span>
+  <span style="background-color: #f8f8f8">Service</span><span style="background-color: #f8f8f8">(</span><span style="background-color: #f8f8f8">cluster</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'devcluster'</span><span style="background-color: #f8f8f8">,</span>
+          <span style="background-color: #f8f8f8">environment</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'devel'</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">name</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #d14">'hello_world'</span><span style="background-color: #f8f8f8">,</span>
+          <span style="background-color: #f8f8f8">task</span> <span style="color: #000000;font-weight: bold">=</span> <span style="background-color: #f8f8f8">hello_world_task</span><span style="background-color: #f8f8f8">)</span>
+<span style="background-color: #f8f8f8">]</span>
+</code></pre>
+
+<p>There is a lot going on in that configuration file:</p>
+
+<ol>
+<li><p>From a &ldquo;big picture&rdquo; viewpoint, it first defines two
+Processes. Then it defines a Task that runs the two Processes in the
+order specified in the Task definition, as well as specifying what
+computational and memory resources are available for them.  Finally,
+it defines a Job that will schedule the Task on available and suitable
+machines. This Job is the sole member of a list of Jobs; you can
+specify more than one Job in a config file.</p></li>
+<li><p>At the Process level, it specifies how to get your code into the
+local sandbox in which it will run. It then specifies how the code is
+actually run once the second Process starts.</p></li>
+</ol>
+
+<p>For more about Aurora configuration files, see the <a href="../../reference/configuration-tutorial/">Configuration
+Tutorial</a> and the <a href="../../reference/configuration/">Configuration
+Reference</a> (preferably after finishing this
+tutorial).</p>
+
+<h2 id="creating-the-job">Creating the Job</h2>
+
+<p>We&rsquo;re ready to launch our job! To do so, we use the Aurora Client to
+issue a Job creation request to the Aurora scheduler.</p>
+
+<p>Many Aurora Client commands take a <em>job key</em> argument, which uniquely
+identifies a Job. A job key consists of four parts, each separated by a
+&ldquo;/&rdquo;. The four parts are  <code>&lt;cluster&gt;/&lt;role&gt;/&lt;environment&gt;/&lt;jobname&gt;</code>
+in that order:</p>
+
+<ul>
+<li>Cluster refers to the name of a particular Aurora installation.</li>
+<li>Role names are user accounts existing on the agent machines. If you
+don&rsquo;t know what accounts are available, contact your sysadmin.</li>
+<li>Environment names are namespaces; you can count on <code>test</code>, <code>devel</code>,
+<code>staging</code> and <code>prod</code> existing.</li>
+<li>Jobname is the custom name of your job.</li>
+</ul>
+
+<p>When comparing two job keys, if any of the four parts is different from
+its counterpart in the other key, then the two job keys identify two separate
+jobs. If all four values are identical, the job keys identify the same job.</p>
+
+<p>The <code>clusters.json</code> <a href="../../reference/client-cluster-configuration/">client configuration</a>
+for the Aurora scheduler defines the available cluster names.
+For Vagrant, from the top-level of your Aurora repository clone, do:</p>
+<pre class="highlight plaintext"><code>$ vagrant ssh
+</code></pre>
+
+<p>Followed by:</p>
+<pre class="highlight plaintext"><code>vagrant@aurora:~$ cat /etc/aurora/clusters.json
+</code></pre>
+
+<p>You&rsquo;ll see something like the following. The <code>name</code> value shown here, corresponds to a job key&rsquo;s cluster value.</p>
+<pre class="highlight javascript"><code><span style="background-color: #f8f8f8">[{</span>
+  <span style="color: #d14">"name"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #d14">"devcluster"</span><span style="background-color: #f8f8f8">,</span>
+  <span style="color: #d14">"zk"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #d14">"192.168.33.7"</span><span style="background-color: #f8f8f8">,</span>
+  <span style="color: #d14">"scheduler_zk_path"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #d14">"/aurora/scheduler"</span><span style="background-color: #f8f8f8">,</span>
+  <span style="color: #d14">"auth_mechanism"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #d14">"UNAUTHENTICATED"</span><span style="background-color: #f8f8f8">,</span>
+  <span style="color: #d14">"slave_run_directory"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #d14">"latest"</span><span style="background-color: #f8f8f8">,</span>
+  <span style="color: #d14">"slave_root"</span><span style="background-color: #f8f8f8">:</span> <span style="color: #d14">"/var/lib/mesos"</span>
+<span style="background-color: #f8f8f8">}]</span>
+</code></pre>
+
+<p>The Aurora Client command that actually runs our Job is <code>aurora job create</code>. It creates a Job as
+specified by its job key and configuration file arguments and runs it.</p>
+<pre class="highlight plaintext"><code>aurora job create &lt;cluster&gt;/&lt;role&gt;/&lt;environment&gt;/&lt;jobname&gt; &lt;config_file&gt;
+</code></pre>
+
+<p>Or for our example:</p>
+<pre class="highlight plaintext"><code>aurora job create devcluster/www-data/devel/hello_world /vagrant/hello_world.aurora
+</code></pre>
+
+<p>After entering our virtual machine using <code>vagrant ssh</code>, this returns:</p>
+<pre class="highlight plaintext"><code>vagrant@aurora:~$ aurora job create devcluster/www-data/devel/hello_world /vagrant/hello_world.aurora
+ INFO] Creating job hello_world
+ INFO] Checking status of devcluster/www-data/devel/hello_world
+Job create succeeded: job url=http://aurora.local:8081/scheduler/www-data/devel/hello_world
+</code></pre>
+
+<h2 id="watching-the-job-run">Watching the Job Run</h2>
+
+<p>Now that our job is running, let&rsquo;s see what it&rsquo;s doing. Access the
+scheduler web interface at <code>http://$scheduler_hostname:$scheduler_port/scheduler</code>
+Or when using <code>vagrant</code>, <code>http://192.168.33.7:8081/scheduler</code>
+First we see what Jobs are scheduled:</p>
+
+<p><img alt="Scheduled Jobs" src="../../images/ScheduledJobs.png" /></p>
+
+<p>Click on your user name, which in this case was <code>www-data</code>, and we see the Jobs associated
+with that role:</p>
+
+<p><img alt="Role Jobs" src="../../images/RoleJobs.png" /></p>
+
+<p>If you click on your <code>hello_world</code> Job, you&rsquo;ll see:</p>
+
+<p><img alt="hello_world Job" src="../../images/HelloWorldJob.png" /></p>
+
+<p>Oops, looks like our first job didn&rsquo;t quite work! The task is temporarily throttled for
+having failed on every attempt of the Aurora scheduler to run it. We have to figure out
+what is going wrong.</p>
+
+<p>On the Completed tasks tab, we see all past attempts of the Aurora scheduler to run our job.</p>
+
+<p><img alt="Completed tasks tab" src="../../images/CompletedTasks.png" /></p>
+
+<p>We can navigate to the Task page of a failed run by clicking on the host link.</p>
+
+<p><img alt="Task page" src="../../images/TaskBreakdown.png" /></p>
+
+<p>Once there, we see that the <code>hello_world</code> process failed. The Task page
+captures the standard error and standard output streams and makes them available.
+Clicking through to <code>stderr</code> on the failed <code>hello_world</code> process, we see what happened.</p>
+
+<p><img alt="stderr page" src="../../images/stderr.png" /></p>
+
+<p>It looks like we made a typo in our Python script. We wanted <code>xrange</code>,
+not <code>xrang</code>. Edit the <code>hello_world.py</code> script to use the correct function
+and save it as <code>hello_world_v2.py</code>. Then update the <code>hello_world.aurora</code>
+configuration to the newest version.</p>
+
+<p>In order to try again, we can now instruct the scheduler to update our job:</p>
+<pre class="highlight plaintext"><code>vagrant@aurora:~$ aurora update start devcluster/www-data/devel/hello_world /vagrant/hello_world.aurora
+ INFO] Starting update for: hello_world
+Job update has started. View your update progress at http://aurora.local:8081/scheduler/www-data/devel/hello_world/update/8ef38017-e60f-400d-a2f2-b5a8b724e95b
+</code></pre>
+
+<p>This time, the task comes up.</p>
+
+<p><img alt="Running Job" src="../../images/RunningJob.png" /></p>
+
+<p>By again clicking on the host, we inspect the Task page, and see that the
+<code>hello_world</code> process is running.</p>
+
+<p><img alt="Running Task page" src="../../images/runningtask.png" /></p>
+
+<p>We then inspect the output by clicking on <code>stdout</code> and see our process&rsquo;
+output:</p>
+
+<p><img alt="stdout page" src="../../images/stdout.png" /></p>
+
+<h2 id="cleanup">Cleanup</h2>
+
+<p>Now that we&rsquo;re done, we kill the job using the Aurora client:</p>
+<pre class="highlight plaintext"><code>vagrant@aurora:~$ aurora job killall devcluster/www-data/devel/hello_world
+ INFO] Killing tasks for job: devcluster/www-data/devel/hello_world
+ INFO] Instances to be killed: [0]
+Successfully killed instances [0]
+Job killall succeeded
+</code></pre>
+
+<p>The job page now shows the <code>hello_world</code> tasks as completed.</p>
+
+<p><img alt="Killed Task page" src="../../images/killedtask.png" /></p>
+
+<h2 id="next-steps">Next Steps</h2>
+
+<p>Now that you&rsquo;ve finished this Tutorial, you should read or do the following:</p>
+
+<ul>
+<li><a href="../../reference/configuration-tutorial/">The Aurora Configuration Tutorial</a>, which provides more examples
+and best practices for writing Aurora configurations. You should also look at
+the <a href="../../reference/configuration/">Aurora Configuration Reference</a>.</li>
+<li>Explore the Aurora Client - use <code>aurora -h</code>, and read the
+<a href="../../reference/client-commands/">Aurora Client Commands</a> document.</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-2016 <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>