docker-storage-gc 3.5.12 → 4.0.0
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.
- package/.versionbot/CHANGELOG.yml +19 -1
- package/CHANGELOG.md +6 -0
- package/build/docker-event-stream.d.ts +8 -0
- package/build/docker-event-stream.js +80 -49
- package/build/docker-event-stream.js.map +1 -0
- package/build/docker-image-tree.d.ts +15 -0
- package/build/docker-image-tree.js +57 -76
- package/build/docker-image-tree.js.map +1 -0
- package/build/docker.d.ts +2 -0
- package/build/docker.js +21 -25
- package/build/docker.js.map +1 -0
- package/build/index.d.ts +33 -0
- package/build/index.js +174 -229
- package/build/index.js.map +1 -0
- package/lib/docker-event-stream.ts +93 -0
- package/lib/docker-image-tree.ts +94 -0
- package/lib/docker.ts +17 -0
- package/lib/index.ts +272 -0
- package/package.json +21 -13
- package/test/docker-event-stream.ts +46 -0
- package/test/docker-image-tree.ts +137 -0
- package/test/index.ts +228 -0
- package/tools/graphviz.ts +39 -0
- package/tsconfig.dev.json +13 -0
- package/tsconfig.json +22 -0
- package/index.d.ts +0 -23
- package/lib/docker-event-stream.coffee +0 -46
- package/lib/docker-image-tree.coffee +0 -56
- package/lib/docker.coffee +0 -13
- package/lib/index.coffee +0 -168
- package/test/docker-event-stream.coffee +0 -30
- package/test/docker-image-tree.coffee +0 -124
- package/test/index.coffee +0 -208
- package/tools/graphviz.coffee +0 -24
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
- commits:
|
|
2
|
+
- subject: Update to dockerode 3.x
|
|
3
|
+
hash: c6b5416ef2026eba121414cbd349d0717a6d3a68
|
|
4
|
+
body: ""
|
|
5
|
+
footer:
|
|
6
|
+
Change-type: major
|
|
7
|
+
change-type: major
|
|
8
|
+
author: Pagan Gazzard
|
|
9
|
+
- subject: Convert to typescript
|
|
10
|
+
hash: cb4d9a210d5ab04c04757065c126c22ebe2f8f0c
|
|
11
|
+
body: ""
|
|
12
|
+
footer:
|
|
13
|
+
Change-type: major
|
|
14
|
+
change-type: major
|
|
15
|
+
author: Pagan Gazzard
|
|
16
|
+
version: 4.0.0
|
|
17
|
+
title: ""
|
|
18
|
+
date: 2023-12-04T17:24:20.893Z
|
|
1
19
|
- commits:
|
|
2
20
|
- subject: Update event-stream to 4.x
|
|
3
21
|
hash: 5d60200c8c776fff5b93d3750df8603e64db3ebf
|
|
@@ -8,7 +26,7 @@
|
|
|
8
26
|
author: Pagan Gazzard
|
|
9
27
|
version: 3.5.12
|
|
10
28
|
title: ""
|
|
11
|
-
date: 2023-12-04T16:
|
|
29
|
+
date: 2023-12-04T16:03:37.996Z
|
|
12
30
|
- commits:
|
|
13
31
|
- subject: Remove unused `@balena/node-metrics-gatherer` dependency
|
|
14
32
|
hash: a1ab3e61619839799a32b629d425c67360e5fb8b
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file
|
|
|
4
4
|
automatically by Versionist. DO NOT EDIT THIS FILE MANUALLY!
|
|
5
5
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
|
6
6
|
|
|
7
|
+
# v4.0.0
|
|
8
|
+
## (2023-12-04)
|
|
9
|
+
|
|
10
|
+
* Update to dockerode 3.x [Pagan Gazzard]
|
|
11
|
+
* Convert to typescript [Pagan Gazzard]
|
|
12
|
+
|
|
7
13
|
# v3.5.12
|
|
8
14
|
## (2023-12-04)
|
|
9
15
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import Bluebird from 'bluebird';
|
|
2
|
+
import * as es from 'event-stream';
|
|
3
|
+
import type Docker from 'dockerode';
|
|
4
|
+
export interface LayerMtimes {
|
|
5
|
+
[id: string]: string | number | undefined;
|
|
6
|
+
}
|
|
7
|
+
export declare const parseEventStream: (docker: Docker) => Promise<es.MapStream>;
|
|
8
|
+
export declare function dockerMtimeStream(docker: Docker): Bluebird<es.MapStream>;
|
|
@@ -1,51 +1,82 @@
|
|
|
1
|
-
|
|
2
|
-
(function() {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.dockerMtimeStream = exports.parseEventStream = void 0;
|
|
30
|
+
const bluebird_1 = __importDefault(require("bluebird"));
|
|
31
|
+
const es = __importStar(require("event-stream"));
|
|
32
|
+
const JSONStream_1 = __importDefault(require("JSONStream"));
|
|
33
|
+
const IMAGE_EVENTS = ['delete', 'import', 'pull', 'push', 'tag'];
|
|
34
|
+
const CONTAINER_EVENTS = [
|
|
35
|
+
'attach',
|
|
36
|
+
'commit',
|
|
37
|
+
'copy',
|
|
38
|
+
'create',
|
|
39
|
+
'destroy',
|
|
40
|
+
'die',
|
|
41
|
+
'exec_create',
|
|
42
|
+
'exec_start',
|
|
43
|
+
'export',
|
|
44
|
+
'kill',
|
|
45
|
+
'oom',
|
|
46
|
+
'pause',
|
|
47
|
+
'rename',
|
|
48
|
+
'resize',
|
|
49
|
+
'restart',
|
|
50
|
+
'start',
|
|
51
|
+
'stop',
|
|
52
|
+
'top',
|
|
53
|
+
'unpause',
|
|
54
|
+
];
|
|
55
|
+
const parseEventStream = (docker) => docker.listImages({ all: true }).then(function (images) {
|
|
56
|
+
const layerMtimes = {};
|
|
57
|
+
for (const image of images) {
|
|
58
|
+
layerMtimes[image.Id] = 0;
|
|
59
|
+
}
|
|
60
|
+
return es.pipeline(JSONStream_1.default.parse(undefined), es.mapSync(function ({ status, id, from, timeNano }) {
|
|
61
|
+
if (IMAGE_EVENTS.includes(status)) {
|
|
62
|
+
if (status === 'delete') {
|
|
63
|
+
if (layerMtimes[id] != null) {
|
|
64
|
+
delete layerMtimes[id];
|
|
65
|
+
}
|
|
33
66
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
67
|
+
else {
|
|
68
|
+
layerMtimes[id] = timeNano;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else if (CONTAINER_EVENTS.includes(status)) {
|
|
72
|
+
layerMtimes[from] = timeNano;
|
|
39
73
|
}
|
|
40
|
-
return
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
}).call(this);
|
|
74
|
+
return layerMtimes;
|
|
75
|
+
}));
|
|
76
|
+
});
|
|
77
|
+
exports.parseEventStream = parseEventStream;
|
|
78
|
+
function dockerMtimeStream(docker) {
|
|
79
|
+
return bluebird_1.default.join(docker.getEvents(), (0, exports.parseEventStream)(docker), (stream, streamParser) => es.pipeline(stream, streamParser));
|
|
80
|
+
}
|
|
81
|
+
exports.dockerMtimeStream = dockerMtimeStream;
|
|
82
|
+
//# sourceMappingURL=docker-event-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-event-stream.js","sourceRoot":"","sources":["../lib/docker-event-stream.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wDAAgC;AAChC,iDAAmC;AACnC,4DAAoC;AAGpC,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAEjE,MAAM,gBAAgB,GAAG;IACxB,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,SAAS;IACT,KAAK;IACL,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,MAAM;IACN,KAAK;IACL,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,OAAO;IACP,MAAM;IACN,KAAK;IACL,SAAS;CACT,CAAC;AA4BK,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,EAAE,CAClD,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,MAAM;IACrD,MAAM,WAAW,GAAgB,EAAE,CAAC;IAKpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,CAAC,QAAQ,CACjB,oBAAU,CAAC,KAAK,CAAC,SAAS,CAAwB,EAClD,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAe;QAC/D,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACzB,IAAI,WAAW,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;oBAC7B,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;gBACxB,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,WAAW,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;YAC5B,CAAC;QACF,CAAC;aAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;QAC9B,CAAC;QACD,OAAO,WAAW,CAAC;IACpB,CAAC,CAAC,CACF,CAAC;AACH,CAAC,CAAC,CAAC;AA5BS,QAAA,gBAAgB,oBA4BzB;AAEJ,SAAgB,iBAAiB,CAAC,MAAc;IAC/C,OAAO,kBAAQ,CAAC,IAAI,CACnB,MAAM,CAAC,SAAS,EAAE,EAClB,IAAA,wBAAgB,EAAC,MAAM,CAAC,EACxB,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,CACxB,EAAE,CAAC,QAAQ,CAAC,MAA6B,EAAE,YAAY,CAAC,CACzD,CAAC;AACH,CAAC;AAPD,8CAOC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import Bluebird from 'bluebird';
|
|
2
|
+
import type Docker from 'dockerode';
|
|
3
|
+
import { LayerMtimes } from './docker-event-stream';
|
|
4
|
+
export declare const createNode: (id: string) => ImageNode;
|
|
5
|
+
export interface ImageNode {
|
|
6
|
+
id: string;
|
|
7
|
+
size: number;
|
|
8
|
+
repoTags: string[];
|
|
9
|
+
repoDigests: string[];
|
|
10
|
+
mtime: LayerMtimes[string];
|
|
11
|
+
children: Record<string, ImageNode>;
|
|
12
|
+
isUsedByAContainer?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const createTree: (images: Docker.ImageInfo[], containers: Docker.ContainerInfo[], layerMtimes: LayerMtimes) => ImageNode;
|
|
15
|
+
export declare function dockerImageTree(docker: Docker, layerMtimes: LayerMtimes): Bluebird<ImageNode>;
|
|
@@ -1,85 +1,66 @@
|
|
|
1
|
-
|
|
2
|
-
(function() {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
saneRepoAttrs = function(repoAttrs) {
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.dockerImageTree = exports.createTree = exports.createNode = void 0;
|
|
7
|
+
const bluebird_1 = __importDefault(require("bluebird"));
|
|
8
|
+
const saneRepoAttrs = function (repoAttrs) {
|
|
11
9
|
if (repoAttrs == null) {
|
|
12
|
-
|
|
10
|
+
return [];
|
|
13
11
|
}
|
|
14
|
-
if (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return repoAttrs;
|
|
12
|
+
if (repoAttrs.includes('<none>:<none>') ||
|
|
13
|
+
repoAttrs.includes('<none>@<none>')) {
|
|
14
|
+
return [];
|
|
18
15
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
exports.createNode = createNode = function(id) {
|
|
22
|
-
return {
|
|
23
|
-
id: id,
|
|
24
|
-
size: 0,
|
|
25
|
-
repoTags: [],
|
|
26
|
-
repoDigests: [],
|
|
27
|
-
mtime: null,
|
|
28
|
-
children: {}
|
|
29
|
-
};
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
getMtimeFrom = function(layer_mtimes, attributes) {
|
|
33
|
-
var i, key, len;
|
|
34
|
-
for (i = 0, len = attributes.length; i < len; i++) {
|
|
35
|
-
key = attributes[i];
|
|
36
|
-
if (layer_mtimes[key] != null) {
|
|
37
|
-
return layer_mtimes[key];
|
|
38
|
-
}
|
|
16
|
+
else {
|
|
17
|
+
return repoAttrs;
|
|
39
18
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
19
|
+
};
|
|
20
|
+
const createNode = (id) => ({
|
|
21
|
+
id,
|
|
22
|
+
size: 0,
|
|
23
|
+
repoTags: [],
|
|
24
|
+
repoDigests: [],
|
|
25
|
+
mtime: undefined,
|
|
26
|
+
children: {},
|
|
27
|
+
});
|
|
28
|
+
exports.createNode = createNode;
|
|
29
|
+
const getMtimeFrom = function (layerMtimes, attributes) {
|
|
30
|
+
for (const key of attributes) {
|
|
31
|
+
if (layerMtimes[key] != null) {
|
|
32
|
+
return layerMtimes[key];
|
|
33
|
+
}
|
|
47
34
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
node.isUsedByAContainer = usedImageIds.has(image.Id);
|
|
70
|
-
parent.children[image.Id] = node;
|
|
35
|
+
};
|
|
36
|
+
const getMtime = function (tree, layerMtimes) {
|
|
37
|
+
return (layerMtimes[tree.id] ??
|
|
38
|
+
getMtimeFrom(layerMtimes, tree.repoTags) ??
|
|
39
|
+
getMtimeFrom(layerMtimes, tree.repoDigests));
|
|
40
|
+
};
|
|
41
|
+
const createTree = function (images, containers, layerMtimes) {
|
|
42
|
+
const now = Date.now() * Math.pow(10, 6);
|
|
43
|
+
const usedImageIds = new Set(containers.map((c) => c.ImageID));
|
|
44
|
+
const tree = {};
|
|
45
|
+
const root = '0000000000000000000000000000000000000000000000000000000000000000';
|
|
46
|
+
for (const image of images) {
|
|
47
|
+
const node = (tree[image.Id] ??= (0, exports.createNode)(image.Id));
|
|
48
|
+
const parentId = image.ParentId || root;
|
|
49
|
+
const parent = (tree[parentId] ??= (0, exports.createNode)(parentId));
|
|
50
|
+
node.repoTags = saneRepoAttrs(image.RepoTags);
|
|
51
|
+
node.repoDigests = saneRepoAttrs(image.RepoDigests);
|
|
52
|
+
node.size = image.Size;
|
|
53
|
+
node.mtime = getMtime(node, layerMtimes) ?? now;
|
|
54
|
+
node.isUsedByAContainer = usedImageIds.has(image.Id);
|
|
55
|
+
parent.children[image.Id] = node;
|
|
71
56
|
}
|
|
72
57
|
tree[root].mtime = now;
|
|
73
58
|
tree[root].isUsedByAContainer = false;
|
|
74
59
|
return tree[root];
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}), layer_mtimes, createTree);
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
}).call(this);
|
|
60
|
+
};
|
|
61
|
+
exports.createTree = createTree;
|
|
62
|
+
function dockerImageTree(docker, layerMtimes) {
|
|
63
|
+
return bluebird_1.default.join(docker.listImages({ all: true }), docker.listContainers({ all: true }), layerMtimes, exports.createTree);
|
|
64
|
+
}
|
|
65
|
+
exports.dockerImageTree = dockerImageTree;
|
|
66
|
+
//# sourceMappingURL=docker-image-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-image-tree.js","sourceRoot":"","sources":["../lib/docker-image-tree.ts"],"names":[],"mappings":"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"}
|
package/build/docker.js
CHANGED
|
@@ -1,27 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
(function() {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return Bluebird.resolve(hostObj);
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getDocker = void 0;
|
|
7
|
+
const dockerode_1 = __importDefault(require("dockerode"));
|
|
8
|
+
const bluebird_1 = __importDefault(require("bluebird"));
|
|
9
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
10
|
+
const getDockerConnectOpts = function (hostObj) {
|
|
11
|
+
if (!lodash_1.default.isEmpty(hostObj)) {
|
|
12
|
+
return Promise.resolve(hostObj);
|
|
14
13
|
}
|
|
15
|
-
return
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
return Promise.resolve({
|
|
15
|
+
socketPath: '/var/run/docker.sock',
|
|
16
|
+
Promise: bluebird_1.default,
|
|
18
17
|
});
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
}).call(this);
|
|
18
|
+
};
|
|
19
|
+
function getDocker(hostObj) {
|
|
20
|
+
return getDockerConnectOpts(hostObj).then((opts) => new dockerode_1.default(opts));
|
|
21
|
+
}
|
|
22
|
+
exports.getDocker = getDocker;
|
|
23
|
+
//# sourceMappingURL=docker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../lib/docker.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA+B;AAC/B,wDAAgC;AAChC,oDAAuB;AAEvB,MAAM,oBAAoB,GAAG,UAAU,OAA6B;IACnE,IAAI,CAAC,gBAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC;QACtB,UAAU,EAAE,sBAAsB;QAClC,OAAO,EAAE,kBAAqC;KAC9C,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,SAAgB,SAAS,CAAC,OAA6B;IACtD,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,mBAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE,CAAC;AAFD,8BAEC"}
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { EventEmitter } from 'eventemitter3';
|
|
2
|
+
import Docker from 'dockerode';
|
|
3
|
+
interface Events {
|
|
4
|
+
numberImagesToRemove(n: number): void;
|
|
5
|
+
gcRunTime(duration: number): void;
|
|
6
|
+
imageRemoved(removalType: string): void;
|
|
7
|
+
spaceReclaimed(reclaimSpace: number): void;
|
|
8
|
+
imageRemovalError(statusCode: string): void;
|
|
9
|
+
}
|
|
10
|
+
type Metrics = EventEmitter<Events>;
|
|
11
|
+
export default class DockerGC {
|
|
12
|
+
metrics: Metrics;
|
|
13
|
+
private host;
|
|
14
|
+
private docker;
|
|
15
|
+
private dockerProgress;
|
|
16
|
+
private currentMtimes;
|
|
17
|
+
private baseImagePromise;
|
|
18
|
+
setHostname(hostname: string): void;
|
|
19
|
+
setDocker(hostObj: Docker.DockerOptions): Promise<void>;
|
|
20
|
+
setupMtimeStream(): Promise<void>;
|
|
21
|
+
private removeImage;
|
|
22
|
+
private tryRemoveImageBy;
|
|
23
|
+
garbageCollect(reclaimSpace: number, attemptAll?: boolean): Promise<void>;
|
|
24
|
+
private getOutput;
|
|
25
|
+
private runDisposer;
|
|
26
|
+
getDaemonFreeSpace(): Promise<{
|
|
27
|
+
used: number;
|
|
28
|
+
total: number;
|
|
29
|
+
free: number;
|
|
30
|
+
}>;
|
|
31
|
+
private getDaemonArchitecture;
|
|
32
|
+
}
|
|
33
|
+
export {};
|