Add telemetry for TRAP caching
This commit is contained in:
parent
ca10a6d552
commit
4139682b64
63 changed files with 1195 additions and 126 deletions
37
node_modules/get-folder-size/README.md
generated
vendored
Normal file
37
node_modules/get-folder-size/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# get-folder-size
|
||||
|
||||
Get the size of a folder by iterating through its sub-files and folders.
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
getFolderSize(folder, [regexIgnorePattern], callback)
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```js
|
||||
const getSize = require('get-folder-size');
|
||||
|
||||
getSize(myFolder, (err, size) => {
|
||||
if (err) { throw err; }
|
||||
|
||||
console.log(size + ' bytes');
|
||||
console.log((size / 1024 / 1024).toFixed(2) + ' MB');
|
||||
});
|
||||
```
|
||||
|
||||
## CLI tool
|
||||
|
||||
```bash
|
||||
npm i -g get-folder-size
|
||||
get-folder-size --folder=/my/folder --ignore=node_modules
|
||||
```
|
||||
|
||||
## Size vs Size on disk
|
||||
|
||||
[This module calculates the actual file size, and not the size on disk.](https://web.archive.org/web/20140712235443/https://stackoverflow.com/questions/15470787/please-help-me-understand-size-vs-size-on-disk)
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
22
node_modules/get-folder-size/bin/get-folder-size
generated
vendored
Executable file
22
node_modules/get-folder-size/bin/get-folder-size
generated
vendored
Executable file
|
|
@ -0,0 +1,22 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
const getSize = require('../');
|
||||
const argv = require('gar')(process.argv.slice(2));
|
||||
const path = require('path');
|
||||
// --folder or -f or last argument passed
|
||||
const folder = argv.folder || argv.f || argv._[argv._.length - 1];
|
||||
|
||||
if (!folder) {
|
||||
console.error('missing folder argument');
|
||||
console.error('\n Usage:\n');
|
||||
console.error('get-folder-size --folder=/home/alex/www');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const ignore = argv.ignore ? new RegExp(argv.ignore) : null;
|
||||
|
||||
getSize(path.resolve(folder), ignore, (err, bytes) => {
|
||||
if (err) { throw err; }
|
||||
|
||||
console.log((bytes / 1024 / 1024).toFixed(2) + ' Mb');
|
||||
});
|
||||
15
node_modules/get-folder-size/example.js
generated
vendored
Normal file
15
node_modules/get-folder-size/example.js
generated
vendored
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
'use strict';
|
||||
|
||||
const path = require('path');
|
||||
const getSize = require('./');
|
||||
|
||||
if (!process.env.FOLDER) {
|
||||
throw new Error('FOLDER env var needed');
|
||||
}
|
||||
|
||||
getSize(path.resolve(process.env.FOLDER), (err, size) => {
|
||||
if (err) { throw err; }
|
||||
|
||||
console.log(size + ' bytes');
|
||||
console.log((size / 1024 / 1024).toFixed(2) + ' Mb');
|
||||
});
|
||||
66
node_modules/get-folder-size/index.js
generated
vendored
Normal file
66
node_modules/get-folder-size/index.js
generated
vendored
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
'use strict';
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const eachAsync = require('tiny-each-async');
|
||||
|
||||
function readSizeRecursive(seen, item, ignoreRegEx, callback) {
|
||||
let cb;
|
||||
let ignoreRegExp;
|
||||
|
||||
if (!callback) {
|
||||
cb = ignoreRegEx;
|
||||
ignoreRegExp = null;
|
||||
} else {
|
||||
cb = callback;
|
||||
ignoreRegExp = ignoreRegEx;
|
||||
}
|
||||
|
||||
fs.lstat(item, function lstat(e, stats) {
|
||||
let total = !e ? (stats.size || 0) : 0;
|
||||
|
||||
if (stats) {
|
||||
if (seen.has(stats.ino)) { return cb(null, 0); }
|
||||
|
||||
seen.add(stats.ino);
|
||||
}
|
||||
|
||||
if (!e && stats.isDirectory()) {
|
||||
fs.readdir(item, (err, list) => {
|
||||
if (err) { return cb(err); }
|
||||
|
||||
eachAsync(
|
||||
list,
|
||||
5000,
|
||||
(dirItem, next) => {
|
||||
readSizeRecursive(
|
||||
seen,
|
||||
path.join(item, dirItem),
|
||||
ignoreRegExp,
|
||||
(error, size) => {
|
||||
if (!error) { total += size; }
|
||||
|
||||
next(error);
|
||||
}
|
||||
);
|
||||
},
|
||||
(finalErr) => {
|
||||
cb(finalErr, total);
|
||||
}
|
||||
);
|
||||
});
|
||||
} else {
|
||||
if (ignoreRegExp && ignoreRegExp.test(item)) {
|
||||
total = 0;
|
||||
}
|
||||
|
||||
cb(e, total);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = (...args) => {
|
||||
args.unshift(new Set());
|
||||
|
||||
return readSizeRecursive(...args);
|
||||
};
|
||||
33
node_modules/get-folder-size/package.json
generated
vendored
Normal file
33
node_modules/get-folder-size/package.json
generated
vendored
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"name": "get-folder-size",
|
||||
"version": "2.0.1",
|
||||
"description": "Get the size of a folder by recursively iterating through all its sub(files && folders).",
|
||||
"main": "index.js",
|
||||
"bin": {
|
||||
"get-folder-size": "bin/get-folder-size"
|
||||
},
|
||||
"dependencies": {
|
||||
"gar": "^1.0.4",
|
||||
"tiny-each-async": "2.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"husky": "^0.10.1",
|
||||
"mocha": "^5.2.0",
|
||||
"proxyquire": "^1.7.3",
|
||||
"should": "^7.1.1"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "mocha",
|
||||
"precommit": "npm test"
|
||||
},
|
||||
"keywords": [
|
||||
"folder",
|
||||
"size"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/alessioalex/get-folder-size.git"
|
||||
},
|
||||
"author": "Alexandru Vladutu <alexandru.vladutu@gmail.com>",
|
||||
"license": "MIT"
|
||||
}
|
||||
102
node_modules/get-folder-size/test.js
generated
vendored
Normal file
102
node_modules/get-folder-size/test.js
generated
vendored
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
'use strict';
|
||||
|
||||
const proxyquire = require('proxyquire');
|
||||
const path = require('path');
|
||||
require('should');
|
||||
|
||||
let files = [
|
||||
'/root',
|
||||
'/root/folder',
|
||||
'/root/folder/subfolder',
|
||||
'/root/folder/subfolder/file4',
|
||||
'/root/folder/file3',
|
||||
'/root/file1',
|
||||
'/root/file2'
|
||||
];
|
||||
|
||||
const sizes = {
|
||||
'/root/folder/subfolder/file4': 4,
|
||||
'/root/folder/file3': 3,
|
||||
'/root/file1': 1,
|
||||
'/root/file2': 2
|
||||
};
|
||||
|
||||
let inos = {};
|
||||
|
||||
Object.keys(sizes).forEach(file => {
|
||||
const file2 = file.replace(/\//g, path.sep);
|
||||
|
||||
sizes[file2] = sizes[file];
|
||||
});
|
||||
|
||||
files = files.map(file => file.replace(/\//g, path.sep));
|
||||
|
||||
let inoCounter = 0;
|
||||
|
||||
const fs = {
|
||||
lstat: (item, cb) => {
|
||||
const stats = {
|
||||
size: sizes[item],
|
||||
isDirectory: () => {
|
||||
return ((item === files[0]) || /folder$/.test(item));
|
||||
},
|
||||
ino: inos[item] || ++inoCounter
|
||||
};
|
||||
|
||||
setImmediate(() => cb(null, stats));
|
||||
},
|
||||
readdir: (item, cb) => {
|
||||
setImmediate(() => {
|
||||
const list = files.filter(file => {
|
||||
return ((file !== item) && (file.indexOf(item) !== -1));
|
||||
}).map(file => {
|
||||
return file.replace(item, '');
|
||||
}).filter(it => {
|
||||
return (it.lastIndexOf(path.sep) <= 0);
|
||||
});
|
||||
|
||||
cb(null, list);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
describe('getSize', () => {
|
||||
let getSize;
|
||||
|
||||
before(() => {
|
||||
getSize = proxyquire.load('./index', {
|
||||
fs: fs
|
||||
});
|
||||
});
|
||||
|
||||
it('should get the size of the folder', (done) => {
|
||||
getSize(files[0], (err, total) => {
|
||||
total.should.eql(10);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should ignore files', (done) => {
|
||||
getSize(files[0], /(file1|file2)/, (err, total) => {
|
||||
total.should.eql(7);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should not count hardlinks twice', (done) => {
|
||||
inos['/root/file1'] = 222;
|
||||
inos['/root/file2'] = inos['/root/file1'];
|
||||
|
||||
getSize(files[0], (err, total) => {
|
||||
total.should.eql(8);
|
||||
|
||||
delete inos['/root/file1'];
|
||||
delete inos['/root/file2'];
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue