UNPKG

domo-ds

Version:

Domo dataset reviewer allowing you to see upstream and downstream dependencies for all datasets and dataflows in an instance of Domo.

150 lines (134 loc) 4.46 kB
var util = require("util"); var EventEmitter = require("events").EventEmitter; var dataflows = function(settings) { var df = this; settings = settings || {}; df.sid = settings.sid || null; df.token = settings.token || null; df.host = settings.host || null; df.path = "/api/dataprocessing/v2/dataflows?limit=9999&offset=0&orderBy=lastRun&type=MYSQL,REDSHIFT,ETL,SPARK"; df.method = "GET"; // endpoint to get execution history, not built out, not really useful // https://misys.domo.com/api/dataprocessing/v1/dataflows/215/executions?limit=100&offset=0 df.data = {}; df.json = ""; }; dataflows.prototype.get = function(settings) { var df = this; settings = settings || {}; var hist = settings.history === true; df.sid = settings.sid || df.sid; df.token = settings.token || df.token; df.host = settings.host || df.host; if (!df.host || (!df.sid && !df.token)) { df.emit( "error", "df1", `Unable to get dataflows due to missing sid(${df.sid}) or host(${ df.host } or token(${df.token}))` ); } var headers = {}; if (df.token !== "" && df.token) { headers["X-DOMO-Developer-Token"] = df.token; } else { headers["X-DOMO-Authentication"] = df.sid; } var get = require("https").request( { hostname: df.host, path: df.path, method: df.method, headers }, res => { res.setEncoding("utf8"); var response = ""; res.on("data", chunk => { response += chunk; }); res.on("end", () => { if (res.statusCode != 200) { df.emit( "error", "df2", `Unable to get Dataflows! Status ${res.statusCode}: ${ res.statusMessage }` ); } else { let tmp = JSON.parse(response); var fields = [ "created", "databaseType", "description", "enabled", "executionCount", "executionSuccessCount", "id", "inputs", "lastExecution", "modified", "name", "numInputs", "numOutputs", "outputs", "responsibleUserId", "runState" ]; if (Array.isArray(tmp.onboardFlows)) { tmp = tmp.onboardFlows.map(flow => { let rec = []; if (flow.lastExecution) { let t = flow.lastExecution; let { beginTime, lastUpdated, endTime } = t; flow.lastExecution = { beginTime: beginTime, lastUpdated: endTime }; } if (flow.inputs) { flow.inputs = flow.inputs.map(ds => { return { id: ds.dataSourceId, trigger: ds.executeFlowWhenUpdated }; }); } if (flow.outputs) { flow.outputs = flow.outputs.map(ds => { return { id: ds.dataSourceId }; }); } fields.forEach(field => { if (flow[field]) { rec.push(flow[field]); } else { rec.push(""); } }); return rec; }); } df.data = { fields: fields, rows: tmp }; df.json = JSON.stringify(df.data).replace(/(['\\])/g, "\\$1"); if (hist) { //console.log('Dataflows Data', df.data.rows[0]); process.exit(); } else { df.emit("success"); } } }); } ); get.end(); }; util.inherits(dataflows, EventEmitter); module.exports = { new: function(settings) { return new dataflows(settings); } };