blob: 6e32b69f69f68d96001a0f5e20af0ce5a90b216a [file] [log] [blame]
<!--
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.
-->
<!doctype html><html lang="en"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content="An open source API to convert natural language into actions."><meta name="author" content="NLPCraft."><title>Apache NLPCraft - Natural Language Interface</title><link href="//netdna.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet"><link href="//use.fontawesome.com/releases/v5.7.1/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" rel="stylesheet" crossorigin="anonymous"><link href="/ext/syntaxhighlighter/styles/shCoreNLPCraft.css" rel="stylesheet" type="text/css"><link href="/ext/syntaxhighlighter/styles/shThemeNLPCraft.css" rel="stylesheet" type="text/css"><link href="//fonts.googleapis.com/css?family=Amatic+SC|Roboto+Mono" rel="stylesheet"> <script src="/ext/syntaxhighlighter/scripts/XRegExp.js" type="text/javascript"></script> <script src="/ext/syntaxhighlighter/scripts/shCore.js" type="text/javascript"></script> <script src="/ext/syntaxhighlighter/scripts/shBrushXml.js" type="text/javascript"></script> <script src="/ext/syntaxhighlighter/scripts/shBrushPlain.js" type="text/javascript"></script> <script src="/ext/syntaxhighlighter/scripts/shBrushJava.js" type="text/javascript"></script> <script src="/ext/syntaxhighlighter/scripts/shBrushScala.js" type="text/javascript"></script> <script src="/ext/syntaxhighlighter/scripts/shBrushPython.js" type="text/javascript"></script> <script src="/ext/syntaxhighlighter/scripts/shBrushJScript.js" type="text/javascript"></script> <script async defer src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" type="text/css" href="/assets/css/style.css"/> <script type="text/javascript" src="//use.typekit.net/pso2adz.js"></script> <script type="text/javascript"> try { Typekit.load(); } catch(e) { // Ignore. } </script><nav class="navbar navbar-expand-lg navbar-light bg-light" id="top-header"> <a class="navbar-brand mr-4" href="/index.html"> <img src="/images/nlpcraft_logo_white.gif" height="24px"> </a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button><div class="collapse navbar-collapse" id="navbarSupportedContent"><ul class="navbar-nav mr-auto"><li class="nav-item"> <a class="nav-link" href="/index.html#features">Features</a><li class="nav-item"> <a class="nav-link" href="/docs.html">Docs</a><li class="nav-item"> <a class="nav-link" href="/download.html">Downloads <i class="fas fa-download"></i></a><li class="nav-item"> <a class="nav-link" href="/community.html">Community</a><li class="nav-item"> <a class="nav-link" href="/use-cases.html">Use Cases</a></ul><ul class="navbar-nav ml-auto"><li class="nav-item mr-2"> <a class="nav-link" href="/download.html">v.0.5.0</a><li class="nav-item"> <a class="nav-link fork-link" target="github" href="https://github.com/apache/incubator-nlpcraft">GitHub <img height="20px" src="/images/github_logo_white.png"></a></ul></div></nav><div class="container-fluid"><div class="navbar-aligned"><ol class="breadcrumb"><li class="mr-1"><a href="/index.html">Home</a><li class="mr-1 active">Metrics <span class="amp">&amp;</span> Tracing</ol><h1 class="page-title"> <span><i class="fas fa-fw fa-book"></i> Metrics <span class="amp">&amp;</span> Tracing</span></h1><div class="three-cols-container"><div class="col-md-2 first-column"><ul class="side-nav"><li class="side-nav-title">Introduction<li> <a href="/docs.html">Overview</a><li> <a href="/installation.html">Installation</a><li> <a href="/getting-started.html">Getting Started</a><li class="side-nav-title">Developer Guide<li> <a href="/basic-concepts.html">Basic Concepts</a><li> <a href="/first-example.html">First Example</a><li> <a href="/data-model.html">Data Model</a><li> <a href="/intent-matching.html">Intent Matching</a><li> <a href="/using-rest.html">REST API</a><li> <a href="/server-and-probe.html">Server <span class="amp">&amp;</span> Probe</a><li> <a class="active" href="/metrics-and-tracing.html">Metrics <span class="amp">&amp;</span> Tracing</a><li> <a href="/integrations.html">Integrations</a><li class="side-nav-title">Examples<li> <a href="/examples/alarm_clock.html">Alarm Clock</a><li> <a href="/examples/light_switch.html">Light Switch</a></ul></div><div id="metrics-and-tracing" class="col-md-8 second-column"><section id="overview"><h2 class="section-title">Overview</h2><p> Both REST server and data probe come with <a target=_ href="https://opencensus.io">OpenCensus</a> instrumentation. NLPCraft bundles several built-in exporters for various OpenCensus trace and stats backends:</p><table class="gradient-table checks"><thead><tr><th>Backend<th>Built-In Exporters<th>Stats or Trace?<tbody><tr><td> <a target=_ href="https://www.jaegertracing.io/"> <img alt="" style="width: 48px" src="/images/jaeger-logo-x.png"><div class="exporter-name">Jaeger</div></a><td> Server: <code>org.apache.nlpcraft.server.lifecycle.opencensus.NCJaegerExporter</code><br> Probe: <a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/opencensus/NCJaegerExporter.html">org.apache.nlpcraft.model.opencensus.NCJaegerExporter</a><td><center>Trace</center><tr><td> <a target=_ href="https://zipkin.io/"> <img alt="" style="width: 48px" src="/images/zipkin-logo.jpg"><div class="exporter-name">Zipkin</div></a><td> Server: <code>org.apache.nlpcraft.server.lifecycle.opencensus.NCZipkinExporter</code><br> Probe: <a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/opencensus/NCZipkinExporter.html">org.apache.nlpcraft.model.opencensus.NCZipkinExporter</a><td><center>Trace</center><tr><td> <a target=_ href="https://prometheus.io/"> <img alt="" style="width: 48px" src="/images/prometheus-logo-x.png"><div class="exporter-name">Prometheus</div></a><td> Server: <code>org.apache.nlpcraft.server.lifecycle.opencensus.NCPrometheusExporter</code><br> Probe: <a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/opencensus/NCPrometheusExporter.html">org.apache.nlpcraft.model.opencensus.NCPrometheusExporter</a><td><center>Stats</center><tr><td> <a target=_ href="https://grafana.com/"> <img alt="" style="width: 48px" src="/images/grafana-logo-x.png"><div class="exporter-name">Grafana<sup>*</sup></div></a><td> Server: <code>org.apache.nlpcraft.server.lifecycle.opencensus.NCPrometheusExporter</code><br> Probe: <a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/opencensus/NCPrometheusExporter.html">org.apache.nlpcraft.model.opencensus.NCPrometheusExporter</a><td><center>Stats</center><tr><td> <a target=_ href="https://cloud.google.com/stackdriver/"> <img alt="" style="width: 48px" src="/images/stackdriver-stats-x.png"><div class="exporter-name">Stackdriver</div></a><td> Server: <code>org.apache.nlpcraft.server.lifecycle.opencensus.NCStackdriverStatsExporter</code><br> Probe: <a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/opencensus/NCStackdriverStatsExporter.html">org.apache.nlpcraft.model.opencensus.NCStackdriverStatsExporter</a><td><center>Stats</center><tr><td> <a target=_ href="https://cloud.google.com/stackdriver/"> <img alt="" style="width: 48px" src="/images/stackdriver-trace-x.png"><div class="exporter-name">Stackdriver</div></a><td> Server: <code>org.apache.nlpcraft.server.lifecycle.opencensus.NCStackdriverTraceExporter</code><br> Probe: <a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/opencensus/NCStackdriverTraceExporter.html">org.apache.nlpcraft.model.opencensus.NCStackdriverTraceExporter</a><td><center>Trace</center></table><p> <sup><b>NOTE:</b> (*) Grafana works through Prometheus integration.</sup></p><p> All built-in exporters are a simple adaptation of the standard OpenCensus <a target=_ href="https://opencensus.io/exporters/supported-exporters/java/">exporters</a> to life cycle components for the REST server or the data probe. Each exporter has just a few lines of code and you can easily create your own exporters for other backends.</p></section><section id="server"><h2 class="section-title">Configuring Server</h2><p> OpenCensus exporters for the REST server are lifecycle components. Server lifecycle components are the implementations of <code>NCServerLifecycle</code> trait. Lifecycle components get callbacks for various stages of the server lifecycle and thus can register and unregister "primordial" components such as OpenCensus exporters.</p><p> REST server lifecycle components are specified in <code>nlpcraft.server.lifecycle</code> <a href="server-and-probe.html">configuration</a> property. For example, for file based configuration:</p><pre class="brush: js, highlight: [17, 18]">
nlpcraft {
server {
...
lifecycle = [
"org.apache.nlpcraft.server.lifecycle.opencensus.NCPrometheusExporter",
"org.apache.nlpcraft.server.lifecycle.opencensus.NCJaegerExporter"
]
...
}
}
</pre><p> Note that each server exporter has default configuration that can be overridden via <a href="server-and-probe.html">configuration</a> properties or environment variables. Note also that all built-in <b>trace exporters</b> use "always" sampling by default that is suitable only for demo or development purposes. For production usage you will need to modify the exporter to provide more effective <a target=_ href="https://opencensus.io/tracing/sampling/">sampling strategy</a>.</p></section><section id="probe"><h2 class="section-title">Configuring Probe</h2><p> Just like on the REST server OpenCensus exporters for the data probe are lifecycle components. Probe lifecycle components are the implementations of <a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCProbeLifecycle.html">org.apache.nlpcraft.model.NCLifecycle</a> interface. Lifecycle components get callbacks for various stages of the data probe lifecycle and thus can register and unregister "primordial" components such as OpenCensus exporters. For example, using file based configuration:</p><pre class="brush: js, highlight: [14, 15]">
nlpcraft {
probe {
...
lifecycle = [
"org.apache.nlpcraft.model.opencensus.NCPrometheusExporter",
"org.apache.nlpcraft.model.opencensus.NCJaegerExporter"
]
...
}
}
</pre><p> Just like with server exporters, each probe exporter has default configuration that can be overridden via <a href="server-and-probe.html">configuration</a> properties or environment variables. Note also that all built-in <b>trace exporters</b> use "always" sampling by default that is suitable only for demo or development purposes. For production usage you will need to modify the exporter to provide more effective <a target=_ href="https://opencensus.io/tracing/sampling/">sampling strategy</a>. Please consult individual exporter classes:</p><ul><li><a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/opencensus/NCJaegerExporter.html">NCJaegerExporter</a><li><a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/opencensus/NCZipkinExporter.html">NCZipkinExporter</a><li><a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/opencensus/NCPrometheusExporter.html">NCPrometheusExporter</a><li><a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/opencensus/NCStackdriverStatsExporter.html">NCStackdriverStatsExporter</a><li><a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/opencensus/NCStackdriverTraceExporter.html">NCStackdriverTraceExporter</a></ul></section><section id="traces"><h2 class="section-title">Traces</h2><p> When traces are exporter, there are two service names used for NLPCraft traces that will appear on UI backends:</p><ul><li><code>nlpcraft-server</code> for traces from REST server.<li><code>nlpcraft-probe</code> for traces from data probes.</ul><p> All traces are extensively tagged with various information. Specifically, watch out for <code>srvReqId</code>, <code>modelId</code> and <code>userId</code> tags that will help you navigate across traces pertaining to specific request, models or users.</p></section><section id="metrics"><h2 class="section-title">Metrics</h2><p> When it comes to metrics each exporter has different set of configuration for either a namespace or name prefix on how these metrics will be available on the UI backends:</p><ul><li> <a target=_ href="https://prometheus.io/">Prometheus</a> and <a target=_ href="https://grafana.com">Grafana</a> stats exporters by default use <code>nlpcraft-server</code> and <code>nlpcraft-probe</code> namespaces.<li> <a target=_ href="https://cloud.google.com/stackdriver/">Stackdriver</a> stats exporters use default <code>custom.googleapis.com/nlpcraft/server</code> and <code>custom.googleapis.com/nlpcraft/probe</code> metric name prefixes.</ul><p> <b>NOTE:</b> default namespaces and service prefixes can be changed via <a href="server-and-probe.html">configuration</a> properties or environment variables</p><p> The following metrics are generated by the REST server:</p><table class="gradient-table checks"><thead><tr><th>Name <sub>without prefix or namespace</sub><th>Description<tbody><tr><td> <code>ask_latdist_bucket</code><br> <code>ask_latdist_count</code><br> <code>ask_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/ask</code> REST call</b> latencies.<tr><td> <code>cancel_latdist_bucket</code><br> <code>cancel_latdist_count</code><br> <code>cancel_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/cancel</code> REST call</b> latencies.<tr><td> <code>check_latdist_bucket</code><br> <code>check_latdist_count</code><br> <code>check_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/check</code> REST call</b> latencies.<tr><td> <code>signin_latdist_bucket</code><br> <code>signin_latdist_count</code><br> <code>signin_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/signin</code> REST call</b> latencies.<tr><td> <code>signout_latdist_bucket</code><br> <code>signout_latdist_count</code><br> <code>signout_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/signout</code> REST call</b> latencies.<tr><td> <code>ask_sync_latdist_bucket</code><br> <code>ask_sync_latdist_count</code><br> <code>ask_sync_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/ask/sync</code> REST call</b> latencies.<tr><td> <code>clear_conversation_latdist_bucket</code><br> <code>clear_conversation_latdist_count</code><br> <code>clear_conversation_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/clear/conversation</code> REST call</b> latencies.<tr><td> <code>clear_dialog_latdist_bucket</code><br> <code>clear_dialog_latdist_count</code><br> <code>clear_dialog_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/clear/dialog</code> REST call</b> latencies.<tr><td> <code>company_add_latdist_bucket</code><br> <code>company_add_latdist_count</code><br> <code>company_add_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/company/add</code> REST call</b> latencies.<tr><td> <code>company_update_latdist_bucket</code><br> <code>company_update_latdist_count</code><br> <code>company_update_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/company/update</code> REST call</b> latencies.<tr><td> <code>company_token_latdist_bucket</code><br> <code>company_token_latdist_count</code><br> <code>company_token_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/company/token</code> REST call</b> latencies.<tr><td> <code>company_delete_latdist_bucket</code><br> <code>company_delete_latdist_count</code><br> <code>company_delete_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/company/delete</code> REST call</b> latencies.<tr><td> <code>feedback_add_latdist_bucket</code><br> <code>feedback_add_latdist_count</code><br> <code>feedback_add_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/feedback/add</code> REST call</b> latencies.<tr><td> <code>feedback_delete_latdist_bucket</code><br> <code>feedback_delete_latdist_count</code><br> <code>feedback_delete_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/feedback/delete</code> REST call</b> latencies.<tr><td> <code>feedback_all_latdist_bucket</code><br> <code>feedback_all_latdist_count</code><br> <code>feedback_all_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/feedback/all</code> REST call</b> latencies.<tr><td> <code>user_add_latdist_bucket</code><br> <code>user_add_latdist_count</code><br> <code>user_add_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/user/add</code> REST call</b> latencies.<tr><td> <code>user_delete_latdist_bucket</code><br> <code>user_delete_latdist_count</code><br> <code>user_delete_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/user/delete</code> REST call</b> latencies.<tr><td> <code>user_update_latdist_bucket</code><br> <code>user_update_latdist_count</code><br> <code>user_update_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/user/update</code> REST call</b> latencies.<tr><td> <code>user_admin_latdist_bucket</code><br> <code>user_admin_latdist_count</code><br> <code>user_admin_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/user/admin</code> REST call</b> latencies.<tr><td> <code>user_passwd_latdist_bucket</code><br> <code>user_passwd_latdist_count</code><br> <code>user_passwd_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/user/passwd</code> REST call</b> latencies.<tr><td> <code>user_all_latdist_bucket</code><br> <code>user_all_latdist_count</code><br> <code>user_all_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/user/all</code> REST call</b> latencies.<tr><td> <code>probe_all_latdist_bucket</code><br> <code>probe_all_latdist_count</code><br> <code>probe_all_latdist_sum</code><td>Histogram, count and sum of values for the <b><code>/probe/all</code> REST call</b> latencies.<tr><td> <code>roundtrip_latdist_bucket</code><br> <code>roundtrip_latdist_count</code><br> <code>roundtrip_latdist_sum</code><td>Histogram, count and sum of values for the <b>server-probe-server rountrip</b> latencies.<tr><td> <code>roundtrip_latdist_bucket</code><br> <code>roundtrip_latdist_count</code><br> <code>roundtrip_latdist_sum</code><td>Histogram, count and sum of values for the full server-probe-server round trip latencies.</table><p> The following metrics are generated by the data probe:</p><table class="gradient-table checks"><thead><tr><th>Name <sub>without prefix or namespace</sub><th>Description<tbody><tr><td> <code>sys_task_latdist_bucket</code><br> <code>sys_task_latdist_count</code><br> <code>sys_task_latdist_sum</code><td>Histogram, count and sum of values for the <b>system tasks</b> latencies.<tr><td> <code>user_task_latdist_bucket</code><br> <code>user_task_latdist_count</code><br> <code>user_task_latdist_sum</code><td>Histogram, count and sum of values for the <b>user tasks</b> latencies.</table></section></div><div class="col-md-2 third-column"><ul class="side-nav"><li class="side-nav-title">On This Page<li><a href="#overview">Overview</a><li><a href="#server">Configuring Server</a><li><a href="#probe">Configuring Probe</a><li><a href="#traces">Traces</a><li><a href="#metrics">Metrics</a><li class="side-nav-title">Quick Links<li> <i class="fab fa-fw fa-github mr-2"></i><a target="github" href="https://github.com/apache/incubator-nlpcraft/tree/master/src/main/scala/org/apache/nlpcraft/examples">Examples</a><li> <i class="fab fa-fw fa-java mr-2"></i><a target="_" href="/apis/latest/index.html">Javadoc</a><li> <i class="fas fa-fw fa-code mr-2"></i><a href="https://github.com/apache/incubator-nlpcraft/blob/master/openapi/nlpcraft_swagger.yml" target="github">REST API</a><li> <i class="fas fa-fw fa-download mr-2"></i><a href="/download.html">Download</a><li class="side-nav-title">Support<li> <nobr> <i class="fab fa-fw fa-jira mr-2"></i><a target="jira" href="https://issues.apache.org/jira/projects/NLPCRAFT/issues">JIRA</a> </nobr><li> <nobr> <i class="far fa-fw fa-envelope mr-2"></i><a href="http://mail-archives.apache.org/mod_mbox/nlpcraft-dev/">Dev List</a> </nobr><li> <nobr> <i class="fab fa-fw fa-stack-overflow mr-2"></i><a target="so" href="https://stackoverflow.com/questions/ask">Stack Overflow</a> </nobr><li> <nobr> <i class="fab fa-fw fa-github mr-2"></i><a target="github" href="https://github.com/apache/incubator-nlpcraft">GitHub</a> </nobr></ul></div></div></div></div><div id="footer"><div class="container"><div class="text-muted text-center"> <span>Copyright &copy; 2020 Apache Software Foundation</span> <span> <a target=_new href="https://apache.org"><img alt="asf" src="/images/asf_logo.png" height="24px"></a> </span> <a target="asf" href="http://apache.org/foundation/policies/privacy.html" class="btn btn-link ml-4">Privacy</a> <span class="sep"></span> <a href="/index.html#news" class="btn btn-link">News</a> <span class="sep"></span> <a href="/docs.html" class="btn btn-link">Docs</a> <span class="ml-4">release: <a href="/download.html"><code>0.5.0</code></a></span> <span class="ml-2"> <a target="jenkins" href="https://builds.apache.org/view/Incubator%20Projects/job/incubator-nlpcraft/"><img src="https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fbuilds.apache.org%2Fview%2FIncubator%2520Projects%2Fjob%2Fincubator-nlpcraft%2F"></a> <a target=_ href="https://gitter.im/apache-nlpcraft/community"><img alt="Gitter" src="https://badges.gitter.im/apache-nlpcraft/community.svg"></a> </span></div></div></div><script src="//code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous"></script> <script src="//stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js" type="text/javascript" ></script> <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.min.js" type="text/javascript" ></script> <script src="//cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.5/moment-timezone-with-data.min.js" type="text/javascript" ></script> <script type="text/javascript"> SyntaxHighlighter.defaults["auto-links"] = false; SyntaxHighlighter.defaults["tab-size"] = 2; SyntaxHighlighter.all(); </script>