Jump To …
loggly/common.html loggly/config.html loggly/core.html loggly/device.html loggly/facet.html loggly/input.html loggly/search.html loggly.html

# search.js |
--- | ---
¶ |
    /*
     * search.js: chainable search functions for Loggly
     *
     * (C) 2010 Nodejitsu Inc.
     * MIT LICENSE
     *
     */

    var qs = require('querystring'),
        timespan = require('timespan'),
        common = require('./common');
¶ function Search (query, client, callback) Chainable search object for Loggly API |
    var Search = exports.Search = function (query, client, callback) {
      this.query = query;
      this.client = client;

      if (!this.baseUrl) {
        this.baseUrl = 'search?';
      }
¶ If we're passed a callback, run immediately. |
      if (callback) {
        this.callback = callback;
        this.run();
      }
    };
¶ function meta (meta) Sets the appropriate metadata for this search query: e.g. ip, inputname |
    Search.prototype.meta = function (meta) {
      this._meta = meta;
      return this;
    };
¶ function context (context) Sets the appropriate context for this search query: e.g. rows, start, from, until, order, format, fields |
    Search.prototype.context = function (context) {
      this._context = context;
      return this;
    };
¶ ### function run (callback) #### @callback {function} Continuation to respond to when complete Runs the search query for for this instance with the query, metadata, context, and other parameters that have been configured on it. |
    Search.prototype.run = function (callback) {
      var rangeError;
¶ Trim the search query |
      this.query.trim();
¶ Update the callback for this instance if it's passed |
      this.callback = callback || this.callback;
      if (!this.callback) {
        throw new Error('Cannot run search without a callback function.');
      }
¶ If meta was passed, update the search query appropriately |
      if (this._meta) {
        this.query += ' ' + qs.unescape(qs.stringify(this._meta, ' ', ':'));
      }
¶ Set the context for the query string |
      this._context = this._context || {};
      this._context.q = this.query;
      this._checkRange();

      var self = this, searchOptions = {
        uri: this.client.logglyUrl(this.baseUrl + qs.stringify(this._context)),
        auth: this.client.config.auth
      };

      common.loggly(searchOptions, this.callback, function (res, body) {
        self.callback(null, JSON.parse(body));
      });

      return this;
    };
¶ ### function _checkRange () Checks if the range that has been configured for this instance is valid and updates if it is not. |
    Search.prototype._checkRange = function () {
      if (!this._context || (!this._context.until && !this._context.from)) {
        return;
      }

      this._context.until = this._context.until || 'NOW';
      this._context.from  = this._context.from  || 'NOW-24HOURS';

      if (!timespan.parseDate(this._context.until)) {
        this._context.until = 'NOW';
      }

      if (!timespan.parseDate(this._context.from)) {
        this._context.from = 'NOW-24HOURS';
      }

      if (timespan.fromDates(this._context.from, this._context.until) < 0
        || this._context.until === this._context.from) {
¶ If the length of the timespan for this Search instance is negative then set it to default values |
        this._context.until = 'NOW';
        this._context.from = 'NOW-24HOURS';
      }

      return this;
    };