@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 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 mapHeartbeatToColor(pipeline) {
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
- let results;
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', join, sort);
46
- (0, utils_1.logObject)(format === 'table' ? mapHeartbeatToColor(resource) : resource, format);
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
- results = results.map(mapHeartbeatToColor);
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)(results, format || 'json');
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":"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"}
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.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": "bbc2750ba88ed369a7002cfe734e82dab573318c"
83
+ "gitHead": "7b4a5b52fdc17a9913476b80885ef1b3bf695cc5"
84
84
  }