Files
elasticsearch-js/lib/Connection.js
2018-10-18 17:27:31 +02:00

84 lines
1.7 KiB
JavaScript

'use strict'
const assert = require('assert')
const debug = require('debug')('elasticsearch')
const { resolve } = require('url')
const makeRequest = require('simple-get')
class Connection {
constructor (opts = {}) {
assert(opts.url, 'Missing url')
this.url = opts.url
this.id = opts.id || opts.url
this.deadCount = 0
this.resurrectTimeout = 0
this._status = opts.status || Connection.statuses.ALIVE
this.roles = opts.roles || defaultRoles
}
request (params, callback) {
params.url = resolve(this.url, params.path)
debug('Starting a new request', params)
return makeRequest(params, callback)
}
close () {
debug('Closing connection')
}
setRole (role, enabled) {
assert(
~validRoles.indexOf(role),
`Unsupported role: '${role}'`
)
assert(
typeof enabled === 'boolean',
'enabled should be a boolean'
)
this.roles[role] = enabled
return this
}
get status () {
return this._status
}
set status (status) {
assert(
~validStatuses.indexOf(status),
`Unsupported status: '${status}'`
)
this._status = status
}
}
Connection.statuses = {
ALIVE: 'alive',
DEAD: 'dead'
}
Connection.roles = {
MASTER: 'master',
DATA: 'data',
INGEST: 'ingest',
COORDINATING: 'coordinating',
MACHINE_LEARNING: 'machine_learning'
}
const defaultRoles = {
[Connection.roles.MASTER]: true,
[Connection.roles.DATA]: true,
[Connection.roles.INGEST]: true,
[Connection.roles.COORDINATING]: true,
[Connection.roles.MACHINE_LEARNING]: true
}
const validStatuses = Object.keys(Connection.statuses)
.map(k => Connection.statuses[k])
const validRoles = Object.keys(Connection.roles)
.map(k => Connection.roles[k])
module.exports = Connection