@linkedmink/node-route53-dynamic-dns
Version:
Background process that updates AWS Route 53 DNS address records whenever the public IP of the hosting environment changes
43 lines • 1.81 kB
JavaScript
import http from "node:http";
import { loggerForModuleUrl } from "../environment/logger.mjs";
export class HealthCheckServer {
logger = loggerForModuleUrl(import.meta.url);
startDateTime = new Date();
publicIpAddresses = null;
lastPublicIpDateTime = null;
lastUpdateDateTime = null;
dnsRecords = null;
start = async (port, hostname) => {
this.startDateTime = new Date();
this.logger.verbose(`Health check server starting: port=${port}, host=${hostname}`);
const server = http.createServer(this.handleHttpRequest);
await new Promise((resolve, _reject) => {
server.listen(port, hostname, resolve);
});
this.logger.info(`Health check server listening: ${port}, host=${hostname}`);
return server;
};
handleRecordsRetrievedEvent = (event) => {
this.dnsRecords = event.dnsRecords;
};
handleRecordsUpdatedEvent = (event) => {
this.dnsRecords = event.dnsRecords;
this.lastUpdateDateTime = event.lastChangeDateTime;
};
handlePublicIpEvent = (event) => {
this.publicIpAddresses = event.publicIpAddresses;
this.lastPublicIpDateTime = event.lastPublicIpDateTime;
};
handleHttpRequest = (req, res) => {
this.logger.http(`Handling health check from: ${req.socket.remoteAddress}`);
const responseData = {
publicIpAddresses: this.publicIpAddresses,
lastUpdateDateTime: this.lastUpdateDateTime?.toISOString() || null,
lastPublicIpDateTime: this.lastPublicIpDateTime?.toISOString() || null,
dnsRecords: this.dnsRecords,
uptimeMs: Date.now() - this.startDateTime.getTime(),
};
res.end(JSON.stringify(responseData));
};
}
//# sourceMappingURL=health-check-server.mjs.map