systemquery/src/lib/agent/Agent.mjs

63 lines
1.6 KiB
JavaScript
Raw Normal View History

"use strict";
import fs from 'fs';
import os from 'os';
2022-01-08 21:37:03 +00:00
import log from 'log'; const l = log.get("agent");
2022-01-08 21:37:03 +00:00
import settings from '../../settings.mjs';
import PeerServer from './PeerServer.mjs';
import parse_peer_name from '../parse/peer_name.mjs';
2022-01-08 21:55:18 +00:00
import hostuuid from '../io/hostuuid.mjs';
class Agent {
constructor(config) {
this.config = config;
}
async find_secret() {
if(this.config.secret_join_filepath !== "CHANGE_ME"
&& fs.existsSync(this.config.secret_join_filepath))
2022-01-08 21:37:03 +00:00
return await fs.promises.readFile(
path.resolve(
path.dirname(settings.cli.config),
this.config.secret_join_filepath
),
"utf-8");
if(this.config.secret_join !== "CHANGE_ME")
return this.config.secret_join;
return null;
}
async init() {
/** Our peer id - calculated automatically from the system's uuid */
2022-01-08 21:55:18 +00:00
this.peer_id = await hostuuid();
this.peer_name = os.hostname();
this.server = new PeerServer(
this.peer_id,
await this.find_secret()
);
this.server.retries = this.config.net.peer_retries;
2022-01-08 21:55:18 +00:00
l.notice(`Starting peer listener....`);
await this.server.listen(
this.config.net.port,
this.config.net.bind_address
);
2022-01-08 21:55:18 +00:00
l.notice(`Listening on ${this.config.net.bind_address}:${this.config.net.port}`);
await this.server.add_peers(...this.config.peers.map(
peer => parse_peer_name(peer)
));
2022-01-08 21:55:18 +00:00
l.notice(`Added ${this.config.peers.length} initial peers`);
if(this.config.peers.length < 1)
l.warn(`No initial peers were specified! It's recommended that you specify at least 1 on every host.`);
}
}
export default Agent;