You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2020/05/02 05:18:46 UTC

svn commit: r1877281 [17/24] - in /karaf/site/production/manual/decanter/latest-2: html/ pdf/ pdf/dev-guide/ pdf/images/ pdf/style/ pdf/user-guide/

Added: karaf/site/production/manual/decanter/latest-2/pdf/user-guide/appenders.html
URL: http://svn.apache.org/viewvc/karaf/site/production/manual/decanter/latest-2/pdf/user-guide/appenders.html?rev=1877281&view=auto
==============================================================================
--- karaf/site/production/manual/decanter/latest-2/pdf/user-guide/appenders.html (added)
+++ karaf/site/production/manual/decanter/latest-2/pdf/user-guide/appenders.html Sat May  2 05:18:46 2020
@@ -0,0 +1,3710 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.6.1">
+<title>Appenders</title>
+<style>
+/*
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+ */
+@import "https://fonts.googleapis.com/css?family=Open+Sans:400,700%7cDroid+Serif:400,700";
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+    display: block
+}
+
+audio,
+canvas,
+video {
+    display: inline-block
+}
+
+audio:not([controls]) {
+    display: none;
+    height: 0
+}
+
+script {
+    display: none !important
+}
+
+html {
+    font-family: "Droid Serif";
+    -ms-text-size-adjust: 100%;
+    -webkit-text-size-adjust: 100%;
+}
+
+a {
+    background: transparent
+}
+
+a:focus {
+    outline: thin dotted
+}
+
+a:active,
+a:hover {
+    outline: 0
+}
+
+h1 {
+    font-size: 2em;
+    margin: .67em 0
+}
+
+abbr[title] {
+    border-bottom: 1px dotted
+}
+
+b,
+strong {
+    font-weight: bold
+}
+
+dfn {
+    font-style: italic
+}
+
+hr {
+    -moz-box-sizing: content-box;
+    box-sizing: content-box;
+    height: 0
+}
+
+mark {
+    background: #ff0;
+    color: #000
+}
+
+code,
+kbd,
+pre,
+samp {
+    font-family: monospace;
+    font-size: 1em
+}
+
+pre {
+    white-space: pre-wrap
+}
+
+q {
+    quotes: "\201C" "\201D" "\2018" "\2019"
+}
+
+small {
+    font-size: 80%
+}
+
+sub,
+sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline
+}
+
+sup {
+    top: -.5em
+}
+
+sub {
+    bottom: -.25em
+}
+
+img {
+    border: 0
+}
+
+svg:not(:root) {
+    overflow: hidden
+}
+
+figure {
+    margin: 0
+}
+
+fieldset {
+    border: 1px solid silver;
+    margin: 0 2px;
+    padding: .35em .625em .75em
+}
+
+legend {
+    border: 0;
+    padding: 0
+}
+
+button,
+input,
+select,
+textarea {
+    font-family: inherit;
+    font-size: 100%;
+    margin: 0
+}
+
+button,
+input {
+    line-height: normal
+}
+
+button,
+select {
+    text-transform: none
+}
+
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+    -webkit-appearance: button;
+    cursor: pointer
+}
+
+button[disabled],
+html input[disabled] {
+    cursor: default
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+    box-sizing: border-box;
+    padding: 0
+}
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+    border: 0;
+    padding: 0
+}
+
+textarea {
+    overflow: auto;
+    vertical-align: top
+}
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0
+}
+
+*,
+*::before,
+*::after {
+    -moz-box-sizing: border-box;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box
+}
+
+html,
+body {
+    /*font-size: 100%*/
+}
+
+body {
+    background: #fff;
+    color: #333;
+    padding: 0;
+    margin: 0;
+    font-family: "Droid Serif", "DejaVu Serif", serif;
+    font-size: 14px;
+    font-style: normal;
+    line-height: 1.42857143;
+    position: relative;
+    cursor: auto;
+    tab-size: 4;
+    -moz-osx-font-smoothing: grayscale;
+    -webkit-font-smoothing: antialiased
+}
+
+a:hover {
+    cursor: pointer
+}
+
+img,
+object,
+embed {
+    max-width: 100%;
+    height: auto
+}
+
+object,
+embed {
+    height: 100%
+}
+
+img {
+    -ms-interpolation-mode: bicubic
+}
+
+.left {
+    float: left !important
+}
+
+.right {
+    float: right !important
+}
+
+.text-left {
+    text-align: left !important
+}
+
+.text-right {
+    text-align: right !important
+}
+
+.text-center {
+    text-align: center !important
+}
+
+.text-justify {
+    text-align: justify !important
+}
+
+.hide {
+    display: none
+}
+
+img,
+object,
+svg {
+    display: inline-block;
+    vertical-align: middle
+}
+
+textarea {
+    height: auto;
+    min-height: 50px
+}
+
+select {
+    width: 100%
+}
+
+.center {
+    margin-left: auto;
+    margin-right: auto
+}
+
+.stretch {
+    width: 100%
+}
+
+.subheader,
+.admonitionblock td.content>.title,
+.audioblock>.title,
+.exampleblock>.title,
+.imageblock>.title,
+.listingblock>.title,
+.literalblock>.title,
+.stemblock>.title,
+.openblock>.title,
+.paragraph>.title,
+.quoteblock>.title,
+table.tableblock>.title,
+.verseblock>.title,
+.videoblock>.title,
+.dlist>.title,
+.olist>.title,
+.ulist>.title,
+.qlist>.title,
+.hdlist>.title {
+    line-height: 1.45;
+    color: #585ac2;
+    font-weight: 400;
+    margin-top: 0;
+    margin-bottom: .25em
+}
+
+div,
+dl,
+dt,
+dd,
+ul,
+ol,
+li,
+h1,
+h2,
+h3,
+#toctitle,
+.sidebarblock>.content>.title,
+h4,
+h5,
+h6,
+pre,
+form,
+p,
+blockquote,
+th,
+td {
+    margin: 0;
+    padding: 0;
+    direction: ltr
+}
+
+a {
+    color: #585ac2;
+    text-decoration: underline;
+    line-height: inherit
+}
+
+a:hover,
+a:focus {
+    color: #373997;
+}
+
+a img {
+    border: none
+}
+
+p {
+    font-family: inherit;
+    font-weight: 400;
+    font-size: 1em;
+    line-height: 1.6;
+    margin-bottom: 1.25em;
+    text-rendering: optimizeLegibility
+}
+
+p aside {
+    font-size: .875em;
+    line-height: 1.35;
+    font-style: italic
+}
+
+h1,
+h2,
+h3,
+#toctitle,
+.sidebarblock>.content>.title,
+h4,
+h5,
+h6 {
+    font-family: "Source Sans Pro", "DejaVu Sans", sans-serif;
+    font-weight: bold;
+    /*font-style: bold;*/
+    color: #303284;
+    text-rendering: optimizeLegibility;
+    margin-top: 1em;
+    margin-bottom: .5em;
+    line-height: 1.0125em;
+    text-transform: uppercase;
+}
+
+h1 small,
+h2 small,
+h3 small,
+#toctitle small,
+.sidebarblock>.content>.title small,
+h4 small,
+h5 small,
+h6 small {
+    font-size: 60%;
+    color: #303284;
+    line-height: 0
+}
+
+h1 {
+    font-size: 2.125em
+}
+
+h2 {
+    font-size: 1.6875em
+}
+
+h3,
+#toctitle,
+.sidebarblock>.content>.title {
+    font-size: 1.375em
+}
+
+h4,
+h5 {
+    font-size: 1.125em
+}
+
+h6 {
+    font-size: 1em
+}
+
+hr {
+    border: solid #dddddd;
+    border-width: 1px 0 0;
+    clear: both;
+    margin: 1.25em 0 1.1875em;
+    height: 0
+}
+
+em,
+i {
+    font-style: italic;
+    line-height: inherit
+}
+
+strong,
+b {
+    font-weight: bold;
+    line-height: inherit
+}
+
+small {
+    font-size: 60%;
+    line-height: inherit
+}
+
+code {
+    font-family: "Droid Sans Mono", "DejaVu Sans Mono", monospace;
+    font-weight: 400;
+    color: #585ac2;
+}
+
+ul,
+ol,
+dl {
+    font-size: 1em;
+    line-height: 1.6;
+    margin-bottom: 1.25em;
+    list-style-position: outside;
+    font-family: inherit
+}
+
+ul,
+ol {
+    margin-left: 1.5em
+}
+
+ul li ul,
+ul li ol {
+    margin-left: 1.25em;
+    margin-bottom: 0;
+    font-size: 1em
+}
+
+ul.square li ul,
+ul.circle li ul,
+ul.disc li ul {
+    list-style: inherit
+}
+
+ul.square {
+    list-style-type: square
+}
+
+ul.circle {
+    list-style-type: circle
+}
+
+ul.disc {
+    list-style-type: disc
+}
+
+ol li ul,
+ol li ol {
+    margin-left: 1.25em;
+    margin-bottom: 0
+}
+
+dl dt {
+    margin-bottom: .3125em;
+    font-weight: bold
+}
+
+dl dd {
+    margin-bottom: 1.25em
+}
+
+abbr,
+acronym {
+    text-transform: uppercase;
+    font-size: 90%;
+    color: rgba(0, 0, 0, .8);
+    border-bottom: 1px dotted #ddd;
+    cursor: help
+}
+
+abbr {
+    text-transform: none
+}
+
+blockquote {
+    margin: 0 0 1.25em;
+    padding: .5625em 1.25em 0 1.1875em;
+    border-left: 1px solid #ddd
+}
+
+blockquote cite {
+    display: block;
+    font-size: .9375em;
+    color: rgba(0, 0, 0, .6)
+}
+
+blockquote cite::before {
+    content: "\2014 \0020"
+}
+
+blockquote cite a,
+blockquote cite a:visited {
+    color: rgba(0, 0, 0, .6)
+}
+
+blockquote,
+blockquote p {
+    line-height: 1.6;
+    color: rgba(0, 0, 0, .85)
+}
+
+@media screen and (min-width:768px) {
+    h1,
+    h2,
+    h3,
+    #toctitle,
+    .sidebarblock>.content>.title,
+    h4,
+    h5,
+    h6 {
+        line-height: 1.2
+    }
+
+    h1 {
+        font-size: 2.75em
+    }
+
+    h2 {
+        font-size: 2.3125em
+    }
+
+    h3,
+    #toctitle,
+    .sidebarblock>.content>.title {
+        font-size: 1.6875em
+    }
+
+    h4 {
+        font-size: 1.4375em
+    }
+
+}
+
+table {
+    background: #fff;
+    margin-bottom: 1.25em;
+    border: solid 1px #dddddd;
+}
+
+table thead,
+table tfoot {
+    background: #f7f8f7
+}
+
+table thead tr th,
+table thead tr td,
+table tfoot tr th,
+table tfoot tr td {
+    padding: .5em .625em .625em;
+    font-size: inherit;
+    color: rgba(0, 0, 0, .8);
+    text-align: left
+}
+
+table tr th,
+table tr td {
+    padding: .5625em .625em;
+    font-size: inherit;
+    color: rgba(0, 0, 0, .8)
+}
+
+table tr.even,
+table tr.alt,
+table tr:nth-of-type(even) {
+    background: #f8f8f7
+}
+
+table thead tr th,
+table tfoot tr th,
+table tbody tr td,
+table tr td,
+table tfoot tr td {
+    display: table-cell;
+    line-height: 1.6
+}
+
+h1,
+h2,
+h3,
+#toctitle,
+.sidebarblock>.content>.title,
+h4,
+h5,
+h6 {
+    line-height: 1.2;
+    word-spacing: -.05em
+}
+
+h1 strong,
+h2 strong,
+h3 strong,
+#toctitle strong,
+.sidebarblock>.content>.title strong,
+h4 strong,
+h5 strong,
+h6 strong {
+    font-weight: 400
+}
+
+.clearfix::before,
+.clearfix::after,
+.float-group::before,
+.float-group::after {
+    content: " ";
+    display: table
+}
+
+.clearfix::after,
+.float-group::after {
+    clear: both
+}
+
+*:not(pre)>code {
+    font-size: .9375em;
+    font-style: normal !important;
+    letter-spacing: 0;
+    padding: .1em .5ex;
+    word-spacing: -.15em;
+    background-color: #f7f7f8;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+    line-height: 1.45;
+    text-rendering: optimizeSpeed;
+    word-wrap: break-word
+}
+
+*:not(pre)>code.nobreak {
+    word-wrap: normal
+}
+
+*:not(pre)>code.nowrap {
+    white-space: nowrap
+}
+
+pre,
+pre>code {
+    line-height: 1.45;
+    color: #585ac2;
+    font-family: "Droid Sans Mono", "DejaVu Sans Mono", monospace;
+    font-weight: 400;
+    text-rendering: optimizeSpeed
+}
+
+em em {
+    font-style: normal
+}
+
+strong strong {
+    font-weight: 400
+}
+
+.keyseq {
+    color: rgba(51, 51, 51, .8)
+}
+
+kbd {
+    font-family: "Droid Sans Mono", "DejaVu Sans Mono", monospace;
+    display: inline-block;
+    color: rgba(0, 0, 0, .8);
+    font-size: .65em;
+    line-height: 1.45;
+    background-color: #f7f7f7;
+    border: 1px solid #dddddd;
+    -webkit-border-radius: 3px;
+    border-radius: 3px;
+    -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, .2), 0 0 0 .1em white inset;
+    box-shadow: 0 1px 0 rgba(0, 0, 0, .2), 0 0 0 .1em #fff inset;
+    margin: 0 .15em;
+    padding: .2em .5em;
+    vertical-align: middle;
+    position: relative;
+    top: -.1em;
+    white-space: nowrap
+}
+
+.keyseq kbd:first-child {
+    margin-left: 0
+}
+
+.keyseq kbd:last-child {
+    margin-right: 0
+}
+
+.menuseq,
+.menuref {
+    color: #000
+}
+
+.menuseq b:not(.caret),.menuref {
+    font-weight: inherit
+}
+
+.menuseq {
+    word-spacing: -.02em
+}
+
+.menuseq b.caret {
+    font-size: 1.25em;
+    line-height: .8
+}
+
+.menuseq i.caret {
+    font-weight: bold;
+    text-align: center;
+    width: .45em
+}
+
+b.button::before,
+b.button::after {
+    position: relative;
+    top: -1px;
+    font-weight: 400
+}
+
+b.button::before {
+    content: "[";
+    padding: 0 3px 0 2px
+}
+
+b.button::after {
+    content: "]";
+    padding: 0 2px 0 3px
+}
+
+p a>code:hover {
+    color: #585ac2;
+}
+
+#header,
+#content,
+#footnotes,
+#footer {
+    width: 100%;
+    margin-left: auto;
+    margin-right: auto;
+    margin-top: 0;
+    margin-bottom: 0;
+    max-width: 62.5em;
+    *zoom: 1;
+    position: relative;
+    padding-left: .9375em;
+    padding-right: .9375em
+}
+
+#header::before,
+#header::after,
+#content::before,
+#content::after,
+#footnotes::before,
+#footnotes::after,
+#footer::before,
+#footer::after {
+    content: " ";
+    display: table
+}
+
+#header::after,
+#content::after,
+#footnotes::after,
+#footer::after {
+    clear: both
+}
+
+#content {
+    margin-top: 1.25em
+}
+
+#content::before {
+    content: none
+}
+
+#header>h1:first-child {
+    color: #303284;
+    margin-top: 2.25rem;
+    margin-bottom: 0
+}
+
+#header>h1:first-child+#toc {
+    margin-top: 8px;
+    border-top: 1px solid #dddddd
+}
+
+#header>h1:only-child,
+body.toc2 #header>h1:nth-last-child(2) {
+    border-bottom: 1px solid #dddddd;
+    padding-bottom: 8px
+}
+
+#header .details {
+    border-bottom: 1px solid #dddddd;
+    line-height: 1.45;
+    padding-top: .25em;
+    padding-bottom: .25em;
+    padding-left: .25em;
+    color: rgba(0, 0, 0, .6);
+    display: -ms-flexbox;
+    display: -webkit-flex;
+    display: flex;
+    -ms-flex-flow: row wrap;
+    -webkit-flex-flow: row wrap;
+    flex-flow: row wrap
+}
+
+#header .details span:first-child {
+    margin-left: -.125em
+}
+
+#header .details span.email a {
+    color: rgba(0, 0, 0, .85)
+}
+
+#header .details br {
+    display: none
+}
+
+#header .details br+span::before {
+    content: "\00a0\2013\00a0"
+}
+
+#header .details br+span.author::before {
+    content: "\00a0\22c5\00a0";
+    color: rgba(0, 0, 0, .85)
+}
+
+#header .details br+span#revremark::before {
+    content: "\00a0|\00a0"
+}
+
+#header #revnumber {
+    text-transform: capitalize
+}
+
+#header #revnumber::after {
+    content: "\00a0"
+}
+
+#content>h1:first-child:not([class]) {
+    color: rgba(0, 0, 0, .85);
+    border-bottom: 1px solid #dddddd
+;
+    padding-bottom: 8px;
+    margin-top: 0;
+    padding-top: 1rem;
+    margin-bottom: 1.25rem
+}
+
+#toc {
+    border-bottom: 1px solid #dddddd;
+    padding-bottom: .5em
+}
+
+#toc>ul {
+    margin-left: .125em
+}
+
+#toc ul.sectlevel0>li>a {
+    font-style: italic
+}
+
+#toc ul.sectlevel0 ul.sectlevel1 {
+    margin: .5em 0
+}
+
+#toc ul {
+    font-family: "Droid Serif", "DejaVu Sans", sans-serif;
+    list-style-type: none
+}
+
+#toc li {
+    line-height: 1.3334;
+    margin-top: .3334em
+}
+
+#toc a {
+    text-decoration: none
+}
+
+#toc a:active {
+    text-decoration: underline
+}
+
+#toctitle {
+    color: #303284;
+    font-size: 1.2em
+}
+
+@media screen and (min-width:768px) {
+    #toctitle {
+        font-size: 1.375em
+    }
+
+    body.toc2 {
+        padding-left: 15em;
+        padding-right: 0
+    }
+
+    #toc.toc2 {
+        margin-top: 0 !important;
+        background-color: #eee;
+        position: fixed;
+        width: 15em;
+        left: 0;
+        top: 0;
+        border-right: 1px solid #dddddd;
+        border-top-width: 0 !important;
+        border-bottom-width: 0 !important;
+        z-index: 1000;
+        padding: 1.25em 1em;
+        height: 100%;
+        overflow: auto
+    }
+
+    #toc.toc2 #toctitle {
+        margin-top: 0;
+        margin-bottom: .8rem;
+        font-size: 1.2em
+    }
+
+    #toc.toc2>ul {
+        font-size: .9em;
+        margin-bottom: 0
+    }
+
+    #toc.toc2 ul ul {
+        margin-left: 0;
+        padding-left: 1em
+    }
+
+    #toc.toc2 ul.sectlevel0 ul.sectlevel1 {
+        padding-left: 0;
+        margin-top: .5em;
+        margin-bottom: .5em
+    }
+
+    body.toc2.toc-right {
+        padding-left: 0;
+        padding-right: 15em
+    }
+
+    body.toc2.toc-right #toc.toc2 {
+        border-right-width: 0;
+        border-left: 1px solid #dddddd;
+        left: auto;
+        right: 0
+    }
+
+}
+
+@media screen and (min-width:1280px) {
+    body.toc2 {
+        padding-left: 20em;
+        padding-right: 0
+    }
+
+    #toc.toc2 {
+        width: 20em
+    }
+
+    #toc.toc2 #toctitle {
+        font-size: 1.375em
+    }
+
+    #toc.toc2>ul {
+        font-size: .95em
+    }
+
+    #toc.toc2 ul ul {
+        padding-left: 1.25em
+    }
+
+    body.toc2.toc-right {
+        padding-left: 0;
+        padding-right: 20em
+    }
+
+}
+
+#content #toc {
+    border-style: solid;
+    border-width: 1px;
+    border-color: #dddddd;
+    margin-bottom: 1.25em;
+    padding: 1.25em;
+    background: #f8f8f7;
+    -webkit-border-radius: 4px;
+    border-radius: 4px
+}
+
+#content #toc>:first-child {
+    margin-top: 0
+}
+
+#content #toc>:last-child {
+    margin-bottom: 0
+}
+
+#footer {
+    max-width: 100%;
+    background-color: #303284;
+    padding: 1.25em
+}
+
+#footer-text {
+    color: #fff;
+    line-height: 1.44
+}
+
+#content {
+    margin-bottom: .625em
+}
+
+.sect1 {
+    padding-bottom: .625em
+}
+
+@media screen and (min-width:768px) {
+    #content {
+        margin-bottom: 1.25em
+    }
+
+    .sect1 {
+        padding-bottom: 1.25em
+    }
+
+}
+
+.sect1:last-child {
+    padding-bottom: 0
+}
+
+.sect1+.sect1 {
+    border-top: 1px solid #dddddd;
+}
+
+#content h1>a.anchor,
+h2>a.anchor,
+h3>a.anchor,
+#toctitle>a.anchor,
+.sidebarblock>.content>.title>a.anchor,
+h4>a.anchor,
+h5>a.anchor,
+h6>a.anchor {
+    position: absolute;
+    z-index: 1001;
+    width: 1.5ex;
+    margin-left: -1.5ex;
+    display: block;
+    text-decoration: none !important;
+    visibility: hidden;
+    text-align: center;
+    font-weight: 400
+}
+
+#content h1>a.anchor::before,
+h2>a.anchor::before,
+h3>a.anchor::before,
+#toctitle>a.anchor::before,
+.sidebarblock>.content>.title>a.anchor::before,
+h4>a.anchor::before,
+h5>a.anchor::before,
+h6>a.anchor::before {
+    content: "\00A7";
+    font-size: .85em;
+    display: block;
+    padding-top: .1em
+}
+
+#content h1:hover>a.anchor,
+#content h1>a.anchor:hover,
+h2:hover>a.anchor,
+h2>a.anchor:hover,
+h3:hover>a.anchor,
+#toctitle:hover>a.anchor,
+.sidebarblock>.content>.title:hover>a.anchor,
+h3>a.anchor:hover,
+#toctitle>a.anchor:hover,
+.sidebarblock>.content>.title>a.anchor:hover,
+h4:hover>a.anchor,
+h4>a.anchor:hover,
+h5:hover>a.anchor,
+h5>a.anchor:hover,
+h6:hover>a.anchor,
+h6>a.anchor:hover {
+    visibility: visible
+}
+
+#content h1>a.link,
+h2>a.link,
+h3>a.link,
+#toctitle>a.link,
+.sidebarblock>.content>.title>a.link,
+h4>a.link,
+h5>a.link,
+h6>a.link {
+    color: #ba3925;
+    text-decoration: none
+}
+
+#content h1>a.link:hover,
+h2>a.link:hover,
+h3>a.link:hover,
+#toctitle>a.link:hover,
+.sidebarblock>.content>.title>a.link:hover,
+h4>a.link:hover,
+h5>a.link:hover,
+h6>a.link:hover {
+    color: #a53221
+}
+
+.audioblock,
+.imageblock,
+.literalblock,
+.listingblock,
+.stemblock,
+.videoblock {
+    margin-bottom: 1.25em
+}
+
+.admonitionblock td.content>.title,
+.audioblock>.title,
+.exampleblock>.title,
+.imageblock>.title,
+.listingblock>.title,
+.literalblock>.title,
+.stemblock>.title,
+.openblock>.title,
+.paragraph>.title,
+.quoteblock>.title,
+table.tableblock>.title,
+.verseblock>.title,
+.videoblock>.title,
+.dlist>.title,
+.olist>.title,
+.ulist>.title,
+.qlist>.title,
+.hdlist>.title {
+    text-rendering: optimizeLegibility;
+    text-align: left;
+    font-family: "Droid Serif", "DejaVu Serif", serif;
+    font-size: 1rem;
+    font-style: italic
+}
+
+table.tableblock.fit-content>caption.title {
+    white-space: nowrap;
+    width: 0
+}
+
+.paragraph.lead>p,
+#preamble>.sectionbody>[class="paragraph"]:first-of-type p {
+    font-size: 1.21875em;
+    line-height: 1.6;
+    color: rgba(0, 0, 0, .85)
+}
+
+table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p {
+    font-size: inherit
+}
+
+.admonitionblock>table {
+    border-collapse: separate;
+    border: 0;
+    background: none;
+    width: 100%
+}
+
+.admonitionblock>table td.icon {
+    text-align: center;
+    width: 80px
+}
+
+.admonitionblock>table td.icon img {
+    max-width: none
+}
+
+.admonitionblock>table td.icon .title {
+    font-weight: bold;
+    font-family: "Source Sans Pro", "DejaVu Sans", sans-serif;
+    text-transform: uppercase
+}
+
+.admonitionblock>table td.content {
+    padding-left: 1.125em;
+    padding-right: 1.25em;
+    border-left: 1px solid #dddddd;
+    color: rgba(0, 0, 0, .6)
+}
+
+.admonitionblock>table td.content>:last-child>:last-child {
+    margin-bottom: 0
+}
+
+.exampleblock>.content {
+    border-style: solid;
+    border-width: 1px;
+    border-color: #dddddd;
+    margin-bottom: 1.25em;
+    padding: 1.25em;
+    background: #fff;
+    -webkit-border-radius: 4px;
+    border-radius: 4px
+}
+
+.exampleblock>.content>:first-child {
+    margin-top: 0
+}
+
+.exampleblock>.content>:last-child {
+    margin-bottom: 0
+}
+
+.sidebarblock {
+    border-style: solid;
+    border-width: 1px;
+    border-color: #dddddd;
+    margin-bottom: 1.25em;
+    padding: 1.25em;
+    background: #f8f8f7;
+    -webkit-border-radius: 4px;
+    border-radius: 4px
+}
+
+.sidebarblock>:first-child {
+    margin-top: 0
+}
+
+.sidebarblock>:last-child {
+    margin-bottom: 0
+}
+
+.sidebarblock>.content>.title {
+    color: #303284;
+    margin-top: 0;
+    text-align: center
+}
+
+.exampleblock>.content>:last-child>:last-child,
+.exampleblock>.content .olist>ol>li:last-child>:last-child,
+.exampleblock>.content .ulist>ul>li:last-child>:last-child,
+.exampleblock>.content .qlist>ol>li:last-child>:last-child,
+.sidebarblock>.content>:last-child>:last-child,
+.sidebarblock>.content .olist>ol>li:last-child>:last-child,
+.sidebarblock>.content .ulist>ul>li:last-child>:last-child,
+.sidebarblock>.content .qlist>ol>li:last-child>:last-child {
+    margin-bottom: 0
+}
+
+.literalblock pre,
+.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint {
+    background: #f7f7f8
+}
+
+.sidebarblock .literalblock pre,
+.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint {
+    background: #f2f1f1
+}
+
+.literalblock pre,
+.literalblock pre[class],
+.listingblock pre,
+.listingblock pre[class] {
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+    word-wrap: break-word;
+    padding: 1em;
+    font-size: .8125em
+}
+
+.literalblock pre.nowrap,
+.literalblock pre[class].nowrap,
+.listingblock pre.nowrap,
+.listingblock pre[class].nowrap {
+    overflow-x: auto;
+    white-space: pre;
+    word-wrap: normal
+}
+
+@media screen and (min-width:768px) {
+    .literalblock pre,
+    .literalblock pre[class],
+    .listingblock pre,
+    .listingblock pre[class] {
+        font-size: .90625em
+    }
+
+}
+
+@media screen and (min-width:1280px) {
+    .literalblock pre,
+    .literalblock pre[class],
+    .listingblock pre,
+    .listingblock pre[class] {
+        font-size: 1em
+    }
+
+}
+
+.literalblock.output pre {
+    color: #f7f7f8;
+    background-color: rgba(0, 0, 0, .9)
+}
+
+.listingblock pre.highlightjs {
+    padding: 0
+}
+
+.listingblock pre.highlightjs>code {
+    padding: 1em;
+    -webkit-border-radius: 4px;
+    border-radius: 4px
+}
+
+.listingblock pre.prettyprint {
+    border-width: 0
+}
+
+.listingblock>.content {
+    position: relative
+}
+
+.listingblock code[data-lang]::before {
+    display: none;
+    content: attr(data-lang);
+    position: absolute;
+    font-size: .75em;
+    top: .425rem;
+    right: .5rem;
+    line-height: 1;
+    text-transform: uppercase;
+    color: #999
+}
+
+.listingblock:hover code[data-lang]::before {
+    display: block
+}
+
+.listingblock.terminal pre .command::before {
+    content: attr(data-prompt);
+    padding-right: .5em;
+    color: #999
+}
+
+.listingblock.terminal pre .command:not([data-prompt])::before {
+    content: "$"
+}
+
+table.pyhltable {
+    border-collapse: separate;
+    border: 0;
+    margin-bottom: 0;
+    background: none
+}
+
+table.pyhltable td {
+    vertical-align: top;
+    padding-top: 0;
+    padding-bottom: 0;
+    line-height: 1.45
+}
+
+table.pyhltable td.code {
+    padding-left: .75em;
+    padding-right: 0
+}
+
+pre.pygments .lineno,
+table.pyhltable td:not(.code) {
+    color: #999;
+    padding-left: 0;
+    padding-right: .5em;
+    border-right: 1px solid #dddddd;
+}
+
+pre.pygments .lineno {
+    display: inline-block;
+    margin-right: .25em
+}
+
+table.pyhltable .linenodiv {
+    background: none !important;
+    padding-right: 0 !important
+}
+
+.quoteblock {
+    margin: 0 1em 1.25em 1.5em;
+    display: table
+}
+
+.quoteblock>.title {
+    margin-left: -1.5em;
+    margin-bottom: .75em
+}
+
+.quoteblock blockquote,
+.quoteblock blockquote p {
+    color: rgba(0, 0, 0, .85);
+    font-size: 1.05rem;
+    line-height: 1.75;
+    word-spacing: .1em;
+    letter-spacing: 0;
+    font-style: italic;
+    text-align: justify
+}
+
+.quoteblock blockquote {
+    margin: 0;
+    padding: 0;
+    border: 0
+}
+
+.quoteblock blockquote::before {
+    content: "\201c";
+    float: left;
+    font-size: 2.75em;
+    font-weight: bold;
+    line-height: .6em;
+    margin-left: -.6em;
+    color: #303284;
+    text-shadow: 0 1px 2px rgba(0, 0, 0, .1)
+}
+
+.quoteblock blockquote>.paragraph:last-child p {
+    margin-bottom: 0
+}
+
+.quoteblock .attribution {
+    margin-top: .5em;
+    margin-right: .5ex;
+    text-align: right
+}
+
+.quoteblock .quoteblock {
+    margin-left: 0;
+    margin-right: 0;
+    padding: .5em 0;
+    border-left: 3px solid rgba(0, 0, 0, .6)
+}
+
+.quoteblock .quoteblock blockquote {
+    padding: 0 0 0 .75em
+}
+
+.quoteblock .quoteblock blockquote::before {
+    display: none
+}
+
+.verseblock {
+    margin: 0 1em 1.25em
+}
+
+.verseblock pre {
+    font-family: "Source Sans Pro", "DejaVu Sans", sans;
+    font-size: 1.15rem;
+    color: rgba(0, 0, 0, .85);
+    font-weight: 300;
+    text-rendering: optimizeLegibility
+}
+
+.verseblock pre strong {
+    font-weight: 400
+}
+
+.verseblock .attribution {
+    margin-top: 1.25rem;
+    margin-left: .5ex
+}
+
+.quoteblock .attribution,
+.verseblock .attribution {
+    font-size: .9375em;
+    line-height: 1.45;
+    font-style: italic
+}
+
+.quoteblock .attribution br,
+.verseblock .attribution br {
+    display: none
+}
+
+.quoteblock .attribution cite,
+.verseblock .attribution cite {
+    display: block;
+    letter-spacing: -.025em;
+    color: rgba(0, 0, 0, .6)
+}
+
+.quoteblock.abstract {
+    margin: 0 1em 1.25em;
+    display: block
+}
+
+.quoteblock.abstract>.title {
+    margin: 0 0 .375em;
+    font-size: 1.15em;
+    text-align: center
+}
+
+.quoteblock.abstract blockquote,
+.quoteblock.abstract blockquote p {
+    word-spacing: 0;
+    line-height: 1.6
+}
+
+.quoteblock.abstract blockquote::before,
+.quoteblock.abstract p::before {
+    display: none
+}
+
+table.tableblock {
+    max-width: 100%;
+    border-collapse: separate
+}
+
+p.tableblock:last-child {
+    margin-bottom: 0
+}
+
+td.tableblock>.content {
+    margin-bottom: -1.25em
+}
+
+table.tableblock,
+th.tableblock,
+td.tableblock {
+    border: 0 solid #dddddd;
+}
+
+table.grid-all>thead>tr>.tableblock,
+table.grid-all>tbody>tr>.tableblock {
+    border-width: 0 1px 1px 0
+}
+
+table.grid-all>tfoot>tr>.tableblock {
+    border-width: 1px 1px 0 0
+}
+
+table.grid-cols>*>tr>.tableblock {
+    border-width: 0 1px 0 0
+}
+
+table.grid-rows>thead>tr>.tableblock,
+table.grid-rows>tbody>tr>.tableblock {
+    border-width: 0 0 1px
+}
+
+table.grid-rows>tfoot>tr>.tableblock {
+    border-width: 1px 0 0
+}
+
+table.grid-all>*>tr>.tableblock:last-child,
+table.grid-cols>*>tr>.tableblock:last-child {
+    border-right-width: 0
+}
+
+table.grid-all>tbody>tr:last-child>.tableblock,
+table.grid-all>thead:last-child>tr>.tableblock,
+table.grid-rows>tbody>tr:last-child>.tableblock,
+table.grid-rows>thead:last-child>tr>.tableblock {
+    border-bottom-width: 0
+}
+
+table.frame-all {
+    border-width: 1px
+}
+
+table.frame-sides {
+    border-width: 0 1px
+}
+
+table.frame-topbot,
+table.frame-ends {
+    border-width: 1px 0
+}
+
+table.stripes-all tr,
+table.stripes-odd tr:nth-of-type(odd) {
+    background: #f8f8f7
+}
+
+table.stripes-none tr,
+table.stripes-odd tr:nth-of-type(even) {
+    background: none
+}
+
+th.halign-left,
+td.halign-left {
+    text-align: left
+}
+
+th.halign-right,
+td.halign-right {
+    text-align: right
+}
+
+th.halign-center,
+td.halign-center {
+    text-align: center
+}
+
+th.valign-top,
+td.valign-top {
+    vertical-align: top
+}
+
+th.valign-bottom,
+td.valign-bottom {
+    vertical-align: bottom
+}
+
+th.valign-middle,
+td.valign-middle {
+    vertical-align: middle
+}
+
+table thead th,
+table tfoot th {
+    font-weight: bold
+}
+
+tbody tr th {
+    display: table-cell;
+    line-height: 1.6;
+    background: #f7f8f7
+}
+
+tbody tr th,
+tbody tr th p,
+tfoot tr th,
+tfoot tr th p {
+    color: rgba(0, 0, 0, .8);
+    font-weight: bold
+}
+
+p.tableblock>code:only-child {
+    background: none;
+    padding: 0
+}
+
+p.tableblock {
+    font-size: 1em
+}
+
+td>div.verse {
+    white-space: pre
+}
+
+ol {
+    margin-left: 1.75em
+}
+
+ul li ol {
+    margin-left: 1.5em
+}
+
+dl dd {
+    margin-left: 1.125em
+}
+
+dl dd:last-child,
+dl dd:last-child>:last-child {
+    margin-bottom: 0
+}
+
+ol>li p,
+ul>li p,
+ul dd,
+ol dd,
+.olist .olist,
+.ulist .ulist,
+.ulist .olist,
+.olist .ulist {
+    margin-bottom: .625em
+}
+
+ul.checklist,
+ul.none,
+ol.none,
+ul.no-bullet,
+ol.no-bullet,
+ol.unnumbered,
+ul.unstyled,
+ol.unstyled {
+    list-style-type: none
+}
+
+ul.no-bullet,
+ol.no-bullet,
+ol.unnumbered {
+    margin-left: .625em
+}
+
+ul.unstyled,
+ol.unstyled {
+    margin-left: 0
+}
+
+ul.checklist {
+    margin-left: .625em
+}
+
+ul.checklist li>p:first-child>.fa-square-o:first-child,
+ul.checklist li>p:first-child>.fa-check-square-o:first-child {
+    width: 1.25em;
+    font-size: .8em;
+    position: relative;
+    bottom: .125em
+}
+
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child {
+    margin-right: .25em
+}
+
+ul.inline {
+    display: -ms-flexbox;
+    display: -webkit-box;
+    display: flex;
+    -ms-flex-flow: row wrap;
+    -webkit-flex-flow: row wrap;
+    flex-flow: row wrap;
+    list-style: none;
+    margin: 0 0 .625em -1.25em
+}
+
+ul.inline>li {
+    margin-left: 1.25em
+}
+
+.unstyled dl dt {
+    font-weight: 400;
+    font-style: normal
+}
+
+ol.arabic {
+    list-style-type: decimal
+}
+
+ol.decimal {
+    list-style-type: decimal-leading-zero
+}
+
+ol.loweralpha {
+    list-style-type: lower-alpha
+}
+
+ol.upperalpha {
+    list-style-type: upper-alpha
+}
+
+ol.lowerroman {
+    list-style-type: lower-roman
+}
+
+ol.upperroman {
+    list-style-type: upper-roman
+}
+
+ol.lowergreek {
+    list-style-type: lower-greek
+}
+
+.hdlist>table,
+.colist>table {
+    border: 0;
+    background: none
+}
+
+.hdlist>table>tbody>tr,
+.colist>table>tbody>tr {
+    background: none
+}
+
+td.hdlist1,
+td.hdlist2 {
+    vertical-align: top;
+    padding: 0 .625em
+}
+
+td.hdlist1 {
+    font-weight: bold;
+    padding-bottom: 1.25em
+}
+
+.literalblock+.colist,
+.listingblock+.colist {
+    margin-top: -.5em
+}
+
+.colist td:not([class]):first-child {
+    padding: .4em .75em 0;
+    line-height: 1;
+    vertical-align: top
+}
+
+.colist td:not([class]):first-child img {
+    max-width: none
+}
+
+.colist td:not([class]):last-child {
+    padding: .25em 0
+}
+
+.thumb,
+.th {
+    line-height: 0;
+    display: inline-block;
+    border: solid 4px #fff;
+    -webkit-box-shadow: 0 0 0 1px #ddd;
+    box-shadow: 0 0 0 1px #ddd
+}
+
+.imageblock.left,
+.imageblock[style*="float:left"] {
+    margin: .25em .625em 1.25em 0
+}
+
+.imageblock.right,
+.imageblock[style*="float:right"] {
+    margin: .25em 0 1.25em .625em
+}
+
+.imageblock>.title {
+    margin-bottom: 0
+}
+
+.imageblock.thumb,
+.imageblock.th {
+    border-width: 6px
+}
+
+.imageblock.thumb>.title,
+.imageblock.th>.title {
+    padding: 0 .125em
+}
+
+.image.left,
+.image.right {
+    margin-top: .25em;
+    margin-bottom: .25em;
+    display: inline-block;
+    line-height: 0
+}
+
+.image.left {
+    margin-right: .625em
+}
+
+.image.right {
+    margin-left: .625em
+}
+
+a.image {
+    text-decoration: none;
+    display: inline-block
+}
+
+a.image object {
+    pointer-events: none
+}
+
+sup.footnote,
+sup.footnoteref {
+    font-size: .875em;
+    position: static;
+    vertical-align: super
+}
+
+sup.footnote a,
+sup.footnoteref a {
+    text-decoration: none
+}
+
+sup.footnote a:active,
+sup.footnoteref a:active {
+    text-decoration: underline
+}
+
+#footnotes {
+    padding-top: .75em;
+    padding-bottom: .75em;
+    margin-bottom: .625em
+}
+
+#footnotes hr {
+    width: 20%;
+    min-width: 6.25em;
+    margin: -.25em 0 .75em;
+    border-width: 1px 0 0
+}
+
+#footnotes .footnote {
+    padding: 0 .375em 0 .225em;
+    line-height: 1.3334;
+    font-size: .875em;
+    margin-left: 1.2em;
+    margin-bottom: .2em
+}
+
+#footnotes .footnote a:first-of-type {
+    font-weight: bold;
+    text-decoration: none;
+    margin-left: -1.05em
+}
+
+#footnotes .footnote:last-of-type {
+    margin-bottom: 0
+}
+
+#content #footnotes {
+    margin-top: -.625em;
+    margin-bottom: 0;
+    padding: .75em 0
+}
+
+.gist .file-data>table {
+    border: 0;
+    background: #fff;
+    width: 100%;
+    margin-bottom: 0
+}
+
+.gist .file-data>table td.line-data {
+    width: 99%
+}
+
+div.unbreakable {
+    page-break-inside: avoid
+}
+
+.big {
+    font-size: larger
+}
+
+.small {
+    font-size: smaller
+}
+
+.underline {
+    text-decoration: underline
+}
+
+.overline {
+    text-decoration: overline
+}
+
+.line-through {
+    text-decoration: line-through
+}
+
+.aqua {
+    color: #00bfbf
+}
+
+.aqua-background {
+    background-color: #00fafa
+}
+
+.black {
+    color: #000
+}
+
+.black-background {
+    background-color: #000
+}
+
+.blue {
+    color: #0000bf
+}
+
+.blue-background {
+    background-color: #0000fa
+}
+
+.fuchsia {
+    color: #bf00bf
+}
+
+.fuchsia-background {
+    background-color: #fa00fa
+}
+
+.gray {
+    color: #606060
+}
+
+.gray-background {
+    background-color: #7d7d7d
+}
+
+.green {
+    color: #006000
+}
+
+.green-background {
+    background-color: #007d00
+}
+
+.lime {
+    color: #00bf00
+}
+
+.lime-background {
+    background-color: #00fa00
+}
+
+.maroon {
+    color: #600000
+}
+
+.maroon-background {
+    background-color: #7d0000
+}
+
+.navy {
+    color: #000060
+}
+
+.navy-background {
+    background-color: #00007d
+}
+
+.olive {
+    color: #606000
+}
+
+.olive-background {
+    background-color: #7d7d00
+}
+
+.purple {
+    color: #600060
+}
+
+.purple-background {
+    background-color: #7d007d
+}
+
+.red {
+    color: #bf0000
+}
+
+.red-background {
+    background-color: #fa0000
+}
+
+.silver {
+    color: #909090
+}
+
+.silver-background {
+    background-color: #bcbcbc
+}
+
+.teal {
+    color: #006060
+}
+
+.teal-background {
+    background-color: #007d7d
+}
+
+.white {
+    color: #bfbfbf
+}
+
+.white-background {
+    background-color: #fafafa
+}
+
+.yellow {
+    color: #bfbf00
+}
+
+.yellow-background {
+    background-color: #fafa00
+}
+
+span.icon>.fa {
+    cursor: default
+}
+
+a span.icon>.fa {
+    cursor: inherit
+}
+
+.admonitionblock td.icon [class^="fa icon-"] {
+    font-size: 2.5em;
+    text-shadow: 1px 1px 2px rgba(0, 0, 0, .5);
+    cursor: default
+}
+
+.admonitionblock td.icon .icon-note::before {
+    content: "\f05a";
+    color: #19407c
+}
+
+.admonitionblock td.icon .icon-tip::before {
+    content: "\f0eb";
+    text-shadow: 1px 1px 2px rgba(155, 155, 0, .8);
+    color: #111
+}
+
+.admonitionblock td.icon .icon-warning::before {
+    content: "\f071";
+    color: #bf6900
+}
+
+.admonitionblock td.icon .icon-caution::before {
+    content: "\f06d";
+    color: #bf3400
+}
+
+.admonitionblock td.icon .icon-important::before {
+    content: "\f06a";
+    color: #bf0000
+}
+
+.conum[data-value] {
+    display: inline-block;
+    color: #fff !important;
+    background-color: rgba(0, 0, 0, .8);
+    -webkit-border-radius: 100px;
+    border-radius: 100px;
+    text-align: center;
+    font-size: .75em;
+    width: 1.67em;
+    height: 1.67em;
+    line-height: 1.67em;
+    font-family: "Source Sans Pro", "DejaVu Sans", sans-serif;
+    font-style: normal;
+    font-weight: bold
+}
+
+.conum[data-value] * {
+    color: #fff !important
+}
+
+.conum[data-value]+b {
+    display: none
+}
+
+.conum[data-value]::after {
+    content: attr(data-value)
+}
+
+pre .conum[data-value] {
+    position: relative;
+    top: -.125em
+}
+
+b.conum * {
+    color: inherit !important
+}
+
+.conum:not([data-value]):empty {
+    display: none
+}
+
+dt,
+th.tableblock,
+td.content,
+div.footnote {
+    text-rendering: optimizeLegibility
+}
+
+h1,
+h2,
+p,
+td.content,
+span.alt {
+    letter-spacing: -.01em
+}
+
+p strong,
+td.content strong,
+div.footnote strong {
+    letter-spacing: -.005em
+}
+
+p,
+blockquote,
+dt,
+td.content,
+span.alt {
+    /*font-size: 1.0625rem*/
+}
+
+p {
+    margin-bottom: 1.25rem
+}
+
+.sidebarblock p,
+.sidebarblock dt,
+.sidebarblock td.content,
+p.tableblock {
+    font-size: 1em
+}
+
+.exampleblock>.content {
+    background-color: #fffef7;
+    border-color: #dddddd;
+    -webkit-box-shadow: 0 1px 4px #e0e0dc;
+    box-shadow: 0 1px 4px #e0e0dc
+}
+
+.print-only {
+    display: none !important
+}
+
+@page {
+    margin: 1.25cm .75cm
+}
+
+@media print {
+    * {
+        -webkit-box-shadow: none !important;
+        box-shadow: none !important;
+        text-shadow: none !important
+    }
+
+    html {
+        font-size: 80%
+    }
+
+    a {
+        color: inherit !important;
+        text-decoration: underline !important
+    }
+
+    a.bare,
+    a[href^="#"],
+    a[href^="mailto:"] {
+        text-decoration: none !important
+    }
+
+    a[href^="http:"]:not(.bare)::after,
+    a[href^="https:"]:not(.bare)::after {
+        content: "("attr(href) ")";
+        display: inline-block;
+        font-size: .875em;
+        padding-left: .25em
+    }
+
+    abbr[title]::after {
+        content: " ("attr(title) ")"
+    }
+
+    pre,
+    blockquote,
+    tr,
+    img,
+    object,
+    svg {
+        page-break-inside: avoid
+    }
+
+    thead {
+        display: table-header-group
+    }
+
+    svg {
+        max-width: 100%
+    }
+
+    p,
+    blockquote,
+    dt,
+    td.content {
+        font-size: 1em;
+        orphans: 3;
+        widows: 3
+    }
+
+    h2,
+    h3,
+    #toctitle,
+    .sidebarblock>.content>.title {
+        page-break-after: avoid
+    }
+
+    #toc,
+    .sidebarblock,
+    .exampleblock>.content {
+        background: none !important
+    }
+
+    #toc {
+        border-bottom: 1px solid #dddddd !important;
+        padding-bottom: 0 !important
+    }
+
+    body.book #header {
+        text-align: center
+    }
+
+    body.book #header>h1:first-child {
+        border: 0 !important;
+        margin: 2.5em 0 1em
+    }
+
+    body.book #header .details {
+        border: 0 !important;
+        display: block;
+        padding: 0 !important
+    }
+
+    body.book #header .details span:first-child {
+        margin-left: 0 !important
+    }
+
+    body.book #header .details br {
+        display: block
+    }
+
+    body.book #header .details br+span::before {
+        content: none !important
+    }
+
+    body.book #toc {
+        border: 0 !important;
+        text-align: left !important;
+        padding: 0 !important;
+        margin: 0 !important
+    }
+
+    body.book #toc,
+    body.book #preamble,
+    body.book h1.sect0,
+    body.book .sect1>h2 {
+        page-break-before: always
+    }
+
+    .listingblock code[data-lang]::before {
+        display: block
+    }
+
+    #footer {
+        padding: 0 .9375em
+    }
+
+    .hide-on-print {
+        display: none !important
+    }
+
+    .print-only {
+        display: block !important
+    }
+
+    .hide-for-print {
+        display: none !important
+    }
+
+    .show-for-print {
+        display: inherit !important
+    }
+
+}
+
+@media print, amzn-kf8 {
+    #header>h1:first-child {
+        margin-top: 1.25rem
+    }
+
+    .sect1 {
+        padding: 0 !important
+    }
+
+    .sect1+.sect1 {
+        border: 0
+    }
+
+    #footer {
+        background: none
+    }
+
+    #footer-text {
+        color: rgba(0, 0, 0, .6);
+        font-size: .9em
+    }
+
+}
+
+@media amzn-kf8 {
+    #header,
+    #content,
+    #footnotes,
+    #footer {
+        padding: 0
+    }
+
+}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+<div id="toc" class="toc">
+<div id="toctitle">Table of Contents</div>
+<ul class="sectlevel2">
+<li><a href="#appenders">1. Appenders</a></li>
+</ul>
+</div>
+</div>
+<div id="content">
+<div class="sect2">
+<h3 id="appenders">1. Appenders</h3>
+<div class="paragraph">
+<p>Decanter appenders receive the data from the collectors, and store the data into a storage backend.</p>
+</div>
+<div class="sect3">
+<h4 id="log">1.1. Log</h4>
+<div class="paragraph">
+<p>The Decanter Log Appender creates a log message for each event received from the collectors.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-log</code> feature installs the log appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-log</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The log appender doesn&#8217;t require any configuration.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="elasticsearch-appender">1.2. Elasticsearch Appender</h4>
+<div class="paragraph">
+<p>The Decanter Elasticsearch Appender stores the data (coming from the collectors) into an Elasticsearch instance.
+It transforms the data as a json document, stored into Elasticsearch.</p>
+</div>
+<div class="paragraph">
+<p>The Decanter Elasticsearch appender uses the Elasticsearch Rest client provided since Elasticsearch 5.x. It can be used with any Elasticsearch versions.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-elasticsearch</code> feature installs this appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-elasticsearch</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>You can configure the appender (especially the Elasticsearch location) in <code>etc/org.apache.karaf.decanter.appender.elasticsearch.cfg</code> configuration file.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="file">1.3. File</h4>
+<div class="paragraph">
+<p>The Decanter File appender stores the collected data in a CSV file.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-file</code> feature installs the file appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-file</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>By default, the file appender stores the collected data in <code>${karaf.data}/decanter</code> file. You can change the file where to store the data
+using the <code>filename</code> property in <code>etc/org.apache.karaf.decanter.appender.file.cfg</code> configuration file.</p>
+</div>
+<div class="paragraph">
+<p>You can also change the marshaller to use. By default, the marshaller used is the CSV one. But you can switch to the JSON one
+using the <code>marshaller.target</code> property in <code>etc/org.apache.karaf.decanter.appender.file.cfg</code> configuration file.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="jdbc">1.4. JDBC</h4>
+<div class="paragraph">
+<p>The Decanter JDBC appender allows you to store the data (coming from the collectors) into a database.</p>
+</div>
+<div class="paragraph">
+<p>The Decanter JDBC appender transforms the data as a json string. The appender stores the json string and the timestamp
+into the database.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-jdbc</code> feature installs the jdbc appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-jdbc</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature also installs the <code>etc/org.apache.karaf.decanter.appender.jdbc.cfg</code> configuration file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#######################################
+# Decanter JDBC Appender Configuration
+#######################################
+
+# Name of the JDBC datasource
+datasource.name=jdbc/decanter
+
+# Name of the table storing the collected data
+table.name=decanter
+
+# Dialect (type of the database)
+# The dialect is used to create the table
+# Supported dialects are: generic, derby, mysql
+# Instead of letting Decanter created the table, you can create the table by your own
+dialect=generic</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This configuration file allows you to specify the connection to the database:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the <code>datasource.name</code> property contains the name of the JDBC datasource to use to connect to the database. You can
+create this datasource using the Karaf <code>jdbc:create</code> command (provided by the <code>jdbc</code> feature).</p>
+</li>
+<li>
+<p>the <code>table.name</code> property contains the table name in the database. The Decanter JDBC appender automatically creates
+the table for you, but you can create the table by yourself. The table is simple and contains just two columns:</p>
+<div class="ulist">
+<ul>
+<li>
+<p>timestamp as INTEGER</p>
+</li>
+<li>
+<p>content as VARCHAR or CLOB</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>the <code>dialect</code> property allows you to specify the database type (generic, mysql, derby). This property is only used for
+the table creation.</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="jms">1.5. JMS</h4>
+<div class="paragraph">
+<p>The Decanter JMS appender "forwards" the data (collected by the collectors) to a JMS broker.</p>
+</div>
+<div class="paragraph">
+<p>The appender sends a JMS Map message to the broker. The Map message contains the harvested data.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-jms</code> feature installs the JMS appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-jms</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature also installs the <code>etc/org.apache.karaf.decanter.appender.jms.cfg</code> configuration file containing:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#####################################
+# Decanter JMS Appender Configuration
+#####################################
+
+# Name of the JMS connection factory
+connection.factory.name=jms/decanter
+
+# Name of the destination
+destination.name=decanter
+
+# Type of the destination (queue or topic)
+destination.type=queue
+
+# Connection username
+# username=
+
+# Connection password
+# password=</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This configuration file allows you to specify the connection properties to the JMS broker:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the <code>connection.factory.name</code> property specifies the JMS connection factory to use. You can create this JMS connection
+factory using the <code>jms:create</code> command (provided by the <code>jms</code> feature).</p>
+</li>
+<li>
+<p>the <code>destination.name</code> property specifies the JMS destination name where to send the data.</p>
+</li>
+<li>
+<p>the <code>destination.type</code> property specifies the JMS destination type (queue or topic).</p>
+</li>
+<li>
+<p>the <code>username</code> property is optional and specifies the username to connect to the destination.</p>
+</li>
+<li>
+<p>the <code>password</code> property is optional and specifies the username to connect to the destination.</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="camel">1.6. Camel</h4>
+<div class="paragraph">
+<p>The Decanter Camel appender sends the data (collected by the collectors) to a Camel endpoint.</p>
+</div>
+<div class="paragraph">
+<p>It&#8217;s a very flexible appender, allowing you to use any Camel route to transform and forward the harvested data.</p>
+</div>
+<div class="paragraph">
+<p>The Camel appender creates a Camel exchange and set the "in" message body with a Map of the harvested data.
+The exchange is send to a Camel endpoint.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-camel</code> feature installs the Camel appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-camel</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature also installs the <code>etc/org.apache.karaf.decanter.appender.camel.cfg</code> configuration file containing:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#
+# Decanter Camel appender configuration
+#
+
+# The destination.uri contains the URI of the Camel endpoint
+# where Decanter sends the collected data
+destination.uri=direct-vm:decanter</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This file allows you to specify the Camel endpoint where to send the data:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the <code>destination.uri</code> property specifies the URI of the Camel endpoint where to send the data.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The Camel appender sends an exchange. The "in" message body contains a Map of the harvested data.</p>
+</div>
+<div class="paragraph">
+<p>For instance, in this configuration file, you can specify:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>destination.uri=direct-vm:decanter</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>And you can deploy the following Camel route definition:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"&gt;
+
+  &lt;camelContext xmlns="http://camel.apache.org/schema/blueprint"&gt;
+    &lt;route id="decanter"&gt;
+      &lt;from uri="direct-vm:decanter"/&gt;
+      ...
+      ANYTHING
+      ...
+    &lt;/route&gt;
+  &lt;/camelContext&gt;
+
+&lt;/blueprint&gt;</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This route will receive the Map of harvested data. Using the body of the "in" message, you can do what you want:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>transform and convert to another data format</p>
+</li>
+<li>
+<p>use any Camel EIPs (Enterprise Integration Patterns)</p>
+</li>
+<li>
+<p>send to any Camel endpoint</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="kafka">1.7. Kafka</h4>
+<div class="paragraph">
+<p>The Decanter Kafka appender sends the data (collected by the collectors) to a Kafka topic.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-kafka</code> feature installs the Kafka appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-kafka</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature installs a default <code>etc/org.apache.karaf.decanter.appender.kafka.cfg</code> configuration file containing:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>##################################
+# Decanter JMS Kafka Configuration
+##################################
+
+# A list of host/port pairs to use for establishing the initial connection to the Kafka cluster
+#bootstrap.servers=localhost:9092
+
+# An id string to pass to the server when making requests
+# client.id
+
+# The compression type for all data generated by the producer
+# compression.type=none
+
+# The number of acknowledgments the producer requires the leader to have received before considering a request complete
+# - 0: the producer doesn't wait for ack
+# - 1: the producer just waits for the leader
+# - all: the producer waits for leader and all followers (replica), most secure
+# acks=all
+
+# Setting a value greater than zero will cause the client to resend any record whose send fails with a potentially transient error
+# retries=0
+
+# The producer will attempt to batch records together into fewer requests whenever multiple records are being sent to the same partition
+# batch.size=16384
+
+# The total bytes of memory the producer can use to buffer records waiting to be sent to the server.
+# If records are sent faster than they can be delivered to the server the producer will either block or throw an exception
+# buffer.memory=33554432
+
+# Serializer class for key that implements the Serializer interface
+# key.serializer=org.apache.kafka.common.serialization.StringSerializer
+
+# Serializer class for value that implements the Serializer interface.
+# value.serializer=org.apache.kafka.common.serialization.StringSerializer
+
+# Producer request timeout
+# request.timeout.ms=5000
+
+# Max size of the request
+# max.request.size=2097152
+
+# Name of the topic
+# topic=decanter
+
+# Security (SSL)
+# security.protocol=SSL
+
+# SSL truststore location (Kafka broker) and password
+# ssl.truststore.location=${karaf.etc}/keystores/keystore.jks
+# ssl.truststore.password=karaf
+
+# SSL keystore (if client authentication is required)
+# ssl.keystore.location=${karaf.etc}/keystores/clientstore.jks
+# ssl.keystore.password=karaf
+# ssl.key.password=karaf
+
+# (Optional) SSL provider (default uses the JVM one)
+# ssl.provider=
+
+# (Optional) SSL Cipher suites
+# ssl.cipher.suites=
+
+# (Optional) SSL Protocols enabled (default is TLSv1.2,TLSv1.1,TLSv1)
+# ssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1
+
+# (Optional) SSL Truststore type (default is JKS)
+# ssl.truststore.type=JKS
+
+# (Optional) SSL Keystore type (default is JKS)
+# ssl.keystore.type=JKS
+
+# Security (SASL)
+# For SASL, you have to configure Java System property as explained in http://kafka.apache.org/documentation.html#security_ssl</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This file allows you to define how the messages are sent to the Kafka broker:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the <code>bootstrap.servers</code> contains a list of host:port of the Kafka brokers. Default value is <code>localhost:9092</code>.</p>
+</li>
+<li>
+<p>the <code>client.id</code> is optional. It identifies the client on the Kafka broker.</p>
+</li>
+<li>
+<p>the <code>compression.type</code> defines if the messages have to be compressed on the Kafka broker. Default value is <code>none</code> meaning no compression.</p>
+</li>
+<li>
+<p>the <code>acks</code> defines the acknowledgement policy. Default value is <code>all</code>. Possible values are:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>0</code> means the appender doesn&#8217;t wait for an acknowledge from the Kafka broker. Basically, it means there&#8217;s no guarantee that messages have been received completely by the broker.</p>
+</li>
+<li>
+<p><code>1</code> means the appender waits for the acknowledge only from the leader. If the leader falls down, its possible messages are lost if the replicas have not yet been created on the followers.</p>
+</li>
+<li>
+<p><code>all</code> means the appender waits for the acknowledge from the leader and all followers. This mode is the most reliable as the appender will receive the acknowledge only when all replicas have been created. NB: this mode doesn&#8217;t make sense if you have a single node Kafka broker or a replication factor set to 1.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>the <code>retries</code> defines the number of retries performed by the appender in case of error. The default value is <code>0</code> meaning no retry at all.</p>
+</li>
+<li>
+<p>the <code>batch.size</code> defines the size of the batch records. The appender will attempt to batch records together into fewer requests whenever multiple records are being sent to the same Kafka partition. The default value is 16384.</p>
+</li>
+<li>
+<p>the <code>buffer.memory</code> defines the size of the buffer the appender uses to send to the Kafka broker. The default value is 33554432.</p>
+</li>
+<li>
+<p>the <code>key.serializer</code> defines the fully qualified class name of the Serializer used to serialize the keys. The default is a String serializer (<code>org.apache.kafka.common.serialization.StringSerializer</code>).</p>
+</li>
+<li>
+<p>the <code>value.serializer</code> defines the full qualified class name of the Serializer used to serialize the values. The default is a String serializer (<code>org.apache.kafka.common.serialization.StringSerializer</code>).</p>
+</li>
+<li>
+<p>the <code>request.timeout.ms</code> is the time the producer wait before considering the message production on the broker fails (default is 5s).</p>
+</li>
+<li>
+<p>the <code>max.request.size</code> is the max size of the request sent to the broker (default is 2097152 bytes).</p>
+</li>
+<li>
+<p>the <code>topic</code> defines the name of the topic where to send data on the Kafka broker.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>It&#8217;s also possible to enable SSL security (with Kafka 0.9.x) using the SSL properties.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="redis">1.8. Redis</h4>
+<div class="paragraph">
+<p>The Decanter Redis appender sends the data (collected by the collectors) to a Redis broker.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-redis</code> feature installs the Redis appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-redis</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature also installs a default <code>etc/org.apache.karaf.decanter.appender.redis.cfg</code> configuration file containing:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#######################################
+# Decanter Redis Appender Configuration
+#######################################
+
+#
+# Location of the Redis broker
+# It's possible to use a list of brokers, for instance:
+# host= locahost:6389,localhost:6332,localhost:6419
+#
+# Default is localhost:6379
+#
+address=localhost:6379
+
+#
+# Define the connection mode.
+# Possible modes: Single (default), Master_Slave, Sentinel, Cluster
+#
+mode=Single
+
+#
+# Name of the Redis map
+# Default is Decanter
+#
+map=Decanter
+
+#
+# For Master_Slave mode, we define the location of the master
+# Default is localhost:6379
+#
+#masterAddress=localhost:6379
+
+#
+# For Sentinel model, define the name of the master
+# Default is myMaster
+#
+#masterName=myMaster
+
+#
+# For Cluster mode, define the scan interval of the nodes in the cluster
+# Default value is 2000 (2 seconds).
+#
+#scanInterval=2000</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This file allows you to configure the Redis broker to use:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the <code>address</code> property contains the location of the Redis broker</p>
+</li>
+<li>
+<p>the <code>mode</code> property defines the Redis topology to use (Single, Master_Slave, Sentinel, Cluster)</p>
+</li>
+<li>
+<p>the <code>map</code> property contains the name of the Redis map to use</p>
+</li>
+<li>
+<p>the <code>masterAddress</code> is the location of the master when using the Master_Slave topology</p>
+</li>
+<li>
+<p>the <code>masterName</code> is the name of the master when using the Sentinel topology</p>
+</li>
+<li>
+<p>the <code>scanInternal</code> is the scan interval of the nodes when using the Cluster topology</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="mqtt">1.9. MQTT</h4>
+<div class="paragraph">
+<p>The Decanter MQTT appender sends the data (collected by the collectors) to a MQTT broker.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-mqtt</code> feature installs the MQTT appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-mqtt</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature installs a default <code>etc/org.apache.karaf.decanter.appender.mqtt.cfg</code> configuration file containing:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#server=tcp://localhost:9300
+#clientId=decanter
+#topic=decanter</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This file allows you to configure the location and where to send in the MQTT broker:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the <code>server</code> contains the location of the MQTT broker</p>
+</li>
+<li>
+<p>the <code>clientId</code> identifies the appender on the MQTT broker</p>
+</li>
+<li>
+<p>the <code>topic</code> is the name of the topic where to send the messages</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="cassandra">1.10. Cassandra</h4>
+<div class="paragraph">
+<p>The Decanter Cassandra appender allows you to store the data (coming from the collectors) into an Apache Cassandra database.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-cassandra</code> feature installs this appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-cassandra</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature installs the appender and a default <code>etc/org.apache.karaf.decanter.appender.cassandra.cfg</code> configuration file
+containing:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>###########################################
+# Decanter Cassandra Appender Configuration
+###########################################
+
+# Name of Keyspace
+keyspace.name=decanter
+
+# Name of table to write to
+table.name=decanter
+
+# Cassandra host name
+cassandra.host=
+
+# Cassandra port
+cassandra.port=9042</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the <code>keyspace.name</code> property identifies the keyspace used for Decanter data</p>
+</li>
+<li>
+<p>the <code>table.name</code> property defines the name of the table where to store the data</p>
+</li>
+<li>
+<p>the <code>cassandra.host</code> property contains the hostname or IP address where the Cassandra instance is running (default is localhost)</p>
+</li>
+<li>
+<p>the <code>cassandra.port</code> property contains the port number of the Cassandra instance (default is 9042)</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="influxdb">1.11. InfluxDB</h4>
+<div class="paragraph">
+<p>The Decanter InfluxDB appender allows you to store the data (coming from the collectors) as a time series into a InfluxDB database.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-influxdb</code> feature installs this appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-influxdb</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature installs the appender and a default <code>etc/org.apache.karaf.decanter.appender.influxdb.cfg</code> configuration file containing:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>##########################################
+# Decanter InfluxDB Appender Configuration
+##########################################
+
+# URL of the InfluxDB database
+url=
+
+# InfluxDB server username
+#username=
+
+# InfluxDB server password
+#password=
+
+# InfluxDB database name
+database=decanter</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>url</code> property is mandatory and define the location of the InfluxDB server</p>
+</li>
+<li>
+<p><code>database</code> property contains the name of the InfluxDB database. Default is <code>decanter</code>.</p>
+</li>
+<li>
+<p><code>username</code> and <code>password</code> are optional and define the authentication to the InfluxDB server.</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="mongodb">1.12. MongoDB</h4>
+<div class="paragraph">
+<p>The Decanter MongoDB appender allows you to store the data (coming from the collectors) into a MongoDB database.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-mongodb</code> feature installs this appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-mongodb</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature installs the appender and a default <code>etc/org.apache.karaf.decanter.appender.mongodb.cfg</code> configuration file
+containing:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>################################
+# Decanter MongoDB Configuration
+################################
+
+# MongoDB connection URI
+#uri=mongodb://localhost
+
+# MongoDB database name
+#database=decanter
+
+# MongoDB collection name
+#collection=decanter</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the <code>uri</code> property contains the location of the MongoDB instance</p>
+</li>
+<li>
+<p>the <code>database</code> property contains the name of the MongoDB database</p>
+</li>
+<li>
+<p>the <code>collection</code> property contains the name of the MongoDB collection</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="network-socket">1.13. Network socket</h4>
+<div class="paragraph">
+<p>The Decanter network socket appender sends the collected data to a remote Decanter network socket collector.</p>
+</div>
+<div class="paragraph">
+<p>The use case could be to dedicate a Karaf instance as a central monitoring platform, receiving collected data from
+the other nodes.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-socket</code> feature installs this appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-socket</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature installs the appender and a default <code>etc/org.apache.karaf.decanter.appender.socket.cfg</code> configuration file
+containing:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre># Decanter Socket Appender
+
+# Hostname (or IP address) where to send the collected data
+#host=localhost
+
+# Port number where to send the collected data
+#port=34343</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the <code>host</code> property contains the hostname or IP address of the remote network socket collector</p>
+</li>
+<li>
+<p>the <code>port</code> property contains the port number of the remote network socket collector</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="orientdb">1.14. OrientDB</h4>
+<div class="paragraph">
+<p>The Decanter OrientDB appender stores the collected data into OrientDB Document database.</p>
+</div>
+<div class="paragraph">
+<p>You can use an external OrientDB instance or you can use an embedded instance provided by Decanter.</p>
+</div>
+<div class="sect4">
+<h5 id="orientdb-appender">OrientDB appender</h5>
+<div class="paragraph">
+<p>The <code>decanter-appender-orientdb</code> feature installs the OrientDB appender.</p>
+</div>
+<div class="paragraph">
+<p>This feature installs the <code>etc/org.apache.karaf.decanter.appender.orientdb.cfg</code> configuration file allowing you to setup the location
+of the OrientDB database to use:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#################################
+# Decanter OrientDB Configuration
+#################################
+
+# OrientDB connection URL
+#url=remote:localhost/decanter
+
+# OrientDB database username
+#username=root
+
+# OrientDB database password
+#password=decanter</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>where:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>url</code> is the location of the OrientDB Document database. By default, it uses <code>remote:localhost/decanter</code> corresponding to the OrientDB embedded instance.</p>
+</li>
+<li>
+<p><code>username</code> is the username to connect to the remote OrientDB Document database.</p>
+</li>
+<li>
+<p><code>password</code> is the password to connect to the remote OrientDB Document database.</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
+<h5 id="orientdb-embedded-instance">OrientDB embedded instance</h5>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>For production, we recommend to use a dedicated OrientDB instance. The following feature is not recommended for production.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>The <code>orientdb</code> feature starts an OrientDB embedded datase. It also installs the <code>etc/orientdb-server-config.xml</code> configuration file allowing you to configure the OrientBD instance:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;
+&lt;orient-server&gt;
+    &lt;handlers&gt;
+        &lt;handler class="com.orientechnologies.orient.graph.handler.OGraphServerHandler"&gt;
+            &lt;parameters&gt;
+                &lt;parameter value="true" name="enabled"/&gt;
+                &lt;parameter value="50" name="graph.pool.max"/&gt;
+            &lt;/parameters&gt;
+        &lt;/handler&gt;
+        &lt;handler class="com.orientechnologies.orient.server.handler.OJMXPlugin"&gt;
+            &lt;parameters&gt;
+                &lt;parameter value="false" name="enabled"/&gt;
+                &lt;parameter value="true" name="profilerManaged"/&gt;
+            &lt;/parameters&gt;
+        &lt;/handler&gt;
+        &lt;handler class="com.orientechnologies.orient.server.handler.OServerSideScriptInterpreter"&gt;
+            &lt;parameters&gt;
+                &lt;parameter value="true" name="enabled"/&gt;
+                &lt;parameter value="SQL" name="allowedLanguages"/&gt;
+            &lt;/parameters&gt;
+        &lt;/handler&gt;
+    &lt;/handlers&gt;
+    &lt;network&gt;
+        &lt;protocols&gt;
+            &lt;protocol implementation="com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary" name="binary"/&gt;
+            &lt;protocol implementation="com.orientechnologies.orient.server.network.protocol.http.ONetworkProtocolHttpDb" name="http"/&gt;
+        &lt;/protocols&gt;
+        &lt;listeners&gt;
+            &lt;listener protocol="binary" socket="default" port-range="2424-2430" ip-address="0.0.0.0"/&gt;
+            &lt;listener protocol="http" socket="default" port-range="2480-2490" ip-address="0.0.0.0"&gt;
+                &lt;commands&gt;
+                    &lt;command implementation="com.orientechnologies.orient.server.network.protocol.http.command.get.OServerCommandGetStaticContent" pattern="GET|www GET|studio/ GET| GET|*.htm GET|*.html GET|*.xml GET|*.jpeg GET|*.jpg GET|*.png GET|*.gif GET|*.js GET|*.css GET|*.swf GET|*.ico GET|*.txt GET|*.otf GET|*.pjs GET|*.svg GET|*.json GET|*.woff GET|*.woff2 GET|*.ttf GET|*.svgz" stateful="false"&gt;
+                        &lt;parameters&gt;
+                            &lt;entry value="Cache-Control: no-cache, no-store, max-age=0, must-revalidate\r\nPragma: no-cache" name="http.cache:*.htm *.html"/&gt;
+                            &lt;entry value="Cache-Control: max-age=120" name="http.cache:default"/&gt;
+                        &lt;/parameters&gt;
+                    &lt;/command&gt;
+                    &lt;command implementation="com.orientechnologies.orient.graph.server.command.OServerCommandGetGephi" pattern="GET|gephi/*" stateful="false"/&gt;
+                &lt;/commands&gt;
+                &lt;parameters&gt;
+                    &lt;parameter value="utf-8" name="network.http.charset"/&gt;
+                    &lt;parameter value="true" name="network.http.jsonResponseError"/&gt;
+                &lt;/parameters&gt;
+            &lt;/listener&gt;
+        &lt;/listeners&gt;
+    &lt;/network&gt;
+    &lt;storages/&gt;
+    &lt;users&gt;
+    &lt;/users&gt;
+    &lt;properties&gt;
+        &lt;entry value="1" name="db.pool.min"/&gt;
+        &lt;entry value="50" name="db.pool.max"/&gt;
+        &lt;entry value="false" name="profiler.enabled"/&gt;
+    &lt;/properties&gt;
+    &lt;isAfterFirstTime&gt;true&lt;/isAfterFirstTime&gt;
+&lt;/orient-server&gt;</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Most of the values can be let as they are, however, you can tweak some:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>&lt;listener/&gt;</code> allows you to configure the protocol and port numbers used by the OrientDB instance. You can define the IP address on which the instance is bound (<code>ip-address</code>), the port numbers range to use (<code>port-range</code>) for each protocol (<code>binary</code> or <code>http</code>).</p>
+</li>
+<li>
+<p>the <code>db.pool.min</code> and <code>db.pool.max</code> can be increased if you have a large number of connections on the instance.</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="dropwizard-metrics">1.15. Dropwizard Metrics</h4>
+<div class="paragraph">
+<p>The Dropwizard Metrics appender receives the harvested data from the dispatcher and pushes to a Dropwizard Metrics
+<code>MetricRegistry</code>. You can register this <code>MetricRegistry</code> in your own application or use a Dropwizard Metrics Reporter
+to "push" these metrics to some backend.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-dropwizard</code> feature provides the Decanter event handler registering the harvested data ino the
+<code>MetricRegistry</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()&gt; feature:install decanter-appender-dropwizard</pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="timescaledb">1.16. TimescaleDB</h4>
+<div class="paragraph">
+<p>The Decanter TimescaleDB appender stores the collected data into TimescaleDB database.</p>
+</div>
+<div class="paragraph">
+<p>You have to install a TimescaleDB before using the appender.</p>
+</div>
+<div class="paragraph">
+<p>You can install a test database with Docker for dev:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>docker run -d --name timescaledb -p 5432:5432 -e POSTGRES_PASSWORD=decanter -e POSTGRES_USER=decanter -e POSTGRES_DATABASE=decanter timescale/timescaledb</code></pre>
+</div>
+</div>
+<div class="sect4">
+<h5 id="timescaledb-appender">TimescaleDB appender</h5>
+<div class="paragraph">
+<p>The <code>decanter-appender-timescaledb</code> feature installs the TimescaleDB appender.</p>
+</div>
+<div class="paragraph">
+<p>As TimescaleDB is a PostgreSQL database extension, the <strong>timescaledb</strong> feature will install all required features to configure
+your datasource (jdbc, jndi, postgreSQL driver, pool datasource).</p>
+</div>
+<div class="paragraph">
+<p>This feature installs the <code>etc/org.apache.karaf.decanter.appender.timescaledb.cfg</code> configuration file allowing you to setup the location
+of the TimescaleDB database to use:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#################################
+# Decanter TimescaleDB Configuration
+#################################
+
+# DataSource to use
+dataSource.target=(osgi.jndi.service.name=jdbc/decanter-timescaledb)
+
+# Name of the table storing the collected data
+table.name=decanter
+
+# Marshaller to use (json is recommended)
+marshaller.target=(dataFormat=json)</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>where:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>datasource.target</code> property contains the name of the JDBC datasource to use to connect to the database. You can
+create this datasource using the Karaf <code>jdbc:create</code> command (provided by the <code>jdbc</code> feature).</p>
+</li>
+<li>
+<p><code>table.name</code> property contains the table name in the database. The Decanter JDBC appender automatically
+activates the Timescale extenssion, creates the table for you and migrates the table to a TimescaleDB hypertable.
+The table is simple and contains just two column:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>timestamp</code> as BIGINT</p>
+</li>
+<li>
+<p><code>content</code> as TEXT</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><code>marshaller.target</code> is the marshaller used to serialize data into the table.</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
+<h5 id="websocket-servlet">WebSocket Servlet</h5>
+<div class="paragraph">
+<p>The <code>decanter-appender-websocket-servlet</code> feature exposes a websocket on which clients can register. Then, Decanter will send the collected data to the connected clients.</p>
+</div>
+<div class="paragraph">
+<p>It&#8217;s very easy to use. First install the feature:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>karaf@root()&gt; feature:install decanter-appender-websocket-servlet</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The feature registers the WebSocket endpoint on <code><a href="http://localhost:8181/decanter-websocket" class="bare">http://localhost:8181/decanter-websocket</a></code> by default:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>karaf@root()&gt; http:list
+ID │ Servlet                  │ Servlet-Name   │ State       │ Alias               │ Url
+───┼──────────────────────────┼────────────────┼─────────────┼─────────────────────┼────────────────────────
+55 │ DecanterWebSocketServlet │ ServletModel-2 │ Deployed    │ /decanter-websocket │ [/decanter-websocket/*]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The alias can be configured via the <code>etc/org.apache.karaf.decanter.appender.websocket.servlet.cfg</code> configuration file installed by the feature.</p>
+</div>
+<div class="paragraph">
+<p>You can now register your websocket client on this URL. You can use <code>curl</code> as client to test:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>curl --include \
+     --no-buffer \
+     --header "Connection: Upgrade" \
+     --header "Upgrade: websocket" \
+     --header "Host: localhost:8181" \
+     --header "Origin: http://localhost:8181/decanter-websocket" \
+     --header "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" \
+     --header "Sec-WebSocket-Version: 13" \
+     http://localhost:8181/decanter-websocket</code></pre>
+</div>
+</div>
+</div>
+<div class="sect4">
+<h5 id="prometheus">Prometheus</h5>
+<div class="paragraph">
+<p>The <code>decanter-appender-prometheus</code> feature collects and exposes metrics on prometheus:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>karaf@root()&gt; feature:install decanter-appender-prometheus</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The feature registers the Prometheus HTTP servlet on <code><a href="http://localhost:8181/decanter/prometheus" class="bare">http://localhost:8181/decanter/prometheus</a></code> by default:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>karaf@root()&gt; http:list
+ID │ Servlet        │ Servlet-Name   │ State       │ Alias                │ Url
+───┼────────────────┼────────────────┼─────────────┼──────────────────────┼─────────────────────────
+51 │ MetricsServlet │ ServletModel-2 │ Deployed    │ /decanter/prometheus │ [/decanter/prometheus/*]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>You can change the servlet alias in <code>etc/org.apache.karaf.decanter.appender.prometheus.cfg</code> configuration file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>################################################################################
+#
+#    Licensed to the Apache Software Foundation (ASF) under one or more
+#    contributor license agreements.  See the NOTICE file distributed with
+#    this work for additional information regarding copyright ownership.
+#    The ASF licenses this file to You under the Apache License, Version 2.0
+#    (the "License"); you may not use this file except in compliance with
+#    the License.  You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+#
+################################################################################
+
+################################################
+# Decanter Prometheus Appender Configuration
+################################################
+
+# Prometheus HTTP servlet alias
+#alias=/decanter/prometheus</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The Decanter Prometheus appender exports <code>io.prometheus*</code> packages, meaning that you can simple add your metrics to the Decanter Prometheus servlet.
+You just have to import <code>io.prometheus*</code> packages and simple use the regular Prometheus code:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>class YourClass {
+  static final Gauge inprogressRequests = Gauge.build()
+     .name("inprogress_requests").help("Inprogress requests.").register();
+
+  void processRequest() {
+    inprogressRequests.inc();
+    // Your code here.
+    inprogressRequests.dec();
+  }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Don&#8217;t forget to import <code>io.prometheus*</code> packages in your bundle <code>MANIFEST.MF</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>Import-Package: io.prometheus.client;version="[0.8,1)"</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>That&#8217;s the only thing you need: your metrics will be available on the Decanter Prometheus servlet (again on <code><a href="http://localhost:8181/decanter/prometheus" class="bare">http://localhost:8181/decanter/prometheus</a></code> by default).</p>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div id="footer">
+<div id="footer-text">
+Last updated 2020-04-01 08:27:43 CEST
+</div>
+</div>
+</body>
+</html>
\ No newline at end of file