1
1
var plugins = require ( './plugins.json' , 'dont-enclose' ) ,
2
2
pluginsApis = { } ,
3
3
mongo = require ( 'mongoskin' ) ,
4
+ cluster = require ( 'cluster' ) ,
4
5
countlyConfig = require ( '../frontend/express/config' , 'dont-enclose' ) ,
5
6
utils = require ( '../api/utils/utils.js' ) ,
6
7
fs = require ( 'fs' ) ,
7
8
path = require ( 'path' ) ,
9
+ url = require ( 'url' ) ,
8
10
querystring = require ( 'querystring' ) ,
9
11
cp = require ( 'child_process' ) ,
10
12
async = require ( "async" ) ,
@@ -533,14 +535,25 @@ var pluginManager = function pluginManager(){
533
535
} ;
534
536
535
537
this . singleDefaultConnection = function ( ) {
536
- var conf = Object . assign ( { } , countlyConfig . mongodb ) ;
537
- for ( var k in conf ) {
538
- if ( typeof k === 'object' ) {
539
- conf [ k ] = Object . assign ( { } , conf [ k ] ) ;
538
+ if ( typeof countlyConfig . mongodb === "string" ) {
539
+ var urlParts = url . parse ( countlyConfig . mongodb , true ) ;
540
+ if ( ! urlParts . query ) {
541
+ urlParts . query = { } ;
540
542
}
543
+ urlParts . query . maxPoolSize = 1 ;
544
+ delete urlParts . search ;
545
+ return this . dbConnection ( { mongodb : url . format ( urlParts ) } ) ;
546
+ }
547
+ else {
548
+ var conf = Object . assign ( { } , countlyConfig . mongodb ) ;
549
+ for ( var k in conf ) {
550
+ if ( typeof k === 'object' ) {
551
+ conf [ k ] = Object . assign ( { } , conf [ k ] ) ;
552
+ }
553
+ }
554
+ conf . max_pool_size = 1 ;
555
+ return this . dbConnection ( { mongodb : conf } ) ;
541
556
}
542
- conf . max_pool_size = 1 ;
543
- return this . dbConnection ( { mongodb : conf } ) ;
544
557
} ;
545
558
546
559
this . getDbConnectionParams = function ( config ) {
@@ -554,7 +567,7 @@ var pluginManager = function pluginManager(){
554
567
config = config || JSON . parse ( JSON . stringify ( countlyConfig ) ) ;
555
568
556
569
if ( typeof config . mongodb === 'string' ) {
557
- dbName = db ? config . mongodb . replace ( new RegExp ( ' countly$' ) , db ) : config . mongodb ;
570
+ dbName = db ? config . mongodb . replace ( / \/ c o u n t l y \b / , "/" + db ) : config . mongodb ;
558
571
//remove protocol
559
572
dbName = dbName . split ( "://" ) . pop ( ) ;
560
573
if ( dbName . indexOf ( "@" ) !== - 1 ) {
@@ -624,17 +637,29 @@ var pluginManager = function pluginManager(){
624
637
return this . singleDefaultConnection ( ) ;
625
638
}
626
639
627
- var db ;
640
+ var db , maxPoolSize = 10 ;
641
+ if ( ! cluster . isMaster ) {
642
+ //we are in worker
643
+ maxPoolSize = 500 ;
644
+ }
628
645
if ( typeof config == "string" ) {
629
646
db = config ;
630
647
config = JSON . parse ( JSON . stringify ( countlyConfig ) ) ;
631
648
}
632
- else
649
+ else {
633
650
config = config || JSON . parse ( JSON . stringify ( countlyConfig ) ) ;
651
+ }
652
+
653
+ if ( config && typeof config . mongodb == "string" ) {
654
+ var urlParts = url . parse ( config . mongodb , true ) ;
655
+ if ( urlParts && urlParts . query && urlParts . query . maxPoolSize ) {
656
+ maxPoolSize = urlParts . query . maxPoolSize ;
657
+ }
658
+ }
634
659
635
660
var dbName ;
636
661
var dbOptions = {
637
- poolSize : config . mongodb . max_pool_size ,
662
+ poolSize : maxPoolSize ,
638
663
reconnectInterval : 1000 ,
639
664
reconnectTries :999999999 ,
640
665
autoReconnect :true ,
@@ -644,7 +669,7 @@ var pluginManager = function pluginManager(){
644
669
socketTimeoutMS : 999999999
645
670
} ;
646
671
if ( typeof config . mongodb === 'string' ) {
647
- dbName = db ? config . mongodb . replace ( new RegExp ( ' countly$' ) , db ) : config . mongodb ;
672
+ dbName = db ? config . mongodb . replace ( / \/ c o u n t l y \b / , "/" + db ) : config . mongodb ;
648
673
} else {
649
674
config . mongodb . db = db || config . mongodb . db || 'countly' ;
650
675
if ( typeof config . mongodb . replSetServers === 'object' ) {
0 commit comments