123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- import { Meteor } from 'meteor/meteor';
- import { mongodbConnectionManager } from '/models/lib/mongodbConnectionManager';
- import { mongodbDriverManager } from '/models/lib/mongodbDriverManager';
- import { meteorMongoIntegration } from '/models/lib/meteorMongoIntegration';
- /**
- * MongoDB Driver Startup
- *
- * This module initializes the MongoDB driver system on server startup,
- * providing automatic version detection and driver selection for
- * MongoDB versions 3.0 through 8.0.
- */
- // Initialize MongoDB driver system on server startup
- Meteor.startup(async function() {
- console.log('=== MongoDB Driver System Startup ===');
-
- try {
- // Check if MONGO_URL is available
- const mongoUrl = process.env.MONGO_URL;
- if (!mongoUrl) {
- console.log('MONGO_URL not found, skipping MongoDB driver initialization');
- return;
- }
- console.log('MONGO_URL found, initializing MongoDB driver system...');
- console.log(`Connection string: ${mongoUrl.replace(/\/\/.*@/, '//***:***@')}`); // Hide credentials
- // Initialize the Meteor integration
- meteorMongoIntegration.initialize(mongoUrl);
- // Test the connection
- console.log('Testing MongoDB connection...');
- const testResult = await meteorMongoIntegration.testConnection();
-
- if (testResult.success) {
- console.log('✅ MongoDB connection test successful');
- console.log(` Driver: ${testResult.driver}`);
- console.log(` Version: ${testResult.version}`);
- } else {
- console.log('❌ MongoDB connection test failed');
- console.log(` Error: ${testResult.error}`);
- console.log(` Driver: ${testResult.driver}`);
- console.log(` Version: ${testResult.version}`);
- }
- // Log connection statistics
- const stats = meteorMongoIntegration.getStats();
- console.log('MongoDB Driver System Statistics:');
- console.log(` Initialized: ${stats.isInitialized}`);
- console.log(` Custom Connection: ${stats.hasCustomConnection}`);
- console.log(` Supported Versions: ${mongodbDriverManager.getSupportedVersions().join(', ')}`);
- // Log driver compatibility information
- console.log('MongoDB Driver Compatibility:');
- const supportedVersions = mongodbDriverManager.getSupportedVersions();
- supportedVersions.forEach(version => {
- const driverInfo = mongodbDriverManager.getDriverInfo(
- mongodbDriverManager.getDriverForVersion(version)
- );
- if (driverInfo) {
- console.log(` MongoDB ${version}: ${driverInfo.driver} v${driverInfo.version}`);
- }
- });
- console.log('=== MongoDB Driver System Ready ===');
- } catch (error) {
- console.error('Error during MongoDB driver system startup:', error.message);
- console.error('Stack trace:', error.stack);
-
- // Don't fail the entire startup, just log the error
- console.log('Continuing with default MongoDB connection...');
- }
- });
- // Add server-side methods for debugging and monitoring
- if (Meteor.isServer) {
- // Method to get MongoDB driver statistics
- Meteor.methods({
- 'mongodb-driver-stats': function() {
- if (!this.userId) {
- throw new Meteor.Error('not-authorized', 'Must be logged in');
- }
-
- return {
- connectionStats: mongodbConnectionManager.getConnectionStats(),
- driverStats: mongodbDriverManager.getConnectionStats(),
- integrationStats: meteorMongoIntegration.getStats()
- };
- },
- 'mongodb-driver-test-connection': async function() {
- if (!this.userId) {
- throw new Meteor.Error('not-authorized', 'Must be logged in');
- }
-
- return await meteorMongoIntegration.testConnection();
- },
- 'mongodb-driver-reset': function() {
- if (!this.userId) {
- throw new Meteor.Error('not-authorized', 'Must be logged in');
- }
-
- meteorMongoIntegration.reset();
- return { success: true, message: 'MongoDB driver system reset' };
- },
- 'mongodb-driver-supported-versions': function() {
- if (!this.userId) {
- throw new Meteor.Error('not-authorized', 'Must be logged in');
- }
-
- return {
- supportedVersions: mongodbDriverManager.getSupportedVersions(),
- compatibility: mongodbDriverManager.getSupportedVersions().map(version => {
- const driverInfo = mongodbDriverManager.getDriverInfo(
- mongodbDriverManager.getDriverForVersion(version)
- );
- return {
- version,
- driver: driverInfo?.driver || 'unknown',
- driverVersion: driverInfo?.version || 'unknown',
- minServer: driverInfo?.minServer || 'unknown',
- maxServer: driverInfo?.maxServer || 'unknown'
- };
- })
- };
- }
- });
- // Add a publication for real-time monitoring
- Meteor.publish('mongodb-driver-monitor', function() {
- if (!this.userId) {
- throw new Meteor.Error('not-authorized', 'Must be logged in');
- }
- const self = this;
-
- // Send initial data
- const stats = meteorMongoIntegration.getStats();
- self.added('mongodbDriverMonitor', 'stats', stats);
-
- // Update every 30 seconds
- const interval = setInterval(() => {
- const updatedStats = meteorMongoIntegration.getStats();
- self.changed('mongodbDriverMonitor', 'stats', updatedStats);
- }, 30000);
- // Clean up on unsubscribe
- self.onStop(() => {
- clearInterval(interval);
- });
- self.ready();
- });
- }
- // Export for use in other modules
- export { mongodbConnectionManager, mongodbDriverManager, meteorMongoIntegration };
|