This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.9 KiB
80 lines
1.9 KiB
var util = require('util'), |
|
os = require('os'), |
|
path = require('path'), |
|
mkdirp = require('mkdirp'), |
|
rimraf = require('rimraf'), |
|
fs = require('fs'); |
|
|
|
function SourceStore(/*opts*/) { |
|
} |
|
|
|
SourceStore.prototype.registerSource = function (/* filePath, sourceText */) { |
|
throw new Error('registerSource must be overridden'); |
|
}; |
|
|
|
SourceStore.prototype.getSource = function (/* filePath */) { |
|
throw new Error('getSource must be overridden'); |
|
}; |
|
|
|
SourceStore.prototype.dispose = function () { |
|
}; |
|
|
|
function MemoryStore() { |
|
this.data = {}; |
|
} |
|
|
|
util.inherits(MemoryStore, SourceStore); |
|
|
|
MemoryStore.prototype.registerSource = function (filePath, sourceText) { |
|
this.data[filePath] = sourceText; |
|
}; |
|
|
|
MemoryStore.prototype.getSource = function (filePath) { |
|
return this.data[filePath] || null; |
|
}; |
|
|
|
function FileStore(opts) { |
|
opts = opts || {}; |
|
var tmpDir = opts.tmpdir || os.tmpdir(); |
|
this.counter = 0; |
|
this.mappings = []; |
|
this.basePath = path.resolve(tmpDir, '.istanbul', 'cache_'); |
|
mkdirp.sync(path.dirname(this.basePath)); |
|
} |
|
|
|
util.inherits(FileStore, SourceStore); |
|
|
|
FileStore.prototype.registerSource = function (filePath, sourceText) { |
|
if (this.mappings[filePath]) { |
|
return; |
|
} |
|
this.counter += 1; |
|
var mapFile = this.basePath + this.counter; |
|
this.mappings[filePath] = mapFile; |
|
fs.writeFileSync(mapFile, sourceText, 'utf8'); |
|
}; |
|
|
|
FileStore.prototype.getSource = function (filePath) { |
|
var mapFile = this.mappings[filePath]; |
|
if (!mapFile) { |
|
return null; |
|
} |
|
return fs.readFileSync(mapFile, 'utf8'); |
|
}; |
|
|
|
FileStore.prototype.dispose = function () { |
|
this.mappings = []; |
|
rimraf.sync(path.dirname(this.basePath)); |
|
}; |
|
|
|
module.exports = { |
|
create: function (type, opts) { |
|
opts = opts || {}; |
|
type = (type || 'memory').toLowerCase(); |
|
|
|
if (type === 'file') { |
|
return new FileStore(opts); |
|
} |
|
return new MemoryStore(opts); |
|
} |
|
};
|
|
|