mirror of
https://github.com/mempool/mempool.git
synced 2025-03-15 04:11:48 +01:00
Merge pull request #5689 from mempool/mononaut/fix-monitoring-hash-urls
fix monitoring git hash urls
This commit is contained in:
commit
70036e4a7e
1 changed files with 20 additions and 2 deletions
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue