@emuanalytics/flow-cli 2.0.0 → 2.0.16
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/README.md +36 -0
- package/dist/commands/pipelines/cache.js +62 -0
- package/dist/commands/pipelines/cache.js.map +1 -0
- package/dist/commands/pipelines/components.js +134 -0
- package/dist/commands/pipelines/components.js.map +1 -0
- package/dist/commands/pipelines/config.js +77 -0
- package/dist/commands/pipelines/config.js.map +1 -0
- package/dist/commands/pipelines/list.js +31 -18
- package/dist/commands/pipelines/list.js.map +1 -1
- package/dist/commands/pipelines/sink.js +99 -0
- package/dist/commands/pipelines/sink.js.map +1 -0
- package/dist/commands/pipelines/source.js +97 -0
- package/dist/commands/pipelines/source.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Flo.w CLI
|
|
2
|
+
|
|
3
|
+
The Flo.w CLI (`flow-engine-cli`) is a command line interface for working with Flo.w Engine via its REST API. It provides developers
|
|
4
|
+
with tools to work with datasets, pipelines and other Flo.w resources.
|
|
5
|
+
|
|
6
|
+
## Setup and build
|
|
7
|
+
|
|
8
|
+
After cloning the repository, follow the instructions below to set up your development environment:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
# Install dependencies
|
|
12
|
+
npm install
|
|
13
|
+
|
|
14
|
+
# Build project
|
|
15
|
+
npm run build
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Running and debugging
|
|
19
|
+
|
|
20
|
+
The built CLI tool will be located in the `dist/` folder. To run the CLI, use the following command:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
node dist/index.js <commands> [options]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Note that this is equivalent to using `flow <commands> [options]` when the package is installed globally on an end-developers machine.
|
|
27
|
+
|
|
28
|
+
To debug the CLI during development, open a JavaScript debug terminal in VSCode (CMD-SHIFT-P and search for 'debug: ja')and run the CLI as above in the terminal. The debugger will attach to the running process and breakpoints can be set directly in the source code.
|
|
29
|
+
|
|
30
|
+
## Deployment
|
|
31
|
+
|
|
32
|
+
See the [README.md](../../README.md) file in the root of this monorepo for details on how to deploy packages.
|
|
33
|
+
|
|
34
|
+
## Support
|
|
35
|
+
|
|
36
|
+
Please contact robin.summerhill@emu-analytics.com for support with installing, building or deploying packages in this monorepo.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright © 2018 Emu Analytics
|
|
4
|
+
*/
|
|
5
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.handler = exports.builder = exports.desc = exports.command = void 0;
|
|
16
|
+
const utils_1 = require("../../utils");
|
|
17
|
+
exports.command = ['cache [id]'];
|
|
18
|
+
exports.desc = 'Show pipeline cache';
|
|
19
|
+
const builder = (args) => {
|
|
20
|
+
return args.positional('id', { describe: 'Pipeline id (or unique prefix)', type: 'string' });
|
|
21
|
+
};
|
|
22
|
+
exports.builder = builder;
|
|
23
|
+
function handler({ client, id, format }) {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
try {
|
|
26
|
+
const pipeline = yield (0, utils_1.resolveResource)(id, client.pipelines, 'id', ['components'], ['id', 'components.index']);
|
|
27
|
+
if (!pipeline) {
|
|
28
|
+
(0, utils_1.logObject)({ message: `Pipeline not found: ${id}` }, format || 'json');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const components = pipeline.components || [];
|
|
32
|
+
const caches = components
|
|
33
|
+
.filter((c) => c.class === 'cache')
|
|
34
|
+
.sort((a, b) => a.index - b.index);
|
|
35
|
+
const summaries = caches.map((s) => ({
|
|
36
|
+
id: s.id,
|
|
37
|
+
type: s.type,
|
|
38
|
+
description: s.description,
|
|
39
|
+
related_components: s.metadata.components.join()
|
|
40
|
+
}));
|
|
41
|
+
if (format === 'json') {
|
|
42
|
+
(0, utils_1.logObject)({
|
|
43
|
+
id: pipeline.id,
|
|
44
|
+
environment: pipeline.environment,
|
|
45
|
+
caches
|
|
46
|
+
}, 'json');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (summaries.length) {
|
|
50
|
+
(0, utils_1.logObject)(summaries, 'table');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
(0, utils_1.logInfo)('No Caches Found');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
(0, utils_1.logError)(e);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
exports.handler = handler;
|
|
62
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/commands/pipelines/cache.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;AAIH,uCAA4E;AAE/D,QAAA,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC;AAEzB,QAAA,IAAI,GAAG,qBAAqB,CAAC;AAEnC,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,EAAE;IAC1C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,gCAAgC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC/F,CAAC,CAAC;AAFW,QAAA,OAAO,WAElB;AAQF,SAAsB,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAU;;QAC1D,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAA,uBAAe,EACpC,EAAE,EACF,MAAM,CAAC,SAAS,EAChB,IAAI,EACJ,CAAC,YAAY,CAAC,EACd,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAC3B,CAAC;YAEF,IAAI,CAAC,QAAQ,EAAE;gBACb,IAAA,iBAAS,EAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE,EAAE,EAAE,MAAM,IAAI,MAAM,CAAC,CAAC;gBACtE,OAAO;aACR;YAED,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;YAE7C,MAAM,MAAM,GAAG,UAAU;iBACtB,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;iBACvC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAE/C,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gBACxC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,kBAAkB,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE;aACjD,CAAC,CAAC,CAAC;YAEJ,IAAI,MAAM,KAAK,MAAM,EAAE;gBACrB,IAAA,iBAAS,EACP;oBACE,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,MAAM;iBACP,EACD,MAAM,CACP,CAAC;gBACF,OAAO;aACR;YAED,IAAI,SAAS,CAAC,MAAM,EAAE;gBACpB,IAAA,iBAAS,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;aAC/B;iBAAM;gBACL,IAAA,eAAO,EAAC,iBAAiB,CAAC,CAAC;aAC5B;SACF;QAAC,OAAO,CAAC,EAAE;YACV,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;SACb;IACH,CAAC;CAAA;AAhDD,0BAgDC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright © 2018 Emu Analytics
|
|
4
|
+
*/
|
|
5
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.handler = exports.builder = exports.desc = exports.command = void 0;
|
|
16
|
+
const utils_1 = require("../../utils");
|
|
17
|
+
exports.command = ['components <id>', 'comps <id>'];
|
|
18
|
+
exports.desc = 'Show pipeline components';
|
|
19
|
+
const builder = (args) => {
|
|
20
|
+
return args.positional('id', { describe: 'Pipeline id (or unique prefix)', type: 'string' });
|
|
21
|
+
};
|
|
22
|
+
exports.builder = builder;
|
|
23
|
+
function handler({ client, id, format }) {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
try {
|
|
26
|
+
const pipeline = yield (0, utils_1.resolveResource)(id, client.pipelines, 'id', ['components'], ['id', 'components.index']);
|
|
27
|
+
if (!pipeline) {
|
|
28
|
+
(0, utils_1.logObject)({ message: `Pipeline not found: ${id}` }, format || 'json');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const components = pipeline.components || [];
|
|
32
|
+
if (format === 'json') {
|
|
33
|
+
(0, utils_1.logObject)(components, 'json');
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const rows = buildComponentRows(components);
|
|
37
|
+
if (!rows.length) {
|
|
38
|
+
(0, utils_1.logInfo)('No Components Found');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
(0, utils_1.logObject)(rows, 'table', ['id', 'class', 'type', 'description', 'note']);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
(0, utils_1.logError)(e);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
exports.handler = handler;
|
|
49
|
+
/**
|
|
50
|
+
* Transforms pipeline components into table rows
|
|
51
|
+
*/
|
|
52
|
+
function buildComponentRows(components) {
|
|
53
|
+
if (!components.length) {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
// Make component lookup
|
|
57
|
+
const componentsMap = {};
|
|
58
|
+
components.forEach(c => (componentsMap[c.id] = Object.assign(Object.assign({}, c), { next: [], previous: [], indent: 0 })));
|
|
59
|
+
// Assemble component topology
|
|
60
|
+
Object.values(componentsMap).forEach((c) => {
|
|
61
|
+
const metadata = c.metadata || {};
|
|
62
|
+
const previousIds = metadata.previousComponents || [];
|
|
63
|
+
const nextIds = metadata.nextComponents || [];
|
|
64
|
+
c.previous = previousIds.map((id) => componentsMap[id]);
|
|
65
|
+
c.next = nextIds.map((id) => componentsMap[id]);
|
|
66
|
+
});
|
|
67
|
+
// Group children by parent
|
|
68
|
+
const childrenByParent = {};
|
|
69
|
+
Object.values(componentsMap).forEach((c) => {
|
|
70
|
+
const metadata = c.metadata || {};
|
|
71
|
+
const parentId = metadata.parentComponent;
|
|
72
|
+
if (parentId) {
|
|
73
|
+
if (!childrenByParent[parentId]) {
|
|
74
|
+
childrenByParent[parentId] = [];
|
|
75
|
+
}
|
|
76
|
+
childrenByParent[parentId].push(c);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
// Sort children by index
|
|
80
|
+
Object.values(childrenByParent).forEach(children => {
|
|
81
|
+
children.sort((a, b) => a.index - b.index);
|
|
82
|
+
});
|
|
83
|
+
// Find root components (no previous, not cache)
|
|
84
|
+
const roots = Object.values(componentsMap).filter(c => c.class !== 'cache' && (c.previous || []).length === 0);
|
|
85
|
+
// Calculate indentation via traversal
|
|
86
|
+
const visited = new Set();
|
|
87
|
+
function traverse(node, indent) {
|
|
88
|
+
if (!node || visited.has(node.id)) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
visited.add(node.id);
|
|
92
|
+
node.indent = indent;
|
|
93
|
+
// Handle pipeline children
|
|
94
|
+
if (node.class === 'pipeline') {
|
|
95
|
+
const children = childrenByParent[node.id] || [];
|
|
96
|
+
children.forEach(child => traverse(child, indent + 1));
|
|
97
|
+
}
|
|
98
|
+
// Handle next components
|
|
99
|
+
const next = (node.next || []).filter((n) => n.class !== 'cache');
|
|
100
|
+
const increaseIndent = node.type === 'fp:fork' || next.length > 1;
|
|
101
|
+
next.forEach((n) => traverse(n, increaseIndent ? indent + 1 : indent));
|
|
102
|
+
}
|
|
103
|
+
roots.forEach(root => traverse(root, 0));
|
|
104
|
+
// Render table rows
|
|
105
|
+
return Object.values(componentsMap)
|
|
106
|
+
.filter(c => c.class !== 'cache')
|
|
107
|
+
.sort((a, b) => a.index - b.index)
|
|
108
|
+
.map(c => {
|
|
109
|
+
const notes = [];
|
|
110
|
+
const metadata = c.metadata || {};
|
|
111
|
+
const caches = metadata.caches || [];
|
|
112
|
+
if (caches.length > 0) {
|
|
113
|
+
notes.push(`uses cache: ${caches.join(', ')}`);
|
|
114
|
+
}
|
|
115
|
+
const prefix = c.indent > 0 ? ' '.repeat(c.indent) + '> ' : '';
|
|
116
|
+
function formatComponentId(component) {
|
|
117
|
+
if (component.class === 'pipeline') {
|
|
118
|
+
return `(${component.id})`;
|
|
119
|
+
}
|
|
120
|
+
if (component.type === 'fp:fork') {
|
|
121
|
+
return `[${component.id}]`;
|
|
122
|
+
}
|
|
123
|
+
return component.id;
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
id: prefix + formatComponentId(c),
|
|
127
|
+
class: c.class,
|
|
128
|
+
type: c.type,
|
|
129
|
+
description: c.description,
|
|
130
|
+
note: notes.join()
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/commands/pipelines/components.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright © 2018 Emu Analytics
|
|
4
|
+
*/
|
|
5
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.handler = exports.builder = exports.desc = exports.command = void 0;
|
|
16
|
+
const utils_1 = require("../../utils");
|
|
17
|
+
exports.command = ['config [id]'];
|
|
18
|
+
exports.desc = 'Show pipeline config';
|
|
19
|
+
const builder = (args) => {
|
|
20
|
+
return args.positional('id', { describe: 'Pipeline id (or unique prefix)', type: 'string' });
|
|
21
|
+
};
|
|
22
|
+
exports.builder = builder;
|
|
23
|
+
function handler({ client, id, format }) {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
try {
|
|
26
|
+
const pipeline = yield (0, utils_1.resolveResource)(id, client.pipelines, 'id');
|
|
27
|
+
const config = pipeline && pipeline.config;
|
|
28
|
+
if (!config || Object.keys(config).length === 0) {
|
|
29
|
+
(0, utils_1.logObject)({
|
|
30
|
+
message: `No configuration found for pipeline ${id}`
|
|
31
|
+
}, format || 'json');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const flattenedConfig = flattenObject(config);
|
|
35
|
+
if (format === 'json') {
|
|
36
|
+
(0, utils_1.logObject)(config, 'json');
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const table = Object.entries(flattenedConfig).map(([key, value]) => ({
|
|
40
|
+
key,
|
|
41
|
+
value
|
|
42
|
+
}));
|
|
43
|
+
(0, utils_1.logObject)(table, 'table', ['key', 'value']);
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
(0, utils_1.logError)(e);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
exports.handler = handler;
|
|
51
|
+
function isPlainObject(value) {
|
|
52
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
53
|
+
}
|
|
54
|
+
function flattenObject(obj, prefix = '', result = {}) {
|
|
55
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
56
|
+
const newKey = prefix ? `${prefix}.${key}` : key;
|
|
57
|
+
if (Array.isArray(value)) {
|
|
58
|
+
value.forEach((item, index) => {
|
|
59
|
+
const arrayKey = `${newKey}[${index}]`;
|
|
60
|
+
if (isPlainObject(item)) {
|
|
61
|
+
flattenObject(item, arrayKey, result);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
result[arrayKey] = item;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else if (isPlainObject(value)) {
|
|
69
|
+
flattenObject(value, newKey, result);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
result[newKey] = value;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/pipelines/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,35 +25,39 @@ const builder = (args) => {
|
|
|
25
25
|
.option('limit', { alias: 'n', type: 'number', describe: 'Limit to n results' })
|
|
26
26
|
.option('offset', { alias: ['o'], type: 'number', describe: 'Start list at offset n' })
|
|
27
27
|
.option('sort', { alias: ['s'], type: 'string', describe: 'Sort by attribute' })
|
|
28
|
-
.option('components', { type: 'boolean', describe: 'Include pipeline components' })
|
|
29
28
|
.positional('id', { describe: 'Pipeline id (or unique prefix)', type: 'string' })
|
|
30
29
|
.conflicts('id', ['limit', 'offset', 'sort']);
|
|
31
30
|
};
|
|
32
31
|
exports.builder = builder;
|
|
33
|
-
function
|
|
34
|
-
const now = (0, moment_1.default)();
|
|
35
|
-
const running = pipeline.heartbeatAt && now.diff((0, moment_1.default)(pipeline.heartbeatAt), 'seconds') < 30;
|
|
36
|
-
return Object.assign(Object.assign({}, pipeline), { heartbeatAt: { color: running ? '06a453' : 'e11529', value: pipeline.heartbeatAt } });
|
|
37
|
-
}
|
|
38
|
-
function handler({ client, id, format, offset, limit, sort: originalSort, components }) {
|
|
32
|
+
function handler({ client, id, format, offset, limit, sort: originalSort }) {
|
|
39
33
|
return __awaiter(this, void 0, void 0, function* () {
|
|
40
34
|
try {
|
|
41
|
-
|
|
42
|
-
const join = components ? ['components'] : undefined;
|
|
43
|
-
const sort = components ? ['id', 'components.index'] : originalSort || 'id';
|
|
35
|
+
const sort = originalSort || 'id';
|
|
44
36
|
if (id) {
|
|
45
|
-
const resource = yield (0, utils_1.resolveResource)(id, client.pipelines, 'id',
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
results = yield client.pipelines.list({ offset, limit, sort, join });
|
|
37
|
+
const resource = yield (0, utils_1.resolveResource)(id, client.pipelines, 'id', undefined, sort);
|
|
38
|
+
const result = extractVersion(resource);
|
|
50
39
|
if (format === 'table') {
|
|
51
|
-
|
|
52
|
-
(0, utils_1.logObject)(results, 'table', ['id', 'environment', 'description', 'startedAt', 'heartbeatAt']);
|
|
40
|
+
(0, utils_1.logObject)(mapHeartbeatToColor(result), 'table');
|
|
53
41
|
}
|
|
54
42
|
else {
|
|
55
|
-
(0, utils_1.logObject)(
|
|
43
|
+
(0, utils_1.logObject)(result, format);
|
|
56
44
|
}
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const pipelines = yield client.pipelines.list({ offset, limit, sort });
|
|
48
|
+
const results = pipelines.map(extractVersion);
|
|
49
|
+
if (format === 'table') {
|
|
50
|
+
(0, utils_1.logObject)(results.map(mapHeartbeatToColor), 'table', [
|
|
51
|
+
'id',
|
|
52
|
+
'environment',
|
|
53
|
+
'version',
|
|
54
|
+
'description',
|
|
55
|
+
'startedAt',
|
|
56
|
+
'heartbeatAt'
|
|
57
|
+
]);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
(0, utils_1.logObject)(results, format || 'json');
|
|
57
61
|
}
|
|
58
62
|
}
|
|
59
63
|
catch (e) {
|
|
@@ -62,4 +66,13 @@ function handler({ client, id, format, offset, limit, sort: originalSort, compon
|
|
|
62
66
|
});
|
|
63
67
|
}
|
|
64
68
|
exports.handler = handler;
|
|
69
|
+
function mapHeartbeatToColor(pipeline) {
|
|
70
|
+
const now = (0, moment_1.default)();
|
|
71
|
+
const running = pipeline.heartbeatAt && now.diff((0, moment_1.default)(pipeline.heartbeatAt), 'seconds') < 30;
|
|
72
|
+
return Object.assign(Object.assign({}, pipeline), { heartbeatAt: { color: running ? '06a453' : 'e11529', value: pipeline.heartbeatAt } });
|
|
73
|
+
}
|
|
74
|
+
function extractVersion(pipeline) {
|
|
75
|
+
const versionTag = pipeline.metadata.version && pipeline.metadata.version.tag;
|
|
76
|
+
return Object.assign(Object.assign({}, pipeline), { version: versionTag ? versionTag.replace(/^release-/, '') : versionTag });
|
|
77
|
+
}
|
|
65
78
|
//# sourceMappingURL=list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/pipelines/list.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;AAGH,oDAA4B;AAE5B,uCAAmE;AAEtD,QAAA,OAAO,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEpC,QAAA,IAAI,GAAG,gBAAgB,CAAC;AAE9B,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,EAAE;IAC1C,OAAO,IAAI;SACR,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC;SAC/E,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;SACtF,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;SAC/E,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/pipelines/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright © 2018 Emu Analytics
|
|
4
|
+
*/
|
|
5
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.handler = exports.builder = exports.desc = exports.command = void 0;
|
|
16
|
+
const utils_1 = require("../../utils");
|
|
17
|
+
exports.command = ['sink [id]'];
|
|
18
|
+
exports.desc = 'Show pipeline sink';
|
|
19
|
+
const builder = (args) => {
|
|
20
|
+
return args.positional('id', { describe: 'Pipeline id (or unique prefix)', type: 'string' });
|
|
21
|
+
};
|
|
22
|
+
exports.builder = builder;
|
|
23
|
+
function handler({ client, id, format }) {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
try {
|
|
26
|
+
const pipeline = yield (0, utils_1.resolveResource)(id, client.pipelines, 'id', ['components'], ['id', 'components.index']);
|
|
27
|
+
if (!pipeline) {
|
|
28
|
+
(0, utils_1.logObject)({ message: `Pipeline not found: ${id}` }, format || 'json');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const components = pipeline.components || [];
|
|
32
|
+
const sinks = components
|
|
33
|
+
.filter((c) => c.class === 'sink')
|
|
34
|
+
.sort((a, b) => a.index - b.index);
|
|
35
|
+
const grouped = sinks.reduce((acc, sink) => {
|
|
36
|
+
acc[sink.type] = acc[sink.type] || [];
|
|
37
|
+
acc[sink.type].push(sink);
|
|
38
|
+
return acc;
|
|
39
|
+
}, {});
|
|
40
|
+
if (format === 'json') {
|
|
41
|
+
(0, utils_1.logObject)({
|
|
42
|
+
id: pipeline.id,
|
|
43
|
+
environment: pipeline.environment,
|
|
44
|
+
sinks
|
|
45
|
+
}, 'json');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// If multiple sink types exist, generate one table per sink type
|
|
49
|
+
if (Object.keys(grouped).length) {
|
|
50
|
+
for (const [type, items] of Object.entries(grouped)) {
|
|
51
|
+
const rows = items.map((s) => (Object.assign({ id: s.id, description: s.description }, summarizeConfig(s))));
|
|
52
|
+
(0, utils_1.logObject)(rows, 'table');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
(0, utils_1.logInfo)('No Sinks Found');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
(0, utils_1.logError)(e);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
exports.handler = handler;
|
|
65
|
+
function summarizeConfig(component) {
|
|
66
|
+
const config = component.config || {};
|
|
67
|
+
switch (component.type) {
|
|
68
|
+
case 'fp:amqp-writable-stream':
|
|
69
|
+
return {
|
|
70
|
+
vhost: config.vhost || 'N/A',
|
|
71
|
+
exchange: typeof config.exchange === 'string'
|
|
72
|
+
? config.exchange
|
|
73
|
+
: (config.exchange && config.exchange.name) || 'N/A',
|
|
74
|
+
enable: config.enable
|
|
75
|
+
};
|
|
76
|
+
case 'fp:flow-ingest-stream':
|
|
77
|
+
return {
|
|
78
|
+
datasetId: config.datasetId || 'N/A',
|
|
79
|
+
enable: config.enable
|
|
80
|
+
};
|
|
81
|
+
case 'fp:sqs-writable-stream':
|
|
82
|
+
return {
|
|
83
|
+
queueUrl: config.queueUrl || 'N/A',
|
|
84
|
+
region: config.region || 'N/A',
|
|
85
|
+
enable: config.enable
|
|
86
|
+
};
|
|
87
|
+
case 'fp:sns-writable-stream':
|
|
88
|
+
return {
|
|
89
|
+
topicArn: config.topicArn || 'N/A',
|
|
90
|
+
region: config.region || 'N/A',
|
|
91
|
+
enable: config.enable
|
|
92
|
+
};
|
|
93
|
+
case 'fp:null-sink':
|
|
94
|
+
return { logging: config.logging };
|
|
95
|
+
default:
|
|
96
|
+
return {};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=sink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sink.js","sourceRoot":"","sources":["../../../src/commands/pipelines/sink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright © 2018 Emu Analytics
|
|
4
|
+
*/
|
|
5
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.handler = exports.builder = exports.desc = exports.command = void 0;
|
|
16
|
+
const utils_1 = require("../../utils");
|
|
17
|
+
exports.command = ['source [id]'];
|
|
18
|
+
exports.desc = 'Show pipeline source';
|
|
19
|
+
const builder = (args) => {
|
|
20
|
+
return args.positional('id', { describe: 'Pipeline id (or unique prefix)', type: 'string' });
|
|
21
|
+
};
|
|
22
|
+
exports.builder = builder;
|
|
23
|
+
function handler({ client, id, format }) {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
try {
|
|
26
|
+
const pipeline = yield (0, utils_1.resolveResource)(id, client.pipelines, 'id', ['components'], ['id', 'components.index']);
|
|
27
|
+
if (!pipeline) {
|
|
28
|
+
(0, utils_1.logObject)({ message: `Pipeline not found: ${id}` }, format || 'json');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const components = pipeline.components || [];
|
|
32
|
+
const sources = components
|
|
33
|
+
.filter((c) => c.class === 'source')
|
|
34
|
+
.sort((a, b) => a.index - b.index);
|
|
35
|
+
const summaries = sources.map((s) => (Object.assign({ id: s.id, type: s.type, description: s.description }, summarizeConfig(s))));
|
|
36
|
+
if (format === 'json') {
|
|
37
|
+
(0, utils_1.logObject)({
|
|
38
|
+
id: pipeline.id,
|
|
39
|
+
environment: pipeline.environment,
|
|
40
|
+
sources
|
|
41
|
+
}, 'json');
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (summaries.length) {
|
|
45
|
+
(0, utils_1.logObject)(summaries, 'table');
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
(0, utils_1.logInfo)('No Sources Found');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
(0, utils_1.logError)(e);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
exports.handler = handler;
|
|
57
|
+
function summarizeConfig(component) {
|
|
58
|
+
const config = component.config || {};
|
|
59
|
+
switch (component.type) {
|
|
60
|
+
case 'fp:amqp-readable-stream':
|
|
61
|
+
return {
|
|
62
|
+
vhost: config.vhost || 'N/A',
|
|
63
|
+
exchange: (config.queue && config.queue.bindTo && config.queue.bindTo.exchange) || config.exchange || 'N/A',
|
|
64
|
+
queue: typeof config.queue === 'string' ? config.queue : (config.queue && config.queue.name) || 'N/A'
|
|
65
|
+
};
|
|
66
|
+
case 'fp:mqtt-subscriber-stream':
|
|
67
|
+
return {
|
|
68
|
+
serverUrl: config.serverUrl || 'N/A',
|
|
69
|
+
topic: config.topic || 'N/A'
|
|
70
|
+
};
|
|
71
|
+
case 'fp:flow-dataset-stream':
|
|
72
|
+
return { datasetId: config.datasetId || 'N/A' };
|
|
73
|
+
case 'fp:db-timeseries-stream':
|
|
74
|
+
return {
|
|
75
|
+
database: config.database || 'N/A',
|
|
76
|
+
table: config.table || 'N/A'
|
|
77
|
+
};
|
|
78
|
+
case 'fp:sqs-readable-stream':
|
|
79
|
+
return {
|
|
80
|
+
queueUrl: config.queueUrl || 'N/A',
|
|
81
|
+
region: config.region || 'N/A'
|
|
82
|
+
};
|
|
83
|
+
case 'fp:s3-file-list-stream':
|
|
84
|
+
return { bucket: config.bucket || 'N/A' };
|
|
85
|
+
case 'fp:s3-file-loader-stream':
|
|
86
|
+
return { bucket: config.bucket || 'N/A' };
|
|
87
|
+
case 'fp:planefinder-firehose-stream':
|
|
88
|
+
return { host: config.host || 'N/A' };
|
|
89
|
+
case 'fp:tcp-tls-readable-stream':
|
|
90
|
+
return { hostname: config.hostname || 'N/A' };
|
|
91
|
+
case 'fp:timer-stream':
|
|
92
|
+
return { interval: config.interval || 'N/A' };
|
|
93
|
+
default:
|
|
94
|
+
return {};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/commands/pipelines/source.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@emuanalytics/flow-cli",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.16",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"author": "Robin Summerhill <robin.summerhill@emu-analytics.net",
|
|
6
6
|
"license": "Copyright 2018 Emu Analytics Limited",
|
|
@@ -80,5 +80,5 @@
|
|
|
80
80
|
"git add"
|
|
81
81
|
]
|
|
82
82
|
},
|
|
83
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "7b4a5b52fdc17a9913476b80885ef1b3bf695cc5"
|
|
84
84
|
}
|