Refactor error logging to use getErrorMessage utility
- Updated multiple classes to replace direct error message access with getErrorMessage function for improved error handling and consistency. - Modified error logging in CertRequirementManager, CloudflareDomainSync, OneboxDnsManager, OneboxDockerManager, OneboxHttpServer, Onebox, OneboxRegistriesManager, and OneboxServicesManager. - Ensured that all error messages logged provide a standardized format and improved clarity.
This commit is contained in:
2
license
2
license
@@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2025 Lossless GmbH
|
Copyright (c) 2025 Task Venture Capital GmbH
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
import * as plugins from '../plugins.ts';
|
import * as plugins from '../plugins.ts';
|
||||||
import { logger } from '../logging.ts';
|
import { logger } from '../logging.ts';
|
||||||
|
import { getErrorMessage } from '../utils/error.ts';
|
||||||
import { OneboxDatabase } from './database.ts';
|
import { OneboxDatabase } from './database.ts';
|
||||||
import { OneboxSslManager } from './ssl.ts';
|
import { OneboxSslManager } from './ssl.ts';
|
||||||
import type { ICertRequirement, ICertificate, IDomain } from '../types.ts';
|
import type { ICertRequirement, ICertificate, IDomain } from '../types.ts';
|
||||||
@@ -42,12 +43,12 @@ export class CertRequirementManager {
|
|||||||
await this.processRequirement(requirement);
|
await this.processRequirement(requirement);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(
|
logger.error(
|
||||||
`Failed to process requirement ${requirement.id}: ${error.message}`
|
`Failed to process requirement ${requirement.id}: ${getErrorMessage(error)}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to process pending requirements: ${error.message}`);
|
logger.error(`Failed to process pending requirements: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,7 +170,7 @@ export class CertRequirementManager {
|
|||||||
|
|
||||||
logger.success(`Certificate acquired for ${fullDomain}`);
|
logger.success(`Certificate acquired for ${fullDomain}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to acquire certificate for ${fullDomain}: ${error.message}`);
|
logger.error(`Failed to acquire certificate for ${fullDomain}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -203,7 +204,7 @@ export class CertRequirementManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to check certificate renewal: ${error.message}`);
|
logger.error(`Failed to check certificate renewal: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,7 +253,7 @@ export class CertRequirementManager {
|
|||||||
|
|
||||||
logger.success(`Certificate renewed for ${cert.certDomain}`);
|
logger.success(`Certificate renewed for ${cert.certDomain}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to renew certificate for ${cert.certDomain}: ${error.message}`);
|
logger.error(`Failed to renew certificate for ${cert.certDomain}: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,7 +279,7 @@ export class CertRequirementManager {
|
|||||||
await Deno.remove(cert.fullChainPath);
|
await Deno.remove(cert.fullChainPath);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.debug(
|
logger.debug(
|
||||||
`Failed to delete certificate files for ${cert.certDomain}: ${error.message}`
|
`Failed to delete certificate files for ${cert.certDomain}: ${getErrorMessage(error)}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -298,7 +299,7 @@ export class CertRequirementManager {
|
|||||||
logger.info(`Cleaned up ${deletedCount} old certificate(s)`);
|
logger.info(`Cleaned up ${deletedCount} old certificate(s)`);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to cleanup old certificates: ${error.message}`);
|
logger.error(`Failed to cleanup old certificates: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
import * as plugins from '../plugins.ts';
|
import * as plugins from '../plugins.ts';
|
||||||
import { logger } from '../logging.ts';
|
import { logger } from '../logging.ts';
|
||||||
|
import { getErrorMessage } from '../utils/error.ts';
|
||||||
import { OneboxDatabase } from './database.ts';
|
import { OneboxDatabase } from './database.ts';
|
||||||
import type { IDomain } from '../types.ts';
|
import type { IDomain } from '../types.ts';
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ export class CloudflareDomainSync {
|
|||||||
this.cloudflareAccount = new plugins.cloudflare.CloudflareAccount(apiKey);
|
this.cloudflareAccount = new plugins.cloudflare.CloudflareAccount(apiKey);
|
||||||
logger.info('Cloudflare domain sync initialized');
|
logger.info('Cloudflare domain sync initialized');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to initialize Cloudflare sync: ${error.message}`);
|
logger.error(`Failed to initialize Cloudflare sync: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -98,7 +99,7 @@ export class CloudflareDomainSync {
|
|||||||
logger.info(`Added new domain from Cloudflare: ${domain}`);
|
logger.info(`Added new domain from Cloudflare: ${domain}`);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to sync zone ${zone.name}: ${error.message}`);
|
logger.error(`Failed to sync zone ${zone.name}: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,7 +108,7 @@ export class CloudflareDomainSync {
|
|||||||
|
|
||||||
logger.success(`Cloudflare zone sync completed: ${zones.length} zone(s) synced`);
|
logger.success(`Cloudflare zone sync completed: ${zones.length} zone(s) synced`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Cloudflare zone sync failed: ${error.message}`);
|
logger.error(`Cloudflare zone sync failed: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -138,7 +139,7 @@ export class CloudflareDomainSync {
|
|||||||
logger.info(`Marked ${obsoleteCount} domain(s) as obsolete`);
|
logger.info(`Marked ${obsoleteCount} domain(s) as obsolete`);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to mark obsolete domains: ${error.message}`);
|
logger.error(`Failed to mark obsolete domains: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
import Cloudflare from 'npm:cloudflare@5.2.0';
|
import Cloudflare from 'npm:cloudflare@5.2.0';
|
||||||
import { logger } from '../logging.ts';
|
import { logger } from '../logging.ts';
|
||||||
|
import { getErrorMessage } from '../utils/error.ts';
|
||||||
import { OneboxDatabase } from './database.ts';
|
import { OneboxDatabase } from './database.ts';
|
||||||
|
|
||||||
export class OneboxDnsManager {
|
export class OneboxDnsManager {
|
||||||
@@ -64,8 +65,9 @@ export class OneboxDnsManager {
|
|||||||
}
|
}
|
||||||
logger.success('DNS manager initialized with multi-zone support');
|
logger.success('DNS manager initialized with multi-zone support');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to initialize DNS manager: ${error.message}`);
|
logger.error(`Failed to initialize DNS manager: ${getErrorMessage(error)}`);
|
||||||
if (error.message && error.message.includes('Authorization header')) {
|
const errMsg = getErrorMessage(error);
|
||||||
|
if (errMsg && errMsg.includes('Authorization header')) {
|
||||||
logger.error('The provided API key appears to be invalid.');
|
logger.error('The provided API key appears to be invalid.');
|
||||||
logger.error('Make sure you are using a Cloudflare API TOKEN (not the global API key).');
|
logger.error('Make sure you are using a Cloudflare API TOKEN (not the global API key).');
|
||||||
logger.info('Create an API Token at: https://dash.cloudflare.com/profile/api-tokens');
|
logger.info('Create an API Token at: https://dash.cloudflare.com/profile/api-tokens');
|
||||||
@@ -153,7 +155,7 @@ export class OneboxDnsManager {
|
|||||||
|
|
||||||
logger.success(`DNS record created for ${domain} → ${targetIP}`);
|
logger.success(`DNS record created for ${domain} → ${targetIP}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to add DNS record for ${domain}: ${error.message}`);
|
logger.error(`Failed to add DNS record for ${domain}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -194,7 +196,7 @@ export class OneboxDnsManager {
|
|||||||
|
|
||||||
logger.success(`DNS record removed for ${domain}`);
|
logger.success(`DNS record removed for ${domain}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to remove DNS record for ${domain}: ${error.message}`);
|
logger.error(`Failed to remove DNS record for ${domain}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -224,7 +226,7 @@ export class OneboxDnsManager {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get DNS record for ${domain}: ${error.message}`);
|
logger.error(`Failed to get DNS record for ${domain}: ${getErrorMessage(error)}`);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -247,7 +249,7 @@ export class OneboxDnsManager {
|
|||||||
updatedAt: Number(row.updated_at || row[7]),
|
updatedAt: Number(row.updated_at || row[7]),
|
||||||
}));
|
}));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to list DNS records: ${error.message}`);
|
logger.error(`Failed to list DNS records: ${getErrorMessage(error)}`);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -295,7 +297,7 @@ export class OneboxDnsManager {
|
|||||||
|
|
||||||
logger.success('DNS records synced from Cloudflare');
|
logger.success('DNS records synced from Cloudflare');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to sync DNS records: ${error.message}`);
|
logger.error(`Failed to sync DNS records: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -331,7 +333,7 @@ export class OneboxDnsManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to check DNS for ${domain}: ${error.message}`);
|
logger.error(`Failed to check DNS for ${domain}: ${getErrorMessage(error)}`);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
import * as plugins from '../plugins.ts';
|
import * as plugins from '../plugins.ts';
|
||||||
import type { IService, IContainerStats } from '../types.ts';
|
import type { IService, IContainerStats } from '../types.ts';
|
||||||
import { logger } from '../logging.ts';
|
import { logger } from '../logging.ts';
|
||||||
|
import { getErrorMessage } from '../utils/error.ts';
|
||||||
|
|
||||||
export class OneboxDockerManager {
|
export class OneboxDockerManager {
|
||||||
private dockerClient: plugins.docker.Docker | null = null;
|
private dockerClient: plugins.docker.Docker | null = null;
|
||||||
@@ -30,7 +31,7 @@ export class OneboxDockerManager {
|
|||||||
// Ensure onebox network exists
|
// Ensure onebox network exists
|
||||||
await this.ensureNetwork();
|
await this.ensureNetwork();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to initialize Docker client: ${error.message}`);
|
logger.error(`Failed to initialize Docker client: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -68,7 +69,7 @@ export class OneboxDockerManager {
|
|||||||
logger.debug(`Docker network already exists: ${this.networkName}`);
|
logger.debug(`Docker network already exists: ${this.networkName}`);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to create Docker network: ${error.message}`);
|
logger.error(`Failed to create Docker network: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -102,7 +103,7 @@ export class OneboxDockerManager {
|
|||||||
return await this.createStandaloneContainer(service);
|
return await this.createStandaloneContainer(service);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to create container for ${service.name}: ${error.message}`);
|
logger.error(`Failed to create container for ${service.name}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -257,11 +258,11 @@ export class OneboxDockerManager {
|
|||||||
logger.success(`Container started: ${containerID}`);
|
logger.success(`Container started: ${containerID}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Ignore "already started" errors (304 status)
|
// Ignore "already started" errors (304 status)
|
||||||
if (error.message.includes('304')) {
|
if (getErrorMessage(error).includes('304')) {
|
||||||
logger.debug(`Container already running: ${containerID}`);
|
logger.debug(`Container already running: ${containerID}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
logger.error(`Failed to start container ${containerID}: ${error.message}`);
|
logger.error(`Failed to start container ${containerID}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -331,11 +332,11 @@ export class OneboxDockerManager {
|
|||||||
logger.success(`Container stopped: ${containerID}`);
|
logger.success(`Container stopped: ${containerID}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Ignore "already stopped" errors (304 status)
|
// Ignore "already stopped" errors (304 status)
|
||||||
if (error.message.includes('304')) {
|
if (getErrorMessage(error).includes('304')) {
|
||||||
logger.debug(`Container already stopped: ${containerID}`);
|
logger.debug(`Container already stopped: ${containerID}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
logger.error(`Failed to stop container ${containerID}: ${error.message}`);
|
logger.error(`Failed to stop container ${containerID}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -392,7 +393,7 @@ export class OneboxDockerManager {
|
|||||||
|
|
||||||
logger.success(`Container restarted: ${containerID}`);
|
logger.success(`Container restarted: ${containerID}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to restart container ${containerID}: ${error.message}`);
|
logger.error(`Failed to restart container ${containerID}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -446,7 +447,7 @@ export class OneboxDockerManager {
|
|||||||
await this.stopContainer(containerID);
|
await this.stopContainer(containerID);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Ignore stop errors
|
// Ignore stop errors
|
||||||
logger.debug(`Error stopping container before removal: ${error.message}`);
|
logger.debug(`Error stopping container before removal: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,7 +460,7 @@ export class OneboxDockerManager {
|
|||||||
|
|
||||||
logger.success(`Container removed: ${containerID}`);
|
logger.success(`Container removed: ${containerID}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to remove container ${containerID}: ${error.message}`);
|
logger.error(`Failed to remove container ${containerID}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -497,7 +498,7 @@ export class OneboxDockerManager {
|
|||||||
|
|
||||||
return response.body.State?.Status || 'unknown';
|
return response.body.State?.Status || 'unknown';
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get container status ${containerID}: ${error.message}`);
|
logger.error(`Failed to get container status ${containerID}: ${getErrorMessage(error)}`);
|
||||||
return 'unknown';
|
return 'unknown';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -566,7 +567,7 @@ export class OneboxDockerManager {
|
|||||||
return 'unknown';
|
return 'unknown';
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get service status ${serviceID}: ${error.message}`);
|
logger.error(`Failed to get service status ${serviceID}: ${getErrorMessage(error)}`);
|
||||||
return 'unknown';
|
return 'unknown';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -624,8 +625,9 @@ export class OneboxDockerManager {
|
|||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Don't log errors for container not found - this is expected for Swarm services
|
// Don't log errors for container not found - this is expected for Swarm services
|
||||||
if (!error.message.includes('No such container') && !error.message.includes('not found')) {
|
const errMsg = getErrorMessage(error);
|
||||||
logger.error(`Failed to get container stats ${containerID}: ${error.message}`);
|
if (!errMsg.includes('No such container') && !errMsg.includes('not found')) {
|
||||||
|
logger.error(`Failed to get container stats ${containerID}: ${errMsg}`);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -653,7 +655,7 @@ export class OneboxDockerManager {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Failed to get container ID for service ${serviceId}: ${error.message}`);
|
logger.warn(`Failed to get container ID for service ${serviceId}: ${getErrorMessage(error)}`);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -707,7 +709,7 @@ export class OneboxDockerManager {
|
|||||||
stderr: '', // v5 combines stdout/stderr into single string
|
stderr: '', // v5 combines stdout/stderr into single string
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get container logs ${containerID}: ${error.message}`);
|
logger.error(`Failed to get container logs ${containerID}: ${getErrorMessage(error)}`);
|
||||||
return { stdout: '', stderr: '' };
|
return { stdout: '', stderr: '' };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -723,7 +725,7 @@ export class OneboxDockerManager {
|
|||||||
c.Labels && c.Labels['managed-by'] === 'onebox'
|
c.Labels && c.Labels['managed-by'] === 'onebox'
|
||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to list containers: ${error.message}`);
|
logger.error(`Failed to list containers: ${getErrorMessage(error)}`);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -763,7 +765,7 @@ export class OneboxDockerManager {
|
|||||||
await this.dockerClient!.pruneImages();
|
await this.dockerClient!.pruneImages();
|
||||||
logger.success('Unused images pruned successfully');
|
logger.success('Unused images pruned successfully');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to prune images: ${error.message}`);
|
logger.error(`Failed to prune images: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -788,7 +790,7 @@ export class OneboxDockerManager {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get container IP ${containerID}: ${error.message}`);
|
logger.error(`Failed to get container IP ${containerID}: ${getErrorMessage(error)}`);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -837,7 +839,7 @@ export class OneboxDockerManager {
|
|||||||
|
|
||||||
return { stdout, stderr, exitCode };
|
return { stdout, stderr, exitCode };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to exec in container ${containerID}: ${error.message}`);
|
logger.error(`Failed to exec in container ${containerID}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -922,7 +924,7 @@ export class OneboxDockerManager {
|
|||||||
logger.success(`Platform container ${options.name} started successfully`);
|
logger.success(`Platform container ${options.name} started successfully`);
|
||||||
return containerID;
|
return containerID;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to create platform container ${options.name}: ${error.message}`);
|
logger.error(`Failed to create platform container ${options.name}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
import * as plugins from '../plugins.ts';
|
import * as plugins from '../plugins.ts';
|
||||||
import { logger } from '../logging.ts';
|
import { logger } from '../logging.ts';
|
||||||
|
import { getErrorMessage } from '../utils/error.ts';
|
||||||
import type { Onebox } from './onebox.ts';
|
import type { Onebox } from './onebox.ts';
|
||||||
import type { IApiResponse, ICreateRegistryTokenRequest, IRegistryTokenView } from '../types.ts';
|
import type { IApiResponse, ICreateRegistryTokenRequest, IRegistryTokenView } from '../types.ts';
|
||||||
|
|
||||||
@@ -37,7 +38,7 @@ export class OneboxHttpServer {
|
|||||||
|
|
||||||
logger.success(`HTTP server started on http://localhost:${this.port}`);
|
logger.success(`HTTP server started on http://localhost:${this.port}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to start HTTP server: ${error.message}`);
|
logger.error(`Failed to start HTTP server: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -56,7 +57,7 @@ export class OneboxHttpServer {
|
|||||||
this.server = null;
|
this.server = null;
|
||||||
logger.success('HTTP server stopped');
|
logger.success('HTTP server stopped');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to stop HTTP server: ${error.message}`);
|
logger.error(`Failed to stop HTTP server: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -95,8 +96,8 @@ export class OneboxHttpServer {
|
|||||||
// Serve Angular UI
|
// Serve Angular UI
|
||||||
return await this.serveStaticFile(path);
|
return await this.serveStaticFile(path);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Request error: ${error.message}`);
|
logger.error(`Request error: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -339,7 +340,7 @@ export class OneboxHttpServer {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Login error: ${error.message}`);
|
logger.error(`Login error: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: 'Login failed' }, 500);
|
return this.jsonResponse({ success: false, error: 'Login failed' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -349,8 +350,8 @@ export class OneboxHttpServer {
|
|||||||
const status = await this.oneboxRef.getSystemStatus();
|
const status = await this.oneboxRef.getSystemStatus();
|
||||||
return this.jsonResponse({ success: true, data: status });
|
return this.jsonResponse({ success: true, data: status });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get system status: ${error.message}`);
|
logger.error(`Failed to get system status: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to get system status' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to get system status' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -359,8 +360,8 @@ export class OneboxHttpServer {
|
|||||||
const services = this.oneboxRef.services.listServices();
|
const services = this.oneboxRef.services.listServices();
|
||||||
return this.jsonResponse({ success: true, data: services });
|
return this.jsonResponse({ success: true, data: services });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to list services: ${error.message}`);
|
logger.error(`Failed to list services: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to list services' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to list services' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -374,8 +375,8 @@ export class OneboxHttpServer {
|
|||||||
|
|
||||||
return this.jsonResponse({ success: true, data: service });
|
return this.jsonResponse({ success: true, data: service });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to deploy service: ${error.message}`);
|
logger.error(`Failed to deploy service: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to deploy service' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to deploy service' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -387,8 +388,8 @@ export class OneboxHttpServer {
|
|||||||
}
|
}
|
||||||
return this.jsonResponse({ success: true, data: service });
|
return this.jsonResponse({ success: true, data: service });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get service ${name}: ${error.message}`);
|
logger.error(`Failed to get service ${name}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to get service' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to get service' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -417,8 +418,8 @@ export class OneboxHttpServer {
|
|||||||
|
|
||||||
return this.jsonResponse({ success: true, data: service });
|
return this.jsonResponse({ success: true, data: service });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to update service ${name}: ${error.message}`);
|
logger.error(`Failed to update service ${name}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to update service' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to update service' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -431,8 +432,8 @@ export class OneboxHttpServer {
|
|||||||
|
|
||||||
return this.jsonResponse({ success: true, message: 'Service removed' });
|
return this.jsonResponse({ success: true, message: 'Service removed' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to delete service ${name}: ${error.message}`);
|
logger.error(`Failed to delete service ${name}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to delete service' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to delete service' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -445,8 +446,8 @@ export class OneboxHttpServer {
|
|||||||
|
|
||||||
return this.jsonResponse({ success: true, message: 'Service started' });
|
return this.jsonResponse({ success: true, message: 'Service started' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to start service ${name}: ${error.message}`);
|
logger.error(`Failed to start service ${name}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to start service' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to start service' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,8 +460,8 @@ export class OneboxHttpServer {
|
|||||||
|
|
||||||
return this.jsonResponse({ success: true, message: 'Service stopped' });
|
return this.jsonResponse({ success: true, message: 'Service stopped' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to stop service ${name}: ${error.message}`);
|
logger.error(`Failed to stop service ${name}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to stop service' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to stop service' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -473,8 +474,8 @@ export class OneboxHttpServer {
|
|||||||
|
|
||||||
return this.jsonResponse({ success: true, message: 'Service restarted' });
|
return this.jsonResponse({ success: true, message: 'Service restarted' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to restart service ${name}: ${error.message}`);
|
logger.error(`Failed to restart service ${name}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to restart service' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to restart service' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -485,8 +486,8 @@ export class OneboxHttpServer {
|
|||||||
logger.log(`handleGetLogsRequest: logs value = ${String(logs).slice(0, 100)}`);
|
logger.log(`handleGetLogsRequest: logs value = ${String(logs).slice(0, 100)}`);
|
||||||
return this.jsonResponse({ success: true, data: logs });
|
return this.jsonResponse({ success: true, data: logs });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get logs for service ${name}: ${error.message}`);
|
logger.error(`Failed to get logs for service ${name}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to get logs' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to get logs' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -540,7 +541,7 @@ export class OneboxHttpServer {
|
|||||||
message: 'Settings updated successfully'
|
message: 'Settings updated successfully'
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to update settings: ${error.message}`);
|
logger.error(`Failed to update settings: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: 'Failed to update settings' }, 500);
|
return this.jsonResponse({ success: false, error: 'Failed to update settings' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -564,8 +565,8 @@ export class OneboxHttpServer {
|
|||||||
message: `Certificate obtained for ${domain}`,
|
message: `Certificate obtained for ${domain}`,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to obtain certificate: ${error.message}`);
|
logger.error(`Failed to obtain certificate: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to obtain certificate' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to obtain certificate' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -574,8 +575,8 @@ export class OneboxHttpServer {
|
|||||||
const certificates = this.oneboxRef.ssl.listCertificates();
|
const certificates = this.oneboxRef.ssl.listCertificates();
|
||||||
return this.jsonResponse({ success: true, data: certificates });
|
return this.jsonResponse({ success: true, data: certificates });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to list certificates: ${error.message}`);
|
logger.error(`Failed to list certificates: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to list certificates' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to list certificates' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -587,8 +588,8 @@ export class OneboxHttpServer {
|
|||||||
}
|
}
|
||||||
return this.jsonResponse({ success: true, data: certificate });
|
return this.jsonResponse({ success: true, data: certificate });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get certificate for ${domain}: ${error.message}`);
|
logger.error(`Failed to get certificate for ${domain}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to get certificate' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to get certificate' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -600,8 +601,8 @@ export class OneboxHttpServer {
|
|||||||
message: `Certificate renewed for ${domain}`,
|
message: `Certificate renewed for ${domain}`,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to renew certificate for ${domain}: ${error.message}`);
|
logger.error(`Failed to renew certificate for ${domain}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({ success: false, error: error.message || 'Failed to renew certificate' }, 500);
|
return this.jsonResponse({ success: false, error: getErrorMessage(error) || 'Failed to renew certificate' }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -661,10 +662,10 @@ export class OneboxHttpServer {
|
|||||||
|
|
||||||
return this.jsonResponse({ success: true, data: domainViews });
|
return this.jsonResponse({ success: true, data: domainViews });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get domains: ${error.message}`);
|
logger.error(`Failed to get domains: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to get domains',
|
error: getErrorMessage(error) || 'Failed to get domains',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -685,10 +686,10 @@ export class OneboxHttpServer {
|
|||||||
message: 'Cloudflare zones synced successfully',
|
message: 'Cloudflare zones synced successfully',
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to sync Cloudflare zones: ${error.message}`);
|
logger.error(`Failed to sync Cloudflare zones: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to sync Cloudflare zones',
|
error: getErrorMessage(error) || 'Failed to sync Cloudflare zones',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -737,10 +738,10 @@ export class OneboxHttpServer {
|
|||||||
|
|
||||||
return this.jsonResponse({ success: true, data: domainDetail });
|
return this.jsonResponse({ success: true, data: domainDetail });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get domain detail for ${domainName}: ${error.message}`);
|
logger.error(`Failed to get domain detail for ${domainName}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to get domain detail',
|
error: getErrorMessage(error) || 'Failed to get domain detail',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -750,10 +751,10 @@ export class OneboxHttpServer {
|
|||||||
const records = this.oneboxRef.dns.listDNSRecords();
|
const records = this.oneboxRef.dns.listDNSRecords();
|
||||||
return this.jsonResponse({ success: true, data: records });
|
return this.jsonResponse({ success: true, data: records });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get DNS records: ${error.message}`);
|
logger.error(`Failed to get DNS records: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to get DNS records',
|
error: getErrorMessage(error) || 'Failed to get DNS records',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -777,10 +778,10 @@ export class OneboxHttpServer {
|
|||||||
message: `DNS record created for ${domain}`,
|
message: `DNS record created for ${domain}`,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to create DNS record: ${error.message}`);
|
logger.error(`Failed to create DNS record: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to create DNS record',
|
error: getErrorMessage(error) || 'Failed to create DNS record',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -794,10 +795,10 @@ export class OneboxHttpServer {
|
|||||||
message: `DNS record deleted for ${domain}`,
|
message: `DNS record deleted for ${domain}`,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to delete DNS record for ${domain}: ${error.message}`);
|
logger.error(`Failed to delete DNS record for ${domain}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to delete DNS record',
|
error: getErrorMessage(error) || 'Failed to delete DNS record',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -818,10 +819,10 @@ export class OneboxHttpServer {
|
|||||||
message: 'DNS records synced from Cloudflare',
|
message: 'DNS records synced from Cloudflare',
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to sync DNS records: ${error.message}`);
|
logger.error(`Failed to sync DNS records: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to sync DNS records',
|
error: getErrorMessage(error) || 'Failed to sync DNS records',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -953,9 +954,9 @@ export class OneboxHttpServer {
|
|||||||
});
|
});
|
||||||
|
|
||||||
logStream.on('error', (error: Error) => {
|
logStream.on('error', (error: Error) => {
|
||||||
logger.error(`Log stream error for ${serviceName}: ${error.message}`);
|
logger.error(`Log stream error for ${serviceName}: ${getErrorMessage(error)}`);
|
||||||
if (socket.readyState === WebSocket.OPEN) {
|
if (socket.readyState === WebSocket.OPEN) {
|
||||||
socket.send(JSON.stringify({ error: error.message }));
|
socket.send(JSON.stringify({ error: getErrorMessage(error) }));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -971,9 +972,9 @@ export class OneboxHttpServer {
|
|||||||
};
|
};
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to start log stream for ${serviceName}: ${error.message}`);
|
logger.error(`Failed to start log stream for ${serviceName}: ${getErrorMessage(error)}`);
|
||||||
if (socket.readyState === WebSocket.OPEN) {
|
if (socket.readyState === WebSocket.OPEN) {
|
||||||
socket.send(JSON.stringify({ error: error.message }));
|
socket.send(JSON.stringify({ error: getErrorMessage(error) }));
|
||||||
socket.close();
|
socket.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1004,7 +1005,7 @@ export class OneboxHttpServer {
|
|||||||
failCount++;
|
failCount++;
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to send to WebSocket client: ${error.message}`);
|
logger.error(`Failed to send to WebSocket client: ${getErrorMessage(error)}`);
|
||||||
this.wsClients.delete(client);
|
this.wsClients.delete(client);
|
||||||
failCount++;
|
failCount++;
|
||||||
}
|
}
|
||||||
@@ -1074,10 +1075,10 @@ export class OneboxHttpServer {
|
|||||||
|
|
||||||
return this.jsonResponse({ success: true, data: result });
|
return this.jsonResponse({ success: true, data: result });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to list platform services: ${error.message}`);
|
logger.error(`Failed to list platform services: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to list platform services',
|
error: getErrorMessage(error) || 'Failed to list platform services',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1114,10 +1115,10 @@ export class OneboxHttpServer {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get platform service ${type}: ${error.message}`);
|
logger.error(`Failed to get platform service ${type}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to get platform service',
|
error: getErrorMessage(error) || 'Failed to get platform service',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1145,10 +1146,10 @@ export class OneboxHttpServer {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to start platform service ${type}: ${error.message}`);
|
logger.error(`Failed to start platform service ${type}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to start platform service',
|
error: getErrorMessage(error) || 'Failed to start platform service',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1171,10 +1172,10 @@ export class OneboxHttpServer {
|
|||||||
message: `Platform service ${provider.displayName} stopped`,
|
message: `Platform service ${provider.displayName} stopped`,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to stop platform service ${type}: ${error.message}`);
|
logger.error(`Failed to stop platform service ${type}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to stop platform service',
|
error: getErrorMessage(error) || 'Failed to stop platform service',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1220,10 +1221,10 @@ export class OneboxHttpServer {
|
|||||||
data: formattedResources,
|
data: formattedResources,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get platform resources for service ${serviceName}: ${error.message}`);
|
logger.error(`Failed to get platform resources for service ${serviceName}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to get platform resources',
|
error: getErrorMessage(error) || 'Failed to get platform resources',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1235,10 +1236,10 @@ export class OneboxHttpServer {
|
|||||||
const tags = await this.oneboxRef.registry.getImageTags(serviceName);
|
const tags = await this.oneboxRef.registry.getImageTags(serviceName);
|
||||||
return this.jsonResponse({ success: true, data: tags });
|
return this.jsonResponse({ success: true, data: tags });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get registry tags for ${serviceName}: ${error.message}`);
|
logger.error(`Failed to get registry tags for ${serviceName}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to get registry tags',
|
error: getErrorMessage(error) || 'Failed to get registry tags',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1282,10 +1283,10 @@ export class OneboxHttpServer {
|
|||||||
|
|
||||||
return this.jsonResponse({ success: true, data: tokenViews });
|
return this.jsonResponse({ success: true, data: tokenViews });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to list registry tokens: ${error.message}`);
|
logger.error(`Failed to list registry tokens: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to list registry tokens',
|
error: getErrorMessage(error) || 'Failed to list registry tokens',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1412,10 +1413,10 @@ export class OneboxHttpServer {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to create registry token: ${error.message}`);
|
logger.error(`Failed to create registry token: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to create registry token',
|
error: getErrorMessage(error) || 'Failed to create registry token',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1439,10 +1440,10 @@ export class OneboxHttpServer {
|
|||||||
message: 'Token deleted successfully',
|
message: 'Token deleted successfully',
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to delete registry token ${tokenId}: ${error.message}`);
|
logger.error(`Failed to delete registry token ${tokenId}: ${getErrorMessage(error)}`);
|
||||||
return this.jsonResponse({
|
return this.jsonResponse({
|
||||||
success: false,
|
success: false,
|
||||||
error: error.message || 'Failed to delete registry token',
|
error: getErrorMessage(error) || 'Failed to delete registry token',
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { logger } from '../logging.ts';
|
import { logger } from '../logging.ts';
|
||||||
|
import { getErrorMessage } from '../utils/error.ts';
|
||||||
import { OneboxDatabase } from './database.ts';
|
import { OneboxDatabase } from './database.ts';
|
||||||
import { OneboxDockerManager } from './docker.ts';
|
import { OneboxDockerManager } from './docker.ts';
|
||||||
import { OneboxServicesManager } from './services.ts';
|
import { OneboxServicesManager } from './services.ts';
|
||||||
@@ -108,7 +109,7 @@ export class Onebox {
|
|||||||
await this.registry.init();
|
await this.registry.init();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn('Onebox Registry initialization failed - local registry will be disabled');
|
logger.warn('Onebox Registry initialization failed - local registry will be disabled');
|
||||||
logger.warn(`Error: ${error.message}`);
|
logger.warn(`Error: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize Platform Services (non-critical)
|
// Initialize Platform Services (non-critical)
|
||||||
@@ -116,7 +117,7 @@ export class Onebox {
|
|||||||
await this.platformServices.init();
|
await this.platformServices.init();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn('Platform services initialization failed - MongoDB/S3 features will be limited');
|
logger.warn('Platform services initialization failed - MongoDB/S3 features will be limited');
|
||||||
logger.warn(`Error: ${error.message}`);
|
logger.warn(`Error: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Login to all registries
|
// Login to all registries
|
||||||
@@ -128,7 +129,7 @@ export class Onebox {
|
|||||||
this.initialized = true;
|
this.initialized = true;
|
||||||
logger.success('Onebox initialized successfully');
|
logger.success('Onebox initialized successfully');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to initialize Onebox: ${error.message}`);
|
logger.error(`Failed to initialize Onebox: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -158,7 +159,7 @@ export class Onebox {
|
|||||||
logger.warn('IMPORTANT: Change the default password immediately!');
|
logger.warn('IMPORTANT: Change the default password immediately!');
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to create default user: ${error.message}`);
|
logger.error(`Failed to create default user: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,7 +212,7 @@ export class Onebox {
|
|||||||
platformServices: platformServicesStatus,
|
platformServices: platformServicesStatus,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get system status: ${error.message}`);
|
logger.error(`Failed to get system status: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -265,7 +266,7 @@ export class Onebox {
|
|||||||
|
|
||||||
logger.success('Onebox shutdown complete');
|
logger.success('Onebox shutdown complete');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Error during shutdown: ${error.message}`);
|
logger.error(`Error during shutdown: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
import * as plugins from '../plugins.ts';
|
import * as plugins from '../plugins.ts';
|
||||||
import type { IRegistry } from '../types.ts';
|
import type { IRegistry } from '../types.ts';
|
||||||
import { logger } from '../logging.ts';
|
import { logger } from '../logging.ts';
|
||||||
|
import { getErrorMessage } from '../utils/error.ts';
|
||||||
import { OneboxDatabase } from './database.ts';
|
import { OneboxDatabase } from './database.ts';
|
||||||
|
|
||||||
export class OneboxRegistriesManager {
|
export class OneboxRegistriesManager {
|
||||||
@@ -64,7 +65,7 @@ export class OneboxRegistriesManager {
|
|||||||
|
|
||||||
return registry;
|
return registry;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to add registry ${url}: ${error.message}`);
|
logger.error(`Failed to add registry ${url}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -84,7 +85,7 @@ export class OneboxRegistriesManager {
|
|||||||
|
|
||||||
// Note: We don't perform docker logout as it might affect other users
|
// Note: We don't perform docker logout as it might affect other users
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to remove registry ${url}: ${error.message}`);
|
logger.error(`Failed to remove registry ${url}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -145,7 +146,7 @@ export class OneboxRegistriesManager {
|
|||||||
|
|
||||||
logger.success(`Logged into registry: ${registry.url}`);
|
logger.success(`Logged into registry: ${registry.url}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to login to registry ${registry.url}: ${error.message}`);
|
logger.error(`Failed to login to registry ${registry.url}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -160,7 +161,7 @@ export class OneboxRegistriesManager {
|
|||||||
try {
|
try {
|
||||||
await this.loginToRegistry(registry);
|
await this.loginToRegistry(registry);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Failed to login to ${registry.url}: ${error.message}`);
|
logger.warn(`Failed to login to ${registry.url}: ${getErrorMessage(error)}`);
|
||||||
// Continue with other registries
|
// Continue with other registries
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -188,7 +189,7 @@ export class OneboxRegistriesManager {
|
|||||||
|
|
||||||
return code === 0;
|
return code === 0;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to test registry ${url}: ${error.message}`);
|
logger.error(`Failed to test registry ${url}: ${getErrorMessage(error)}`);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
import type { IService, IServiceDeployOptions, IPlatformRequirements } from '../types.ts';
|
import type { IService, IServiceDeployOptions, IPlatformRequirements } from '../types.ts';
|
||||||
import { logger } from '../logging.ts';
|
import { logger } from '../logging.ts';
|
||||||
|
import { getErrorMessage } from '../utils/error.ts';
|
||||||
import { OneboxDatabase } from './database.ts';
|
import { OneboxDatabase } from './database.ts';
|
||||||
import { OneboxDockerManager } from './docker.ts';
|
import { OneboxDockerManager } from './docker.ts';
|
||||||
import type { PlatformServicesManager } from './platform-services/index.ts';
|
import type { PlatformServicesManager } from './platform-services/index.ts';
|
||||||
@@ -84,7 +85,7 @@ export class OneboxServicesManager {
|
|||||||
platformEnvVars = await platformServices.provisionForService(service);
|
platformEnvVars = await platformServices.provisionForService(service);
|
||||||
logger.success(`Platform resources provisioned for service '${options.name}'`);
|
logger.success(`Platform resources provisioned for service '${options.name}'`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to provision platform resources: ${error.message}`);
|
logger.error(`Failed to provision platform resources: ${getErrorMessage(error)}`);
|
||||||
// Clean up the service record on failure
|
// Clean up the service record on failure
|
||||||
this.database.deleteService(service.id!);
|
this.database.deleteService(service.id!);
|
||||||
throw error;
|
throw error;
|
||||||
@@ -164,7 +165,7 @@ export class OneboxServicesManager {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Failed to create certificate requirement: ${error.message}`);
|
logger.warn(`Failed to create certificate requirement: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configure DNS (if autoDNS is enabled)
|
// Configure DNS (if autoDNS is enabled)
|
||||||
@@ -172,7 +173,7 @@ export class OneboxServicesManager {
|
|||||||
try {
|
try {
|
||||||
await this.oneboxRef.dns.addDNSRecord(options.domain);
|
await this.oneboxRef.dns.addDNSRecord(options.domain);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Failed to configure DNS for ${options.domain}: ${error.message}`);
|
logger.warn(`Failed to configure DNS for ${options.domain}: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,7 +181,7 @@ export class OneboxServicesManager {
|
|||||||
try {
|
try {
|
||||||
await this.oneboxRef.reverseProxy.addRoute(service.id!, options.domain, options.port);
|
await this.oneboxRef.reverseProxy.addRoute(service.id!, options.domain, options.port);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Failed to configure reverse proxy for ${options.domain}: ${error.message}`);
|
logger.warn(`Failed to configure reverse proxy for ${options.domain}: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configure SSL (if autoSSL is enabled)
|
// Configure SSL (if autoSSL is enabled)
|
||||||
@@ -191,7 +192,7 @@ export class OneboxServicesManager {
|
|||||||
await this.oneboxRef.ssl.obtainCertificate(options.domain);
|
await this.oneboxRef.ssl.obtainCertificate(options.domain);
|
||||||
await this.oneboxRef.reverseProxy.reloadCertificates();
|
await this.oneboxRef.reverseProxy.reloadCertificates();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Failed to obtain SSL certificate for ${options.domain}: ${error.message}`);
|
logger.warn(`Failed to obtain SSL certificate for ${options.domain}: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -200,7 +201,7 @@ export class OneboxServicesManager {
|
|||||||
|
|
||||||
return this.database.getServiceByName(options.name)!;
|
return this.database.getServiceByName(options.name)!;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to deploy service ${options.name}: ${error.message}`);
|
logger.error(`Failed to deploy service ${options.name}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -229,7 +230,7 @@ export class OneboxServicesManager {
|
|||||||
|
|
||||||
logger.success(`Service started: ${name}`);
|
logger.success(`Service started: ${name}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to start service ${name}: ${error.message}`);
|
logger.error(`Failed to start service ${name}: ${getErrorMessage(error)}`);
|
||||||
this.database.updateService(
|
this.database.updateService(
|
||||||
this.database.getServiceByName(name)?.id!,
|
this.database.getServiceByName(name)?.id!,
|
||||||
{ status: 'failed' }
|
{ status: 'failed' }
|
||||||
@@ -262,7 +263,7 @@ export class OneboxServicesManager {
|
|||||||
|
|
||||||
logger.success(`Service stopped: ${name}`);
|
logger.success(`Service stopped: ${name}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to stop service ${name}: ${error.message}`);
|
logger.error(`Failed to stop service ${name}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -289,7 +290,7 @@ export class OneboxServicesManager {
|
|||||||
|
|
||||||
logger.success(`Service restarted: ${name}`);
|
logger.success(`Service restarted: ${name}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to restart service ${name}: ${error.message}`);
|
logger.error(`Failed to restart service ${name}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -311,7 +312,7 @@ export class OneboxServicesManager {
|
|||||||
try {
|
try {
|
||||||
await this.docker.removeContainer(service.containerID, true);
|
await this.docker.removeContainer(service.containerID, true);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Failed to remove container: ${error.message}`);
|
logger.warn(`Failed to remove container: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,7 +321,7 @@ export class OneboxServicesManager {
|
|||||||
try {
|
try {
|
||||||
this.oneboxRef.reverseProxy.removeRoute(service.domain);
|
this.oneboxRef.reverseProxy.removeRoute(service.domain);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Failed to remove reverse proxy route: ${error.message}`);
|
logger.warn(`Failed to remove reverse proxy route: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: We don't remove DNS records or SSL certs automatically
|
// Note: We don't remove DNS records or SSL certs automatically
|
||||||
@@ -335,7 +336,7 @@ export class OneboxServicesManager {
|
|||||||
await platformServices.cleanupForService(service.id!);
|
await platformServices.cleanupForService(service.id!);
|
||||||
logger.success(`Platform resources cleaned up for service '${name}'`);
|
logger.success(`Platform resources cleaned up for service '${name}'`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Failed to cleanup platform resources: ${error.message}`);
|
logger.warn(`Failed to cleanup platform resources: ${getErrorMessage(error)}`);
|
||||||
// Continue with service deletion even if cleanup fails
|
// Continue with service deletion even if cleanup fails
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -345,7 +346,7 @@ export class OneboxServicesManager {
|
|||||||
|
|
||||||
logger.success(`Service removed: ${name}`);
|
logger.success(`Service removed: ${name}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to remove service ${name}: ${error.message}`);
|
logger.error(`Failed to remove service ${name}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -388,7 +389,7 @@ export class OneboxServicesManager {
|
|||||||
// v5 API returns combined stdout/stderr with proper formatting
|
// v5 API returns combined stdout/stderr with proper formatting
|
||||||
return logs.stdout;
|
return logs.stdout;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get logs for service ${name}: ${error.message}`);
|
logger.error(`Failed to get logs for service ${name}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -412,7 +413,7 @@ export class OneboxServicesManager {
|
|||||||
|
|
||||||
await this.docker.streamContainerLogs(service.containerID, callback);
|
await this.docker.streamContainerLogs(service.containerID, callback);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to stream logs for service ${name}: ${error.message}`);
|
logger.error(`Failed to stream logs for service ${name}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -434,7 +435,7 @@ export class OneboxServicesManager {
|
|||||||
const stats = await this.docker.getContainerStats(service.containerID);
|
const stats = await this.docker.getContainerStats(service.containerID);
|
||||||
return stats;
|
return stats;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get metrics for service ${name}: ${error.message}`);
|
logger.error(`Failed to get metrics for service ${name}: ${getErrorMessage(error)}`);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -456,7 +457,7 @@ export class OneboxServicesManager {
|
|||||||
const platformServices = this.oneboxRef.platformServices as PlatformServicesManager;
|
const platformServices = this.oneboxRef.platformServices as PlatformServicesManager;
|
||||||
return await platformServices.getResourcesForService(service.id!);
|
return await platformServices.getResourcesForService(service.id!);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get platform resources for service ${name}: ${error.message}`);
|
logger.error(`Failed to get platform resources for service ${name}: ${getErrorMessage(error)}`);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -478,7 +479,7 @@ export class OneboxServicesManager {
|
|||||||
const status = await this.docker.getContainerStatus(service.containerID);
|
const status = await this.docker.getContainerStatus(service.containerID);
|
||||||
return status;
|
return status;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to get status for service ${name}: ${error.message}`);
|
logger.error(`Failed to get status for service ${name}: ${getErrorMessage(error)}`);
|
||||||
return 'unknown';
|
return 'unknown';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -499,7 +500,7 @@ export class OneboxServicesManager {
|
|||||||
// Note: Requires container restart to take effect
|
// Note: Requires container restart to take effect
|
||||||
logger.info(`Environment variables updated for ${name}. Restart service to apply changes.`);
|
logger.info(`Environment variables updated for ${name}. Restart service to apply changes.`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to update env vars for service ${name}: ${error.message}`);
|
logger.error(`Failed to update env vars for service ${name}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -535,7 +536,7 @@ export class OneboxServicesManager {
|
|||||||
try {
|
try {
|
||||||
await this.docker.stopContainer(oldContainerID);
|
await this.docker.stopContainer(oldContainerID);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Failed to stop container: ${error.message}`);
|
logger.warn(`Failed to stop container: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -566,7 +567,7 @@ export class OneboxServicesManager {
|
|||||||
await this.docker.removeContainer(oldContainerID, true);
|
await this.docker.removeContainer(oldContainerID, true);
|
||||||
logger.info(`Removed old container for ${name}`);
|
logger.info(`Removed old container for ${name}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Failed to remove old container: ${error.message}`);
|
logger.warn(`Failed to remove old container: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -582,7 +583,7 @@ export class OneboxServicesManager {
|
|||||||
try {
|
try {
|
||||||
this.oneboxRef.reverseProxy.removeRoute(oldDomain);
|
this.oneboxRef.reverseProxy.removeRoute(oldDomain);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Failed to remove old reverse proxy route: ${error.message}`);
|
logger.warn(`Failed to remove old reverse proxy route: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -595,7 +596,7 @@ export class OneboxServicesManager {
|
|||||||
updates.port || service.port
|
updates.port || service.port
|
||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Failed to configure reverse proxy: ${error.message}`);
|
logger.warn(`Failed to configure reverse proxy: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -614,7 +615,7 @@ export class OneboxServicesManager {
|
|||||||
|
|
||||||
return this.database.getServiceByName(name)!;
|
return this.database.getServiceByName(name)!;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to update service ${name}: ${error.message}`);
|
logger.error(`Failed to update service ${name}: ${getErrorMessage(error)}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -653,7 +654,7 @@ export class OneboxServicesManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.debug(`Failed to sync status for service ${name}: ${error.message}`);
|
logger.debug(`Failed to sync status for service ${name}: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -678,7 +679,7 @@ export class OneboxServicesManager {
|
|||||||
try {
|
try {
|
||||||
await this.checkForRegistryUpdates();
|
await this.checkForRegistryUpdates();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Auto-update check failed: ${error.message}`);
|
logger.error(`Auto-update check failed: ${getErrorMessage(error)}`);
|
||||||
}
|
}
|
||||||
}, 30000);
|
}, 30000);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user