logstack-zee
Version:
Complete Node.js logging solution with 6 integration methods, S3 bidirectional operations, advanced analytics, and multi-cloud storage support for enterprise-scale applications.
315 lines (314 loc) โข 13.2 kB
JavaScript
/**
* ๐ฉ๏ธ AWS S3 Testing - Cron Log Service
*
* This example demonstrates how to test the logstack with AWS S3 storage.
* Make sure you have AWS credentials configured before running this test.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.awsConfig = void 0;
exports.validateAWSCredentials = validateAWSCredentials;
exports.testAWSConnection = testAWSConnection;
exports.testS3FileUpload = testS3FileUpload;
exports.testMultipleS3Environments = testMultipleS3Environments;
exports.testAWSPerformance = testAWSPerformance;
exports.runAWSTests = runAWSTests;
const main_1 = require("../src/main");
// Load environment variables from .env file
try {
require('dotenv').config();
}
catch (error) {
console.log('Note: dotenv not found, using system environment variables');
}
// ==========================================
// ๐ฉ๏ธ AWS S3 CONFIGURATION
// ==========================================
const awsConfig = {
dbUri: process.env.DB_URI || 'mongodb://localhost:27017/aws-cron-test',
uploadProvider: 's3',
fileFormat: 'json',
// โจ Organized S3 storage
outputDirectory: 'aws-cron-logs',
// โจ Custom collections for AWS testing
collections: {
jobsCollectionName: 'aws_test_jobs',
logsCollectionName: 'aws_test_logs',
apiLogsCollectionName: 'apilogs'
},
// ๐ฉ๏ธ AWS S3 Configuration
s3: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID || '',
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || '',
region: process.env.AWS_REGION || 'us-east-1',
bucket: process.env.S3_BUCKET || 'logstack-test'
},
logging: {
level: 'info',
enableConsole: true
}
};
exports.awsConfig = awsConfig;
// ==========================================
// ๐งช AWS TESTING FUNCTIONS
// ==========================================
async function validateAWSCredentials() {
console.log('๐ Validating AWS Credentials...');
const required = ['AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY', 'S3_BUCKET'];
const missing = required.filter(key => !process.env[key]);
if (missing.length > 0) {
console.error('โ Missing required AWS environment variables:');
missing.forEach(key => console.error(` - ${key}`));
console.log('\n๐ก Add these to your .env file:');
console.log('AWS_ACCESS_KEY_ID=your_access_key');
console.log('AWS_SECRET_ACCESS_KEY=your_secret_key');
console.log('AWS_REGION=us-east-1');
console.log('S3_BUCKET=your-bucket-name');
return false;
}
console.log('โ
AWS credentials found');
console.log(`๐ฆ S3 Bucket: ${process.env.S3_BUCKET}`);
console.log(`๐ Region: ${process.env.AWS_REGION || 'us-east-1'}`);
return true;
}
async function testAWSConnection() {
try {
console.log('\n๐ฉ๏ธ Testing AWS S3 Connection...');
await (0, main_1.init)(awsConfig);
console.log('โ
Successfully connected to AWS S3');
console.log('โ
Cron service initialized with S3 storage');
}
catch (error) {
console.error('โ AWS S3 connection failed:', error);
throw error;
}
}
async function testS3FileUpload() {
try {
console.log('\n๐ค Testing S3 File Upload...');
// Create daily jobs
const job = await (0, main_1.createDailyJobs)('2025-08-25', awsConfig);
console.log(`โ
Created job with ${job.hours.length} hour slots`);
// Process specific hours to generate files
console.log('โก Processing hours and uploading to S3...');
await (0, main_1.processSpecificHour)('2025-08-25', 9, awsConfig);
console.log('โ
Processed hour 09:00-10:00 โ Uploaded to S3');
await (0, main_1.processSpecificHour)('2025-08-25', 14, awsConfig);
console.log('โ
Processed hour 14:00-15:00 โ Uploaded to S3');
await (0, main_1.processSpecificHour)('2025-08-25', 18, awsConfig);
console.log('โ
Processed hour 18:00-19:00 โ Uploaded to S3');
console.log('\n๐ S3 Upload Test Complete!');
console.log('๐ฆ Files uploaded to S3:');
console.log(` s3://${awsConfig.s3?.bucket}/aws-cron-logs/2025-08-25/09-10.json`);
console.log(` s3://${awsConfig.s3?.bucket}/aws-cron-logs/2025-08-25/14-15.json`);
console.log(` s3://${awsConfig.s3?.bucket}/aws-cron-logs/2025-08-25/18-19.json`);
}
catch (error) {
console.error('โ S3 upload test failed:', error);
throw error;
}
}
// ==========================================
// ๐ MULTIPLE ENVIRONMENT TESTING
// ==========================================
async function testMultipleS3Environments() {
console.log('\n๐ข Testing Multiple S3 Environments...');
const environments = [
{
name: '๐งช Development S3',
config: {
...awsConfig,
outputDirectory: 'dev-s3-logs',
collections: {
jobsCollectionName: 'dev_s3_jobs',
logsCollectionName: 'dev_s3_logs',
apiLogsCollectionName: 'dev_s3_apilogs'
}
}
},
{
name: '๐ Production S3',
config: {
...awsConfig,
outputDirectory: 'prod-s3-logs',
collections: {
jobsCollectionName: 'prod_s3_jobs',
logsCollectionName: 'prod_s3_logs',
apiLogsCollectionName: 'prod_s3_apilogs'
}
}
},
{
name: '๐ Analytics S3',
config: {
...awsConfig,
outputDirectory: 'analytics-s3-exports',
collections: {
jobsCollectionName: 'analytics_s3_jobs',
logsCollectionName: 'analytics_s3_logs',
apiLogsCollectionName: 'analytics_s3_apilogs'
}
}
}
];
for (const env of environments) {
console.log(`\n${env.name}`);
console.log('โ'.repeat(30));
try {
await (0, main_1.init)(env.config);
const job = await (0, main_1.createDailyJobs)('2025-08-25', env.config);
await (0, main_1.processSpecificHour)('2025-08-25', 12, env.config);
console.log(`โ
${env.name} working!`);
console.log(`๐ฆ S3 Path: s3://${awsConfig.s3?.bucket}/${env.config.outputDirectory}/`);
console.log(`๐๏ธ Collections: ${env.config.collections.jobsCollectionName}, ${env.config.collections.logsCollectionName}, ${env.config.collections.apiLogsCollectionName}`);
}
catch (error) {
console.error(`โ ${env.name} failed:`, error instanceof Error ? error.message : error);
}
}
}
// ==========================================
// ๐งช AWS PERFORMANCE TESTING
// ==========================================
async function testAWSPerformance() {
console.log('\nโก AWS S3 Performance Testing...');
const startTime = Date.now();
try {
// Test multiple hour processing
const hours = [8, 9, 10, 11, 12, 13, 14, 15];
console.log(`๐ Processing ${hours.length} hours simultaneously...`);
// Process hours in parallel for performance testing
const promises = hours.map(hour => (0, main_1.processSpecificHour)('2025-08-25', hour, awsConfig)
.then(() => console.log(`โ
Hour ${hour}:00-${hour + 1}:00 uploaded`))
.catch(err => console.error(`โ Hour ${hour} failed:`, err.message)));
await Promise.all(promises);
const endTime = Date.now();
const duration = (endTime - startTime) / 1000;
console.log(`\n๐ Performance Test Complete!`);
console.log(`โฑ๏ธ Total time: ${duration} seconds`);
console.log(`๐ Average per file: ${(duration / hours.length).toFixed(2)} seconds`);
console.log(`๐ฆ ${hours.length} files uploaded to S3`);
}
catch (error) {
console.error('โ Performance test failed:', error);
}
}
// ==========================================
// ๐ DIFFERENT AWS REGIONS TESTING
// ==========================================
async function testDifferentAWSRegions() {
console.log('\n๐ Testing Different AWS Regions...');
const regions = ['us-east-1', 'us-west-2', 'eu-west-1'];
for (const region of regions) {
console.log(`\n๐ Testing region: ${region}`);
const regionConfig = {
...awsConfig,
outputDirectory: `${region}-logs`,
s3: {
...awsConfig.s3,
region: region
},
collections: {
jobsCollectionName: `${region.replace('-', '_')}_jobs`,
logsCollectionName: `${region.replace('-', '_')}_logs`,
apiLogsCollectionName: `${region.replace('-', '_')}_apilogs`
}
};
try {
await (0, main_1.init)(regionConfig);
await (0, main_1.processSpecificHour)('2025-08-25', 16, regionConfig);
console.log(`โ
${region} working successfully`);
}
catch (error) {
console.error(`โ ${region} failed:`, error instanceof Error ? error.message : error);
}
}
}
// ==========================================
// ๐โโ๏ธ MAIN AWS TESTING FUNCTION
// ==========================================
async function runAWSTests() {
try {
console.log('๐ฉ๏ธ AWS S3 Testing - Cron Log Service');
console.log('=====================================\n');
// Step 1: Validate credentials
const credentialsValid = await validateAWSCredentials();
if (!credentialsValid) {
return;
}
// Step 2: Test basic connection
await testAWSConnection();
// Step 3: Test file upload
await testS3FileUpload();
// Step 4: Test multiple environments
await testMultipleS3Environments();
// Step 5: Performance testing (optional)
if (process.argv.includes('--performance')) {
await testAWSPerformance();
}
// Step 6: Region testing (optional)
if (process.argv.includes('--regions')) {
await testDifferentAWSRegions();
}
console.log('\n๐ All AWS Tests Completed Successfully!');
console.log('=======================================');
console.log('โ
AWS S3 connection working');
console.log('โ
File uploads successful');
console.log('โ
Multiple environments tested');
console.log('โ
Custom collections working');
console.log('โ
Organized S3 directory structure');
console.log('\n๐ฉ๏ธ Your AWS S3 setup is ready for production!');
}
catch (error) {
console.error('\nโ AWS Testing Failed:', error);
console.log('\n๐ก Troubleshooting:');
console.log('1. Check AWS credentials in .env file');
console.log('2. Verify S3 bucket exists and is accessible');
console.log('3. Check IAM permissions for S3 access');
console.log('4. Ensure MongoDB connection is working');
process.exit(1);
}
}
// ==========================================
// ๐ USAGE EXAMPLES
// ==========================================
function showUsageExamples() {
console.log('\n๐ก AWS Usage Examples for Your Project:');
console.log('======================================\n');
console.log('// Basic AWS S3 Configuration');
console.log('const awsConfig = {');
console.log(' dbUri: "mongodb://localhost:27017/myapp",');
console.log(' uploadProvider: "s3",');
console.log(' outputDirectory: "production-logs",');
console.log(' collections: {');
console.log(' jobsCollectionName: "prod_jobs",');
console.log(' logsCollectionName: "prod_logs",');
console.log(' apiLogsCollectionName: "prod_apilogs"');
console.log(' },');
console.log(' s3: {');
console.log(' accessKeyId: process.env.AWS_ACCESS_KEY_ID,');
console.log(' secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,');
console.log(' region: "us-east-1",');
console.log(' bucket: "your-production-bucket"');
console.log(' }');
console.log('};');
console.log('');
console.log('await init(awsConfig);');
}
// Handle command line arguments
if (require.main === module) {
const args = process.argv.slice(2);
if (args.includes('--help')) {
console.log('๐ฉ๏ธ AWS S3 Testing Options:');
console.log(' node testAWS.ts # Basic AWS tests');
console.log(' node testAWS.ts --performance # Include performance tests');
console.log(' node testAWS.ts --regions # Test different AWS regions');
console.log(' node testAWS.ts --examples # Show usage examples');
process.exit(0);
}
if (args.includes('--examples')) {
showUsageExamples();
process.exit(0);
}
runAWSTests().catch(console.error);
}
;