Merge pull request #5689 from mempool/mononaut/fix-monitoring-hash-urls

fix monitoring git hash urls
This commit is contained in:
wiz 2024-12-14 15:15:50 +09:00 committed by GitHub
commit 70036e4a7e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -20,6 +20,7 @@ interface FailoverHost {
preferred?: boolean, preferred?: boolean,
checked: boolean, checked: boolean,
lastChecked?: number, lastChecked?: number,
publicDomain: string,
hashes: { hashes: {
frontend?: string, frontend?: string,
backend?: string, backend?: string,
@ -58,6 +59,7 @@ class FailoverRouter {
rtts: [], rtts: [],
rtt: Infinity, rtt: Infinity,
failures: 0, failures: 0,
publicDomain: 'https://' + this.extractPublicDomain(domain),
hashes: { hashes: {
lastUpdated: 0, lastUpdated: 0,
}, },
@ -71,6 +73,7 @@ class FailoverRouter {
socket: !!config.ESPLORA.UNIX_SOCKET_PATH, socket: !!config.ESPLORA.UNIX_SOCKET_PATH,
preferred: true, preferred: true,
checked: false, checked: false,
publicDomain: `http://${this.localHostname}`,
hashes: { hashes: {
lastUpdated: 0, lastUpdated: 0,
}, },
@ -242,7 +245,7 @@ class FailoverRouter {
// methods for retrieving git hashes by host // methods for retrieving git hashes by host
private async $updateFrontendGitHash(host: FailoverHost): Promise<void> { private async $updateFrontendGitHash(host: FailoverHost): Promise<void> {
try { try {
const url = host.socket ? `http://${this.localHostname}/resources/config.js` : `${host.host.slice(0, -4)}/resources/config.js`; const url = `${host.publicDomain}/resources/config.js`;
const response = await this.pollConnection.get<string>(url, { timeout: config.ESPLORA.FALLBACK_TIMEOUT }); const response = await this.pollConnection.get<string>(url, { timeout: config.ESPLORA.FALLBACK_TIMEOUT });
const match = response.data.match(/GIT_COMMIT_HASH\s*=\s*['"](.*?)['"]/); const match = response.data.match(/GIT_COMMIT_HASH\s*=\s*['"](.*?)['"]/);
if (match && match[1]?.length) { if (match && match[1]?.length) {
@ -255,7 +258,7 @@ class FailoverRouter {
private async $updateBackendGitHash(host: FailoverHost): Promise<void> { private async $updateBackendGitHash(host: FailoverHost): Promise<void> {
try { try {
const url = host.socket ? `http://${this.localHostname}/api/v1/backend-info` : `${host.host}/v1/backend-info`; const url = `${host.publicDomain}/api/v1/backend-info`;
const response = await this.pollConnection.get<any>(url, { timeout: config.ESPLORA.FALLBACK_TIMEOUT }); const response = await this.pollConnection.get<any>(url, { timeout: config.ESPLORA.FALLBACK_TIMEOUT });
if (response.data?.gitCommit) { if (response.data?.gitCommit) {
host.hashes.backend = response.data.gitCommit; host.hashes.backend = response.data.gitCommit;
@ -265,6 +268,21 @@ class FailoverRouter {
} }
} }
// returns the public mempool domain corresponding to an esplora server url
// (a bit of a hack to avoid manually specifying frontend & backend URLs for each esplora server)
private extractPublicDomain(url: string): string {
// force the url to start with a valid protocol
const urlWithProtocol = url.startsWith('http') ? url : `https://${url}`;
// parse as URL and extract the hostname
try {
const parsed = new URL(urlWithProtocol);
return parsed.hostname;
} catch (e) {
// fallback to the original url
return url;
}
}
private async $query<T>(method: 'get'| 'post', path, data: any, responseType = 'json', host = this.activeHost, retry: boolean = true): Promise<T> { private async $query<T>(method: 'get'| 'post', path, data: any, responseType = 'json', host = this.activeHost, retry: boolean = true): Promise<T> {
let axiosConfig; let axiosConfig;
let url; let url;