1
1
'use strict' ;
2
2
3
- var Leverage = require ( 'leverage' )
4
- , https = require ( 'https' )
3
+ var https = require ( 'https' )
5
4
, fuse = require ( 'fusing' )
6
- , ip = require ( 'ip' ) ;
7
-
8
- //
9
- // Ensure that the directory for our custom lua scripts is set correctly.
10
- //
11
- Leverage . scripts = Leverage . scripts . concat (
12
- Leverage . introduce ( require ( 'path' ) . join ( __dirname , 'redis' ) , Leverage . prototype )
13
- ) ;
5
+ , path = require ( 'path' )
6
+ , ip = require ( 'ip' )
7
+ , fs = require ( 'fs' ) ;
14
8
15
9
/**
16
10
* Add defaults to the supplied options. The following options are available:
@@ -32,17 +26,20 @@ function Metroplex(primus, options) {
32
26
options = options || { } ;
33
27
primus = primus || { } ;
34
28
35
- var parsed = this . parse ( primus . server ) ;
29
+ var lua = fs . readFileSync ( path . join ( __dirname , 'redis/annihilate.lua' ) , 'utf8' )
30
+ , parsed = this . parse ( primus . server ) ;
36
31
37
32
this . fuse ( ) ;
38
33
39
- this . redis = options . redis || require ( 'redis' ) . createClient ( ) ;
34
+ this . redis = options . redis || new require ( 'ioredis' ) ( ) ;
40
35
this . namespace = ( options . namespace || 'metroplex' ) + ':' ;
41
36
this . interval = options . interval || 5 * 60 * 1000 ;
42
37
this . timeout = options . timeout || 30 * 60 ;
43
38
this . latency = options . latency || 2000 ;
44
- this . leverage = new Leverage ( this . redis , {
45
- namespace : this . namespace
39
+
40
+ this . redis . defineCommand ( 'annihilate' , {
41
+ lua : lua . replace ( '{leverage::namespace}' , this . namespace ) ,
42
+ numberOfKeys : 1
46
43
} ) ;
47
44
48
45
if ( parsed || options . address ) {
@@ -90,21 +87,22 @@ Metroplex.readable('parse', function parse(server) {
90
87
* @api public
91
88
*/
92
89
Metroplex . readable ( 'register' , function register ( address , fn ) {
93
- var metroplex = this ;
90
+ var redis = this . redis
91
+ , metroplex = this ;
94
92
95
- metroplex . address = this . parse ( address || metroplex . address ) ;
93
+ metroplex . address = this . parse ( address ) ;
96
94
if ( ! metroplex . address ) {
97
95
if ( fn ) fn ( ) ;
98
96
return this ;
99
97
}
100
98
101
- metroplex . leverage . annihilate ( metroplex . address , function annihilate ( err ) {
99
+ redis . annihilate ( metroplex . address , function annihilate ( err ) {
102
100
if ( err ) {
103
101
if ( fn ) return fn ( err ) ;
104
102
return metroplex . emit ( 'error' , err ) ;
105
103
}
106
104
107
- metroplex . redis . multi ( )
105
+ redis . multi ( )
108
106
. psetex ( metroplex . namespace + metroplex . address , metroplex . interval , Date . now ( ) )
109
107
. sadd ( metroplex . namespace + 'servers' , metroplex . address )
110
108
. exec ( function register ( err ) {
@@ -119,6 +117,8 @@ Metroplex.readable('register', function register(address, fn) {
119
117
if ( fn ) fn ( err , metroplex . address ) ;
120
118
} ) ;
121
119
} ) ;
120
+
121
+ return this ;
122
122
} ) ;
123
123
124
124
/**
@@ -138,7 +138,7 @@ Metroplex.readable('unregister', function unregister(address, fn) {
138
138
return this ;
139
139
}
140
140
141
- metroplex . leverage . annihilate ( address , function annihilate ( err ) {
141
+ metroplex . redis . annihilate ( address , function annihilate ( err ) {
142
142
if ( err ) {
143
143
if ( fn ) return fn ( err ) ;
144
144
return metroplex . emit ( 'error' , err ) ;
@@ -200,7 +200,7 @@ Metroplex.readable('servers', function servers(self, fn) {
200
200
self = 0 ;
201
201
}
202
202
203
- this . redis . smembers ( this . namespace + 'servers' , function smembers ( err , members ) {
203
+ metroplex . redis . smembers ( this . namespace + 'servers' , function smembers ( err , members ) {
204
204
if ( self ) return fn ( err , members ) ;
205
205
206
206
fn ( err , ( members || [ ] ) . filter ( function filter ( address ) {
@@ -265,7 +265,7 @@ Metroplex.readable('setInterval', function setIntervals() {
265
265
redis . get ( metroplex . namespace + address , function get ( err , stamp ) {
266
266
if ( err || Date . now ( ) - + stamp < metroplex . interval ) return ;
267
267
268
- metroplex . leverage . annihilate ( address , function murdered ( err ) {
268
+ redis . annihilate ( address , function murdered ( err ) {
269
269
if ( err ) return metroplex . emit ( 'error' , err ) ;
270
270
} ) ;
271
271
} ) ;
0 commit comments