taskrabbit/elasticsearch-dump

View on GitHub
lib/transports/__es__/_alias.js

Summary

Maintainability
B
6 hrs
Test Coverage
const jsonParser = require('../../jsonparser.js')
const aws4signer = require('../../aws4signer')
const async = require('async')
const _ = require('lodash')

class Alias {
  getAliases (limit, offset, callback) {
    if (this.gotAliases === true) {
      callback(null, [])
    } else {
      const esRequest = {
        url: `${this.base.host}/${this.base.index}/_alias/${this.base.type || '*'}`,
        method: 'GET'
      }
      aws4signer(esRequest, this.parent).then(() => {
        this.baseRequest(esRequest, (err, response) => {
          this.gotAliases = true
          const payload = []
          err = this.handleError(err, response)
          if (err) {
            return callback(err, [])
          }
          payload.push(response.body)
          callback(err, payload)
        })
      }).catch(callback)
    }
  }

  setAliases (data, limit, offset, callback) {
    if (this.haveSetAliases === true || data.length === 0) {
      return callback(null, 0)
    }

    try {
      data = jsonParser.parse(data[0])
    } catch (e) {
      return callback(e)
    }

    const payload = {
      actions: []
    }

    let writes = 0

    async.forEachOf(data, async.ensureAsync((_data, index, cb) => {
      if (!_.has(_data, 'aliases') || _.isEmpty(_data.aliases)) {
        return cb(new Error('no aliases detected'))
      }

      async.forEachOf(_data.aliases, async.ensureAsync((aliasOptions, alias, acb) => {
        payload.actions.push({ add: Object.assign({ index, alias }, aliasOptions) })
        writes++
        return acb()
      }), () => {
        return cb()
      })
    }), err => {
      if (err) { return callback(err) }
      this.haveSetAliases = true

      const esRequest = {
        url: `${this.base.host}/_aliases`,
        method: 'POST',
        body: jsonParser.stringify(payload)
      }
      aws4signer(esRequest, this.parent).then(() => {
        this.baseRequest(esRequest, (err, response) => {
          err = this.handleError(err, response)
          if (err) {
            return callback(err)
          }
          return callback(null, writes)
        })
      }).catch(callback)
    })
  }
}

module.exports = Alias