Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kody/datadog

src/index.ts

161 lines · 3.8 KB · TypeScript
export {
	ALLOWED_HOSTS_QUERY,
	API_KEY_SETUP_URL,
	APPLICATION_KEY_SETUP_URL,
	DATADOG_API_HOSTS,
	DEFAULT_API_HOST,
	DEFAULT_API_KEY_SECRET,
	DEFAULT_APP_KEY_SECRET,
	DEFAULT_SITE,
	DatadogApiError,
	assertNever,
	datadogAuthHeaders,
	datadogRequest,
	mutationPreview,
	parseAction,
	requireConfirm,
	resolveApiBaseUrl,
	resolveApiHost,
	resolveApiKeySecretName,
	resolveApplicationKeySecretName,
	resolveSite,
	secretSetupUrl,
} from './core.ts'
export { validateKeys } from './validate.ts'
export {
	listMonitors,
	getMonitor,
	searchMonitors,
	createMonitor,
	updateMonitor,
	deleteMonitor,
	muteMonitor,
	unmuteMonitor,
} from './monitors.ts'
export {
	listIncidents,
	getIncident,
	searchIncidents,
	createIncident,
	updateIncident,
	deleteIncident,
} from './incidents.ts'
export { searchLogs } from './logs.ts'
export {
	listDashboards,
	getDashboard,
	createDashboard,
	updateDashboard,
	deleteDashboard,
} from './dashboards.ts'
export { smokeTest } from './smoke-test.ts'
export { runMonitorStatus } from './scheduled-status.ts'

import { assertNever, parseAction } from './core.ts'
import {
	createDashboard,
	deleteDashboard,
	getDashboard,
	listDashboards,
	updateDashboard,
} from './dashboards.ts'
import {
	createIncident,
	deleteIncident,
	getIncident,
	listIncidents,
	searchIncidents,
	updateIncident,
} from './incidents.ts'
import { searchLogs } from './logs.ts'
import {
	createMonitor,
	deleteMonitor,
	getMonitor,
	listMonitors,
	muteMonitor,
	searchMonitors,
	unmuteMonitor,
	updateMonitor,
} from './monitors.ts'
import { runMonitorStatus } from './scheduled-status.ts'
import { smokeTest } from './smoke-test.ts'
import { validateKeys } from './validate.ts'

const actions = {
	'smoke-test': smokeTest,
	validate: validateKeys,
	'list-monitors': listMonitors,
	monitors: listMonitors,
	'get-monitor': getMonitor,
	'search-monitors': searchMonitors,
	'create-monitor': createMonitor,
	'update-monitor': updateMonitor,
	'delete-monitor': deleteMonitor,
	'mute-monitor': muteMonitor,
	'unmute-monitor': unmuteMonitor,
	'list-incidents': listIncidents,
	incidents: listIncidents,
	'get-incident': getIncident,
	'search-incidents': searchIncidents,
	'create-incident': createIncident,
	'update-incident': updateIncident,
	'delete-incident': deleteIncident,
	'search-logs': searchLogs,
	logs: searchLogs,
	'list-dashboards': listDashboards,
	dashboards: listDashboards,
	'get-dashboard': getDashboard,
	'create-dashboard': createDashboard,
	'update-dashboard': updateDashboard,
	'delete-dashboard': deleteDashboard,
	'scheduled-status': runMonitorStatus,
} as const

export type DatadogAction = keyof typeof actions

const actionNames = Object.keys(actions) as DatadogAction[]

/**
 * Root dispatcher for Datadog helpers. Defaults to the read-only smoke test.
 * @example
 * import datadog from 'kody:@kody/datadog'
 * const result = await datadog({ action: 'list-monitors' })
 */
export default async function datadog(input: Record<string, unknown> = {}) {
	const action = parseAction(input.action, actionNames, 'smoke-test', 'Datadog')
	const handler = actions[action]
	switch (action) {
		case 'smoke-test':
		case 'validate':
		case 'list-monitors':
		case 'monitors':
		case 'get-monitor':
		case 'search-monitors':
		case 'create-monitor':
		case 'update-monitor':
		case 'delete-monitor':
		case 'mute-monitor':
		case 'unmute-monitor':
		case 'list-incidents':
		case 'incidents':
		case 'get-incident':
		case 'search-incidents':
		case 'create-incident':
		case 'update-incident':
		case 'delete-incident':
		case 'search-logs':
		case 'logs':
		case 'list-dashboards':
		case 'dashboards':
		case 'get-dashboard':
		case 'create-dashboard':
		case 'update-dashboard':
		case 'delete-dashboard':
		case 'scheduled-status':
			return await handler(input as never)
		default: {
			assertNever(action, 'Unhandled Datadog action: ')
		}
	}
}