Source: common/network/tracer.js

/**
 * Submits events to the LuminAR Tracer. Disabled by default: use
 * {@link Lens.Tracer.enable} to turn it on.
 *
 * @name Lens.Tracer
 * @namespace
 */
define(["lib/jquery", "common/util/log", "common/util/id_generator"],
function($,            Log,               IDGenerator ) {

    "use strict";

    var enabled = false;

    var POST_INTERVAL = 1000; // ms
    var POST_URL      = "http://localhost:3000/traces/submit";

    var logger = Log("Tracer");

    // objects with uuid, group, name, time
    var queue = [];

    // posts the queue to the Tracer server
    var postQueue = function() {
        if(!enabled || (queue.length === 0)) { return; }

        $.ajax({
            type: "POST",
            url: POST_URL,
            data: "json=" + encodeURIComponent(JSON.stringify(queue)),
            error: function(xhr, status, error) {
                logger.error("Tracer post failed. status:", status, "error:", error, "xhr:", xhr);
            }
        });

        queue = [];
    };

    var Tracer = /** @lends Lens.Tracer */ {
        /**
         * Posts a tracing event to the LuminAR Tracer.
         * @param  {String} name    Name of the event.
         * @param  {String} [trace] Trace ID to associate the event with. If not
         *                          given, a trace id is randomly generated.
         * @param  {String} [tag]   Tag name, if desired.
         * @param  {String} [group] Group name. Defaults to "Lens"
         *
         * @return {String} The Trace ID of the event.
         */
        post: function(name, trace, tag, group) {
            if(!enabled) { return; }

            if(!group) {
                group = "Lens";
            }

            if(!trace) {
                trace = IDGenerator.traceId();
            }

            var time = Math.round((performance.timing.navigationStart + performance.now()) * 1000);

            var obj = {
                uuid: trace,
                group: group,
                name: name,
                time: time
            };

            if(tag) {
                obj.tag = tag;
            }

            queue.push(obj);

            return trace;
        },

        /**
         * Enables tracing.
         */
        enable: function() {
            enabled = true;
        },

        /**
         * Disables tracing.
         */
        disable: function() {
            enabled = false;
        }
    };


    setInterval(postQueue, POST_INTERVAL);

    Lens.Tracer = Tracer;
    return Tracer;
});