wulf-pulse/scripts/test-auvik-config.ts
root 6eee14f8af Add comprehensive admin features and multi-system integration
- Add admin dashboard with sync controls and data browser
- Implement RMM, Auvik, and Addigy organization mappings
- Add chunked ticket sync with progress tracking
- Implement entity sync service with rate limiting
- Add analytics engine and performance optimizer
- Create data browser for all PSA entities
- Add navigation components and UI improvements
- Implement background processing and sync services
- Add comprehensive documentation and migration scripts
- Update configuration items with multi-system support
- Enhance contact management and purchase history
- Add issue type assignment and LLM analyzer
- Improve error handling and logging utilities
2025-11-19 14:18:16 -05:00

172 lines
6 KiB
TypeScript

/**
* Test script to fetch device configuration from Auvik API
* Usage: npx tsx scripts/test-auvik-config.ts YNGHYNSWP19
*/
import { AuvikClient } from '../lib/services/auvik-client';
interface AuvikConfigurationResponse {
data: Array<{
type: string;
id: string;
attributes: {
deviceId: string;
backupDate: string;
configType: string;
configText?: string;
configSize?: number;
};
}>;
links?: {
next?: string;
};
}
async function testAuvikConfiguration(hostname: string) {
console.log(`\n=== Testing Auvik Configuration API for: ${hostname} ===\n`);
// Initialize Auvik client
const config = {
apiUrl: process.env.AUVIK_API_URL || 'https://auvikapi.us1.my.auvik.com',
apiUser: process.env.AUVIK_API_USER || '',
apiKey: process.env.AUVIK_API_KEY || '',
};
if (!config.apiUser || !config.apiKey) {
console.error('Error: AUVIK_API_USER and AUVIK_API_KEY environment variables must be set');
process.exit(1);
}
const client = new AuvikClient(config);
try {
// Step 1: Find all devices and locate the one with matching hostname
console.log('Step 1: Fetching all devices to find matching hostname...');
const devices = await client.getAllDevices();
console.log(`Found ${devices.length} total devices`);
const matchingDevice = devices.find(
(d) => d.deviceName.toLowerCase() === hostname.toLowerCase()
);
if (!matchingDevice) {
console.error(`\nDevice not found with hostname: ${hostname}`);
console.log('\nAvailable devices:');
devices.forEach((d) => {
console.log(` - ${d.deviceName} (${d.deviceType}) - ${d.id}`);
});
process.exit(1);
}
console.log(`\n✓ Found device: ${matchingDevice.deviceName}`);
console.log(` Device ID: ${matchingDevice.id}`);
console.log(` Type: ${matchingDevice.deviceType}`);
console.log(` Tenant: ${matchingDevice.tenantName || matchingDevice.tenantId}`);
console.log(` Status: ${matchingDevice.onlineStatus}`);
console.log(` IP Addresses: ${matchingDevice.ipAddresses.join(', ')}`);
// Step 2: Try to fetch device configuration
console.log('\nStep 2: Attempting to fetch device configuration...');
// Auvik API endpoint for device configuration
const configUrl = `${config.apiUrl}/v1/inventory/device/configuration?filter[deviceId]=${matchingDevice.id}`;
console.log(`Config URL: ${configUrl}`);
const credentials = Buffer.from(`${config.apiUser}:${config.apiKey}`).toString('base64');
const response = await fetch(configUrl, {
headers: {
Authorization: `Basic ${credentials}`,
Accept: 'application/json',
'Content-Type': 'application/json',
},
});
if (!response.ok) {
const errorText = await response.text();
console.error(`\nAPI Error: ${response.status} ${response.statusText}`);
console.error(`Response: ${errorText}`);
// Try alternative endpoint - device detail
console.log('\nStep 3: Trying device detail endpoint...');
const detailUrl = `${config.apiUrl}/v1/inventory/device/detail/${matchingDevice.id}`;
console.log(`Detail URL: ${detailUrl}`);
const detailResponse = await fetch(detailUrl, {
headers: {
Authorization: `Basic ${credentials}`,
Accept: 'application/json',
'Content-Type': 'application/json',
},
});
if (!detailResponse.ok) {
const detailErrorText = await detailResponse.text();
console.error(`\nDetail API Error: ${detailResponse.status} ${detailResponse.statusText}`);
console.error(`Response: ${detailErrorText}`);
} else {
const detailData = await detailResponse.json();
console.log('\n✓ Device Detail Response:');
console.log(JSON.stringify(detailData, null, 2));
}
process.exit(1);
}
const configData: AuvikConfigurationResponse = await response.json();
console.log('\n✓ Configuration Response:');
console.log(`Found ${configData.data.length} configuration(s)`);
configData.data.forEach((config, index) => {
console.log(`\n--- Configuration ${index + 1} ---`);
console.log(` Type: ${config.attributes.configType}`);
console.log(` Backup Date: ${config.attributes.backupDate}`);
console.log(` Size: ${config.attributes.configSize || 'N/A'} bytes`);
if (config.attributes.configText) {
console.log(`\n Configuration Text (first 500 chars):`);
console.log(` ${config.attributes.configText.substring(0, 500)}...`);
} else {
console.log(` Configuration text not available in response`);
}
});
// Step 4: Try to get the latest configuration backup
console.log('\n\nStep 4: Fetching latest configuration backup...');
const backupUrl = `${config.apiUrl}/v1/inventory/device/configuration?filter[deviceId]=${matchingDevice.id}&page[first]=1`;
console.log(`Backup URL: ${backupUrl}`);
const backupResponse = await fetch(backupUrl, {
headers: {
Authorization: `Basic ${credentials}`,
Accept: 'application/json',
'Content-Type': 'application/json',
},
});
if (backupResponse.ok) {
const backupData: AuvikConfigurationResponse = await backupResponse.json();
console.log('\n✓ Latest Configuration Backup:');
console.log(JSON.stringify(backupData, null, 2));
} else {
const backupError = await backupResponse.text();
console.error(`\nBackup API Error: ${backupResponse.status} ${backupResponse.statusText}`);
console.error(`Response: ${backupError}`);
}
} catch (error) {
console.error('\nError:', error);
process.exit(1);
}
}
// Get hostname from command line argument
const hostname = process.argv[2];
if (!hostname) {
console.error('Usage: npx tsx scripts/test-auvik-config.ts <hostname>');
console.error('Example: npx tsx scripts/test-auvik-config.ts YNGHYNSWP19');
process.exit(1);
}
testAuvikConfiguration(hostname);