UNPKG

@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
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