tileblaster 0.4.3 → 0.4.5

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.
Files changed (2) hide show
  1. package/lib/tileblaster.js +32 -32
  2. package/package.json +6 -6
@@ -8,17 +8,17 @@ var util = require("util");
8
8
  var zlib = require("zlib");
9
9
  var stream = require("stream");
10
10
 
11
- var debug = require("debug")("tileblaster");
12
11
  var phin = require("phin");
13
12
  var queue = require("quu");
14
- var glob = require("glob");
13
+ var walk = require("klaw");
15
14
  var dur = require("dur");
16
15
 
17
- // optional dependencies; if only
16
+ // optional dependencies;
18
17
  try { var pnck = require("pnck"); } catch (err) { var pnck = null; }
19
18
  try { var jpck = require("jpck"); } catch (err) { var jpck = null; }
20
19
  try { var zopfli = require("node-zopfli"); } catch (err) { var zopfli = null; }
21
20
  try { var versatiles = require("versatiles"); } catch (err) { var versatiles = null; }
21
+ try { var debug = require("debug")("tileblaster"); } catch (err) { var debug = function(){ if (process.env.DEBUG) console.error(...arguments); }}
22
22
 
23
23
  // load package
24
24
  var pckg = require("../package.json");
@@ -198,7 +198,7 @@ tileblaster.prototype.reconfigure = function(config){
198
198
  // cleanup timer
199
199
  self.config.cleanup = (!!self.config.cleanup) ? dur(self.config.cleanup) : false;
200
200
  if (!!self.cleaner) clearInterval(self.cleaner);
201
- if (self.config.cleanup && self.expiration) self.cleaner = setInterval(function(){ self.cleanup(); }, self.config.cleanup).unref();
201
+ if (self.config.cleanup && self.expiration) self.cleaner = setInterval(function(){ self.cleanup(); }, self.config.cleanup).unref(), self.cleanup();
202
202
 
203
203
  };
204
204
 
@@ -307,7 +307,16 @@ tileblaster.prototype.listen = function(){
307
307
  tileblaster.prototype.heartbeat = function(){
308
308
  var self = this;
309
309
 
310
- if (!!self.config.heartbeat) self.nsa = require("nsa")({
310
+ if (!self.config.heartbeat) return;
311
+
312
+ // check if nsa dependency is installed
313
+ try {
314
+ var nsa = require("nsa");
315
+ } catch (err) {
316
+ return debug("<heartbeat> missing dependency: nsa");
317
+ }
318
+
319
+ self.nsa = nsa({
311
320
  server: self.config.heartbeat,
312
321
  service: self.config.id,
313
322
  interval: "10s"
@@ -351,41 +360,32 @@ tileblaster.prototype.cleanup = function(){
351
360
 
352
361
  // clean up error cache
353
362
  var d = Date.now();
354
- self.errcache = self.errcache.filter(function(e){
355
- return (e.until > d);
356
- });
363
+ self.errcache = Object.entries(self.errcache).reduce(function(errcache, [ key, value ]){
364
+ if (value.until < d) errcache[key] = value;
365
+ return errcache;
366
+ },{});
357
367
 
358
- // FIXME: extra process
368
+ // delete queue
369
+ var deletequeue = queue(1000);
370
+ var now = Date.now();
359
371
 
360
372
  // clean up map tiles
361
373
  Object.keys(self.maps).filter(function(mapid){
362
374
  return (!!self.maps[mapid].expires);
363
375
  }).forEach(function(mapid){
364
376
  self.queue.push(function(done){
365
- debug("<cleanup> [%s] start", mapid);
366
- glob(path.resolve(self.config.tiles, mapid, '**/*'), function(err, files){
367
- if (err) return debug("<cleanup> [%s] err: %s", mapid, err), done();
368
- if (files.length === 0) return debug("<cleanup> [%s] empty", mapid), done();
369
-
370
- var d = 0;
371
- var q = queue(5).done(function(n){
372
- return debug("<cleanup> [%s] checked %d files, deleted %d", mapid, n, d), done();
373
- });
374
-
375
- files.forEach(function(f){
376
- q.push(function(next){
377
- fs.stat(f, function(err, stat){
378
- if (err) return debug("<cleanup> [%s] err: %s", mapid, err), next();
379
- // debug("<cleanup> [%s] %d <> %d", f, (Date.now() - (stat.birthtimeMs || stat.ctimeMs)), self.maps[mapid].expires);
380
- if ((Date.now() - (stat.birthtimeMs || stat.ctimeMs)) < self.maps[mapid].expires) return next();
381
- fs.unlink(f, function(err){
382
- if (err) return debug("<cleanup> [%s] err: %s", mapid, err), next();
383
- d++;
384
- next();
385
- });
386
- });
387
- });
377
+ debug("<cleanup> start: %s", mapid);
378
+ walk(path.resolve(self.config.tiles, mapid)).on("data", function(f){
379
+ if (f.stats.isFile() && f.stats.mtimeMs+self.maps[mapid].expires < now) deletequeue.push(function(done){
380
+ fs.unlink(f.path, done);
388
381
  });
382
+ }).on("error", function(err){
383
+ if (err.code !== "ENOENT") debug("<cleanup> err: %s", err);
384
+ else debug("<cleanup> done: %s", mapid);
385
+ done();
386
+ }).on("end", function(){
387
+ debug("<cleanup> done: %s", mapid);
388
+ done();
389
389
  });
390
390
  });
391
391
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tileblaster",
3
- "version": "0.4.3",
3
+ "version": "0.4.5",
4
4
  "description": "pretty fast optimizing & compressing tile caching proxy",
5
5
  "main": "lib/tileblaster.js",
6
6
  "bin": {
@@ -17,19 +17,19 @@
17
17
  },
18
18
  "homepage": "https://github.com/yetzt/tileblaster#readme",
19
19
  "dependencies": {
20
- "debug": "^4.3.4",
21
20
  "dur": "^0.0.3",
22
- "glob": "^8.1.0",
21
+ "klaw": "^4.1.0",
23
22
  "minimist": "^1.2.7",
24
23
  "node-watch": "^0.7.3",
25
- "nsa": "^0.2",
26
24
  "phin": "^3.7.0",
27
25
  "quu": "^0.4.3"
28
26
  },
29
27
  "optionalDependencies": {
30
- "versatiles": "^0.2.0",
28
+ "debug": "^4.3.4",
31
29
  "jpck": "^1.0.2",
32
30
  "node-zopfli": "^2.1.4",
33
- "pnck": "^1.0.1"
31
+ "nsa": "^0.2",
32
+ "pnck": "^1.0.1",
33
+ "versatiles": "^0.2.0"
34
34
  }
35
35
  }