per-profile cache directory using account+url slug
This commit is contained in:
parent
da8e13b45e
commit
1cc87edb0f
@ -337,6 +337,18 @@ function normShortId(s) {
|
||||
return shortId;
|
||||
}
|
||||
|
||||
/*
|
||||
* take a "profile" object and return a slug based on the account name
|
||||
* and DC URL. This is currently used to create a filesystem-safe name
|
||||
* to use for caching
|
||||
*/
|
||||
function slug(o) {
|
||||
var acct = o.account.replace(/[@]/g, '_');
|
||||
var url = o.url.replace(/^https?:\/\//, '');
|
||||
var s = format('%s@%s', acct, url).replace(/[!#$%\^&\*:'"\?\/\\\.]/g, '_');
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
//---- exports
|
||||
|
||||
@ -354,6 +366,7 @@ module.exports = {
|
||||
humanSizeFromBytes: humanSizeFromBytes,
|
||||
capitalize: capitalize,
|
||||
normShortId: normShortId,
|
||||
slug: slug,
|
||||
TABULA_OPTIONS: TABULA_OPTIONS
|
||||
};
|
||||
// vim: set softtabstop=4 shiftwidth=4:
|
||||
|
@ -67,7 +67,15 @@ function Triton(options) {
|
||||
this.profile = this.getProfile(
|
||||
options.profileName || this.config.defaultProfile);
|
||||
this.log.trace({profile: this.profile}, 'profile data');
|
||||
this.cacheDir = options.cacheDir;
|
||||
|
||||
if (options.cacheDir !== undefined) {
|
||||
var slug = common.slug(this.profile);
|
||||
this.cacheDir = path.join(options.cacheDir, slug);
|
||||
this.log.trace({cacheDir: this.cacheDir}, 'cache dir');
|
||||
try {
|
||||
fs.mkdirSync(this.cacheDir);
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
this.cloudapi = this._cloudapiFromProfile(this.profile);
|
||||
}
|
||||
@ -142,9 +150,10 @@ Triton.prototype.listImages = function listImages(opts, cb) {
|
||||
// try to read the cache if the user wants it
|
||||
// if this fails for any reason we fallback to hitting the cloudapi
|
||||
if (opts.useCache) {
|
||||
self.log.debug({file: cacheFile}, 'reading images cache file');
|
||||
fs.readFile(cacheFile, 'utf8', function (err, out) {
|
||||
if (err) {
|
||||
self.log.info({err: err, cacheFile: cacheFile},
|
||||
self.log.warn({err: err, cacheFile: cacheFile},
|
||||
'failed to read cache file');
|
||||
fetch();
|
||||
return;
|
||||
@ -153,12 +162,13 @@ Triton.prototype.listImages = function listImages(opts, cb) {
|
||||
try {
|
||||
data = JSON.parse(out);
|
||||
} catch (e) {
|
||||
self.log.info({err: e, cacheFile: cacheFile},
|
||||
self.log.warn({err: e, cacheFile: cacheFile},
|
||||
'failed to parse cache file');
|
||||
fetch();
|
||||
return;
|
||||
}
|
||||
|
||||
self.log.info('calling back with images cache data');
|
||||
cb(null, data, {});
|
||||
});
|
||||
return;
|
||||
@ -176,6 +186,7 @@ Triton.prototype.listImages = function listImages(opts, cb) {
|
||||
self.log.info({err: err2},
|
||||
'error caching images results');
|
||||
}
|
||||
self.log.trace({file: cacheFile}, 'images cache updated');
|
||||
done();
|
||||
});
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user