SolarWinds Logs MCP Server
by jakenuts
- tests
/**
* Test script to test the SolarWinds search functionality with specific queries
*/
// Import the API client
const { SolarWindsApiClient } = require('../build/api-client.js');
const fs = require('fs');
const path = require('path');
// Load the API token from .env file
function loadEnvToken() {
try {
const envPath = path.join(__dirname, '..', '.env');
if (fs.existsSync(envPath)) {
const envContent = fs.readFileSync(envPath, 'utf8');
const envLines = envContent.split('\n');
for (const line of envLines) {
const match = line.match(/^SOLARWINDS_API_TOKEN=(.+)$/);
if (match) {
return match[1].trim();
}
}
}
} catch (error) {
console.error('Error reading .env file:', error);
}
return null;
}
// Main function
async function main() {
try {
// Get the API token
const apiToken = loadEnvToken();
if (!apiToken) {
console.error('API token not found. Please create a .env file with SOLARWINDS_API_TOKEN=your-token');
process.exit(1);
}
// Create the API client
const apiClient = new SolarWindsApiClient(apiToken);
// Test different search queries
const queries = [
'SpinGeneration-19be7485-c506-4c52-8a03-7122ef130391 AND error',
'SpinGeneration-19be7485-c506-4c52-8a03-7122ef130391',
'SpinGeneration',
'error',
'"SpinGeneration-19be7485-c506-4c52-8a03-7122ef130391" AND "error"',
'SpinGeneration-19be7485-c506-4c52-8a03-7122ef130391 OR error',
'SpinGeneration-19be7485*',
'SpinGeneration* AND error',
'Context.CorrelationId:SpinGeneration-19be7485-c506-4c52-8a03-7122ef130391',
'CorrelationId:SpinGeneration-19be7485-c506-4c52-8a03-7122ef130391',
'Context:"SpinGeneration-19be7485-c506-4c52-8a03-7122ef130391"'
];
for (const query of queries) {
console.log(`\n\n========== Testing query: "${query}" ==========`);
// Set up search parameters - without time constraints
const searchParams = {
filter: query,
pageSize: 5,
direction: 'backward'
};
console.log('Search parameters:', searchParams);
try {
// Search for logs
const response = await apiClient.searchEvents(searchParams);
// Display the results
console.log(`\nFound ${response.logs.length} logs:`);
if (response.logs.length > 0) {
console.log('-----------------------------------');
for (const log of response.logs) {
console.log(`[${log.time}] ${log.hostname} ${log.program || ''}: ${log.message}`);
// Check if the log contains the specific ID
if (log.message.includes('19be7485-c506-4c52-8a03-7122ef130391') ||
(log.program && log.program.includes('19be7485-c506-4c52-8a03-7122ef130391'))) {
console.log('*** This log contains the specific ID ***');
}
// Check if the log contains "error"
if (log.message.toLowerCase().includes('error') ||
(log.program && log.program.toLowerCase().includes('error'))) {
console.log('*** This log contains "error" ***');
}
}
}
console.log('\nPagination info:');
console.log(response.pageInfo);
} catch (error) {
console.error(`Error with query "${query}":`, error.message);
}
}
// Now try to get logs with the specific ID by using a more targeted approach
console.log('\n\n========== Searching for logs containing the specific ID ==========');
// Get all logs with "SpinGeneration" and then filter client-side
const searchParams2 = {
filter: 'SpinGeneration',
pageSize: 20,
direction: 'backward'
};
console.log('Search parameters:', searchParams2);
try {
// Search for logs
const response2 = await apiClient.searchEvents(searchParams2);
// Filter logs that contain the specific ID
const logsWithSpecificId = response2.logs.filter(log =>
log.message.includes('19be7485-c506-4c52-8a03-7122ef130391') ||
(log.program && log.program.includes('19be7485-c506-4c52-8a03-7122ef130391'))
);
// Display the results
console.log(`\nFound ${logsWithSpecificId.length} logs containing the specific ID:`);
if (logsWithSpecificId.length > 0) {
console.log('-----------------------------------');
for (const log of logsWithSpecificId) {
console.log(`[${log.time}] ${log.hostname} ${log.program || ''}: ${log.message}`);
// Check if the log contains "error"
if (log.message.toLowerCase().includes('error') ||
(log.program && log.program.toLowerCase().includes('error'))) {
console.log('*** This log contains "error" ***');
}
}
}
} catch (error) {
console.error('Error searching for logs with specific ID:', error.message);
}
} catch (error) {
console.error('Error:', error.message);
process.exit(1);
}
}
// Run the main function
main();