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" ) ,
@@ -560,14 +562,25 @@ var pluginManager = function pluginManager(){
560
562
} ;
561
563
562
564
this . singleDefaultConnection = function ( ) {
563
- var conf = Object . assign ( { } , countlyConfig . mongodb ) ;
564
- for ( var k in conf ) {
565
- if ( typeof k === 'object' ) {
566
- conf [ k ] = Object . assign ( { } , conf [ k ] ) ;
565
+ if ( typeof countlyConfig . mongodb === "string" ) {
566
+ var urlParts = url . parse ( countlyConfig . mongodb , true ) ;
567
+ if ( ! urlParts . query ) {
568
+ urlParts . query = { } ;
567
569
}
570
+ urlParts . query . maxPoolSize = 1 ;
571
+ delete urlParts . search ;
572
+ return this . dbConnection ( { mongodb : url . format ( urlParts ) } ) ;
573
+ }
574
+ else {
575
+ var conf = Object . assign ( { } , countlyConfig . mongodb ) ;
576
+ for ( var k in conf ) {
577
+ if ( typeof k === 'object' ) {
578
+ conf [ k ] = Object . assign ( { } , conf [ k ] ) ;
579
+ }
580
+ }
581
+ conf . max_pool_size = 1 ;
582
+ return this . dbConnection ( { mongodb : conf } ) ;
568
583
}
569
- conf . max_pool_size = 1 ;
570
- return this . dbConnection ( { mongodb : conf } ) ;
571
584
} ;
572
585
573
586
this . getDbConnectionParams = function ( config ) {
@@ -581,7 +594,7 @@ var pluginManager = function pluginManager(){
581
594
config = config || JSON . parse ( JSON . stringify ( countlyConfig ) ) ;
582
595
583
596
if ( typeof config . mongodb === 'string' ) {
584
- dbName = db ? config . mongodb . replace ( new RegExp ( ' countly$' ) , db ) : config . mongodb ;
597
+ dbName = db ? config . mongodb . replace ( / \/ c o u n t l y \b / , "/" + db ) : config . mongodb ;
585
598
//remove protocol
586
599
dbName = dbName . split ( "://" ) . pop ( ) ;
587
600
if ( dbName . indexOf ( "@" ) !== - 1 ) {
@@ -651,17 +664,29 @@ var pluginManager = function pluginManager(){
651
664
return this . singleDefaultConnection ( ) ;
652
665
}
653
666
654
- var db ;
667
+ var db , maxPoolSize = 10 ;
668
+ if ( ! cluster . isMaster ) {
669
+ //we are in worker
670
+ maxPoolSize = 500 ;
671
+ }
655
672
if ( typeof config == "string" ) {
656
673
db = config ;
657
674
config = JSON . parse ( JSON . stringify ( countlyConfig ) ) ;
658
675
}
659
- else
676
+ else {
660
677
config = config || JSON . parse ( JSON . stringify ( countlyConfig ) ) ;
678
+ }
679
+
680
+ if ( config && typeof config . mongodb == "string" ) {
681
+ var urlParts = url . parse ( config . mongodb , true ) ;
682
+ if ( urlParts && urlParts . query && urlParts . query . maxPoolSize ) {
683
+ maxPoolSize = urlParts . query . maxPoolSize ;
684
+ }
685
+ }
661
686
662
687
var dbName ;
663
688
var dbOptions = {
664
- poolSize : config . mongodb . max_pool_size ,
689
+ poolSize : maxPoolSize ,
665
690
reconnectInterval : 1000 ,
666
691
reconnectTries :999999999 ,
667
692
autoReconnect :true ,
@@ -671,7 +696,7 @@ var pluginManager = function pluginManager(){
671
696
socketTimeoutMS : 999999999
672
697
} ;
673
698
if ( typeof config . mongodb === 'string' ) {
674
- dbName = db ? config . mongodb . replace ( new RegExp ( ' countly$' ) , db ) : config . mongodb ;
699
+ dbName = db ? config . mongodb . replace ( / \/ c o u n t l y \b / , "/" + db ) : config . mongodb ;
675
700
} else {
676
701
config . mongodb . db = db || config . mongodb . db || 'countly' ;
677
702
if ( typeof config . mongodb . replSetServers === 'object' ) {
0 commit comments