wekan/server/mongodb-driver-startup.js
Lauri Ojansivu bd8c565415 Fixes to make board showing correctly.
Thanks to xet7 !
2025-10-12 03:48:21 +03:00

144 lines
4.6 KiB
JavaScript

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() {
// MongoDB Driver System Startup (status available in Admin Panel)
try {
// Check if MONGO_URL is available
const mongoUrl = process.env.MONGO_URL;
if (!mongoUrl) {
// MONGO_URL not found, skipping MongoDB driver initialization
return;
}
// MONGO_URL found, initializing MongoDB driver system
// Connection string: (credentials hidden for security)
// Initialize the Meteor integration
meteorMongoIntegration.initialize(mongoUrl);
// Test the connection
const testResult = await meteorMongoIntegration.testConnection();
if (testResult.success) {
// MongoDB connection test successful
// Driver and version information available in Admin Panel
} else {
// MongoDB connection test failed
// Error details available in Admin Panel
}
// Connection statistics available in Admin Panel
const stats = meteorMongoIntegration.getStats();
// Driver compatibility information available in Admin Panel
const supportedVersions = mongodbDriverManager.getSupportedVersions();
// MongoDB Driver System Ready (status available in Admin Panel)
} 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 };