63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
import { HeadplaneConfig } from '~/server/config/schema';
|
|
import log from '~/utils/log';
|
|
import dockerIntegration from './docker';
|
|
import kubernetesIntegration from './kubernetes';
|
|
import procIntegration from './proc';
|
|
|
|
export async function loadIntegration(context: HeadplaneConfig['integration']) {
|
|
const integration = getIntegration(context);
|
|
if (!integration) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
const res = await integration.isAvailable();
|
|
if (!res) {
|
|
log.error('config', 'Integration %s is not available', integration);
|
|
return;
|
|
}
|
|
} catch (error) {
|
|
log.error(
|
|
'config',
|
|
'Failed to load integration %s: %s',
|
|
integration,
|
|
error,
|
|
);
|
|
log.debug('config', 'Loading error: %o', error);
|
|
return;
|
|
}
|
|
|
|
return integration;
|
|
}
|
|
|
|
function getIntegration(integration: HeadplaneConfig['integration']) {
|
|
const docker = integration?.docker;
|
|
const k8s = integration?.kubernetes;
|
|
const proc = integration?.proc;
|
|
|
|
if (!docker?.enabled && !k8s?.enabled && !proc?.enabled) {
|
|
log.debug('config', 'No integrations enabled');
|
|
return;
|
|
}
|
|
|
|
if (docker?.enabled && k8s?.enabled && proc?.enabled) {
|
|
log.error('config', 'Multiple integrations enabled, please pick one only');
|
|
return;
|
|
}
|
|
|
|
if (docker?.enabled) {
|
|
log.info('config', 'Using Docker integration');
|
|
return new dockerIntegration(integration?.docker);
|
|
}
|
|
|
|
if (k8s?.enabled) {
|
|
log.info('config', 'Using Kubernetes integration');
|
|
return new kubernetesIntegration(integration?.kubernetes);
|
|
}
|
|
|
|
if (proc?.enabled) {
|
|
log.info('config', 'Using Proc integration');
|
|
return new procIntegration(integration?.proc);
|
|
}
|
|
}
|