feat(TALE-7): add proper integration logging

This commit is contained in:
Aarnav Tale
2024-07-10 19:26:59 -04:00
parent 0aa0406ea6
commit 099bd3bcb8
5 changed files with 143 additions and 28 deletions
+38 -6
View File
@@ -1,10 +1,13 @@
import log from '~/utils/log'
import dockerIntegration from './docker'
import { IntegrationFactory } from './integration'
import kubernetesIntegration from './kubernetes'
import procIntegration from './proc'
export * from './integration'
export function loadIntegration() {
export async function loadIntegration() {
let integration = process.env.HEADSCALE_INTEGRATION
?.trim()
.toLowerCase()
@@ -18,26 +21,55 @@ export function loadIntegration() {
}
if (!integration) {
console.log('Running Headplane without any integrations')
log.info('INTG', 'No integration set with HEADSCALE_INTEGRATION')
return
}
let integrationFactory: IntegrationFactory | undefined
switch (integration.toLowerCase().trim()) {
case 'docker': {
return dockerIntegration
integrationFactory = dockerIntegration
break
}
case 'proc':
case 'native':
case 'linux': {
return procIntegration
integrationFactory = procIntegration
break
}
case 'kubernetes':
case 'k8s': {
return kubernetesIntegration
integrationFactory = kubernetesIntegration
break
}
default: {
log.error('INTG', 'Unknown integration: %s', integration)
throw new Error(`Unknown integration: ${integration}`)
}
}
console.error('Unknown integration:', integration)
log.info('INTG', 'Loading integration: %s', integration)
try {
const res = await integrationFactory.isAvailable(
integrationFactory.context,
)
if (!res) {
log.error('INTG', 'Integration %s is not available',
integration,
)
return
}
} catch (error) {
log.error('INTG', 'Failed to load integration %s: %s',
integration,
error,
)
return
}
log.info('INTG', 'Loaded integration: %s', integration)
return integrationFactory
}