84 lines
1.7 KiB
JavaScript
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
|