cloudcms-server 0.9.256 → 0.9.257

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,7 @@
1
- var path = require("path");
1
+ var redisClientFactory = require("../../clients/redis");
2
+ var redisHelper = require("../../util/redis");
2
3
 
3
- var NRP = require('node-redis-pubsub');
4
-
5
- var logFactory = require("../../util/logger");
4
+ var NRP = require("../../clients/nrp");
6
5
 
7
6
  /**
8
7
  * Redis broadcast provider.
@@ -12,55 +11,31 @@ var logFactory = require("../../util/logger");
12
11
  exports = module.exports = function(broadcastConfig)
13
12
  {
14
13
  var nrp = null;
15
-
16
- var logger = logFactory("REDIS BROADCAST");
17
- logger.setLevel("error");
18
-
19
- // allow for global redis default
20
- // allow for redis broadcast specific
21
- // otherwise default to "error"
22
- if (typeof(process.env.CLOUDCMS_REDIS_DEBUG_LEVEL) !== "undefined") {
23
- logger.setLevel(("" + process.env.CLOUDCMS_REDIS_DEBUG_LEVEL).toLowerCase(), true);
24
- }
25
- else if (typeof(process.env.CLOUDCMS_BROADCAST_REDIS_DEBUG_LEVEL) !== "undefined") {
26
- logger.setLevel(("" + process.env.CLOUDCMS_BROADCAST_REDIS_DEBUG_LEVEL).toLowerCase(), true);
27
- }
28
-
14
+
15
+ var logger = redisHelper.redisLogger("REDIS_BROADCAST", "CLOUDCMS_BROADCAST_", "error")
16
+
29
17
  var r = {};
30
18
 
31
19
  r.start = function(callback)
32
20
  {
33
- var redisPort = broadcastConfig.port;
34
- if (typeof(redisPort) === "undefined" || !redisPort)
35
- {
36
- redisPort = process.env.CLOUDCMS_BROADCAST_REDIS_PORT;
37
- }
38
- if (typeof(redisPort) === "undefined" || !redisPort)
39
- {
40
- redisPort = process.env.CLOUDCMS_REDIS_PORT;
41
- }
42
-
43
- var redisEndpoint = broadcastConfig.endpoint;
44
- if (typeof(redisEndpoint) === "undefined" || !redisEndpoint)
45
- {
46
- redisEndpoint = process.env.CLOUDCMS_BROADCAST_REDIS_ENDPOINT;
47
- }
48
- if (typeof(redisEndpoint) === "undefined" || !redisEndpoint)
49
- {
50
- redisEndpoint = process.env.CLOUDCMS_REDIS_ENDPOINT;
51
- }
52
-
53
- var nrpConfig = {
54
- "port": redisPort,
55
- "host": redisEndpoint,
56
- "scope": "broadcast_cache"
57
- };
58
-
59
- logger.info("using config = " + nrpConfig);
60
-
61
- nrp = new NRP(nrpConfig);
62
-
63
- callback();
21
+ redisClientFactory.create(broadcastConfig, function(err, client) {
22
+
23
+ if (err) {
24
+ return callback(err);
25
+ }
26
+
27
+ var nrpConfig = {
28
+ "client": client,
29
+ "scope": "broadcast_cache"
30
+ };
31
+
32
+ logger.info("using config = " + nrpConfig);
33
+
34
+ nrp = new NRP(nrpConfig);
35
+ nrp.connect(function(err) {
36
+ callback(err);
37
+ });
38
+ });
64
39
  };
65
40
 
66
41
  r.publish = function(topic, message, callback)
package/clients/nrp.js ADDED
@@ -0,0 +1,117 @@
1
+ // a revision of
2
+ // https://raw.githubusercontent.com/louischatriot/node-redis-pubsub/master/lib/node-redis-pubsub.js
3
+ // that works with Redis 6+
4
+
5
+ "use strict";
6
+ var redis = require('redis');
7
+
8
+ /**
9
+ * Create a new NodeRedisPubsub instance that can subscribe to channels and publish messages
10
+ * @param {Object} options Options for the client creations:
11
+ * client - a connected Redis client
12
+ * scope - Optional, two NodeRedisPubsubs with different scopes will not share messages
13
+ */
14
+ function NodeRedisPubsub(options)
15
+ {
16
+ if (!(this instanceof NodeRedisPubsub)){ return new NodeRedisPubsub(options); }
17
+
18
+ options || (options = {});
19
+
20
+ this.emitter = options.client.duplicate();
21
+ this.emitter.setMaxListeners(0);
22
+ this.receiver = options.client.duplicate();
23
+ this.receiver.setMaxListeners(0);
24
+
25
+ this.prefix = options.scope ? options.scope + ':' : '';
26
+ }
27
+
28
+ NodeRedisPubsub.prototype.connect = function(callback)
29
+ {
30
+ var self = this;
31
+
32
+ (async function() {
33
+ await self.emitter.connect();
34
+ await self.receiver.connect();
35
+ callback();
36
+ })();
37
+ };
38
+
39
+ /**
40
+ * Subscribe to a channel
41
+ * @param {String} channel The channel to subscribe to, can be a pattern e.g. 'user.*'
42
+ * @param {Function} handler Function to call with the received message.
43
+ * @param {Function} cb Optional callback to call once the handler is registered.
44
+ */
45
+ NodeRedisPubsub.prototype.on = NodeRedisPubsub.prototype.subscribe = function(channel, handler, callback)
46
+ {
47
+ if (!callback)
48
+ {
49
+ callback = function(){};
50
+ }
51
+
52
+ var self = this;
53
+
54
+ if (channel === "error")
55
+ {
56
+ self.errorHandler = handler;
57
+ self.emitter.on("error", handler);
58
+ self.receiver.on("error", handler);
59
+ return callback();
60
+ }
61
+
62
+ var listener = function(self, handler)
63
+ {
64
+ return function(message, channel) {
65
+
66
+ var jsonmsg = message;
67
+ try{
68
+ jsonmsg = JSON.parse(message);
69
+ } catch (ex){
70
+ if(typeof self.errorHandler === 'function'){
71
+ return self.errorHandler("Invalid JSON received! Channel: " + self.prefix + channel + " Message: " + message);
72
+ }
73
+ }
74
+ return handler(jsonmsg, channel);
75
+ }
76
+ }(self, handler);
77
+
78
+ (async function() {
79
+ await self.receiver.pSubscribe(self.prefix + channel, listener);
80
+ })();
81
+
82
+ callback();
83
+ };
84
+
85
+ /**
86
+ * Emit an event
87
+ * @param {String} channel Channel on which to emit the message
88
+ * @param {Object} message
89
+ */
90
+ NodeRedisPubsub.prototype.emit = NodeRedisPubsub.prototype.publish = function (channel, message)
91
+ {
92
+ var self = this;
93
+
94
+ (async function() {
95
+ return await self.emitter.publish(self.prefix + channel, JSON.stringify(message));
96
+ })();
97
+ };
98
+
99
+ /**
100
+ * Safely close the redis connections 'soon'
101
+ */
102
+ NodeRedisPubsub.prototype.quit = function()
103
+ {
104
+ this.emitter.quit();
105
+ this.receiver.quit();
106
+ };
107
+
108
+ /**
109
+ * Dangerously close the redis connections immediately
110
+ */
111
+ NodeRedisPubsub.prototype.end = function()
112
+ {
113
+ this.emitter.end(true);
114
+ this.receiver.end(true);
115
+ };
116
+
117
+ module.exports = NodeRedisPubsub;
@@ -0,0 +1,48 @@
1
+ var redis = require("redis");
2
+ var redisHelper = require("../util/redis");
3
+
4
+ var clients = {};
5
+
6
+ /**
7
+ * Redis client factory.
8
+ *
9
+ * @type {*}
10
+ */
11
+ exports = module.exports = {};
12
+
13
+ var create = exports.create = function(config, callback)
14
+ {
15
+ if (typeof(config) === "function") {
16
+ callback = config;
17
+ config = {};
18
+ }
19
+
20
+ if (!config) {
21
+ config = {};
22
+ }
23
+
24
+ var redisOptions = redisHelper.redisOptions(config);
25
+ var url = redisOptions.url;
26
+
27
+ // cached client?
28
+ var client = clients[url];
29
+ if (client) {
30
+ return callback(null, client);
31
+ }
32
+
33
+ // connect
34
+ (async function() {
35
+ await redisHelper.createAndConnect(redisOptions, function(err, client) {
36
+
37
+ if (err) {
38
+ return callback(err);
39
+ }
40
+
41
+ // cache it
42
+ clients[url] = client;
43
+
44
+ // return
45
+ return callback(null, client);
46
+ });
47
+ })();
48
+ };
@@ -1,7 +1,8 @@
1
- var path = require("path");
2
- var redis = require("redis");
3
1
  var logFactory = require("../../util/logger");
4
- var redisHelper = require("../../util/redis");
2
+ //var redisHelper = require("../../util/redis");
3
+
4
+ var redisClientFactory = require("../../clients/redis");
5
+ const redisHelper = require("../../util/redis");
5
6
 
6
7
  /**
7
8
  * Redis lock service.
@@ -17,33 +18,24 @@ exports = module.exports = function(locksConfig)
17
18
  delay: 50
18
19
  });
19
20
 
20
- var nrp = null;
21
21
  var client = null;
22
-
23
- var logger = logFactory("REDIS LOCK");
24
-
25
- // allow for global redis default
26
- // allow for redis broadcast specific
27
- // otherwise default to error
28
- if (typeof(process.env.CLOUDCMS_REDIS_DEBUG_LEVEL) !== "undefined") {
29
- logger.setLevel(("" + process.env.CLOUDCMS_REDIS_DEBUG_LEVEL).toLowerCase(), true);
30
- }
31
- else if (typeof(process.env.CLOUDCMS_LOCKS_REDIS_DEBUG_LEVEL) !== "undefined") {
32
- logger.setLevel(("" + process.env.CLOUDCMS_LOCKS_REDIS_DEBUG_LEVEL).toLowerCase(), true);
33
- }
34
- else {
35
- logger.setLevel("error");
36
- }
37
-
22
+
23
+ var logger = redisHelper.redisLogger("REDIS_LOCKS", "CLOUDCMS_LOCKS_", "error")
24
+
38
25
  var r = {};
39
26
 
40
27
  r.init = function(callback)
41
28
  {
42
- var redisOptions = redisHelper.redisOptions(locksConfig, "CLOUDCMS_LOCKS");
43
-
44
- client = redis.createClient(redisOptions);
45
-
46
- callback();
29
+ redisClientFactory.create(locksConfig, function(err, _client) {
30
+
31
+ if (err) {
32
+ return callback(err);
33
+ }
34
+
35
+ client = _client;
36
+
37
+ return callback();
38
+ });
47
39
  };
48
40
 
49
41
  r.lock = function(key, fn)
@@ -18,7 +18,7 @@ exports = module.exports = function()
18
18
  {
19
19
  var z = ref.indexOf("://");
20
20
 
21
- var type = ref.substring(0, z + 3);
21
+ var type = ref.substring(0, z);
22
22
  var identifier = ref.substring(z + 3);
23
23
 
24
24
  var parts = identifier.split("/").reverse();
@@ -132,7 +132,7 @@ exports = module.exports = function()
132
132
  {
133
133
  assertAuthenticated(req, res, function() {
134
134
 
135
- doResetCache(req.virtualHost, req.ref, function(err) {
135
+ doResetCache(req.virtualHost, req.query.ref, function(err) {
136
136
  completionFn(req.virtualHost, res, err);
137
137
  });
138
138
 
@@ -1,132 +1,152 @@
1
1
  var AbstractAsyncProvider = require("./abstract-async");
2
2
 
3
- var redis = require("redis");
3
+ //var redis = require("redis");
4
4
  var async = require("async");
5
5
 
6
6
  var logFactory = require("../../../util/logger");
7
- var redisHelper = require("../../../util/redis");
7
+ //var redisHelper = require("../../../util/redis");
8
+
9
+ var redisClientFactory = require("../../../clients/redis");
10
+ const redisHelper = require("../../../util/redis");
8
11
 
9
12
  class RedisProvider extends AbstractAsyncProvider
10
13
  {
11
14
  constructor(config)
12
15
  {
13
16
  super(config);
14
-
15
- this.logger = logFactory("AWARENESS REDIS");
16
-
17
- // allow for global redis default
18
- // allow for redis broadcast specific
19
- // otherwise default to error
20
- if (typeof(process.env.CLOUDCMS_REDIS_DEBUG_LEVEL) !== "undefined") {
21
- this.logger.setLevel(("" + process.env.CLOUDCMS_REDIS_DEBUG_LEVEL).toLowerCase(), true);
22
- }
23
- else if (typeof(process.env.CLOUDCMS_AWARENESS_REDIS_DEBUG_LEVEL) !== "undefined") {
24
- this.logger.setLevel(("" + process.env.CLOUDCMS_AWARENESS_REDIS_DEBUG_LEVEL).toLowerCase(), true);
25
- }
26
- else {
27
- this.logger.setLevel("error");
28
- }
17
+
18
+ this.logger = redisHelper.redisLogger("REDIS_AWARENESS", "CLOUDCMS_AWARENESS_", "error")
29
19
  }
30
20
 
31
21
  init(callback)
32
22
  {
33
23
  var self = this;
24
+
25
+ redisClientFactory.create(config, function(err, _client) {
26
+
27
+ if (err) {
28
+ return callback(err);
29
+ }
30
+
31
+ self.client = _client;
32
+
33
+ return callback();
34
+
35
+ });
36
+
37
+ (async function() {
38
+ var redisOptions = redisHelper.redisOptions(this.config, "CLOUDCMS_AWARENESS");
39
+ await redisHelper.createAndConnect(redisOptions, function(err, _client) {
34
40
 
35
- var redisOptions = redisHelper.redisOptions(this.config, "CLOUDCMS_AWARENESS");
36
-
37
- this.client = redis.createClient(redisOptions);
38
-
39
- callback();
41
+ });
42
+ })();
40
43
  }
41
44
 
42
45
  readOrCreateChannel(channelId, callback)
43
46
  {
44
47
  var self = this;
48
+
49
+ (async function() {
45
50
 
46
- self.client.get("channel-" + channelId, function(err, channelJsonText) {
47
-
48
- if (err) {
49
- return callback(err);
50
- }
51
-
52
- if (channelJsonText)
53
- {
54
- var channel = JSON.parse("" + channelJsonText);
55
- return callback(null, channel);
56
- }
57
-
58
- var channel = {};
59
- self.client.set("channel-" + channelId, JSON.stringify(channel), function(err) {
60
-
51
+ await self.client.get("channel-" + channelId, function(err, channelJsonText) {
52
+
61
53
  if (err) {
62
54
  return callback(err);
63
55
  }
64
-
65
- callback(null, channel);
56
+
57
+ if (channelJsonText)
58
+ {
59
+ var channel = JSON.parse("" + channelJsonText);
60
+ return callback(null, channel);
61
+ }
62
+
63
+ (async function() {
64
+ var channel = {};
65
+ await self.client.set("channel-" + channelId, JSON.stringify(channel), function (err) {
66
+
67
+ if (err) {
68
+ return callback(err);
69
+ }
70
+
71
+ callback(null, channel);
72
+ });
73
+ })();
66
74
  });
67
- });
75
+
76
+ })();
68
77
  };
69
78
 
70
79
  readChannel(channelId, callback)
71
80
  {
72
81
  var self = this;
73
-
74
- self.client.get("channel-" + channelId, function(err, channelJsonText) {
75
-
76
- if (err) {
77
- return callback(err);
78
- }
79
-
80
- if (channelJsonText)
81
- {
82
- var channel = JSON.parse("" + channelJsonText);
83
- return callback(null, channel);
84
- }
85
-
86
- callback();
87
- });
82
+
83
+ (async function() {
84
+
85
+ await self.client.get("channel-" + channelId, function(err, channelJsonText) {
86
+
87
+ if (err) {
88
+ return callback(err);
89
+ }
90
+
91
+ if (channelJsonText)
92
+ {
93
+ var channel = JSON.parse("" + channelJsonText);
94
+ return callback(null, channel);
95
+ }
96
+
97
+ callback();
98
+ });
99
+
100
+ })();
88
101
  };
89
102
 
90
103
  writeChannel(channelId, channel, callback)
91
104
  {
92
105
  var self = this;
106
+
107
+ (async function() {
93
108
 
94
- self.client.set("channel-" + channelId, JSON.stringify(channel), function(err) {
95
-
96
- if (err) {
97
- return callback(err);
98
- }
99
-
100
- callback();
101
- });
109
+ await self.client.set("channel-" + channelId, JSON.stringify(channel), function(err) {
110
+
111
+ if (err) {
112
+ return callback(err);
113
+ }
114
+
115
+ callback();
116
+ });
117
+
118
+ })();
102
119
  };
103
120
 
104
121
  listChannelIds(callback)
105
122
  {
106
123
  var self = this;
107
-
108
- // fetch all keys for channels
109
- self.client.keys("channel-*", function(err, channelKeys) {
110
-
111
- if (err)
112
- {
113
- return callback(err);
114
- }
115
-
116
- if (!channelKeys || channelKeys.length === 0)
117
- {
118
- return callback(null, []);
119
- }
120
-
121
- var channelIds = [];
122
- for (var i = 0; i < channelKeys.length; i++)
123
- {
124
- var channelId = channelKeys[i].substring(channelKeys[i].indexOf("-") + 1);
125
- channelIds.push(channelId);
126
- }
127
-
128
- callback(null, channelIds);
129
- });
124
+
125
+ (async function() {
126
+
127
+ // fetch all keys for channels
128
+ await self.client.keys("channel-*", function(err, channelKeys) {
129
+
130
+ if (err)
131
+ {
132
+ return callback(err);
133
+ }
134
+
135
+ if (!channelKeys || channelKeys.length === 0)
136
+ {
137
+ return callback(null, []);
138
+ }
139
+
140
+ var channelIds = [];
141
+ for (var i = 0; i < channelKeys.length; i++)
142
+ {
143
+ var channelId = channelKeys[i].substring(channelKeys[i].indexOf("-") + 1);
144
+ channelIds.push(channelId);
145
+ }
146
+
147
+ callback(null, channelIds);
148
+ });
149
+ })();
130
150
  };
131
151
 
132
152
  /**
@@ -221,106 +241,126 @@ class RedisProvider extends AbstractAsyncProvider
221
241
  readLock(lockId, callback)
222
242
  {
223
243
  var self = this;
244
+
245
+ (async function() {
224
246
 
225
- self.client.get("lock-" + lockId, function(err, lockJsonText) {
226
-
227
- if (err) {
228
- return callback(err);
229
- }
230
-
231
- if (lockJsonText)
232
- {
233
- var lock = JSON.parse("" + lockJsonText);
234
- return callback(null, lock);
235
- }
236
-
237
- callback();
238
- });
247
+ await self.client.get("lock-" + lockId, function(err, lockJsonText) {
248
+
249
+ if (err) {
250
+ return callback(err);
251
+ }
252
+
253
+ if (lockJsonText)
254
+ {
255
+ var lock = JSON.parse("" + lockJsonText);
256
+ return callback(null, lock);
257
+ }
258
+
259
+ callback();
260
+ });
261
+ })();
239
262
  };
240
263
 
241
264
  writeLock(lockId, lock, callback)
242
265
  {
243
266
  var self = this;
244
-
245
- self.client.set("lock-" + lockId, JSON.stringify(lock), function(err) {
246
-
247
- if (err) {
248
- return callback(err);
249
- }
250
-
251
- callback();
252
- });
267
+
268
+ (async function() {
269
+
270
+ await self.client.set("lock-" + lockId, JSON.stringify(lock), function(err) {
271
+
272
+ if (err) {
273
+ return callback(err);
274
+ }
275
+
276
+ callback();
277
+ });
278
+
279
+ })();
253
280
  };
254
281
 
255
282
  deleteLock(lockId, callback)
256
283
  {
257
284
  var self = this;
285
+
286
+ (async function() {
287
+
288
+ await self.client.del("lock-" + lockId, function(err) {
258
289
 
259
- self.client.del("lock-" + lockId, function(err) {
260
-
261
- if (err) {
262
- return callback(err);
263
- }
264
-
265
- callback();
266
- });
290
+ if (err) {
291
+ return callback(err);
292
+ }
293
+
294
+ callback();
295
+ });
296
+
297
+ })();
267
298
  };
268
299
 
269
300
  listLockIds(callback)
270
301
  {
271
302
  var self = this;
272
-
273
- // fetch all keys for locks
274
- self.client.keys("lock-*", function(err, lockKeys) {
275
-
276
- if (err)
277
- {
278
- return callback(err);
279
- }
280
-
281
- if (!lockKeys || lockKeys.length === 0)
282
- {
283
- return callback(null, []);
284
- }
285
-
286
- var lockIds = [];
287
- for (var i = 0; i < lockKeys.length; i++)
288
- {
289
- var lockId = lockKeys[i].substring(0, lockKeys[i].indexOf("-"));
290
- lockIds.push(lockId);
291
- }
292
-
293
- callback(null, lockIds);
294
- });
303
+
304
+ (async function() {
305
+
306
+ // fetch all keys for locks
307
+ await self.client.keys("lock-*", function(err, lockKeys) {
308
+
309
+ if (err)
310
+ {
311
+ return callback(err);
312
+ }
313
+
314
+ if (!lockKeys || lockKeys.length === 0)
315
+ {
316
+ return callback(null, []);
317
+ }
318
+
319
+ var lockIds = [];
320
+ for (var i = 0; i < lockKeys.length; i++)
321
+ {
322
+ var lockId = lockKeys[i].substring(0, lockKeys[i].indexOf("-"));
323
+ lockIds.push(lockId);
324
+ }
325
+
326
+ callback(null, lockIds);
327
+ });
328
+
329
+ })();
295
330
  };
296
331
 
297
332
  acquireSession(sessionId, callback)
298
333
  {
299
334
  var self = this;
300
-
301
- self.client.get("session-" + sessionId, function(err, sessionJsonText) {
302
-
303
- if (err) {
304
- return callback(err);
305
- }
306
-
307
- if (sessionJsonText)
308
- {
309
- var session = JSON.parse("" + sessionJsonText);
310
- return callback(null, session);
311
- }
312
-
313
- // create a new session
314
- var session = {};
315
- self.client.set("session-" + sessionId, JSON.stringify(session), function(err) {
316
-
335
+
336
+ (async function() {
337
+
338
+ await self.client.get("session-" + sessionId, function(err, sessionJsonText) {
339
+
317
340
  if (err) {
318
341
  return callback(err);
319
342
  }
320
-
321
- callback(null, session);
343
+
344
+ if (sessionJsonText)
345
+ {
346
+ var session = JSON.parse("" + sessionJsonText);
347
+ return callback(null, session);
348
+ }
349
+
350
+ // create a new session
351
+ (async function() {
352
+ var session = {};
353
+ await self.client.set("session-" + sessionId, JSON.stringify(session), function(err) {
354
+
355
+ if (err) {
356
+ return callback(err);
357
+ }
358
+
359
+ callback(null, session);
360
+ });
361
+ })();
322
362
  });
323
- });
363
+ })();
324
364
  }
325
365
 
326
366
  updateSession(sessionId, session, callback)
@@ -330,30 +370,35 @@ class RedisProvider extends AbstractAsyncProvider
330
370
  if (!session) {
331
371
  session = {};
332
372
  }
333
-
334
- // create a new session
335
- self.client.set("session-" + sessionId, JSON.stringify(session), function(err) {
336
-
337
- if (err) {
338
- return callback(err);
339
- }
340
-
341
- callback(null, session);
342
- });
373
+
374
+ (async function() {
375
+
376
+ // create a new session
377
+ await self.client.set("session-" + sessionId, JSON.stringify(session), function (err) {
378
+
379
+ if (err) {
380
+ return callback(err);
381
+ }
382
+
383
+ callback(null, session);
384
+ });
385
+ })();
343
386
  }
344
387
 
345
388
  deleteSession(sessionId, callback)
346
389
  {
347
390
  var self = this;
348
-
349
- self.client.del("session-" + sessionId, function(err) {
350
-
351
- if (err) {
352
- return callback(err);
353
- }
354
-
355
- callback();
356
- });
391
+
392
+ (async function() {
393
+ await self.client.del("session-" + sessionId, function (err) {
394
+
395
+ if (err) {
396
+ return callback(err);
397
+ }
398
+
399
+ callback();
400
+ });
401
+ })();
357
402
  }
358
403
 
359
404
  }
@@ -1,7 +1,10 @@
1
- var path = require("path");
1
+ //var path = require("path");
2
2
 
3
- var redis = require("redis");
3
+ //var redis = require("redis");
4
4
  var logFactory = require("../../../util/logger");
5
+ //const redisHelper = require("../../../util/redis");
6
+
7
+ var redisClientFactory = require("../../../clients/redis");
5
8
  const redisHelper = require("../../../util/redis");
6
9
 
7
10
  /**
@@ -12,103 +15,161 @@ const redisHelper = require("../../../util/redis");
12
15
  exports = module.exports = function(cacheConfig)
13
16
  {
14
17
  var client = null;
15
-
16
- var logger = this.logger = logFactory("REDIS CACHE");
17
- logger.setLevel("error");
18
-
19
- // allow for global redis default
20
- // allow for redis broadcast specific
21
- // otherwise default to error
22
- if (typeof(process.env.CLOUDCMS_REDIS_DEBUG_LEVEL) !== "undefined") {
23
- logger.setLevel(("" + process.env.CLOUDCMS_REDIS_DEBUG_LEVEL).toLowerCase(), true);
24
- }
25
- else if (typeof(process.env.CLOUDCMS_CACHE_REDIS_DEBUG_LEVEL) !== "undefined") {
26
- logger.setLevel(("" + process.env.CLOUDCMS_CACHE_REDIS_DEBUG_LEVEL).toLowerCase(), true);
27
- }
18
+
19
+ var logger = redisHelper.redisLogger("REDIS_CACHE", "CLOUDCMS_CACHE_", "error")
28
20
 
29
21
  var r = {};
30
22
 
31
23
  r.init = function(callback)
32
24
  {
33
- var self = this;
25
+ redisClientFactory.create(cacheConfig, function(err, _client) {
34
26
 
35
- var redisOptions = redisHelper.redisOptions(cacheConfig, "CLOUDCMS_CACHE");
36
-
37
- client = redis.createClient(redisOptions);
38
-
39
- callback();
27
+ if (err) {
28
+ return callback(err);
29
+ }
30
+
31
+ client = _client;
32
+
33
+ return callback();
34
+
35
+ });
40
36
  };
41
37
 
42
38
  r.write = function(key, value, seconds, callback)
43
39
  {
44
- if (seconds <= -1)
45
- {
46
- client.set([key, JSON.stringify(value)], function(err, reply) {
47
- if (err) {
48
- logger.error("write error. key: " + key + " value: " + JSON.stringify(value) + ". error:" + err);
40
+ logger.info('write, key = ' + key + ', value = ' + value + '', seconds = ' + seconds');
41
+ (async function() {
42
+
43
+ var reply = null;
44
+ var err = null;
45
+
46
+ try
47
+ {
48
+ if (seconds <= -1)
49
+ {
50
+ reply = await client.set([key, JSON.stringify(value)]);
49
51
  }
50
- logger.info("write -> reply = " + reply);
51
- callback(err, reply);
52
- });
53
- }
54
- else
55
- {
56
- client.set([key, JSON.stringify(value), "EX", seconds], function(err, reply) {
57
- if (err) {
58
- logger.error("write.ex error. key: " + key + " value: " + JSON.stringify(value) + ". error:" + err);
52
+ else
53
+ {
54
+ reply = await client.set([key, JSON.stringify(value), "EX", seconds]);
59
55
  }
60
- logger.info("write.ex -> reply = " + reply);
61
- callback(err, reply);
62
- });
63
- }
56
+ }
57
+ catch (e)
58
+ {
59
+ err = e;
60
+ }
61
+
62
+ if (reply) {
63
+ logger.info("write -> reply = " + reply);
64
+ }
65
+
66
+ if (err) {
67
+ logger.error("write error. key: " + key + " value: " + JSON.stringify(value) + ". error:" + err);
68
+ }
69
+
70
+ callback(err, reply);
71
+
72
+ })();
64
73
  };
65
74
 
66
-     r.read = function(key, callback)
67
-     {
68
-         client.get([key], function(err, reply) {
75
+ r.read = function(key, callback)
76
+ {
77
+ logger.info('read, key = ' + key);
69
78
 
79
+ (async function() {
80
+
81
+ var err = null;
82
+ var reply = null;
83
+
84
+ try
85
+ {
86
+ reply = await client.get([key]);
87
+ }
88
+ catch (e)
89
+ {
90
+ err = e;
91
+ }
92
+
70
93
  if (err) {
71
94
  logger.error("read error. key: " + key + ". error:" + err);
72
95
  }
73
- logger.info("read. key: " + key + " -> reply = " + reply);
74
-             
96
+
97
+ if (reply) {
98
+ logger.info("read. key: " + key + " -> reply = " + reply);
99
+ }
100
+
75
101
  var result = null;
76
-             try
102
+ try
77
103
  {
78
-                 result = JSON.parse(reply);
79
-             }
104
+ result = JSON.parse(reply);
105
+ }
80
106
  catch (ex)
81
107
  {
82
-                 result = null;
83
-                 err = ex;
84
- if (err) {
108
+ result = null;
109
+ err = ex;
110
+
111
+ if (err)
112
+ {
85
113
  logger.error("error parsing reply. key: " + key + ". error:" + err);
86
114
  }
87
-             }
88
-
115
+ }
116
+
89
117
  callback(err, result);
90
-         });
91
-     };
118
+ })();
119
+ };
92
120
 
93
121
  r.remove = function(key, callback)
94
122
  {
95
- logger.info("remove. key: " + key);
96
- client.del([key], function(err) {
123
+ logger.info('remove, key = ' + key);
124
+
125
+ (async function() {
126
+
127
+ var err = null;
128
+
129
+ try
130
+ {
131
+ await client.del([key]);
132
+ logger.info("remove. key: " + key);
133
+ }
134
+ catch (e)
135
+ {
136
+ err = e;
137
+ }
138
+
97
139
  callback(err);
98
- });
140
+ })();
99
141
  };
100
142
 
101
143
  r.keys = function(prefix, callback)
102
-     {
103
- logger.info('keys. prefix = ' + prefix);
104
-         client.keys([prefix + '*'], function(err, reply) {
144
+ {
145
+ logger.info('keys, prefix = ' + prefix);
146
+
147
+ (async function() {
148
+
149
+ var err = null;
150
+ var reply = null;
151
+
152
+ try
153
+ {
154
+ reply = await client.keys([prefix + '*']);
155
+ }
156
+ catch (e)
157
+ {
158
+ err = e;
159
+ }
160
+
105
161
  if (err) {
106
162
  logger.error("error reading prefix: " + prefix + ". error:" + err);
107
163
  }
108
- logger.info("[keys -> reply = " + reply);
109
-             callback(err, reply);
110
-         });
111
-     };
164
+
165
+ if (reply) {
166
+ logger.info("[keys -> reply = " + reply);
167
+ }
168
+
169
+ callback(err, reply);
170
+
171
+ })();
172
+ };
112
173
 
113
174
  return r;
114
175
  };
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "name": "cloudcms-server",
8
8
  "description": "Cloud CMS Application Server Module",
9
- "version": "0.9.256",
9
+ "version": "0.9.257",
10
10
  "repository": {
11
11
  "type": "git",
12
12
  "url": "git://github.com/gitana/cloudcms-server.git"
@@ -51,7 +51,6 @@
51
51
  "mkdirp": "^0.5.1",
52
52
  "moment": "^2.24.0",
53
53
  "morgan": "^1.9.1",
54
- "node-redis-pubsub": "^5.0.0",
55
54
  "object-hash": "^1.3.1",
56
55
  "object-merge": "^2.5.1",
57
56
  "on-headers": "^1.0.2",
package/server/index.js CHANGED
@@ -671,25 +671,20 @@ var startSlave = function(config, afterStartFn)
671
671
  }
672
672
  else if (process.configuration.session.type === "redis")
673
673
  {
674
- var redisPort = process.env.CLOUDCMS_REDIS_PORT;
675
- var redisHost = process.env.CLOUDCMS_REDIS_ENDPOINT;
676
-
677
- if (!redisPort)
678
- {
679
- console.error("Cannot configure session for Redis storage because CLOUDCMS_REDIS_PORT is not defined");
680
- }
681
- else if (!redisHost)
682
- {
683
- console.error("Cannot configure session for Redis storage because CLOUDCMS_REDIS_ENDPOINT is not defined");
684
- }
685
- else
686
- {
674
+ (async function() {
687
675
  var redisOptions = redisHelper.redisOptions();
688
- var redisClient = redis.createClient(redisOptions);
689
-
690
- var RedisStore = connectRedis(session);
691
- sessionConfig.store = new RedisStore({ client: redisClient });
692
- }
676
+ redisHelper.createAndConnect(redisOptions, function(err, redisClient) {
677
+
678
+ if (err) {
679
+ console.error(err);
680
+ }
681
+ else
682
+ {
683
+ var RedisStore = connectRedis(session);
684
+ sessionConfig.store = new RedisStore({ client: redisClient });
685
+ }
686
+ });
687
+ })();
693
688
  }
694
689
  else if (process.configuration.session.type === "memory" || !process.configuration.session.type)
695
690
  {
package/util/redis.js CHANGED
@@ -1,5 +1,39 @@
1
+ var redis = require("redis");
2
+ const logFactory = require("./logger");
3
+
1
4
  exports = module.exports;
2
5
 
6
+ var redisLogger = exports.redisLogger = function(name, prefix, defaultLevel)
7
+ {
8
+ if (!defaultLevel) {
9
+ defaultLevel = "error";
10
+ }
11
+
12
+ var level = null;
13
+
14
+ // allow for global redis default
15
+ // allow for prefix specific
16
+ if (typeof(process.env["CLOUDCMS_REDIS_DEBUG_LEVEL"]) !== "undefined") {
17
+ level = "" + process.env["CLOUDCMS_REDIS_DEBUG_LEVEL"].toLowerCase();
18
+ }
19
+
20
+ if (!level && prefix)
21
+ {
22
+ if (typeof(process.env[prefix + "REDIS_DEBUG_LEVEL"]) !== "undefined") {
23
+ level = "" + process.env[prefix + "REDIS_DEBUG_LEVEL"].toLowerCase();
24
+ }
25
+ }
26
+
27
+ if (!level) {
28
+ level = defaultLevel;
29
+ }
30
+
31
+ var logger = logFactory(name);
32
+ logger.setLevel(level);
33
+
34
+ return logger;
35
+ }
36
+
3
37
  var redisOptions = exports.redisOptions = function(config, prefix)
4
38
  {
5
39
  if (!config) {
@@ -57,7 +91,23 @@ var redisOptions = exports.redisOptions = function(config, prefix)
57
91
 
58
92
  var redisOptions = {};
59
93
  redisOptions.url = redisUrl;
60
- redisOptions.legacyMode = true;
61
94
 
62
95
  return redisOptions;
63
96
  }
97
+
98
+ var createAndConnect = exports.createAndConnect = async function(redisOptions, callback)
99
+ {
100
+ var client = redis.createClient(redisOptions);
101
+
102
+ var connectErr = null;
103
+ client.on('error', function(err) {
104
+ console.log('Redis Client Error', err);
105
+ connectErr = err;
106
+ });
107
+
108
+ // connect
109
+ await client.connect();
110
+ //console.log("Connected to redis, options: " + JSON.stringify(redisOptions, null, 2) + ", err: " + connectErr + ", client: " + client);
111
+
112
+ return callback(connectErr, client);
113
+ }