| <!-- |
| 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">&</span> Tracing</ol><h1 class="page-title"> <span><i class="fas fa-fw fa-book"></i> Metrics <span class="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">&</span> Probe</a><li> <a class="active" href="/metrics-and-tracing.html">Metrics <span class="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 © 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> |