@hpcc-js/eclwatch 3.4.1 → 3.5.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/dist/index.js CHANGED
@@ -11,8 +11,8 @@ import { ReactTimelineSeries } from "@hpcc-js/timeline";
11
11
 
12
12
  //#region src/__package__.ts
13
13
  const PKG_NAME = "@hpcc-js/eclwatch";
14
- const PKG_VERSION = "3.1.1";
15
- const BUILD_VERSION = "3.2.1";
14
+ const PKG_VERSION = "3.5.0";
15
+ const BUILD_VERSION = "3.15.0";
16
16
 
17
17
  //#endregion
18
18
  //#region src/ECLArchiveViewer.ts
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_node: any","graphGui: MyGraphData","childVertices: ReadonlyArray<ScopeVertex>","vShow: ScopeVertex[]","vHide: ScopeVertex[]","retVal: WUGraphLegendData[]","retVal: VertexType[]","verticesMap: { [id: string]: boolean }","buttons: Widget[]","column: ColumnType","formattedRow: any","opts: IOptions"],"sources":["../src/__package__.ts","../src/ECLArchiveViewer.ts","../src/WUGraphLegend.ts","../src/WUScopeController.ts","../src/WUGraph.ts","../src/WUResultStore.ts","../src/WUResult.ts","../src/WUStatus.ts","../src/WUTimeline.ts"],"sourcesContent":["export const PKG_NAME = \"@hpcc-js/eclwatch\";\nexport const PKG_VERSION = \"3.1.1\";\nexport const BUILD_VERSION = \"3.2.1\";\n","import { Editor } from \"@hpcc-js/codemirror\";\nimport { Workunit } from \"@hpcc-js/comms\";\nimport { SplitPanel } from \"@hpcc-js/phosphor\";\nimport { DirectoryTree } from \"@hpcc-js/tree\";\nimport { hashSum, xml2json } from \"@hpcc-js/util\";\n\nexport class ECLArchiveViewer extends SplitPanel {\n private _prevHash;\n private _contentStr;\n public _directoryPane = new DirectoryTree();\n public _fileEditorPane = new Editor()\n .text(\"\")\n ;\n\n constructor() {\n super(\"horizontal\");\n this._directoryPane.rowClick = (text) => {\n this._fileEditorPane\n .text(text)\n .render()\n ;\n };\n }\n\n protected transformArchiveTreeData(json) {\n const ret = {\n label: json.name,\n children: json._children.map(transformNode).filter(n => n)\n };\n\n if (ret.children && ret.children[0] && ret.children[0].label === \"html\") {\n // must be parsererror\n return {\n label: \"root\",\n children: [\n {\n label: \"error\",\n content: JSON.stringify(ret, null, 4)\n }\n ]\n };\n }\n return ret;\n\n function transformNode(node) {\n const _node: any = {};\n _node.label = node.name + (node[\"$\"] && node[\"$\"].key ? ` (${node[\"$\"].key})` : \"\");\n if (node._children && node._children.length > 0) {\n _node.children = node._children.map(_node => {\n return transformNode(_node);\n })\n .filter(n => n)\n ;\n } else if (typeof node.content === \"string\" && node.content.trim()) {\n _node.content = node.content;\n } else {\n return false;\n }\n return _node;\n }\n }\n\n updateDirectoryPane(contentStr) {\n let json;\n if (contentStr) {\n try {\n json = JSON.parse(contentStr);\n } catch (e) {\n json = xml2json(contentStr);\n }\n }\n if (json) {\n const _data = this.transformArchiveTreeData(json);\n this._directoryPane\n .data(_data)\n .render()\n ;\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this\n .addWidget(this._directoryPane)\n .addWidget(this._fileEditorPane)\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid()\n });\n\n if (this._prevHash !== hash || typeof this._contentStr === \"undefined\") {\n Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid())\n .fetchArchive()\n .then(resp => {\n\n this._contentStr = resp;\n this.updateDirectoryPane(this._contentStr);\n\n this._prevHash = hash;\n });\n } else {\n this.updateDirectoryPane(this._contentStr);\n }\n\n this.relativeSizes([this.directoryWidthRatio(), 1 - this.directoryWidthRatio()]);\n }\n}\nECLArchiveViewer.prototype._class += \" eclwatch_ECLArchiveViewer\";\n\nexport interface ECLArchiveViewer {\n directoryPaneColor(): string;\n directoryPaneColor(_: string): this;\n directoryPaneHoverColor(): string;\n directoryPaneHoverColor(_: string): this;\n fontColor(): string;\n fontColor(_: string): this;\n fontFamily(): string;\n fontFamily(_: string): this;\n fontSize(): number;\n fontSize(_: number): this;\n fileIconSize(): number;\n fileIconSize(_: number): this;\n folderIconOpen(): string;\n folderIconOpen(_: string): this;\n folderIconClosed(): string;\n folderIconClosed(_: string): this;\n textFileIcon(): string;\n textFileIcon(_: string): this;\n codeFileIcon(): string;\n codeFileIcon(_: string): this;\n verticalScroll(): boolean;\n verticalScroll(_: boolean): this;\n directoryWidthRatio(): number;\n directoryWidthRatio(_: number): this;\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\nECLArchiveViewer.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nECLArchiveViewer.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nECLArchiveViewer.prototype.publish(\"directoryWidthRatio\", 0.38, \"number\", \"Default directory panel width ratio relative to the full width\");\nECLArchiveViewer.prototype.publish(\"contentString\", null, \"string\", \"XML/JSON archive content string\");\nECLArchiveViewer.prototype.publishProxy(\"directoryPaneColor\", \"_directoryPane\", \"backgroundColor\");\nECLArchiveViewer.prototype.publishProxy(\"directoryPaneHoverColor\", \"_directoryPane\", \"hoverBackgroundColor\");\nECLArchiveViewer.prototype.publishProxy(\"iconSize\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontColor\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontFamily\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontSize\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"folderIconOpen\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"folderIconClosed\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"textFileIcon\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"codeFileIcon\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"verticalScroll\", \"_directoryPane\");\n","import { Vertex } from \"@hpcc-js/graph\";\nimport { Legend } from \"@hpcc-js/layout\";\nimport { local as d3Local, select as d3Select } from \"d3-selection\";\n\nimport \"../src/WUGraphLegend.css\";\n\nexport interface WUGraphLegendData {\n kind: number;\n faChar: string;\n label: string;\n count: number;\n}\n\nclass LegendVertex extends Vertex {\n\n constructor() {\n super();\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._icon.on(\"click\", () => {\n this.click(this.data());\n });\n }\n\n click(kind: number) {\n }\n}\n\nexport class WUGraphLegend extends Legend {\n\n private icon = d3Local<Vertex>();\n protected _disabled2: { [kind: number]: boolean } = {\n /* TODO: Default some to disabled?\n 43: true,\n 71: true,\n 82: true,\n 88: true\n */\n };\n\n disabled(): number[];\n disabled(_: number[]): this;\n disabled(_?: number[]): number[] | this {\n if (!arguments.length) {\n const retVal = [];\n for (const key in this._disabled2) {\n if (this._disabled2[key]) {\n retVal.push(key);\n }\n }\n return retVal;\n }\n this._disabled2 = {};\n _.forEach(kind => this._disabled2[kind] = true);\n return this;\n }\n\n toggle(kind: number) {\n this._disabled2[kind] = !this._disabled2[kind];\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const context = this;\n const items = this._g.selectAll(\".legendItem\").data(this.data(), (d: any) => d.kind);\n items.enter().append(\"g\")\n .attr(\"class\", \"legendItem\")\n .each(function (this: HTMLElement, d) {\n context.icon.set(this, new LegendVertex()\n .target(this)\n .data(d.kind)\n .textbox_shape_colorStroke(\"none\")\n .textbox_shape_colorFill(\"none\")\n .iconAnchor(\"left\")\n .faChar(d.faChar)\n .text(`${d.label} (${d.count})`)\n .tooltip(`${d.kind} - ${d.label}`)\n .on(\"click\", kind => {\n context.toggle(kind);\n context.render();\n context.click(kind);\n })\n .on(\"mouseover\", kind => {\n context.mouseover(kind);\n })\n .on(\"mouseout\", kind => {\n context.mouseout(kind);\n })\n );\n })\n .merge(items)\n .each(function (this: HTMLElement, d, i) {\n const bbox = context.icon.get(this)\n .icon_shape_colorFill(context._disabled2[d.kind] ? \"gray\" : null)\n .render().getBBox();\n\n d3Select(this)\n .attr(\"transform\", `translate(${+bbox.width / 2}, ${i * 30})`)\n ;\n })\n ;\n items.exit()\n .each(function (this: HTMLElement, d) {\n context.icon.get(this)\n .target(null)\n .render();\n })\n .remove();\n const bbox = this.getBBox(true, true);\n this._g.attr(\"transform\", `translate(16, ${this.height() / 2 - bbox.height / 2})`);\n }\n\n // Events ---\n click(kind: number) {\n }\n\n mouseover(kind: number) {\n }\n\n mouseout(kind: number) {\n }\n}\nWUGraphLegend.prototype._class += \" eclwatch_WUGraphLegend\";\n","import { Icon } from \"@hpcc-js/common\";\nimport { BaseScope, ScopeEdge, ScopeGraph, ScopeSubgraph, ScopeVertex } from \"@hpcc-js/comms\";\nimport { Edge, IGraphData, Lineage, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Edge as UtilEdge, Subgraph as UtilSubgraph, Vertex as UtilVertex } from \"@hpcc-js/util\";\nimport { WUGraphLegendData } from \"./WUGraphLegend.ts\";\n\nexport type VertexType = Vertex | Icon;\n\nexport interface MyGraphData {\n subgraphs: Subgraph[];\n vertices: VertexType[];\n edges: Edge[];\n hierarchy: Lineage[];\n}\n\nfunction faCharFactory(kind): string {\n switch (kind) {\n case \"2\": return \"\\uf0c7\"; // Disk Write\n case \"3\": return \"\\uf15d\"; // sort\n case \"5\": return \"\\uf0b0\"; // Filter\n case \"6\": return \"\\uf1e0\"; // Split\n case \"12\": return \"\\uf039\"; // First N\n case \"15\": return \"\\uf126\"; // Lightweight Join\n case \"17\": return \"\\uf126\"; // Lookup Join\n case \"22\": return \"\\uf1e6\"; // Pipe Output\n case \"23\": return \"\\uf078\"; // Funnel\n case \"25\": return \"\\uf0ce\"; // Inline Dataset\n case \"26\": return \"\\uf074\"; // distribute\n case \"29\": return \"\\uf005\"; // Store Internal Result\n case \"36\": return \"\\uf128\"; // If\n case \"44\": return \"\\uf0c7\"; // write csv\n case \"47\": return \"\\uf0c7\"; // write\n case \"54\": return \"\\uf013\"; // Workunit Read\n case \"56\": return \"\\uf0c7\"; // Spill\n case \"59\": return \"\\uf126\"; // Merge\n case \"61\": return \"\\uf0c7\"; // write xml\n case \"82\": return \"\\uf1c0\"; // Projected Disk Read Spill\n case \"88\": return \"\\uf1c0\"; // Projected Disk Read Spill\n case \"92\": return \"\\uf129\"; // Limted Index Read\n case \"93\": return \"\\uf129\"; // Limted Index Read\n case \"99\": return \"\\uf1c0\"; // CSV Read\n case \"105\": return \"\\uf1c0\"; // CSV Read\n\n case \"7\": return \"\\uf090\"; // Project\n case \"9\": return \"\\uf0e2\"; // Local Iterate\n case \"16\": return \"\\uf005\"; // Output Internal\n case \"19\": return \"\\uf074\"; // Hash Distribute\n case \"21\": return \"\\uf275\"; // Normalize\n case \"35\": return \"\\uf0c7\"; // CSV Write\n case \"37\": return \"\\uf0c7\"; // Index Write\n case \"71\": return \"\\uf1c0\"; // Disk Read Spill\n case \"133\": return \"\\uf0ce\"; // Inline Dataset\n case \"148\": return \"\\uf0ce\"; // Inline Dataset\n case \"168\": return \"\\uf275\"; // Local Denormalize\n }\n return \"\\uf063\";\n}\n\nexport class WUScopeController {\n private graphDB: ScopeGraph;\n private subgraphsMap: { [id: string]: Subgraph } = {};\n private rSubgraphsMap: { [id: string]: ScopeSubgraph } = {};\n private verticesMap: { [id: string]: VertexType } = {};\n private rVerticesMap: { [id: string]: ScopeVertex } = {};\n private edgesMap: { [id: string]: Edge } = {};\n private rEdgesMap: { [id: string]: ScopeEdge } = {};\n private kindMap: { [id: string]: ScopeVertex[] } = {};\n\n protected _disabled: { [kind: number]: boolean } = {};\n\n constructor() {\n }\n\n clear() {\n this.subgraphsMap = {};\n this.rSubgraphsMap = {};\n this.verticesMap = {};\n this.rVerticesMap = {};\n this.edgesMap = {};\n this.rEdgesMap = {};\n }\n\n set(masterGraph: ScopeGraph) {\n this.graphDB = masterGraph;\n this.graphGui(this.graphDB);\n\n this.kindMap = {};\n this.graphDB.walk(item => {\n if (item instanceof UtilSubgraph) {\n } else if (item instanceof UtilVertex) {\n const kind = item._.attr(\"Kind\").RawValue;\n if (!this.kindMap[kind]) {\n this.kindMap[kind] = [];\n }\n this.kindMap[kind].push(item);\n } else if (item instanceof UtilEdge) {\n }\n });\n }\n\n disabled(): number[];\n disabled(_: number[]): this;\n disabled(_?: number[]): number[] | this {\n if (!arguments.length) {\n const retVal = [];\n for (const key in this._disabled) {\n if (this._disabled[key]) {\n retVal.push(key);\n }\n }\n return retVal;\n }\n this._disabled = {};\n _.forEach(kind => this._disabled[kind] = true);\n return this;\n }\n\n graphGui(graphDB: ScopeGraph): IGraphData {\n const graphGui: MyGraphData = {\n subgraphs: [],\n vertices: [],\n edges: [],\n hierarchy: []\n };\n\n graphDB.walk((item) => {\n if (item instanceof UtilSubgraph) {\n const subgraph = this.appendSubgraph(item, graphGui.hierarchy, graphGui.subgraphs);\n subgraph.showMinMax(item.vertices.length > 3 || subgraph.minState() !== \"normal\");\n } else if (item instanceof UtilVertex) {\n this.appendVertex(item, graphGui.hierarchy, graphGui.vertices);\n } else if (item instanceof UtilEdge) {\n this.appendEdge(item, graphGui.edges);\n }\n });\n\n return graphGui;\n }\n\n format(labelTpl, obj) {\n let retVal = \"\";\n let lpos = labelTpl.indexOf(\"%\");\n let rpos = -1;\n while (lpos >= 0) {\n retVal += labelTpl.substring(rpos + 1, lpos);\n rpos = labelTpl.indexOf(\"%\", lpos + 1);\n if (rpos < 0) {\n console.warn(\"Invalid Label Template\");\n break;\n }\n const key = labelTpl.substring(lpos + 1, rpos);\n retVal += !key ? \"%\" : (obj[labelTpl.substring(lpos + 1, rpos)] || \"\");\n lpos = labelTpl.indexOf(\"%\", rpos + 1);\n }\n retVal += labelTpl.substring(rpos + 1, labelTpl.length);\n return retVal.split(\"\\\\n\").join(\"\\n\");\n }\n\n createSubgraph(subgraph: ScopeSubgraph): Subgraph {\n let sg = this.subgraphsMap[subgraph._.Id];\n if (!sg) {\n sg = new Subgraph()\n .title(subgraph._.Id)\n .on(\"minClick\", () => {\n this.minClick(sg);\n })\n ;\n this.subgraphsMap[subgraph._.Id] = sg;\n this.rSubgraphsMap[sg.id()] = subgraph;\n }\n return sg;\n }\n\n createVertex(vertex: ScopeVertex): VertexType {\n let v = this.verticesMap[vertex._.Id];\n if (!v) {\n const attrs = vertex._.rawAttrs();\n if (vertex._.ScopeType === \"dummy\") {\n const parent = this.subgraphsMap[vertex.parent._.Id];\n v = new Icon()\n .shape_colorFill(\"darkred\")\n .shape_colorStroke(\"darkred\")\n .image_colorFill(\"white\")\n .faChar(\"\\uf067\")\n .on(\"click\", () => {\n parent.minState(\"normal\");\n this.minClick(parent);\n })\n ;\n } else {\n v = new Vertex()\n .icon_shape_colorFill(\"#1f77b4\")\n .icon_image_colorFill(\"white\")\n .faChar(faCharFactory(attrs[\"Kind\"]))\n .text(attrs[\"Label\"])\n ;\n const annotations = [];\n if (vertex._.hasAttr(\"Definition\")) {\n annotations.push({\n faChar: \"\\uf036\",\n tooltip: \"Definition\",\n shape_colorFill: \"lightgray\",\n shape_colorStroke: \"lightgray\",\n image_colorFill: \"black\"\n });\n }\n if (vertex._.hasAttr(\"IsInternal\")) {\n annotations.push({\n faChar: \"\\uf085\",\n tooltip: \"IsInternal\",\n shape_colorFill: \"red\",\n shape_colorStroke: \"red\",\n image_colorFill: \"white\"\n });\n }\n v.annotationIcons(annotations);\n }\n this.verticesMap[vertex._.Id] = v;\n this.rVerticesMap[v.id()] = vertex;\n }\n return v;\n }\n\n isSpill(edge: ScopeEdge): boolean {\n const sourceKind = edge.source._.attr(\"Kind\").RawValue;\n const targetKind = edge.target._.attr(\"Kind\").RawValue;\n return sourceKind === \"2\" || targetKind === \"71\";\n }\n\n spansSubgraph(edge: ScopeEdge): boolean {\n return edge.source.parent._.Id !== edge.target.parent._.Id;\n }\n\n createEdge(edge: ScopeEdge): Edge | undefined {\n let e = this.edgesMap[edge._.Id];\n if (!e) {\n const attrs = edge._.rawAttrs();\n const sourceV = this.verticesMap[edge.source._.Id];\n const targetV = this.verticesMap[edge.target._.Id];\n if (sourceV && targetV) {\n const isSpill = this.isSpill(edge);\n const spansSubgraph = this.spansSubgraph(edge);\n\n const label = this.format(\"%Label%\\n%NumRowsProcessed%\", attrs);\n /* TODO: Add extra annotations once WUDetails is fixed...\n const numSlaves = parseInt(attrs[\"NumSlaves\"]);\n const numStarts = parseInt(attrs[\"NumStarts\"]);\n const numStops = parseInt(attrs[\"NumStops\"]);\n const started = numStarts > 0;\n const finished = numStops === numSlaves;\n const active = started && !finished;\n */\n\n let strokeDasharray = null;\n let weight = 100;\n if (attrs[\"IsDependency\"]) {\n weight = 10;\n strokeDasharray = \"1,5\";\n } else if (attrs[\"_childGraph\"]) {\n strokeDasharray = \"5,5\";\n } else if (isSpill) {\n weight = 25;\n strokeDasharray = \"5,5,10,5\";\n } else if (spansSubgraph) {\n weight = 5;\n strokeDasharray = \"5,5\";\n }\n e = new Edge()\n .sourceVertex(sourceV)\n .targetVertex(targetV)\n .sourceMarker(\"circle\")\n .targetMarker(\"arrow\")\n .weight(weight)\n .strokeDasharray(strokeDasharray)\n .text(label)\n ;\n this.edgesMap[edge._.Id] = e;\n this.rEdgesMap[e.id()] = edge;\n }\n }\n return e;\n }\n\n appendSubgraph(subgraph: ScopeSubgraph, hierarchy: Lineage[], subgraphs: Subgraph[]): Subgraph {\n const sg = this.createSubgraph(subgraph);\n subgraphs.push(sg);\n const parent = this.subgraphsMap[subgraph.parent._.Id];\n if (parent) {\n hierarchy.push({ parent, child: sg });\n }\n return sg;\n }\n\n appendVertex(vertex: ScopeVertex, hierarchy: Lineage[], vertices: VertexType[]): VertexType {\n const v = this.createVertex(vertex);\n vertices.push(v);\n const parent = this.subgraphsMap[vertex.parent._.Id];\n if (parent) {\n hierarchy.push({ parent, child: v });\n }\n return v;\n }\n\n appendEdge(edge: ScopeEdge, edges: Edge[]): Edge {\n const e = this.createEdge(edge);\n if (e) {\n edges.push(e);\n }\n return e;\n }\n\n filterLegend(graphDB: ScopeGraph) {\n for (let i = graphDB.vertices.length - 1; i >= 0; --i) {\n const vertex = graphDB.vertices[i];\n const kind = vertex._.attr(\"Kind\").RawValue;\n if (this._disabled[kind]) {\n vertex.remove(false, (source: BaseScope, target: BaseScope) => {\n return new BaseScope({\n ScopeName: vertex._.ScopeName + \":in\",\n Id: source.Id + \"->\" + target.Id,\n ScopeType: \"dummy-edge\",\n Properties: {\n Property: [vertex._.attr(\"Label\")]\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n });\n }\n }\n }\n\n filterPartial(graphDB: ScopeGraph) {\n for (const subgraph of graphDB.subgraphs) {\n const sg = this.subgraphsMap[subgraph._.Id];\n switch (sg.minState()) {\n case \"partial\":\n const childVertices: ReadonlyArray<ScopeVertex> = subgraph.vertices;\n const vShow: ScopeVertex[] = [];\n const vHide: ScopeVertex[] = [];\n\n for (const vertex of childVertices) {\n if (vertex.inEdges.length === 0 || vertex.inEdges.some(edge => edge.source.parent !== edge.target.parent) ||\n vertex.outEdges.length === 0 || vertex.outEdges.some(edge => edge.source.parent !== edge.target.parent)) {\n vShow.push(vertex);\n } else {\n vHide.push(vertex);\n }\n }\n\n if (vHide.length > 1) {\n const dummyDetails = {\n ScopeName: subgraph._.ScopeName,\n Id: subgraph._.Id + \":dummy\",\n ScopeType: \"dummy\",\n Properties: {\n Property: [{\n Name: \"Activities\",\n RawValue: \"\" + vHide.length,\n Formatted: \"\" + vHide.length,\n Measure: \"count\",\n Creator: \"\",\n CreatorType: \"\"\n }]\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n };\n const dummyScope = new BaseScope(dummyDetails);\n const dummyVertex = subgraph.createVertex(dummyScope);\n\n for (const vertex of vHide) {\n for (const edge of vertex.inEdges) {\n if (vShow.indexOf(edge.source) >= 0) {\n const dummyEdgeScope = new BaseScope({\n ScopeName: edge.source._.ScopeName,\n Id: edge.source._.Id + \"->\" + dummyVertex._.Id,\n ScopeType: \"dummy-in\",\n Properties: {\n Property: []\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n subgraph.createEdge(edge.source, dummyVertex, dummyEdgeScope);\n }\n }\n for (const edge of vertex.outEdges) {\n if (vShow.indexOf(edge.target) >= 0) {\n const dummyEdgeScope = new BaseScope({\n ScopeName: edge.target._.ScopeName,\n Id: dummyVertex._.Id + \"->\" + edge.target._.Id,\n ScopeType: \"dummy-out\",\n Properties: {\n Property: []\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n subgraph.createEdge(dummyVertex, edge.target, dummyEdgeScope);\n }\n }\n }\n vHide.forEach(vertex => vertex.remove(true));\n }\n break;\n }\n }\n }\n\n filterEmptySubgraphs(graphDB: ScopeGraph) {\n while (true) {\n const emptySubgraphs = graphDB.subgraphs.filter(subgraph => subgraph.subgraphs.length === 0 && subgraph.vertices.length === 0);\n if (emptySubgraphs.length === 0) break;\n emptySubgraphs.forEach(subgraph => subgraph.remove(true));\n }\n }\n\n removeObsoleteSubgraphs(graphDB: ScopeGraph) {\n for (const subgraph of [...graphDB.subgraphs]) {\n if (subgraph.vertices.length === 0) {\n subgraph.remove(false);\n }\n }\n }\n\n graphData(): IGraphData {\n const graphDB = this.graphDB.clone();\n this.filterLegend(graphDB);\n this.filterPartial(graphDB);\n this.filterEmptySubgraphs(graphDB);\n this.removeObsoleteSubgraphs(graphDB);\n return this.graphGui(graphDB);\n }\n\n calcLegend(): WUGraphLegendData[] {\n const retVal: WUGraphLegendData[] = [];\n for (const kind in this.kindMap) {\n retVal.push({\n kind: parseInt(kind),\n faChar: faCharFactory(kind),\n label: this.kindMap[kind][0]._.attr(\"Label\").RawValue.split(\"\\n\")[0],\n count: this.kindMap[kind].length\n });\n }\n return retVal;\n }\n\n vertices(kind: number): VertexType[] {\n const retVal: VertexType[] = [];\n for (const v of this.kindMap[kind]) {\n retVal.push(this.verticesMap[v._.Id]);\n }\n return retVal;\n }\n\n formatRow(item: ScopeEdge | ScopeSubgraph | ScopeVertex, columns, row) {\n const attrs = item._.formattedAttrs();\n for (const key in attrs) {\n const idx = columns.indexOf(key);\n if (idx === -1) {\n columns.push(key);\n row.push(attrs[key]);\n } else {\n row[idx] = attrs[key];\n }\n }\n for (let i = 0; i < 100; ++i) {\n if (row[i] === undefined) {\n row[i] = \"\";\n }\n }\n return row;\n }\n\n activityData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Kind\", \"Label\"];\n const data = this.graphDB.vertices.map(v => {\n const row = [parseInt(v._.Id.split(\"a\")[1])];\n return this.formatRow(v, columns, row);\n });\n return { columns, data };\n }\n\n edgeData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Label\"];\n const data = this.graphDB.edges.map(e => {\n const row = [e._.Id];\n return this.formatRow(e, columns, row);\n });\n return { columns, data };\n }\n\n subgraphData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Label\"];\n const data = this.graphDB.subgraphs.map(sg => {\n const row = [sg._.Id];\n return this.formatRow(sg, columns, row);\n });\n return { columns, data };\n }\n\n calcGraphTooltip(item: VertexType | Edge) {\n let scope;\n let parentScope;\n if (item instanceof Subgraph) {\n const subgraph = this.rSubgraphsMap[item.id()];\n scope = subgraph._;\n parentScope = subgraph.parent._;\n } else if (item instanceof Vertex || item instanceof Icon) {\n const vertex = this.rVerticesMap[item.id()];\n scope = vertex._;\n parentScope = vertex.parent._;\n } else if (item instanceof Edge) {\n const edge = this.rEdgesMap[item.id()];\n scope = edge._;\n parentScope = edge.parent._;\n }\n if (scope) {\n return scope.calcTooltip(parentScope);\n }\n return \"\";\n }\n\n subgraph(id: string): Subgraph | undefined {\n return this.subgraphsMap[id];\n }\n\n vertex(id: string): VertexType | undefined {\n return this.verticesMap[id];\n }\n\n edge(id: string): Edge {\n return this.edgesMap[id];\n }\n\n // Events ---\n minClick(sg: Subgraph) {\n }\n}\n","import { Button, Spacer, ToggleButton, Widget } from \"@hpcc-js/common\";\nimport { ScopeGraph, Workunit } from \"@hpcc-js/comms\";\nimport { Table } from \"@hpcc-js/dgrid\";\nimport { Graph as GraphWidget, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Carousel, ChartPanel } from \"@hpcc-js/layout\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { WUGraphLegend } from \"./WUGraphLegend.ts\";\nimport { WUScopeController } from \"./WUScopeController.ts\";\n\nimport \"../src/WUGraph.css\";\n\nexport class WUGraph extends ChartPanel {\n\n private _partialAll = new Button().faChar(\"fa-window-restore\").tooltip(\"Partial All\")\n .on(\"click\", () => {\n this.stateClick(this._partialAll);\n });\n\n private _maxAll = new Button().faChar(\"fa-window-maximize\").tooltip(\"Max All\")\n .on(\"click\", () => {\n this.stateClick(this._maxAll);\n });\n\n private _toggleGraph = new ToggleButton().faChar(\"fa-chain\").tooltip(\"Graph\")\n .selected(true)\n .on(\"click\", () => {\n this.viewClick(this._toggleGraph);\n });\n\n private _toggleActivities = new ToggleButton().faChar(\"fa-table\").tooltip(\"Activitiies\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleActivities);\n });\n\n private _toggleEdges = new ToggleButton().faChar(\"fa-table\").tooltip(\"Edges\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleEdges);\n });\n\n private _toggleSubgraphs = new ToggleButton().faChar(\"fa-table\").tooltip(\"Subgraphs\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleSubgraphs);\n });\n\n protected _graph = new GraphWidget()\n .layout(\"Hierarchy\")\n .applyScaleOnLayout(true)\n .showToolbar(false)\n .allowDragging(false)\n ;\n\n private _activities = new Table()\n .pagination(false)\n ;\n\n private _edges = new Table()\n .pagination(false)\n ;\n\n private _subgraphs = new Table()\n .pagination(false)\n ;\n\n protected _legend = new WUGraphLegend(this)\n .on(\"click\", kind => {\n this.render();\n })\n .on(\"mouseover\", kind => {\n const verticesMap: { [id: string]: boolean } = {};\n for (const vertex of this._gc.vertices(kind)) {\n verticesMap[vertex.id()] = true;\n }\n this._graph.highlightVerticies(verticesMap);\n })\n .on(\"mouseout\", kind => {\n this._graph.highlightVerticies();\n })\n ;\n\n protected _view = new Carousel().widgets([this._graph, this._activities, this._edges, this._subgraphs]);\n\n protected _gc = new WUScopeController();\n\n constructor() {\n super();\n this.topOverlay(false);\n this.widget(this._view);\n const buttons: Widget[] = [\n this._toggleGraph,\n this._toggleActivities,\n this._toggleEdges,\n this._toggleSubgraphs,\n new Spacer(),\n this._partialAll,\n this._maxAll,\n new Spacer(),\n ...this._graph.iconBarButtons(),\n new Spacer()];\n this.buttons(buttons.concat(this.buttons()));\n this._gc.minClick = (sg: Subgraph) => {\n this.loadGraph();\n this._graph.render(w => {\n this._graph\n .selection([sg])\n .centerOnItem(sg)\n ;\n });\n };\n\n this._graph.tooltipHTML((v: Vertex) => {\n return this._gc.calcGraphTooltip(v);\n });\n }\n\n stateClick(sourceB: Button) {\n switch (sourceB) {\n case this._partialAll:\n this._graph.data().subgraphs.forEach((sg: Subgraph) => {\n sg.minState(\"partial\");\n });\n break;\n case this._maxAll:\n this._graph.data().subgraphs.forEach((sg: Subgraph) => {\n sg.minState(\"normal\");\n });\n break;\n }\n this.render();\n }\n\n viewClick(sourceTB: ToggleButton) {\n this._toggleGraph.selected(sourceTB === this._toggleGraph);\n this._toggleActivities.selected(sourceTB === this._toggleActivities);\n this._toggleEdges.selected(sourceTB === this._toggleEdges);\n this._toggleSubgraphs.selected(sourceTB === this._toggleSubgraphs);\n switch (sourceTB) {\n case this._toggleGraph:\n this._view.active(0);\n break;\n case this._toggleActivities:\n this._view.active(1);\n break;\n case this._toggleEdges:\n this._view.active(2);\n break;\n case this._toggleSubgraphs:\n this._view.active(3);\n break;\n }\n this.render(w => {\n });\n }\n\n private _prevHashSum;\n private _prevScopeGraph: ScopeGraph;\n fetchScopeGraph(): Promise<ScopeGraph> {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n graphID: this.graphID(),\n subgraphID: this.subgraphID()\n });\n if (!this._prevScopeGraph || this._prevHashSum !== hash) {\n this.startProgress();\n this._prevHashSum = hash;\n this._gc.clear();\n const wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n return wu.fetchGraphs().then(graphs => {\n for (const graph of graphs) {\n if (graph.Name === this.graphID()) {\n this.finishProgress();\n return graph.fetchScopeGraph(this.subgraphID());\n }\n }\n }).then(scopeGraph => {\n this._prevScopeGraph = scopeGraph;\n return this._prevScopeGraph;\n });\n }\n return Promise.resolve(this._prevScopeGraph);\n }\n\n enter(domNode, _element) {\n super.enter(domNode, _element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n loadGraph() {\n this._gc.disabled(this._legend.disabled());\n this._graph\n .data(this._gc.graphData(), true)\n ;\n {\n const { columns, data } = this._gc.activityData();\n this._activities\n .columns(columns)\n .data(data)\n ;\n }\n {\n const { columns, data } = this._gc.edgeData();\n this._edges\n .columns(columns)\n .data(data)\n ;\n }\n {\n const { columns, data } = this._gc.subgraphData();\n this._subgraphs\n .columns(columns)\n .data(data)\n ;\n }\n }\n\n render(callback?: (w: Widget) => void): this {\n if (this.wuid() && this.graphID()) {\n this.fetchScopeGraph().then(scopedGraph => {\n this._gc.set(scopedGraph);\n this._legend.data(this._gc.calcLegend());\n this.loadGraph();\n super.render(callback);\n });\n } else {\n super.render(callback);\n }\n return this;\n }\n\n selection(_?) {\n if (!arguments.length) return this._graph.selection();\n const item = this._gc.vertex(_) || this._gc.edge(_) || this._gc.subgraph(_);\n if (item) {\n this._graph.selection([item]);\n }\n return this;\n }\n}\nWUGraph.prototype._class += \" eclwatch_WUGraph\";\n\nexport interface WUGraph {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n graphID(): string;\n graphID(_: string): this;\n subgraphID(): string;\n subgraphID(_: string): this;\n}\n\nWUGraph.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUGraph.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUGraph.prototype.publish(\"graphID\", \"\", \"string\", \"Graph ID\");\nWUGraph.prototype.publish(\"subgraphID\", \"\", \"string\", \"Subgraph ID\");\n","import { Exception, ResultFilter, Result, XSDSchema, XSDXMLNode } from \"@hpcc-js/comms\";\nimport { ColumnType, Deferred, domConstruct, QueryResults, RowFormatter } from \"@hpcc-js/dgrid\";\n\nfunction entitiesEncode(str) {\n return String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n\nfunction safeEncode(item) {\n switch (Object.prototype.toString.call(item)) {\n case \"[object Undefined]\":\n case \"[object Boolean]\":\n case \"[object Number]\":\n return item;\n case \"[object String]\":\n return entitiesEncode(item);\n default:\n console.warn(\"Unknown cell type: \" + Object.prototype.toString.call(item)); \n }\n return item;\n}\n\nexport class Store {\n protected wuResult: Result;\n protected schema: XSDSchema;\n protected _columns: any[];\n protected _cache: { [key: string]: Promise<{ totalLength: number, data: any[] }> } = {};\n private rowFormatter: RowFormatter;\n protected _filter: ResultFilter = {};\n private onError?: (msg: string) => void;\n\n constructor(wuResult: Result, schema: XSDSchema, renderHtml: boolean, filter: ResultFilter = {}, onError?: (msg: string) => void) {\n this.wuResult = wuResult;\n this.schema = schema;\n this._columns = this.schema2Columns(this.schema.root);\n this.rowFormatter = new RowFormatter(this._columns, renderHtml);\n this._filter = filter;\n this.onError = onError;\n }\n\n columns() {\n return this._columns;\n }\n\n schema2Columns(parentNode: XSDXMLNode, prefix: string = \"\"): ColumnType[] {\n if (!parentNode) return [];\n return parentNode.children().filter(node => node.name.indexOf(\"__hidden\", node.name.length - \"__hidden\".length) === -1).map((node, idx) => {\n const label = node.name;\n const keyed = node.attrs[\"hpcc:keyed\"];\n const column: ColumnType = {\n field: prefix + label,\n leafID: label,\n idx,\n label: label + (keyed ? \" (i)\" : \"\"),\n className: \"resultGridCell\",\n sortable: false,\n width: keyed ? 16 : 0,\n isSet: node.isSet\n };\n const children = this.schema2Columns(node, prefix + label + \"_\");\n if (children.length) {\n column.width += 10 + children.reduce((prev: number, childNode: ColumnType) => {\n return prev + childNode.width!;\n }, 0);\n column.children = children;\n } else {\n column.width += node.charWidth() * 9;\n column.formatter = (cell, row) => {\n switch (typeof cell) {\n case \"string\":\n return {\n html: cell.replace(/\\t/g, \"&nbsp;&nbsp;&nbsp;&nbsp;\").trim()\n };\n case \"undefined\":\n return \"\";\n }\n return cell;\n };\n }\n return column;\n });\n }\n\n isChildDataset(cell) {\n if (Object.prototype.toString.call(cell) !== \"[object Object]\") {\n return false;\n }\n let propCount = 0;\n let firstPropType = null;\n for (const key in cell) {\n if (!firstPropType) {\n firstPropType = Object.prototype.toString.call(cell[key]);\n }\n propCount++;\n }\n return propCount === 1 && firstPropType === \"[object Array]\";\n }\n\n rowToTable(cell, __row, node) {\n if (this.isChildDataset(cell)) { // Don't display \"Row\" as a header ---\n for (const key in cell) {\n this.rowToTable(cell[key], __row, node);\n }\n return;\n }\n\n const table = domConstruct.create(\"table\", { border: 1, cellspacing: 0, width: \"100%\" }, node);\n switch (Object.prototype.toString.call(cell)) {\n case \"[object Object]\":\n let tr = domConstruct.create(\"tr\", null, table);\n for (const key in cell) {\n domConstruct.create(\"th\", { innerHTML: safeEncode(key) }, tr);\n }\n tr = domConstruct.create(\"tr\", null, table);\n for (const key in cell) {\n switch (Object.prototype.toString.call(cell[key])) {\n case \"[object Object]\":\n case \"[object Array]\":\n this.rowToTable(cell[key], __row, node);\n break;\n default:\n domConstruct.create(\"td\", { innerHTML: safeEncode(cell[key]) }, tr);\n break;\n }\n }\n break;\n case \"[object Array]\":\n for (let i = 0; i < cell.length; ++i) {\n switch (Object.prototype.toString.call(cell[i])) {\n case \"[object Boolean]\":\n case \"[object Number]\":\n case \"[object String]\":\n // Item in Scalar ---\n const tr1 = domConstruct.create(\"tr\", null, table);\n domConstruct.create(\"td\", { innerHTML: safeEncode(cell[i]) }, tr1);\n break;\n default:\n // Child Dataset ---\n if (i === 0) {\n const tr2 = domConstruct.create(\"tr\", null, table);\n for (const key in cell[i]) {\n domConstruct.create(\"th\", { innerHTML: safeEncode(key) }, tr2);\n }\n }\n domConstruct.create(\"tr\", null, table);\n for (const key in cell[i]) {\n if (cell[i][key]) {\n if (Object.prototype.toString.call(cell[i][key]) === \"[object Object]\" || Object.prototype.toString.call(cell[i][key]) === \"[object Array]\") {\n const td = domConstruct.create(\"td\", null, tr1);\n this.rowToTable(cell[i][key], cell[i], td);\n } else if (key.indexOf(\"__html\", key.length - \"__html\".length) !== -1) {\n domConstruct.create(\"td\", { innerHTML: cell[i][key] }, tr1);\n } else if (key.indexOf(\"__javascript\", key.length - \"__javascript\".length) !== -1) {\n /*const td = */ domConstruct.create(\"td\", null, tr1);\n // this.injectJavascript(cell[i][key], cell[i], td);\n } else {\n const val = cell[i][key];\n domConstruct.create(\"td\", { innerHTML: safeEncode(val) }, tr1);\n }\n } else {\n domConstruct.create(\"td\", { innerHTML: \"\" }, tr1);\n }\n }\n }\n }\n break;\n }\n }\n\n getIdentity(row) {\n return row.__hpcc_id;\n }\n\n _request(start, end): Promise<{ totalLength: number, data: any[] }> {\n if (!this.wuResult) return Promise.resolve({ totalLength: 0, data: [] });\n const cacheKey = `${start}->${end}`;\n if (this._cache[cacheKey]) return this._cache[cacheKey];\n const retVal = this.wuResult.fetchRows(start, end - start, false, this._filter).then((rows: any[]) => {\n return {\n totalLength: this.wuResult.Total,\n data: rows.map((row, idx) => {\n const formattedRow: any = this.rowFormatter.format(row);\n formattedRow.__hpcc_id = start + idx;\n formattedRow.__hpcc_orig = row;\n return formattedRow;\n })\n };\n }).catch((err: Exception) => {\n this.onError(err.Message || \"An exception has occurred\");\n return { totalLength: 0, data: [] };\n });\n this._cache[cacheKey] = retVal;\n return retVal;\n }\n\n fetchRange(options): Promise<any[]> {\n const retVal = new Deferred();\n this._request(options.start, options.end).then(response => retVal.resolve(response));\n return new QueryResults(retVal.then(response => response.data), {\n totalLength: retVal.then(response => response.totalLength)\n });\n }\n}\n","import { ResultFilter, IOptions, Result } from \"@hpcc-js/comms\";\nimport { Common } from \"@hpcc-js/dgrid\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { Store } from \"./WUResultStore.ts\";\n\nexport class WUResult extends Common {\n\n protected _result: Result;\n protected _localStore: Store;\n\n constructor() {\n super();\n this.renderHtml(false);\n }\n\n hashSum(opts: any = {}) {\n return hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n resultName: this.resultName(),\n sequence: this.sequence(),\n nodeGroup: this.nodeGroup(),\n logicalFile: this.logicalFile(),\n userID: this.user(),\n password: this.password(),\n bypassCache: this.bypassCache(),\n ...opts\n });\n }\n\n protected _prevResultHash: string;\n calcResult(): Result | null {\n const resultHash = this.hashSum();\n if (this._prevResultHash !== resultHash) {\n this._prevResultHash = resultHash;\n\n const opts: IOptions = {\n baseUrl: this.baseUrl(),\n userID: this.user(),\n password: this.password()\n };\n if (this.wuid() && this.resultName()) {\n this._result = Result.attach(opts, this.wuid(), this.resultName());\n } else if (this.wuid() && this.sequence() !== undefined) {\n this._result = Result.attach(opts, this.wuid(), this.sequence());\n } else if (this.logicalFile() && this.nodeGroup()) {\n this._result = Result.attachLogicalFile(opts, this.nodeGroup(), this.logicalFile());\n } else if (this.logicalFile()) {\n this._result = Result.attachLogicalFile(opts, \"\", this.logicalFile());\n }\n\n if (this._result && this.bypassCache()) {\n this._result.bypassCache(this.bypassCache());\n }\n }\n return this._result;\n }\n\n fetch(row, count, abortController = new AbortController()): Promise<object[]> {\n const result = this.calcResult();\n if (result) {\n return result.fetchRows(row, count, false, {}, abortController.signal);\n }\n return Promise.resolve([]);\n }\n\n protected _prevStoreHash: string;\n protected _prevQueryHash: string;\n update(domNode, element) {\n super.update(domNode, element);\n const storeHash = this.hashSum({\n renderHtml: this.renderHtml(),\n filter: this.filter()\n });\n if (this._prevStoreHash !== storeHash) {\n this._prevStoreHash = storeHash;\n const result = this.calcResult();\n if (result) {\n result.fetchXMLSchema().then(schema => {\n this._localStore = new Store(result, schema, this.renderHtml(), this.filter(), (msg) => {\n if (this._dgrid) {\n this._dgrid.noDataMessage = `<span class='dojoxGridNoData'>${msg}</span>`;\n this._dgrid.refresh();\n }\n });\n this._dgrid?.set(\"columns\", this._localStore.columns());\n this._dgrid?.set(\"collection\", this._localStore);\n });\n }\n }\n }\n\n click(row, col, sel) {\n }\n}\nWUResult.prototype._class += \" eclwatch_WUResult\";\n\nexport interface WUResult {\n baseUrl(): string;\n baseUrl(_: string): this;\n user(): string;\n user(_: string): this;\n password(): string;\n password(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n resultName(): string;\n resultName(_: string): this;\n sequence(): number;\n sequence(_: number): this;\n nodeGroup(): string;\n nodeGroup(_: string): this;\n logicalFile(): string;\n logicalFile(_: string): this;\n filter(): ResultFilter;\n filter(_: ResultFilter): this;\n bypassCache(): boolean;\n bypassCache(_: boolean): this;\n}\n\nWUResult.prototype.publish(\"baseUrl\", \"\", \"string\", \"URL to WsWorkunits\");\nWUResult.prototype.publish(\"user\", \"\", \"string\", \"User ID\");\nWUResult.prototype.publish(\"password\", \"\", \"string\", \"Password\");\nWUResult.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUResult.prototype.publish(\"resultName\", \"\", \"string\", \"Result Name\");\nWUResult.prototype.publish(\"sequence\", undefined, \"number\", \"Sequence Number\");\nWUResult.prototype.publish(\"nodeGroup\", \"\", \"string\", \"NodeGroup\");\nWUResult.prototype.publish(\"logicalFile\", \"\", \"string\", \"Logical File Name\");\nWUResult.prototype.publish(\"filter\", {}, \"object\", \"Filter\");\nWUResult.prototype.publish(\"bypassCache\", false, \"boolean\", \"Bypass cached results\");\n","import { Workunit, WUStateID } from \"@hpcc-js/comms\";\nimport { Edge, Graph, Vertex } from \"@hpcc-js/graph\";\nimport { hashSum, IObserverHandle } from \"@hpcc-js/util\";\n\nexport enum STATUS {\n CREATE = \"Created\",\n COMPILE = \"Compiled\",\n EXECUTE = \"Executed\",\n COMPLETE = \"Completed\"\n}\n\nexport enum STATUS_ACTIVE {\n CREATE = \"Creating\",\n COMPILE = \"Compiling\",\n EXECUTE = \"Executing\",\n COMPLETE = \"Completed\"\n}\n\nexport class WUStatus extends Graph {\n\n protected _wu: Workunit;\n protected _wuHandle: IObserverHandle;\n\n protected _create: Vertex;\n protected _compile: Vertex;\n protected _execute: Vertex;\n protected _complete: Vertex;\n\n constructor() {\n super();\n this\n .zoomable(false)\n .zoomToFitLimit(1)\n .layout(\"Hierarchy\")\n .hierarchyRankDirection(\"LR\")\n .showToolbar(false)\n .allowDragging(false)\n ;\n }\n\n private _prevHash;\n attachWorkunit() {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid()\n });\n if (this._prevHash !== hash) {\n this._prevHash = hash;\n this._wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n if (this._wuHandle) {\n this._wuHandle.release();\n }\n this._wuHandle = this._wu.watch(changes => {\n this.lazyRender();\n });\n }\n }\n\n createVertex(faChar: string) {\n return new Vertex()\n .icon_diameter(32)\n .icon_shape_colorFill(\"none\")\n .icon_shape_colorStroke(\"none\")\n .icon_image_colorFill(\"darkgray\")\n .iconAnchor(\"middle\")\n .textbox_shape_colorFill(\"none\")\n .textbox_shape_colorStroke(\"none\")\n .textbox_text_colorFill(\"darkgray\")\n .faChar(faChar)\n ;\n }\n\n updateVertex(vertex: Vertex, color: string) {\n vertex\n .icon_image_colorFill(color)\n .textbox_text_colorFill(color)\n ;\n }\n\n updateVertexStatus(level: 0 | 1 | 2 | 3 | 4, active: boolean = false) {\n const completeColor = this._wu.isFailed() ? \"darkred\" : \"darkgreen\";\n this._create.text(STATUS.CREATE);\n this._compile.text(STATUS.COMPILE);\n this._execute.text(STATUS.EXECUTE);\n this._complete.text(STATUS.COMPLETE);\n switch (level) {\n case 0:\n this.updateVertex(this._create, \"darkgray\");\n this.updateVertex(this._compile, \"darkgray\");\n this.updateVertex(this._execute, \"darkgray\");\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 1:\n this._create.text(STATUS_ACTIVE.CREATE);\n this.updateVertex(this._create, active ? \"orange\" : completeColor);\n this.updateVertex(this._compile, \"darkgray\");\n this.updateVertex(this._execute, \"darkgray\");\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 2:\n this._compile.text(STATUS_ACTIVE.COMPILE);\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, active ? \"orange\" : completeColor);\n this.updateVertex(this._execute, completeColor);\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 3:\n this._execute.text(STATUS_ACTIVE.EXECUTE);\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, completeColor);\n this.updateVertex(this._execute, active ? \"orange\" : completeColor);\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 4:\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, completeColor);\n this.updateVertex(this._execute, completeColor);\n this.updateVertex(this._complete, completeColor);\n break;\n }\n }\n\n createEdge(source, target) {\n return new Edge()\n .sourceVertex(source)\n .targetVertex(target)\n .strokeColor(\"black\")\n .showArc(false)\n ;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._create = this.createVertex(\"\\uf11d\");\n this._compile = this.createVertex(\"\\uf085\");\n this._execute = this.createVertex(\"\\uf275\");\n this._complete = this.createVertex(\"\\uf11e\");\n const e1 = this.createEdge(this._create, this._compile);\n const e2 = this.createEdge(this._compile, this._execute);\n const e3 = this.createEdge(this._execute, this._complete);\n this.data({\n vertices: [this._create, this._compile, this._execute, this._complete],\n edges: [e1, e2, e3]\n });\n }\n\n update(domNode, element) {\n this.attachWorkunit();\n switch (this._wu.StateID) {\n case WUStateID.Blocked:\n case WUStateID.Wait:\n case WUStateID.Scheduled:\n case WUStateID.UploadingFiled:\n this.updateVertexStatus(1);\n break;\n case WUStateID.Compiling:\n this.updateVertexStatus(2, true);\n break;\n case WUStateID.Submitted:\n this.updateVertexStatus(1, true);\n break;\n case WUStateID.Compiled:\n this.updateVertexStatus(2);\n break;\n case WUStateID.Aborting:\n case WUStateID.Running:\n this.updateVertexStatus(3, true);\n break;\n case WUStateID.Aborted:\n case WUStateID.Archived:\n case WUStateID.Completed:\n this.updateVertexStatus(4);\n break;\n case WUStateID.Failed:\n this.updateVertexStatus(4, false);\n break;\n case WUStateID.DebugPaused:\n case WUStateID.DebugRunning:\n case WUStateID.Paused:\n case WUStateID.Unknown:\n default:\n this.updateVertexStatus(0);\n break;\n }\n super.update(domNode, element);\n this.zoomToFit();\n }\n\n exit(domNode, element) {\n if (this._wuHandle) {\n this._wuHandle.release();\n }\n super.exit(domNode, element);\n }\n}\nWUStatus.prototype._class += \" eclwatch_WUStatus\";\n\nexport interface WUStatus {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\n\nWUStatus.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUStatus.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\n","import { Palette } from \"@hpcc-js/common\";\nimport { Scope, Workunit, WsWorkunits } from \"@hpcc-js/comms\";\nimport { ReactTimelineSeries } from \"@hpcc-js/timeline\";\nimport { hashSum, RecursivePartial } from \"@hpcc-js/util\";\n\nimport \"../src/WUGraph.css\";\n\nconst columns = [\"label\", \"start\", \"end\", \"icon\", \"color\", \"series\"];\n\nexport class WUTimeline extends ReactTimelineSeries {\n\n protected _palette = Palette.ordinal(\"default\");\n\n constructor() {\n super();\n this\n .columns(columns)\n .titleColumn(\"label\")\n .iconColumn(\"icon\")\n .colorColumn(\"color\")\n .seriesColumn(\"series\")\n .timePattern(\"%Y-%m-%dT%H:%M:%S.%LZ\")\n .tickFormat(\"%H:%M\")\n .tooltipTimeFormat(\"%H:%M:%S.%L\")\n .tooltipHTML(d => {\n return d[columns.length].calcTooltip();\n })\n ;\n }\n\n private _prevHashSum;\n clear(): this {\n delete this._prevHashSum;\n return this;\n }\n fetchScopes() {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n request: this.request()\n });\n if (this._prevHashSum !== hash) {\n this._prevHashSum = hash;\n const wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n wu.fetchDetails(this.request()).then(scopes => {\n return scopes.filter(scope => scope.Id && scope.attr(\"WhenStarted\").RawValue).map((scope: Scope) => {\n const whenStarted = +scope.attr(\"WhenStarted\").RawValue / 1000;\n const timeElapsed = +scope.attr(\"TimeElapsed\").RawValue / 1000000;\n return [\n scope.Id,\n new Date(whenStarted).toISOString(),\n timeElapsed ? new Date(whenStarted + timeElapsed).toISOString() : undefined,\n null,\n this._palette(scope.ScopeType),\n scope.ScopeName.split(\"::\").join(\":\").split(\":\").slice(0, 1),\n scope\n ];\n });\n }).then(scopes => {\n this\n .data(scopes)\n .render()\n ;\n });\n }\n }\n\n enter(domNode, _element) {\n super.enter(domNode, _element);\n }\n\n update(domNode, element) {\n this.fetchScopes();\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n}\nWUTimeline.prototype._class += \" eclwatch_WUTimeline\";\n\nexport interface WUTimeline {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n request(): Partial<WsWorkunits.WUDetails>;\n request(_: RecursivePartial<WsWorkunits.WUDetails>): this;\n}\n\nWUTimeline.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUTimeline.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUTimeline.prototype.publish(\"request\", {\n ScopeFilter: {\n MaxDepth: 3,\n ScopeTypes: [\"graph\", \"subgraph\"]\n },\n NestedFilter: {\n Depth: 0,\n ScopeTypes: []\n },\n PropertiesToReturn: {\n AllProperties: false,\n AllStatistics: true,\n AllHints: false,\n Properties: [\"WhenStarted\", \"TimeElapsed\"]\n },\n ScopeOptions: {\n IncludeId: true,\n IncludeScope: true,\n IncludeScopeType: true\n },\n PropertyOptions: {\n IncludeName: true,\n IncludeRawValue: true,\n IncludeFormatted: true,\n IncludeMeasure: true,\n IncludeCreator: false,\n IncludeCreatorType: false\n }\n}, \"object\", \"WUDetails Request\");\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_node: any","graphGui: MyGraphData","childVertices: ReadonlyArray<ScopeVertex>","vShow: ScopeVertex[]","vHide: ScopeVertex[]","retVal: WUGraphLegendData[]","retVal: VertexType[]","verticesMap: { [id: string]: boolean }","buttons: Widget[]","column: ColumnType","formattedRow: any","opts: IOptions"],"sources":["../src/__package__.ts","../src/ECLArchiveViewer.ts","../src/WUGraphLegend.ts","../src/WUScopeController.ts","../src/WUGraph.ts","../src/WUResultStore.ts","../src/WUResult.ts","../src/WUStatus.ts","../src/WUTimeline.ts"],"sourcesContent":["export const PKG_NAME = \"__PACKAGE_NAME__\";\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\n","import { Editor } from \"@hpcc-js/codemirror\";\nimport { Workunit } from \"@hpcc-js/comms\";\nimport { SplitPanel } from \"@hpcc-js/phosphor\";\nimport { DirectoryTree } from \"@hpcc-js/tree\";\nimport { hashSum, xml2json } from \"@hpcc-js/util\";\n\nexport class ECLArchiveViewer extends SplitPanel {\n private _prevHash;\n private _contentStr;\n public _directoryPane = new DirectoryTree();\n public _fileEditorPane = new Editor()\n .text(\"\")\n ;\n\n constructor() {\n super(\"horizontal\");\n this._directoryPane.rowClick = (text) => {\n this._fileEditorPane\n .text(text)\n .render()\n ;\n };\n }\n\n protected transformArchiveTreeData(json) {\n const ret = {\n label: json.name,\n children: json._children.map(transformNode).filter(n => n)\n };\n\n if (ret.children && ret.children[0] && ret.children[0].label === \"html\") {\n // must be parsererror\n return {\n label: \"root\",\n children: [\n {\n label: \"error\",\n content: JSON.stringify(ret, null, 4)\n }\n ]\n };\n }\n return ret;\n\n function transformNode(node) {\n const _node: any = {};\n _node.label = node.name + (node[\"$\"] && node[\"$\"].key ? ` (${node[\"$\"].key})` : \"\");\n if (node._children && node._children.length > 0) {\n _node.children = node._children.map(_node => {\n return transformNode(_node);\n })\n .filter(n => n)\n ;\n } else if (typeof node.content === \"string\" && node.content.trim()) {\n _node.content = node.content;\n } else {\n return false;\n }\n return _node;\n }\n }\n\n updateDirectoryPane(contentStr) {\n let json;\n if (contentStr) {\n try {\n json = JSON.parse(contentStr);\n } catch (e) {\n json = xml2json(contentStr);\n }\n }\n if (json) {\n const _data = this.transformArchiveTreeData(json);\n this._directoryPane\n .data(_data)\n .render()\n ;\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this\n .addWidget(this._directoryPane)\n .addWidget(this._fileEditorPane)\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid()\n });\n\n if (this._prevHash !== hash || typeof this._contentStr === \"undefined\") {\n Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid())\n .fetchArchive()\n .then(resp => {\n\n this._contentStr = resp;\n this.updateDirectoryPane(this._contentStr);\n\n this._prevHash = hash;\n });\n } else {\n this.updateDirectoryPane(this._contentStr);\n }\n\n this.relativeSizes([this.directoryWidthRatio(), 1 - this.directoryWidthRatio()]);\n }\n}\nECLArchiveViewer.prototype._class += \" eclwatch_ECLArchiveViewer\";\n\nexport interface ECLArchiveViewer {\n directoryPaneColor(): string;\n directoryPaneColor(_: string): this;\n directoryPaneHoverColor(): string;\n directoryPaneHoverColor(_: string): this;\n fontColor(): string;\n fontColor(_: string): this;\n fontFamily(): string;\n fontFamily(_: string): this;\n fontSize(): number;\n fontSize(_: number): this;\n fileIconSize(): number;\n fileIconSize(_: number): this;\n folderIconOpen(): string;\n folderIconOpen(_: string): this;\n folderIconClosed(): string;\n folderIconClosed(_: string): this;\n textFileIcon(): string;\n textFileIcon(_: string): this;\n codeFileIcon(): string;\n codeFileIcon(_: string): this;\n verticalScroll(): boolean;\n verticalScroll(_: boolean): this;\n directoryWidthRatio(): number;\n directoryWidthRatio(_: number): this;\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\nECLArchiveViewer.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nECLArchiveViewer.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nECLArchiveViewer.prototype.publish(\"directoryWidthRatio\", 0.38, \"number\", \"Default directory panel width ratio relative to the full width\");\nECLArchiveViewer.prototype.publish(\"contentString\", null, \"string\", \"XML/JSON archive content string\");\nECLArchiveViewer.prototype.publishProxy(\"directoryPaneColor\", \"_directoryPane\", \"backgroundColor\");\nECLArchiveViewer.prototype.publishProxy(\"directoryPaneHoverColor\", \"_directoryPane\", \"hoverBackgroundColor\");\nECLArchiveViewer.prototype.publishProxy(\"iconSize\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontColor\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontFamily\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontSize\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"folderIconOpen\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"folderIconClosed\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"textFileIcon\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"codeFileIcon\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"verticalScroll\", \"_directoryPane\");\n","import { Vertex } from \"@hpcc-js/graph\";\nimport { Legend } from \"@hpcc-js/layout\";\nimport { local as d3Local, select as d3Select } from \"d3-selection\";\n\nimport \"../src/WUGraphLegend.css\";\n\nexport interface WUGraphLegendData {\n kind: number;\n faChar: string;\n label: string;\n count: number;\n}\n\nclass LegendVertex extends Vertex {\n\n constructor() {\n super();\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._icon.on(\"click\", () => {\n this.click(this.data());\n });\n }\n\n click(kind: number) {\n }\n}\n\nexport class WUGraphLegend extends Legend {\n\n private icon = d3Local<Vertex>();\n protected _disabled2: { [kind: number]: boolean } = {\n /* TODO: Default some to disabled?\n 43: true,\n 71: true,\n 82: true,\n 88: true\n */\n };\n\n disabled(): number[];\n disabled(_: number[]): this;\n disabled(_?: number[]): number[] | this {\n if (!arguments.length) {\n const retVal = [];\n for (const key in this._disabled2) {\n if (this._disabled2[key]) {\n retVal.push(key);\n }\n }\n return retVal;\n }\n this._disabled2 = {};\n _.forEach(kind => this._disabled2[kind] = true);\n return this;\n }\n\n toggle(kind: number) {\n this._disabled2[kind] = !this._disabled2[kind];\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const context = this;\n const items = this._g.selectAll(\".legendItem\").data(this.data(), (d: any) => d.kind);\n items.enter().append(\"g\")\n .attr(\"class\", \"legendItem\")\n .each(function (this: HTMLElement, d) {\n context.icon.set(this, new LegendVertex()\n .target(this)\n .data(d.kind)\n .textbox_shape_colorStroke(\"none\")\n .textbox_shape_colorFill(\"none\")\n .iconAnchor(\"left\")\n .faChar(d.faChar)\n .text(`${d.label} (${d.count})`)\n .tooltip(`${d.kind} - ${d.label}`)\n .on(\"click\", kind => {\n context.toggle(kind);\n context.render();\n context.click(kind);\n })\n .on(\"mouseover\", kind => {\n context.mouseover(kind);\n })\n .on(\"mouseout\", kind => {\n context.mouseout(kind);\n })\n );\n })\n .merge(items)\n .each(function (this: HTMLElement, d, i) {\n const bbox = context.icon.get(this)\n .icon_shape_colorFill(context._disabled2[d.kind] ? \"gray\" : null)\n .render().getBBox();\n\n d3Select(this)\n .attr(\"transform\", `translate(${+bbox.width / 2}, ${i * 30})`)\n ;\n })\n ;\n items.exit()\n .each(function (this: HTMLElement, d) {\n context.icon.get(this)\n .target(null)\n .render();\n })\n .remove();\n const bbox = this.getBBox(true, true);\n this._g.attr(\"transform\", `translate(16, ${this.height() / 2 - bbox.height / 2})`);\n }\n\n // Events ---\n click(kind: number) {\n }\n\n mouseover(kind: number) {\n }\n\n mouseout(kind: number) {\n }\n}\nWUGraphLegend.prototype._class += \" eclwatch_WUGraphLegend\";\n","import { Icon } from \"@hpcc-js/common\";\nimport { BaseScope, ScopeEdge, ScopeGraph, ScopeSubgraph, ScopeVertex } from \"@hpcc-js/comms\";\nimport { Edge, IGraphData, Lineage, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Edge as UtilEdge, Subgraph as UtilSubgraph, Vertex as UtilVertex } from \"@hpcc-js/util\";\nimport { WUGraphLegendData } from \"./WUGraphLegend.ts\";\n\nexport type VertexType = Vertex | Icon;\n\nexport interface MyGraphData {\n subgraphs: Subgraph[];\n vertices: VertexType[];\n edges: Edge[];\n hierarchy: Lineage[];\n}\n\nfunction faCharFactory(kind): string {\n switch (kind) {\n case \"2\": return \"\\uf0c7\"; // Disk Write\n case \"3\": return \"\\uf15d\"; // sort\n case \"5\": return \"\\uf0b0\"; // Filter\n case \"6\": return \"\\uf1e0\"; // Split\n case \"12\": return \"\\uf039\"; // First N\n case \"15\": return \"\\uf126\"; // Lightweight Join\n case \"17\": return \"\\uf126\"; // Lookup Join\n case \"22\": return \"\\uf1e6\"; // Pipe Output\n case \"23\": return \"\\uf078\"; // Funnel\n case \"25\": return \"\\uf0ce\"; // Inline Dataset\n case \"26\": return \"\\uf074\"; // distribute\n case \"29\": return \"\\uf005\"; // Store Internal Result\n case \"36\": return \"\\uf128\"; // If\n case \"44\": return \"\\uf0c7\"; // write csv\n case \"47\": return \"\\uf0c7\"; // write\n case \"54\": return \"\\uf013\"; // Workunit Read\n case \"56\": return \"\\uf0c7\"; // Spill\n case \"59\": return \"\\uf126\"; // Merge\n case \"61\": return \"\\uf0c7\"; // write xml\n case \"82\": return \"\\uf1c0\"; // Projected Disk Read Spill\n case \"88\": return \"\\uf1c0\"; // Projected Disk Read Spill\n case \"92\": return \"\\uf129\"; // Limted Index Read\n case \"93\": return \"\\uf129\"; // Limted Index Read\n case \"99\": return \"\\uf1c0\"; // CSV Read\n case \"105\": return \"\\uf1c0\"; // CSV Read\n\n case \"7\": return \"\\uf090\"; // Project\n case \"9\": return \"\\uf0e2\"; // Local Iterate\n case \"16\": return \"\\uf005\"; // Output Internal\n case \"19\": return \"\\uf074\"; // Hash Distribute\n case \"21\": return \"\\uf275\"; // Normalize\n case \"35\": return \"\\uf0c7\"; // CSV Write\n case \"37\": return \"\\uf0c7\"; // Index Write\n case \"71\": return \"\\uf1c0\"; // Disk Read Spill\n case \"133\": return \"\\uf0ce\"; // Inline Dataset\n case \"148\": return \"\\uf0ce\"; // Inline Dataset\n case \"168\": return \"\\uf275\"; // Local Denormalize\n }\n return \"\\uf063\";\n}\n\nexport class WUScopeController {\n private graphDB: ScopeGraph;\n private subgraphsMap: { [id: string]: Subgraph } = {};\n private rSubgraphsMap: { [id: string]: ScopeSubgraph } = {};\n private verticesMap: { [id: string]: VertexType } = {};\n private rVerticesMap: { [id: string]: ScopeVertex } = {};\n private edgesMap: { [id: string]: Edge } = {};\n private rEdgesMap: { [id: string]: ScopeEdge } = {};\n private kindMap: { [id: string]: ScopeVertex[] } = {};\n\n protected _disabled: { [kind: number]: boolean } = {};\n\n constructor() {\n }\n\n clear() {\n this.subgraphsMap = {};\n this.rSubgraphsMap = {};\n this.verticesMap = {};\n this.rVerticesMap = {};\n this.edgesMap = {};\n this.rEdgesMap = {};\n }\n\n set(masterGraph: ScopeGraph) {\n this.graphDB = masterGraph;\n this.graphGui(this.graphDB);\n\n this.kindMap = {};\n this.graphDB.walk(item => {\n if (item instanceof UtilSubgraph) {\n } else if (item instanceof UtilVertex) {\n const kind = item._.attr(\"Kind\").RawValue;\n if (!this.kindMap[kind]) {\n this.kindMap[kind] = [];\n }\n this.kindMap[kind].push(item);\n } else if (item instanceof UtilEdge) {\n }\n });\n }\n\n disabled(): number[];\n disabled(_: number[]): this;\n disabled(_?: number[]): number[] | this {\n if (!arguments.length) {\n const retVal = [];\n for (const key in this._disabled) {\n if (this._disabled[key]) {\n retVal.push(key);\n }\n }\n return retVal;\n }\n this._disabled = {};\n _.forEach(kind => this._disabled[kind] = true);\n return this;\n }\n\n graphGui(graphDB: ScopeGraph): IGraphData {\n const graphGui: MyGraphData = {\n subgraphs: [],\n vertices: [],\n edges: [],\n hierarchy: []\n };\n\n graphDB.walk((item) => {\n if (item instanceof UtilSubgraph) {\n const subgraph = this.appendSubgraph(item, graphGui.hierarchy, graphGui.subgraphs);\n subgraph.showMinMax(item.vertices.length > 3 || subgraph.minState() !== \"normal\");\n } else if (item instanceof UtilVertex) {\n this.appendVertex(item, graphGui.hierarchy, graphGui.vertices);\n } else if (item instanceof UtilEdge) {\n this.appendEdge(item, graphGui.edges);\n }\n });\n\n return graphGui;\n }\n\n format(labelTpl, obj) {\n let retVal = \"\";\n let lpos = labelTpl.indexOf(\"%\");\n let rpos = -1;\n while (lpos >= 0) {\n retVal += labelTpl.substring(rpos + 1, lpos);\n rpos = labelTpl.indexOf(\"%\", lpos + 1);\n if (rpos < 0) {\n console.warn(\"Invalid Label Template\");\n break;\n }\n const key = labelTpl.substring(lpos + 1, rpos);\n retVal += !key ? \"%\" : (obj[labelTpl.substring(lpos + 1, rpos)] || \"\");\n lpos = labelTpl.indexOf(\"%\", rpos + 1);\n }\n retVal += labelTpl.substring(rpos + 1, labelTpl.length);\n return retVal.split(\"\\\\n\").join(\"\\n\");\n }\n\n createSubgraph(subgraph: ScopeSubgraph): Subgraph {\n let sg = this.subgraphsMap[subgraph._.Id];\n if (!sg) {\n sg = new Subgraph()\n .title(subgraph._.Id)\n .on(\"minClick\", () => {\n this.minClick(sg);\n })\n ;\n this.subgraphsMap[subgraph._.Id] = sg;\n this.rSubgraphsMap[sg.id()] = subgraph;\n }\n return sg;\n }\n\n createVertex(vertex: ScopeVertex): VertexType {\n let v = this.verticesMap[vertex._.Id];\n if (!v) {\n const attrs = vertex._.rawAttrs();\n if (vertex._.ScopeType === \"dummy\") {\n const parent = this.subgraphsMap[vertex.parent._.Id];\n v = new Icon()\n .shape_colorFill(\"darkred\")\n .shape_colorStroke(\"darkred\")\n .image_colorFill(\"white\")\n .faChar(\"\\uf067\")\n .on(\"click\", () => {\n parent.minState(\"normal\");\n this.minClick(parent);\n })\n ;\n } else {\n v = new Vertex()\n .icon_shape_colorFill(\"#1f77b4\")\n .icon_image_colorFill(\"white\")\n .faChar(faCharFactory(attrs[\"Kind\"]))\n .text(attrs[\"Label\"])\n ;\n const annotations = [];\n if (vertex._.hasAttr(\"Definition\")) {\n annotations.push({\n faChar: \"\\uf036\",\n tooltip: \"Definition\",\n shape_colorFill: \"lightgray\",\n shape_colorStroke: \"lightgray\",\n image_colorFill: \"black\"\n });\n }\n if (vertex._.hasAttr(\"IsInternal\")) {\n annotations.push({\n faChar: \"\\uf085\",\n tooltip: \"IsInternal\",\n shape_colorFill: \"red\",\n shape_colorStroke: \"red\",\n image_colorFill: \"white\"\n });\n }\n v.annotationIcons(annotations);\n }\n this.verticesMap[vertex._.Id] = v;\n this.rVerticesMap[v.id()] = vertex;\n }\n return v;\n }\n\n isSpill(edge: ScopeEdge): boolean {\n const sourceKind = edge.source._.attr(\"Kind\").RawValue;\n const targetKind = edge.target._.attr(\"Kind\").RawValue;\n return sourceKind === \"2\" || targetKind === \"71\";\n }\n\n spansSubgraph(edge: ScopeEdge): boolean {\n return edge.source.parent._.Id !== edge.target.parent._.Id;\n }\n\n createEdge(edge: ScopeEdge): Edge | undefined {\n let e = this.edgesMap[edge._.Id];\n if (!e) {\n const attrs = edge._.rawAttrs();\n const sourceV = this.verticesMap[edge.source._.Id];\n const targetV = this.verticesMap[edge.target._.Id];\n if (sourceV && targetV) {\n const isSpill = this.isSpill(edge);\n const spansSubgraph = this.spansSubgraph(edge);\n\n const label = this.format(\"%Label%\\n%NumRowsProcessed%\", attrs);\n /* TODO: Add extra annotations once WUDetails is fixed...\n const numSlaves = parseInt(attrs[\"NumSlaves\"]);\n const numStarts = parseInt(attrs[\"NumStarts\"]);\n const numStops = parseInt(attrs[\"NumStops\"]);\n const started = numStarts > 0;\n const finished = numStops === numSlaves;\n const active = started && !finished;\n */\n\n let strokeDasharray = null;\n let weight = 100;\n if (attrs[\"IsDependency\"]) {\n weight = 10;\n strokeDasharray = \"1,5\";\n } else if (attrs[\"_childGraph\"]) {\n strokeDasharray = \"5,5\";\n } else if (isSpill) {\n weight = 25;\n strokeDasharray = \"5,5,10,5\";\n } else if (spansSubgraph) {\n weight = 5;\n strokeDasharray = \"5,5\";\n }\n e = new Edge()\n .sourceVertex(sourceV)\n .targetVertex(targetV)\n .sourceMarker(\"circle\")\n .targetMarker(\"arrow\")\n .weight(weight)\n .strokeDasharray(strokeDasharray)\n .text(label)\n ;\n this.edgesMap[edge._.Id] = e;\n this.rEdgesMap[e.id()] = edge;\n }\n }\n return e;\n }\n\n appendSubgraph(subgraph: ScopeSubgraph, hierarchy: Lineage[], subgraphs: Subgraph[]): Subgraph {\n const sg = this.createSubgraph(subgraph);\n subgraphs.push(sg);\n const parent = this.subgraphsMap[subgraph.parent._.Id];\n if (parent) {\n hierarchy.push({ parent, child: sg });\n }\n return sg;\n }\n\n appendVertex(vertex: ScopeVertex, hierarchy: Lineage[], vertices: VertexType[]): VertexType {\n const v = this.createVertex(vertex);\n vertices.push(v);\n const parent = this.subgraphsMap[vertex.parent._.Id];\n if (parent) {\n hierarchy.push({ parent, child: v });\n }\n return v;\n }\n\n appendEdge(edge: ScopeEdge, edges: Edge[]): Edge {\n const e = this.createEdge(edge);\n if (e) {\n edges.push(e);\n }\n return e;\n }\n\n filterLegend(graphDB: ScopeGraph) {\n for (let i = graphDB.vertices.length - 1; i >= 0; --i) {\n const vertex = graphDB.vertices[i];\n const kind = vertex._.attr(\"Kind\").RawValue;\n if (this._disabled[kind]) {\n vertex.remove(false, (source: BaseScope, target: BaseScope) => {\n return new BaseScope({\n ScopeName: vertex._.ScopeName + \":in\",\n Id: source.Id + \"->\" + target.Id,\n ScopeType: \"dummy-edge\",\n Properties: {\n Property: [vertex._.attr(\"Label\")]\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n });\n }\n }\n }\n\n filterPartial(graphDB: ScopeGraph) {\n for (const subgraph of graphDB.subgraphs) {\n const sg = this.subgraphsMap[subgraph._.Id];\n switch (sg.minState()) {\n case \"partial\":\n const childVertices: ReadonlyArray<ScopeVertex> = subgraph.vertices;\n const vShow: ScopeVertex[] = [];\n const vHide: ScopeVertex[] = [];\n\n for (const vertex of childVertices) {\n if (vertex.inEdges.length === 0 || vertex.inEdges.some(edge => edge.source.parent !== edge.target.parent) ||\n vertex.outEdges.length === 0 || vertex.outEdges.some(edge => edge.source.parent !== edge.target.parent)) {\n vShow.push(vertex);\n } else {\n vHide.push(vertex);\n }\n }\n\n if (vHide.length > 1) {\n const dummyDetails = {\n ScopeName: subgraph._.ScopeName,\n Id: subgraph._.Id + \":dummy\",\n ScopeType: \"dummy\",\n Properties: {\n Property: [{\n Name: \"Activities\",\n RawValue: \"\" + vHide.length,\n Formatted: \"\" + vHide.length,\n Measure: \"count\",\n Creator: \"\",\n CreatorType: \"\"\n }]\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n };\n const dummyScope = new BaseScope(dummyDetails);\n const dummyVertex = subgraph.createVertex(dummyScope);\n\n for (const vertex of vHide) {\n for (const edge of vertex.inEdges) {\n if (vShow.indexOf(edge.source) >= 0) {\n const dummyEdgeScope = new BaseScope({\n ScopeName: edge.source._.ScopeName,\n Id: edge.source._.Id + \"->\" + dummyVertex._.Id,\n ScopeType: \"dummy-in\",\n Properties: {\n Property: []\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n subgraph.createEdge(edge.source, dummyVertex, dummyEdgeScope);\n }\n }\n for (const edge of vertex.outEdges) {\n if (vShow.indexOf(edge.target) >= 0) {\n const dummyEdgeScope = new BaseScope({\n ScopeName: edge.target._.ScopeName,\n Id: dummyVertex._.Id + \"->\" + edge.target._.Id,\n ScopeType: \"dummy-out\",\n Properties: {\n Property: []\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n subgraph.createEdge(dummyVertex, edge.target, dummyEdgeScope);\n }\n }\n }\n vHide.forEach(vertex => vertex.remove(true));\n }\n break;\n }\n }\n }\n\n filterEmptySubgraphs(graphDB: ScopeGraph) {\n while (true) {\n const emptySubgraphs = graphDB.subgraphs.filter(subgraph => subgraph.subgraphs.length === 0 && subgraph.vertices.length === 0);\n if (emptySubgraphs.length === 0) break;\n emptySubgraphs.forEach(subgraph => subgraph.remove(true));\n }\n }\n\n removeObsoleteSubgraphs(graphDB: ScopeGraph) {\n for (const subgraph of [...graphDB.subgraphs]) {\n if (subgraph.vertices.length === 0) {\n subgraph.remove(false);\n }\n }\n }\n\n graphData(): IGraphData {\n const graphDB = this.graphDB.clone();\n this.filterLegend(graphDB);\n this.filterPartial(graphDB);\n this.filterEmptySubgraphs(graphDB);\n this.removeObsoleteSubgraphs(graphDB);\n return this.graphGui(graphDB);\n }\n\n calcLegend(): WUGraphLegendData[] {\n const retVal: WUGraphLegendData[] = [];\n for (const kind in this.kindMap) {\n retVal.push({\n kind: parseInt(kind),\n faChar: faCharFactory(kind),\n label: this.kindMap[kind][0]._.attr(\"Label\").RawValue.split(\"\\n\")[0],\n count: this.kindMap[kind].length\n });\n }\n return retVal;\n }\n\n vertices(kind: number): VertexType[] {\n const retVal: VertexType[] = [];\n for (const v of this.kindMap[kind]) {\n retVal.push(this.verticesMap[v._.Id]);\n }\n return retVal;\n }\n\n formatRow(item: ScopeEdge | ScopeSubgraph | ScopeVertex, columns, row) {\n const attrs = item._.formattedAttrs();\n for (const key in attrs) {\n const idx = columns.indexOf(key);\n if (idx === -1) {\n columns.push(key);\n row.push(attrs[key]);\n } else {\n row[idx] = attrs[key];\n }\n }\n for (let i = 0; i < 100; ++i) {\n if (row[i] === undefined) {\n row[i] = \"\";\n }\n }\n return row;\n }\n\n activityData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Kind\", \"Label\"];\n const data = this.graphDB.vertices.map(v => {\n const row = [parseInt(v._.Id.split(\"a\")[1])];\n return this.formatRow(v, columns, row);\n });\n return { columns, data };\n }\n\n edgeData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Label\"];\n const data = this.graphDB.edges.map(e => {\n const row = [e._.Id];\n return this.formatRow(e, columns, row);\n });\n return { columns, data };\n }\n\n subgraphData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Label\"];\n const data = this.graphDB.subgraphs.map(sg => {\n const row = [sg._.Id];\n return this.formatRow(sg, columns, row);\n });\n return { columns, data };\n }\n\n calcGraphTooltip(item: VertexType | Edge) {\n let scope;\n let parentScope;\n if (item instanceof Subgraph) {\n const subgraph = this.rSubgraphsMap[item.id()];\n scope = subgraph._;\n parentScope = subgraph.parent._;\n } else if (item instanceof Vertex || item instanceof Icon) {\n const vertex = this.rVerticesMap[item.id()];\n scope = vertex._;\n parentScope = vertex.parent._;\n } else if (item instanceof Edge) {\n const edge = this.rEdgesMap[item.id()];\n scope = edge._;\n parentScope = edge.parent._;\n }\n if (scope) {\n return scope.calcTooltip(parentScope);\n }\n return \"\";\n }\n\n subgraph(id: string): Subgraph | undefined {\n return this.subgraphsMap[id];\n }\n\n vertex(id: string): VertexType | undefined {\n return this.verticesMap[id];\n }\n\n edge(id: string): Edge {\n return this.edgesMap[id];\n }\n\n // Events ---\n minClick(sg: Subgraph) {\n }\n}\n","import { Button, Spacer, ToggleButton, Widget } from \"@hpcc-js/common\";\nimport { ScopeGraph, Workunit } from \"@hpcc-js/comms\";\nimport { Table } from \"@hpcc-js/dgrid\";\nimport { Graph as GraphWidget, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Carousel, ChartPanel } from \"@hpcc-js/layout\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { WUGraphLegend } from \"./WUGraphLegend.ts\";\nimport { WUScopeController } from \"./WUScopeController.ts\";\n\nimport \"../src/WUGraph.css\";\n\nexport class WUGraph extends ChartPanel {\n\n private _partialAll = new Button().faChar(\"fa-window-restore\").tooltip(\"Partial All\")\n .on(\"click\", () => {\n this.stateClick(this._partialAll);\n });\n\n private _maxAll = new Button().faChar(\"fa-window-maximize\").tooltip(\"Max All\")\n .on(\"click\", () => {\n this.stateClick(this._maxAll);\n });\n\n private _toggleGraph = new ToggleButton().faChar(\"fa-chain\").tooltip(\"Graph\")\n .selected(true)\n .on(\"click\", () => {\n this.viewClick(this._toggleGraph);\n });\n\n private _toggleActivities = new ToggleButton().faChar(\"fa-table\").tooltip(\"Activitiies\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleActivities);\n });\n\n private _toggleEdges = new ToggleButton().faChar(\"fa-table\").tooltip(\"Edges\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleEdges);\n });\n\n private _toggleSubgraphs = new ToggleButton().faChar(\"fa-table\").tooltip(\"Subgraphs\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleSubgraphs);\n });\n\n protected _graph = new GraphWidget()\n .layout(\"Hierarchy\")\n .applyScaleOnLayout(true)\n .showToolbar(false)\n .allowDragging(false)\n ;\n\n private _activities = new Table()\n .pagination(false)\n ;\n\n private _edges = new Table()\n .pagination(false)\n ;\n\n private _subgraphs = new Table()\n .pagination(false)\n ;\n\n protected _legend = new WUGraphLegend(this)\n .on(\"click\", kind => {\n this.render();\n })\n .on(\"mouseover\", kind => {\n const verticesMap: { [id: string]: boolean } = {};\n for (const vertex of this._gc.vertices(kind)) {\n verticesMap[vertex.id()] = true;\n }\n this._graph.highlightVerticies(verticesMap);\n })\n .on(\"mouseout\", kind => {\n this._graph.highlightVerticies();\n })\n ;\n\n protected _view = new Carousel().widgets([this._graph, this._activities, this._edges, this._subgraphs]);\n\n protected _gc = new WUScopeController();\n\n constructor() {\n super();\n this.topOverlay(false);\n this.widget(this._view);\n const buttons: Widget[] = [\n this._toggleGraph,\n this._toggleActivities,\n this._toggleEdges,\n this._toggleSubgraphs,\n new Spacer(),\n this._partialAll,\n this._maxAll,\n new Spacer(),\n ...this._graph.iconBarButtons(),\n new Spacer()];\n this.buttons(buttons.concat(this.buttons()));\n this._gc.minClick = (sg: Subgraph) => {\n this.loadGraph();\n this._graph.render(w => {\n this._graph\n .selection([sg])\n .centerOnItem(sg)\n ;\n });\n };\n\n this._graph.tooltipHTML((v: Vertex) => {\n return this._gc.calcGraphTooltip(v);\n });\n }\n\n stateClick(sourceB: Button) {\n switch (sourceB) {\n case this._partialAll:\n this._graph.data().subgraphs.forEach((sg: Subgraph) => {\n sg.minState(\"partial\");\n });\n break;\n case this._maxAll:\n this._graph.data().subgraphs.forEach((sg: Subgraph) => {\n sg.minState(\"normal\");\n });\n break;\n }\n this.render();\n }\n\n viewClick(sourceTB: ToggleButton) {\n this._toggleGraph.selected(sourceTB === this._toggleGraph);\n this._toggleActivities.selected(sourceTB === this._toggleActivities);\n this._toggleEdges.selected(sourceTB === this._toggleEdges);\n this._toggleSubgraphs.selected(sourceTB === this._toggleSubgraphs);\n switch (sourceTB) {\n case this._toggleGraph:\n this._view.active(0);\n break;\n case this._toggleActivities:\n this._view.active(1);\n break;\n case this._toggleEdges:\n this._view.active(2);\n break;\n case this._toggleSubgraphs:\n this._view.active(3);\n break;\n }\n this.render(w => {\n });\n }\n\n private _prevHashSum;\n private _prevScopeGraph: ScopeGraph;\n fetchScopeGraph(): Promise<ScopeGraph> {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n graphID: this.graphID(),\n subgraphID: this.subgraphID()\n });\n if (!this._prevScopeGraph || this._prevHashSum !== hash) {\n this.startProgress();\n this._prevHashSum = hash;\n this._gc.clear();\n const wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n return wu.fetchGraphs().then(graphs => {\n for (const graph of graphs) {\n if (graph.Name === this.graphID()) {\n this.finishProgress();\n return graph.fetchScopeGraph(this.subgraphID());\n }\n }\n }).then(scopeGraph => {\n this._prevScopeGraph = scopeGraph;\n return this._prevScopeGraph;\n });\n }\n return Promise.resolve(this._prevScopeGraph);\n }\n\n enter(domNode, _element) {\n super.enter(domNode, _element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n loadGraph() {\n this._gc.disabled(this._legend.disabled());\n this._graph\n .data(this._gc.graphData(), true)\n ;\n {\n const { columns, data } = this._gc.activityData();\n this._activities\n .columns(columns)\n .data(data)\n ;\n }\n {\n const { columns, data } = this._gc.edgeData();\n this._edges\n .columns(columns)\n .data(data)\n ;\n }\n {\n const { columns, data } = this._gc.subgraphData();\n this._subgraphs\n .columns(columns)\n .data(data)\n ;\n }\n }\n\n render(callback?: (w: Widget) => void): this {\n if (this.wuid() && this.graphID()) {\n this.fetchScopeGraph().then(scopedGraph => {\n this._gc.set(scopedGraph);\n this._legend.data(this._gc.calcLegend());\n this.loadGraph();\n super.render(callback);\n });\n } else {\n super.render(callback);\n }\n return this;\n }\n\n selection(_?) {\n if (!arguments.length) return this._graph.selection();\n const item = this._gc.vertex(_) || this._gc.edge(_) || this._gc.subgraph(_);\n if (item) {\n this._graph.selection([item]);\n }\n return this;\n }\n}\nWUGraph.prototype._class += \" eclwatch_WUGraph\";\n\nexport interface WUGraph {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n graphID(): string;\n graphID(_: string): this;\n subgraphID(): string;\n subgraphID(_: string): this;\n}\n\nWUGraph.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUGraph.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUGraph.prototype.publish(\"graphID\", \"\", \"string\", \"Graph ID\");\nWUGraph.prototype.publish(\"subgraphID\", \"\", \"string\", \"Subgraph ID\");\n","import { Exception, ResultFilter, Result, XSDSchema, XSDXMLNode } from \"@hpcc-js/comms\";\nimport { ColumnType, Deferred, domConstruct, QueryResults, RowFormatter } from \"@hpcc-js/dgrid\";\n\nfunction entitiesEncode(str) {\n return String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n\nfunction safeEncode(item) {\n switch (Object.prototype.toString.call(item)) {\n case \"[object Undefined]\":\n case \"[object Boolean]\":\n case \"[object Number]\":\n return item;\n case \"[object String]\":\n return entitiesEncode(item);\n default:\n console.warn(\"Unknown cell type: \" + Object.prototype.toString.call(item)); \n }\n return item;\n}\n\nexport class Store {\n protected wuResult: Result;\n protected schema: XSDSchema;\n protected _columns: any[];\n protected _cache: { [key: string]: Promise<{ totalLength: number, data: any[] }> } = {};\n private rowFormatter: RowFormatter;\n protected _filter: ResultFilter = {};\n private onError?: (msg: string) => void;\n\n constructor(wuResult: Result, schema: XSDSchema, renderHtml: boolean, filter: ResultFilter = {}, onError?: (msg: string) => void) {\n this.wuResult = wuResult;\n this.schema = schema;\n this._columns = this.schema2Columns(this.schema.root);\n this.rowFormatter = new RowFormatter(this._columns, renderHtml);\n this._filter = filter;\n this.onError = onError;\n }\n\n columns() {\n return this._columns;\n }\n\n schema2Columns(parentNode: XSDXMLNode, prefix: string = \"\"): ColumnType[] {\n if (!parentNode) return [];\n return parentNode.children().filter(node => node.name.indexOf(\"__hidden\", node.name.length - \"__hidden\".length) === -1).map((node, idx) => {\n const label = node.name;\n const keyed = node.attrs[\"hpcc:keyed\"];\n const column: ColumnType = {\n field: prefix + label,\n leafID: label,\n idx,\n label: label + (keyed ? \" (i)\" : \"\"),\n className: \"resultGridCell\",\n sortable: false,\n width: keyed ? 16 : 0,\n isSet: node.isSet\n };\n const children = this.schema2Columns(node, prefix + label + \"_\");\n if (children.length) {\n column.width += 10 + children.reduce((prev: number, childNode: ColumnType) => {\n return prev + childNode.width!;\n }, 0);\n column.children = children;\n } else {\n column.width += node.charWidth() * 9;\n column.formatter = (cell, row) => {\n switch (typeof cell) {\n case \"string\":\n return {\n html: cell.replace(/\\t/g, \"&nbsp;&nbsp;&nbsp;&nbsp;\").trim()\n };\n case \"undefined\":\n return \"\";\n }\n return cell;\n };\n }\n return column;\n });\n }\n\n isChildDataset(cell) {\n if (Object.prototype.toString.call(cell) !== \"[object Object]\") {\n return false;\n }\n let propCount = 0;\n let firstPropType = null;\n for (const key in cell) {\n if (!firstPropType) {\n firstPropType = Object.prototype.toString.call(cell[key]);\n }\n propCount++;\n }\n return propCount === 1 && firstPropType === \"[object Array]\";\n }\n\n rowToTable(cell, __row, node) {\n if (this.isChildDataset(cell)) { // Don't display \"Row\" as a header ---\n for (const key in cell) {\n this.rowToTable(cell[key], __row, node);\n }\n return;\n }\n\n const table = domConstruct.create(\"table\", { border: 1, cellspacing: 0, width: \"100%\" }, node);\n switch (Object.prototype.toString.call(cell)) {\n case \"[object Object]\":\n let tr = domConstruct.create(\"tr\", null, table);\n for (const key in cell) {\n domConstruct.create(\"th\", { innerHTML: safeEncode(key) }, tr);\n }\n tr = domConstruct.create(\"tr\", null, table);\n for (const key in cell) {\n switch (Object.prototype.toString.call(cell[key])) {\n case \"[object Object]\":\n case \"[object Array]\":\n this.rowToTable(cell[key], __row, node);\n break;\n default:\n domConstruct.create(\"td\", { innerHTML: safeEncode(cell[key]) }, tr);\n break;\n }\n }\n break;\n case \"[object Array]\":\n for (let i = 0; i < cell.length; ++i) {\n switch (Object.prototype.toString.call(cell[i])) {\n case \"[object Boolean]\":\n case \"[object Number]\":\n case \"[object String]\":\n // Item in Scalar ---\n const tr1 = domConstruct.create(\"tr\", null, table);\n domConstruct.create(\"td\", { innerHTML: safeEncode(cell[i]) }, tr1);\n break;\n default:\n // Child Dataset ---\n if (i === 0) {\n const tr2 = domConstruct.create(\"tr\", null, table);\n for (const key in cell[i]) {\n domConstruct.create(\"th\", { innerHTML: safeEncode(key) }, tr2);\n }\n }\n domConstruct.create(\"tr\", null, table);\n for (const key in cell[i]) {\n if (cell[i][key]) {\n if (Object.prototype.toString.call(cell[i][key]) === \"[object Object]\" || Object.prototype.toString.call(cell[i][key]) === \"[object Array]\") {\n const td = domConstruct.create(\"td\", null, tr1);\n this.rowToTable(cell[i][key], cell[i], td);\n } else if (key.indexOf(\"__html\", key.length - \"__html\".length) !== -1) {\n domConstruct.create(\"td\", { innerHTML: cell[i][key] }, tr1);\n } else if (key.indexOf(\"__javascript\", key.length - \"__javascript\".length) !== -1) {\n /*const td = */ domConstruct.create(\"td\", null, tr1);\n // this.injectJavascript(cell[i][key], cell[i], td);\n } else {\n const val = cell[i][key];\n domConstruct.create(\"td\", { innerHTML: safeEncode(val) }, tr1);\n }\n } else {\n domConstruct.create(\"td\", { innerHTML: \"\" }, tr1);\n }\n }\n }\n }\n break;\n }\n }\n\n getIdentity(row) {\n return row.__hpcc_id;\n }\n\n _request(start, end): Promise<{ totalLength: number, data: any[] }> {\n if (!this.wuResult) return Promise.resolve({ totalLength: 0, data: [] });\n const cacheKey = `${start}->${end}`;\n if (this._cache[cacheKey]) return this._cache[cacheKey];\n const retVal = this.wuResult.fetchRows(start, end - start, false, this._filter).then((rows: any[]) => {\n return {\n totalLength: this.wuResult.Total,\n data: rows.map((row, idx) => {\n const formattedRow: any = this.rowFormatter.format(row);\n formattedRow.__hpcc_id = start + idx;\n formattedRow.__hpcc_orig = row;\n return formattedRow;\n })\n };\n }).catch((err: Exception) => {\n this.onError(err.Message || \"An exception has occurred\");\n return { totalLength: 0, data: [] };\n });\n this._cache[cacheKey] = retVal;\n return retVal;\n }\n\n fetchRange(options): Promise<any[]> {\n const retVal = new Deferred();\n this._request(options.start, options.end).then(response => retVal.resolve(response));\n return new QueryResults(retVal.then(response => response.data), {\n totalLength: retVal.then(response => response.totalLength)\n });\n }\n}\n","import { ResultFilter, IOptions, Result } from \"@hpcc-js/comms\";\nimport { Common } from \"@hpcc-js/dgrid\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { Store } from \"./WUResultStore.ts\";\n\nexport class WUResult extends Common {\n\n protected _result: Result;\n protected _localStore: Store;\n\n constructor() {\n super();\n this.renderHtml(false);\n }\n\n hashSum(opts: any = {}) {\n return hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n resultName: this.resultName(),\n sequence: this.sequence(),\n nodeGroup: this.nodeGroup(),\n logicalFile: this.logicalFile(),\n userID: this.user(),\n password: this.password(),\n bypassCache: this.bypassCache(),\n ...opts\n });\n }\n\n protected _prevResultHash: string;\n calcResult(): Result | null {\n const resultHash = this.hashSum();\n if (this._prevResultHash !== resultHash) {\n this._prevResultHash = resultHash;\n\n const opts: IOptions = {\n baseUrl: this.baseUrl(),\n userID: this.user(),\n password: this.password()\n };\n if (this.wuid() && this.resultName()) {\n this._result = Result.attach(opts, this.wuid(), this.resultName());\n } else if (this.wuid() && this.sequence() !== undefined) {\n this._result = Result.attach(opts, this.wuid(), this.sequence());\n } else if (this.logicalFile() && this.nodeGroup()) {\n this._result = Result.attachLogicalFile(opts, this.nodeGroup(), this.logicalFile());\n } else if (this.logicalFile()) {\n this._result = Result.attachLogicalFile(opts, \"\", this.logicalFile());\n }\n\n if (this._result && this.bypassCache()) {\n this._result.bypassCache(this.bypassCache());\n }\n }\n return this._result;\n }\n\n fetch(row, count, abortController = new AbortController()): Promise<object[]> {\n const result = this.calcResult();\n if (result) {\n return result.fetchRows(row, count, false, {}, abortController.signal);\n }\n return Promise.resolve([]);\n }\n\n protected _prevStoreHash: string;\n protected _prevQueryHash: string;\n update(domNode, element) {\n super.update(domNode, element);\n const storeHash = this.hashSum({\n renderHtml: this.renderHtml(),\n filter: this.filter()\n });\n if (this._prevStoreHash !== storeHash) {\n this._prevStoreHash = storeHash;\n const result = this.calcResult();\n if (result) {\n result.fetchXMLSchema().then(schema => {\n this._localStore = new Store(result, schema, this.renderHtml(), this.filter(), (msg) => {\n if (this._dgrid) {\n this._dgrid.noDataMessage = `<span class='dojoxGridNoData'>${msg}</span>`;\n this._dgrid.refresh();\n }\n });\n this._dgrid?.set(\"columns\", this._localStore.columns());\n this._dgrid?.set(\"collection\", this._localStore);\n });\n }\n }\n }\n\n click(row, col, sel) {\n }\n}\nWUResult.prototype._class += \" eclwatch_WUResult\";\n\nexport interface WUResult {\n baseUrl(): string;\n baseUrl(_: string): this;\n user(): string;\n user(_: string): this;\n password(): string;\n password(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n resultName(): string;\n resultName(_: string): this;\n sequence(): number;\n sequence(_: number): this;\n nodeGroup(): string;\n nodeGroup(_: string): this;\n logicalFile(): string;\n logicalFile(_: string): this;\n filter(): ResultFilter;\n filter(_: ResultFilter): this;\n bypassCache(): boolean;\n bypassCache(_: boolean): this;\n}\n\nWUResult.prototype.publish(\"baseUrl\", \"\", \"string\", \"URL to WsWorkunits\");\nWUResult.prototype.publish(\"user\", \"\", \"string\", \"User ID\");\nWUResult.prototype.publish(\"password\", \"\", \"string\", \"Password\");\nWUResult.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUResult.prototype.publish(\"resultName\", \"\", \"string\", \"Result Name\");\nWUResult.prototype.publish(\"sequence\", undefined, \"number\", \"Sequence Number\");\nWUResult.prototype.publish(\"nodeGroup\", \"\", \"string\", \"NodeGroup\");\nWUResult.prototype.publish(\"logicalFile\", \"\", \"string\", \"Logical File Name\");\nWUResult.prototype.publish(\"filter\", {}, \"object\", \"Filter\");\nWUResult.prototype.publish(\"bypassCache\", false, \"boolean\", \"Bypass cached results\");\n","import { Workunit, WUStateID } from \"@hpcc-js/comms\";\nimport { Edge, Graph, Vertex } from \"@hpcc-js/graph\";\nimport { hashSum, IObserverHandle } from \"@hpcc-js/util\";\n\nexport enum STATUS {\n CREATE = \"Created\",\n COMPILE = \"Compiled\",\n EXECUTE = \"Executed\",\n COMPLETE = \"Completed\"\n}\n\nexport enum STATUS_ACTIVE {\n CREATE = \"Creating\",\n COMPILE = \"Compiling\",\n EXECUTE = \"Executing\",\n COMPLETE = \"Completed\"\n}\n\nexport class WUStatus extends Graph {\n\n protected _wu: Workunit;\n protected _wuHandle: IObserverHandle;\n\n protected _create: Vertex;\n protected _compile: Vertex;\n protected _execute: Vertex;\n protected _complete: Vertex;\n\n constructor() {\n super();\n this\n .zoomable(false)\n .zoomToFitLimit(1)\n .layout(\"Hierarchy\")\n .hierarchyRankDirection(\"LR\")\n .showToolbar(false)\n .allowDragging(false)\n ;\n }\n\n private _prevHash;\n attachWorkunit() {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid()\n });\n if (this._prevHash !== hash) {\n this._prevHash = hash;\n this._wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n if (this._wuHandle) {\n this._wuHandle.release();\n }\n this._wuHandle = this._wu.watch(changes => {\n this.lazyRender();\n });\n }\n }\n\n createVertex(faChar: string) {\n return new Vertex()\n .icon_diameter(32)\n .icon_shape_colorFill(\"none\")\n .icon_shape_colorStroke(\"none\")\n .icon_image_colorFill(\"darkgray\")\n .iconAnchor(\"middle\")\n .textbox_shape_colorFill(\"none\")\n .textbox_shape_colorStroke(\"none\")\n .textbox_text_colorFill(\"darkgray\")\n .faChar(faChar)\n ;\n }\n\n updateVertex(vertex: Vertex, color: string) {\n vertex\n .icon_image_colorFill(color)\n .textbox_text_colorFill(color)\n ;\n }\n\n updateVertexStatus(level: 0 | 1 | 2 | 3 | 4, active: boolean = false) {\n const completeColor = this._wu.isFailed() ? \"darkred\" : \"darkgreen\";\n this._create.text(STATUS.CREATE);\n this._compile.text(STATUS.COMPILE);\n this._execute.text(STATUS.EXECUTE);\n this._complete.text(STATUS.COMPLETE);\n switch (level) {\n case 0:\n this.updateVertex(this._create, \"darkgray\");\n this.updateVertex(this._compile, \"darkgray\");\n this.updateVertex(this._execute, \"darkgray\");\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 1:\n this._create.text(STATUS_ACTIVE.CREATE);\n this.updateVertex(this._create, active ? \"orange\" : completeColor);\n this.updateVertex(this._compile, \"darkgray\");\n this.updateVertex(this._execute, \"darkgray\");\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 2:\n this._compile.text(STATUS_ACTIVE.COMPILE);\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, active ? \"orange\" : completeColor);\n this.updateVertex(this._execute, completeColor);\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 3:\n this._execute.text(STATUS_ACTIVE.EXECUTE);\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, completeColor);\n this.updateVertex(this._execute, active ? \"orange\" : completeColor);\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 4:\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, completeColor);\n this.updateVertex(this._execute, completeColor);\n this.updateVertex(this._complete, completeColor);\n break;\n }\n }\n\n createEdge(source, target) {\n return new Edge()\n .sourceVertex(source)\n .targetVertex(target)\n .strokeColor(\"black\")\n .showArc(false)\n ;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._create = this.createVertex(\"\\uf11d\");\n this._compile = this.createVertex(\"\\uf085\");\n this._execute = this.createVertex(\"\\uf275\");\n this._complete = this.createVertex(\"\\uf11e\");\n const e1 = this.createEdge(this._create, this._compile);\n const e2 = this.createEdge(this._compile, this._execute);\n const e3 = this.createEdge(this._execute, this._complete);\n this.data({\n vertices: [this._create, this._compile, this._execute, this._complete],\n edges: [e1, e2, e3]\n });\n }\n\n update(domNode, element) {\n this.attachWorkunit();\n switch (this._wu.StateID) {\n case WUStateID.Blocked:\n case WUStateID.Wait:\n case WUStateID.Scheduled:\n case WUStateID.UploadingFiled:\n this.updateVertexStatus(1);\n break;\n case WUStateID.Compiling:\n this.updateVertexStatus(2, true);\n break;\n case WUStateID.Submitted:\n this.updateVertexStatus(1, true);\n break;\n case WUStateID.Compiled:\n this.updateVertexStatus(2);\n break;\n case WUStateID.Aborting:\n case WUStateID.Running:\n this.updateVertexStatus(3, true);\n break;\n case WUStateID.Aborted:\n case WUStateID.Archived:\n case WUStateID.Completed:\n this.updateVertexStatus(4);\n break;\n case WUStateID.Failed:\n this.updateVertexStatus(4, false);\n break;\n case WUStateID.DebugPaused:\n case WUStateID.DebugRunning:\n case WUStateID.Paused:\n case WUStateID.Unknown:\n default:\n this.updateVertexStatus(0);\n break;\n }\n super.update(domNode, element);\n this.zoomToFit();\n }\n\n exit(domNode, element) {\n if (this._wuHandle) {\n this._wuHandle.release();\n }\n super.exit(domNode, element);\n }\n}\nWUStatus.prototype._class += \" eclwatch_WUStatus\";\n\nexport interface WUStatus {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\n\nWUStatus.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUStatus.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\n","import { Palette } from \"@hpcc-js/common\";\nimport { Scope, Workunit, WsWorkunits } from \"@hpcc-js/comms\";\nimport { ReactTimelineSeries } from \"@hpcc-js/timeline\";\nimport { hashSum, RecursivePartial } from \"@hpcc-js/util\";\n\nimport \"../src/WUGraph.css\";\n\nconst columns = [\"label\", \"start\", \"end\", \"icon\", \"color\", \"series\"];\n\nexport class WUTimeline extends ReactTimelineSeries {\n\n protected _palette = Palette.ordinal(\"default\");\n\n constructor() {\n super();\n this\n .columns(columns)\n .titleColumn(\"label\")\n .iconColumn(\"icon\")\n .colorColumn(\"color\")\n .seriesColumn(\"series\")\n .timePattern(\"%Y-%m-%dT%H:%M:%S.%LZ\")\n .tickFormat(\"%H:%M\")\n .tooltipTimeFormat(\"%H:%M:%S.%L\")\n .tooltipHTML(d => {\n return d[columns.length].calcTooltip();\n })\n ;\n }\n\n private _prevHashSum;\n clear(): this {\n delete this._prevHashSum;\n return this;\n }\n fetchScopes() {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n request: this.request()\n });\n if (this._prevHashSum !== hash) {\n this._prevHashSum = hash;\n const wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n wu.fetchDetails(this.request()).then(scopes => {\n return scopes.filter(scope => scope.Id && scope.attr(\"WhenStarted\").RawValue).map((scope: Scope) => {\n const whenStarted = +scope.attr(\"WhenStarted\").RawValue / 1000;\n const timeElapsed = +scope.attr(\"TimeElapsed\").RawValue / 1000000;\n return [\n scope.Id,\n new Date(whenStarted).toISOString(),\n timeElapsed ? new Date(whenStarted + timeElapsed).toISOString() : undefined,\n null,\n this._palette(scope.ScopeType),\n scope.ScopeName.split(\"::\").join(\":\").split(\":\").slice(0, 1),\n scope\n ];\n });\n }).then(scopes => {\n this\n .data(scopes)\n .render()\n ;\n });\n }\n }\n\n enter(domNode, _element) {\n super.enter(domNode, _element);\n }\n\n update(domNode, element) {\n this.fetchScopes();\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n}\nWUTimeline.prototype._class += \" eclwatch_WUTimeline\";\n\nexport interface WUTimeline {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n request(): Partial<WsWorkunits.WUDetails>;\n request(_: RecursivePartial<WsWorkunits.WUDetails>): this;\n}\n\nWUTimeline.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUTimeline.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUTimeline.prototype.publish(\"request\", {\n ScopeFilter: {\n MaxDepth: 3,\n ScopeTypes: [\"graph\", \"subgraph\"]\n },\n NestedFilter: {\n Depth: 0,\n ScopeTypes: []\n },\n PropertiesToReturn: {\n AllProperties: false,\n AllStatistics: true,\n AllHints: false,\n Properties: [\"WhenStarted\", \"TimeElapsed\"]\n },\n ScopeOptions: {\n IncludeId: true,\n IncludeScope: true,\n IncludeScopeType: true\n },\n PropertyOptions: {\n IncludeName: true,\n IncludeRawValue: true,\n IncludeFormatted: true,\n IncludeMeasure: true,\n IncludeCreator: false,\n IncludeCreatorType: false\n }\n}, \"object\", \"WUDetails Request\");\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@hpcc-js/codemirror"),require("@hpcc-js/comms"),require("@hpcc-js/phosphor"),require("@hpcc-js/tree"),require("@hpcc-js/util"),require("@hpcc-js/common"),require("@hpcc-js/dgrid"),require("@hpcc-js/graph"),require("@hpcc-js/layout"),require("@hpcc-js/timeline")):"function"==typeof define&&define.amd?define(["exports","@hpcc-js/codemirror","@hpcc-js/comms","@hpcc-js/phosphor","@hpcc-js/tree","@hpcc-js/util","@hpcc-js/common","@hpcc-js/dgrid","@hpcc-js/graph","@hpcc-js/layout","@hpcc-js/timeline"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@hpcc-js/eclwatch"]={},e["@hpcc-js/codemirror"],e["@hpcc-js/comms"],e["@hpcc-js/phosphor"],e["@hpcc-js/tree"],e["@hpcc-js/util"],e["@hpcc-js/common"],e["@hpcc-js/dgrid"],e["@hpcc-js/graph"],e["@hpcc-js/layout"],e["@hpcc-js/timeline"])}(this,function(e,t,r,s,i,a,o,c,h,n,l){var p=Object.create,u=Object.defineProperty,d=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyNames,_=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty,m=(e,t,r)=>(r=null!=e?p(_(e)):{},((e,t,r,s)=>{if(t&&"object"==typeof t||"function"==typeof t)for(var i,a=g(t),o=0,c=a.length;o<c;o++)i=a[o],b.call(e,i)||i===r||u(e,i,{get:(e=>t[e]).bind(null,i),enumerable:!(s=d(t,i))||s.enumerable});return e})(!t&&e&&e.__esModule?r:u(r,"default",{value:e,enumerable:!0}),e));t=m(t),r=m(r),s=m(s),i=m(i),a=m(a),o=m(o),c=m(c),h=m(h),n=m(n),l=m(l);var f=class extends s.SplitPanel{_prevHash;_contentStr;_directoryPane=new i.DirectoryTree;_fileEditorPane=(new t.Editor).text("");constructor(){super("horizontal"),this._directoryPane.rowClick=e=>{this._fileEditorPane.text(e).render()}}transformArchiveTreeData(e){const t={label:e.name,children:e._children.map(function e(t){const r={};if(r.label=t.name+(t.$&&t.$.key?` (${t.$.key})`:""),t._children&&t._children.length>0)r.children=t._children.map(t=>e(t)).filter(e=>e);else{if("string"!=typeof t.content||!t.content.trim())return!1;r.content=t.content}return r}).filter(e=>e)};return t.children&&t.children[0]&&"html"===t.children[0].label?{label:"root",children:[{label:"error",content:JSON.stringify(t,null,4)}]}:t}updateDirectoryPane(e){let t;if(e)try{t=JSON.parse(e)}catch(r){t=(0,a.xml2json)(e)}if(t){const e=this.transformArchiveTreeData(t);this._directoryPane.data(e).render()}}enter(e,t){super.enter(e,t),this.addWidget(this._directoryPane).addWidget(this._fileEditorPane)}update(e,t){super.update(e,t);const s=(0,a.hashSum)({baseUrl:this.baseUrl(),wuid:this.wuid()});this._prevHash!==s||void 0===this._contentStr?r.Workunit.attach({baseUrl:this.baseUrl()},this.wuid()).fetchArchive().then(e=>{this._contentStr=e,this.updateDirectoryPane(this._contentStr),this._prevHash=s}):this.updateDirectoryPane(this._contentStr),this.relativeSizes([this.directoryWidthRatio(),1-this.directoryWidthRatio()])}};f.prototype._class+=" eclwatch_ECLArchiveViewer",f.prototype.publish("baseUrl","","string","HPCC Platform Base URL"),f.prototype.publish("wuid","","string","Workunit ID"),f.prototype.publish("directoryWidthRatio",.38,"number","Default directory panel width ratio relative to the full width"),f.prototype.publish("contentString",null,"string","XML/JSON archive content string"),f.prototype.publishProxy("directoryPaneColor","_directoryPane","backgroundColor"),f.prototype.publishProxy("directoryPaneHoverColor","_directoryPane","hoverBackgroundColor"),f.prototype.publishProxy("iconSize","_directoryPane"),f.prototype.publishProxy("fontColor","_directoryPane"),f.prototype.publishProxy("fontFamily","_directoryPane"),f.prototype.publishProxy("fontSize","_directoryPane"),f.prototype.publishProxy("folderIconOpen","_directoryPane"),f.prototype.publishProxy("folderIconClosed","_directoryPane"),f.prototype.publishProxy("textFileIcon","_directoryPane"),f.prototype.publishProxy("codeFileIcon","_directoryPane"),f.prototype.publishProxy("verticalScroll","_directoryPane");var S=class extends h.Vertex{constructor(){super()}enter(e,t){super.enter(e,t),this._icon.on("click",()=>{this.click(this.data())})}click(e){}},y=class extends n.Legend{icon=(0,o.local)();_disabled2={};disabled(e){if(!arguments.length){const e=[];for(const t in this._disabled2)this._disabled2[t]&&e.push(t);return e}return this._disabled2={},e.forEach(e=>this._disabled2[e]=!0),this}toggle(e){this._disabled2[e]=!this._disabled2[e]}update(e,t){super.update(e,t);const r=this,s=this._g.selectAll(".legendItem").data(this.data(),e=>e.kind);s.enter().append("g").attr("class","legendItem").each(function(e){r.icon.set(this,(new S).target(this).data(e.kind).textbox_shape_colorStroke("none").textbox_shape_colorFill("none").iconAnchor("left").faChar(e.faChar).text(`${e.label} (${e.count})`).tooltip(`${e.kind} - ${e.label}`).on("click",e=>{r.toggle(e),r.render(),r.click(e)}).on("mouseover",e=>{r.mouseover(e)}).on("mouseout",e=>{r.mouseout(e)}))}).merge(s).each(function(e,t){const s=r.icon.get(this).icon_shape_colorFill(r._disabled2[e.kind]?"gray":null).render().getBBox();(0,o.select)(this).attr("transform",`translate(${+s.width/2}, ${30*t})`)}),s.exit().each(function(e){r.icon.get(this).target(null).render()}).remove();const i=this.getBBox(!0,!0);this._g.attr("transform",`translate(16, ${this.height()/2-i.height/2})`)}click(e){}mouseover(e){}mouseout(e){}};function w(e){switch(e){case"2":case"44":case"47":case"56":case"61":case"35":case"37":return"";case"3":return"";case"5":return"";case"6":return"";case"12":return"";case"15":case"17":case"59":return"";case"22":return"";case"23":return"";case"25":case"133":case"148":return"";case"26":case"19":return"";case"29":case"16":return"";case"36":return"";case"54":return"";case"82":case"88":case"99":case"105":case"71":return"";case"92":case"93":return"";case"7":return"";case"9":return"";case"21":case"168":return""}return""}y.prototype._class+=" eclwatch_WUGraphLegend";var x=class{graphDB;subgraphsMap={};rSubgraphsMap={};verticesMap={};rVerticesMap={};edgesMap={};rEdgesMap={};kindMap={};_disabled={};constructor(){}clear(){this.subgraphsMap={},this.rSubgraphsMap={},this.verticesMap={},this.rVerticesMap={},this.edgesMap={},this.rEdgesMap={}}set(e){this.graphDB=e,this.graphGui(this.graphDB),this.kindMap={},this.graphDB.walk(e=>{if(e instanceof a.Subgraph);else if(e instanceof a.Vertex){const t=e._.attr("Kind").RawValue;this.kindMap[t]||(this.kindMap[t]=[]),this.kindMap[t].push(e)}else a.Edge})}disabled(e){if(!arguments.length){const e=[];for(const t in this._disabled)this._disabled[t]&&e.push(t);return e}return this._disabled={},e.forEach(e=>this._disabled[e]=!0),this}graphGui(e){const t={subgraphs:[],vertices:[],edges:[],hierarchy:[]};return e.walk(e=>{if(e instanceof a.Subgraph){const r=this.appendSubgraph(e,t.hierarchy,t.subgraphs);r.showMinMax(e.vertices.length>3||"normal"!==r.minState())}else e instanceof a.Vertex?this.appendVertex(e,t.hierarchy,t.vertices):e instanceof a.Edge&&this.appendEdge(e,t.edges)}),t}format(e,t){let r="",s=e.indexOf("%"),i=-1;for(;s>=0;){if(r+=e.substring(i+1,s),i=e.indexOf("%",s+1),i<0){console.warn("Invalid Label Template");break}r+=e.substring(s+1,i)?t[e.substring(s+1,i)]||"":"%",s=e.indexOf("%",i+1)}return r+=e.substring(i+1,e.length),r.split("\\n").join("\n")}createSubgraph(e){let t=this.subgraphsMap[e._.Id];return t||(t=(new h.Subgraph).title(e._.Id).on("minClick",()=>{this.minClick(t)}),this.subgraphsMap[e._.Id]=t,this.rSubgraphsMap[t.id()]=e),t}createVertex(e){let t=this.verticesMap[e._.Id];if(!t){const r=e._.rawAttrs();if("dummy"===e._.ScopeType){const r=this.subgraphsMap[e.parent._.Id];t=(new o.Icon).shape_colorFill("darkred").shape_colorStroke("darkred").image_colorFill("white").faChar("").on("click",()=>{r.minState("normal"),this.minClick(r)})}else{t=(new h.Vertex).icon_shape_colorFill("#1f77b4").icon_image_colorFill("white").faChar(w(r.Kind)).text(r.Label);const s=[];e._.hasAttr("Definition")&&s.push({faChar:"",tooltip:"Definition",shape_colorFill:"lightgray",shape_colorStroke:"lightgray",image_colorFill:"black"}),e._.hasAttr("IsInternal")&&s.push({faChar:"",tooltip:"IsInternal",shape_colorFill:"red",shape_colorStroke:"red",image_colorFill:"white"}),t.annotationIcons(s)}this.verticesMap[e._.Id]=t,this.rVerticesMap[t.id()]=e}return t}isSpill(e){const t=e.source._.attr("Kind").RawValue,r=e.target._.attr("Kind").RawValue;return"2"===t||"71"===r}spansSubgraph(e){return e.source.parent._.Id!==e.target.parent._.Id}createEdge(e){let t=this.edgesMap[e._.Id];if(!t){const r=e._.rawAttrs(),s=this.verticesMap[e.source._.Id],i=this.verticesMap[e.target._.Id];if(s&&i){const a=this.isSpill(e),o=this.spansSubgraph(e),c=this.format("%Label%\n%NumRowsProcessed%",r);let n=null,l=100;r.IsDependency?(l=10,n="1,5"):r._childGraph?n="5,5":a?(l=25,n="5,5,10,5"):o&&(l=5,n="5,5"),t=(new h.Edge).sourceVertex(s).targetVertex(i).sourceMarker("circle").targetMarker("arrow").weight(l).strokeDasharray(n).text(c),this.edgesMap[e._.Id]=t,this.rEdgesMap[t.id()]=e}}return t}appendSubgraph(e,t,r){const s=this.createSubgraph(e);r.push(s);const i=this.subgraphsMap[e.parent._.Id];return i&&t.push({parent:i,child:s}),s}appendVertex(e,t,r){const s=this.createVertex(e);r.push(s);const i=this.subgraphsMap[e.parent._.Id];return i&&t.push({parent:i,child:s}),s}appendEdge(e,t){const r=this.createEdge(e);return r&&t.push(r),r}filterLegend(e){for(let t=e.vertices.length-1;t>=0;--t){const s=e.vertices[t],i=s._.attr("Kind").RawValue;this._disabled[i]&&s.remove(!1,(e,t)=>new r.BaseScope({ScopeName:s._.ScopeName+":in",Id:e.Id+"->"+t.Id,ScopeType:"dummy-edge",Properties:{Property:[s._.attr("Label")]},Notes:{Note:[]},SinkActivity:""}))}}filterPartial(e){for(const t of e.subgraphs)if("partial"===this.subgraphsMap[t._.Id].minState()){const e=t.vertices,s=[],i=[];for(const t of e)0===t.inEdges.length||t.inEdges.some(e=>e.source.parent!==e.target.parent)||0===t.outEdges.length||t.outEdges.some(e=>e.source.parent!==e.target.parent)?s.push(t):i.push(t);if(i.length>1){const e=new r.BaseScope({ScopeName:t._.ScopeName,Id:t._.Id+":dummy",ScopeType:"dummy",Properties:{Property:[{Name:"Activities",RawValue:""+i.length,Formatted:""+i.length,Measure:"count",Creator:"",CreatorType:""}]},Notes:{Note:[]},SinkActivity:""}),a=t.createVertex(e);for(const o of i){for(const e of o.inEdges)if(s.indexOf(e.source)>=0){const s=new r.BaseScope({ScopeName:e.source._.ScopeName,Id:e.source._.Id+"->"+a._.Id,ScopeType:"dummy-in",Properties:{Property:[]},Notes:{Note:[]},SinkActivity:""});t.createEdge(e.source,a,s)}for(const e of o.outEdges)if(s.indexOf(e.target)>=0){const s=new r.BaseScope({ScopeName:e.target._.ScopeName,Id:a._.Id+"->"+e.target._.Id,ScopeType:"dummy-out",Properties:{Property:[]},Notes:{Note:[]},SinkActivity:""});t.createEdge(a,e.target,s)}}i.forEach(e=>e.remove(!0))}}}filterEmptySubgraphs(e){for(;;){const t=e.subgraphs.filter(e=>0===e.subgraphs.length&&0===e.vertices.length);if(0===t.length)break;t.forEach(e=>e.remove(!0))}}removeObsoleteSubgraphs(e){for(const t of[...e.subgraphs])0===t.vertices.length&&t.remove(!1)}graphData(){const e=this.graphDB.clone();return this.filterLegend(e),this.filterPartial(e),this.filterEmptySubgraphs(e),this.removeObsoleteSubgraphs(e),this.graphGui(e)}calcLegend(){const e=[];for(const t in this.kindMap)e.push({kind:parseInt(t),faChar:w(t),label:this.kindMap[t][0]._.attr("Label").RawValue.split("\n")[0],count:this.kindMap[t].length});return e}vertices(e){const t=[];for(const r of this.kindMap[e])t.push(this.verticesMap[r._.Id]);return t}formatRow(e,t,r){const s=e._.formattedAttrs();for(const i in s){const e=t.indexOf(i);-1===e?(t.push(i),r.push(s[i])):r[e]=s[i]}for(let i=0;i<100;++i)void 0===r[i]&&(r[i]="");return r}activityData(){const e=["Id","Kind","Label"];return{columns:e,data:this.graphDB.vertices.map(t=>{const r=[parseInt(t._.Id.split("a")[1])];return this.formatRow(t,e,r)})}}edgeData(){const e=["Id","Label"];return{columns:e,data:this.graphDB.edges.map(t=>{const r=[t._.Id];return this.formatRow(t,e,r)})}}subgraphData(){const e=["Id","Label"];return{columns:e,data:this.graphDB.subgraphs.map(t=>{const r=[t._.Id];return this.formatRow(t,e,r)})}}calcGraphTooltip(e){let t,r;if(e instanceof h.Subgraph){const s=this.rSubgraphsMap[e.id()];t=s._,r=s.parent._}else if(e instanceof h.Vertex||e instanceof o.Icon){const s=this.rVerticesMap[e.id()];t=s._,r=s.parent._}else if(e instanceof h.Edge){const s=this.rEdgesMap[e.id()];t=s._,r=s.parent._}return t?t.calcTooltip(r):""}subgraph(e){return this.subgraphsMap[e]}vertex(e){return this.verticesMap[e]}edge(e){return this.edgesMap[e]}minClick(e){}},v=class extends n.ChartPanel{_partialAll=(new o.Button).faChar("fa-window-restore").tooltip("Partial All").on("click",()=>{this.stateClick(this._partialAll)});_maxAll=(new o.Button).faChar("fa-window-maximize").tooltip("Max All").on("click",()=>{this.stateClick(this._maxAll)});_toggleGraph=(new o.ToggleButton).faChar("fa-chain").tooltip("Graph").selected(!0).on("click",()=>{this.viewClick(this._toggleGraph)});_toggleActivities=(new o.ToggleButton).faChar("fa-table").tooltip("Activitiies").selected(!1).on("click",()=>{this.viewClick(this._toggleActivities)});_toggleEdges=(new o.ToggleButton).faChar("fa-table").tooltip("Edges").selected(!1).on("click",()=>{this.viewClick(this._toggleEdges)});_toggleSubgraphs=(new o.ToggleButton).faChar("fa-table").tooltip("Subgraphs").selected(!1).on("click",()=>{this.viewClick(this._toggleSubgraphs)});_graph=(new h.Graph).layout("Hierarchy").applyScaleOnLayout(!0).showToolbar(!1).allowDragging(!1);_activities=(new c.Table).pagination(!1);_edges=(new c.Table).pagination(!1);_subgraphs=(new c.Table).pagination(!1);_legend=new y(this).on("click",e=>{this.render()}).on("mouseover",e=>{const t={};for(const r of this._gc.vertices(e))t[r.id()]=!0;this._graph.highlightVerticies(t)}).on("mouseout",e=>{this._graph.highlightVerticies()});_view=(new n.Carousel).widgets([this._graph,this._activities,this._edges,this._subgraphs]);_gc=new x;constructor(){super(),this.topOverlay(!1),this.widget(this._view);const e=[this._toggleGraph,this._toggleActivities,this._toggleEdges,this._toggleSubgraphs,new o.Spacer,this._partialAll,this._maxAll,new o.Spacer,...this._graph.iconBarButtons(),new o.Spacer];this.buttons(e.concat(this.buttons())),this._gc.minClick=e=>{this.loadGraph(),this._graph.render(t=>{this._graph.selection([e]).centerOnItem(e)})},this._graph.tooltipHTML(e=>this._gc.calcGraphTooltip(e))}stateClick(e){switch(e){case this._partialAll:this._graph.data().subgraphs.forEach(e=>{e.minState("partial")});break;case this._maxAll:this._graph.data().subgraphs.forEach(e=>{e.minState("normal")})}this.render()}viewClick(e){switch(this._toggleGraph.selected(e===this._toggleGraph),this._toggleActivities.selected(e===this._toggleActivities),this._toggleEdges.selected(e===this._toggleEdges),this._toggleSubgraphs.selected(e===this._toggleSubgraphs),e){case this._toggleGraph:this._view.active(0);break;case this._toggleActivities:this._view.active(1);break;case this._toggleEdges:this._view.active(2);break;case this._toggleSubgraphs:this._view.active(3)}this.render(e=>{})}_prevHashSum;_prevScopeGraph;fetchScopeGraph(){const e=(0,a.hashSum)({baseUrl:this.baseUrl(),wuid:this.wuid(),graphID:this.graphID(),subgraphID:this.subgraphID()});return this._prevScopeGraph&&this._prevHashSum===e?Promise.resolve(this._prevScopeGraph):(this.startProgress(),this._prevHashSum=e,this._gc.clear(),r.Workunit.attach({baseUrl:this.baseUrl()},this.wuid()).fetchGraphs().then(e=>{for(const t of e)if(t.Name===this.graphID())return this.finishProgress(),t.fetchScopeGraph(this.subgraphID())}).then(e=>(this._prevScopeGraph=e,this._prevScopeGraph)))}enter(e,t){super.enter(e,t)}update(e,t){super.update(e,t)}exit(e,t){super.exit(e,t)}loadGraph(){this._gc.disabled(this._legend.disabled()),this._graph.data(this._gc.graphData(),!0);{const{columns:e,data:t}=this._gc.activityData();this._activities.columns(e).data(t)}{const{columns:e,data:t}=this._gc.edgeData();this._edges.columns(e).data(t)}{const{columns:e,data:t}=this._gc.subgraphData();this._subgraphs.columns(e).data(t)}}render(e){return this.wuid()&&this.graphID()?this.fetchScopeGraph().then(t=>{this._gc.set(t),this._legend.data(this._gc.calcLegend()),this.loadGraph(),super.render(e)}):super.render(e),this}selection(e){if(!arguments.length)return this._graph.selection();const t=this._gc.vertex(e)||this._gc.edge(e)||this._gc.subgraph(e);return t&&this._graph.selection([t]),this}};function k(e){switch(Object.prototype.toString.call(e)){case"[object Undefined]":case"[object Boolean]":case"[object Number]":return e;case"[object String]":return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;");default:console.warn("Unknown cell type: "+Object.prototype.toString.call(e))}return e}v.prototype._class+=" eclwatch_WUGraph",v.prototype.publish("baseUrl","","string","HPCC Platform Base URL"),v.prototype.publish("wuid","","string","Workunit ID"),v.prototype.publish("graphID","","string","Graph ID"),v.prototype.publish("subgraphID","","string","Subgraph ID");var I=class{wuResult;schema;_columns;_cache={};rowFormatter;_filter={};onError;constructor(e,t,r,s={},i){this.wuResult=e,this.schema=t,this._columns=this.schema2Columns(this.schema.root),this.rowFormatter=new c.RowFormatter(this._columns,r),this._filter=s,this.onError=i}columns(){return this._columns}schema2Columns(e,t=""){return e?e.children().filter(e=>-1===e.name.indexOf("__hidden",e.name.length-8)).map((e,r)=>{const s=e.name,i=e.attrs["hpcc:keyed"],a={field:t+s,leafID:s,idx:r,label:s+(i?" (i)":""),className:"resultGridCell",sortable:!1,width:i?16:0,isSet:e.isSet},o=this.schema2Columns(e,t+s+"_");return o.length?(a.width+=10+o.reduce((e,t)=>e+t.width,0),a.children=o):(a.width+=9*e.charWidth(),a.formatter=(e,t)=>{switch(typeof e){case"string":return{html:e.replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;").trim()};case"undefined":return""}return e}),a}):[]}isChildDataset(e){if("[object Object]"!==Object.prototype.toString.call(e))return!1;let t=0,r=null;for(const s in e)r||(r=Object.prototype.toString.call(e[s])),t++;return 1===t&&"[object Array]"===r}rowToTable(e,t,r){if(this.isChildDataset(e)){for(const s in e)this.rowToTable(e[s],t,r);return}const s=c.domConstruct.create("table",{border:1,cellspacing:0,width:"100%"},r);switch(Object.prototype.toString.call(e)){case"[object Object]":let i=c.domConstruct.create("tr",null,s);for(const t in e)c.domConstruct.create("th",{innerHTML:k(t)},i);i=c.domConstruct.create("tr",null,s);for(const s in e)switch(Object.prototype.toString.call(e[s])){case"[object Object]":case"[object Array]":this.rowToTable(e[s],t,r);break;default:c.domConstruct.create("td",{innerHTML:k(e[s])},i)}break;case"[object Array]":for(let t=0;t<e.length;++t)switch(Object.prototype.toString.call(e[t])){case"[object Boolean]":case"[object Number]":case"[object String]":const r=c.domConstruct.create("tr",null,s);c.domConstruct.create("td",{innerHTML:k(e[t])},r);break;default:if(0===t){const r=c.domConstruct.create("tr",null,s);for(const s in e[t])c.domConstruct.create("th",{innerHTML:k(s)},r)}c.domConstruct.create("tr",null,s);for(const s in e[t])if(e[t][s])if("[object Object]"===Object.prototype.toString.call(e[t][s])||"[object Array]"===Object.prototype.toString.call(e[t][s])){const i=c.domConstruct.create("td",null,r);this.rowToTable(e[t][s],e[t],i)}else if(-1!==s.indexOf("__html",s.length-6))c.domConstruct.create("td",{innerHTML:e[t][s]},r);else if(-1!==s.indexOf("__javascript",s.length-12))c.domConstruct.create("td",null,r);else{const i=e[t][s];c.domConstruct.create("td",{innerHTML:k(i)},r)}else c.domConstruct.create("td",{innerHTML:""},r)}}}getIdentity(e){return e.__hpcc_id}_request(e,t){if(!this.wuResult)return Promise.resolve({totalLength:0,data:[]});const r=`${e}->${t}`;if(this._cache[r])return this._cache[r];const s=this.wuResult.fetchRows(e,t-e,!1,this._filter).then(t=>({totalLength:this.wuResult.Total,data:t.map((t,r)=>{const s=this.rowFormatter.format(t);return s.__hpcc_id=e+r,s.__hpcc_orig=t,s})})).catch(e=>(this.onError(e.Message||"An exception has occurred"),{totalLength:0,data:[]}));return this._cache[r]=s,s}fetchRange(e){const t=new c.Deferred;return this._request(e.start,e.end).then(e=>t.resolve(e)),new c.QueryResults(t.then(e=>e.data),{totalLength:t.then(e=>e.totalLength)})}},C=class extends c.Common{_result;_localStore;constructor(){super(),this.renderHtml(!1)}hashSum(e={}){return(0,a.hashSum)({baseUrl:this.baseUrl(),wuid:this.wuid(),resultName:this.resultName(),sequence:this.sequence(),nodeGroup:this.nodeGroup(),logicalFile:this.logicalFile(),userID:this.user(),password:this.password(),bypassCache:this.bypassCache(),...e})}_prevResultHash;calcResult(){const e=this.hashSum();if(this._prevResultHash!==e){this._prevResultHash=e;const t={baseUrl:this.baseUrl(),userID:this.user(),password:this.password()};this.wuid()&&this.resultName()?this._result=r.Result.attach(t,this.wuid(),this.resultName()):this.wuid()&&void 0!==this.sequence()?this._result=r.Result.attach(t,this.wuid(),this.sequence()):this.logicalFile()&&this.nodeGroup()?this._result=r.Result.attachLogicalFile(t,this.nodeGroup(),this.logicalFile()):this.logicalFile()&&(this._result=r.Result.attachLogicalFile(t,"",this.logicalFile())),this._result&&this.bypassCache()&&this._result.bypassCache(this.bypassCache())}return this._result}fetch(e,t,r=new AbortController){const s=this.calcResult();return s?s.fetchRows(e,t,!1,{},r.signal):Promise.resolve([])}_prevStoreHash;_prevQueryHash;update(e,t){super.update(e,t);const r=this.hashSum({renderHtml:this.renderHtml(),filter:this.filter()});if(this._prevStoreHash!==r){this._prevStoreHash=r;const e=this.calcResult();e&&e.fetchXMLSchema().then(t=>{this._localStore=new I(e,t,this.renderHtml(),this.filter(),e=>{this._dgrid&&(this._dgrid.noDataMessage=`<span class='dojoxGridNoData'>${e}</span>`,this._dgrid.refresh())}),this._dgrid?.set("columns",this._localStore.columns()),this._dgrid?.set("collection",this._localStore)})}}click(e,t,r){}};C.prototype._class+=" eclwatch_WUResult",C.prototype.publish("baseUrl","","string","URL to WsWorkunits"),C.prototype.publish("user","","string","User ID"),C.prototype.publish("password","","string","Password"),C.prototype.publish("wuid","","string","Workunit ID"),C.prototype.publish("resultName","","string","Result Name"),C.prototype.publish("sequence",void 0,"number","Sequence Number"),C.prototype.publish("nodeGroup","","string","NodeGroup"),C.prototype.publish("logicalFile","","string","Logical File Name"),C.prototype.publish("filter",{},"object","Filter"),C.prototype.publish("bypassCache",!1,"boolean","Bypass cached results");let E=function(e){return e.CREATE="Created",e.COMPILE="Compiled",e.EXECUTE="Executed",e.COMPLETE="Completed",e}({}),P=function(e){return e.CREATE="Creating",e.COMPILE="Compiling",e.EXECUTE="Executing",e.COMPLETE="Completed",e}({});var D=class extends h.Graph{_wu;_wuHandle;_create;_compile;_execute;_complete;constructor(){super(),this.zoomable(!1).zoomToFitLimit(1).layout("Hierarchy").hierarchyRankDirection("LR").showToolbar(!1).allowDragging(!1)}_prevHash;attachWorkunit(){const e=(0,a.hashSum)({baseUrl:this.baseUrl(),wuid:this.wuid()});this._prevHash!==e&&(this._prevHash=e,this._wu=r.Workunit.attach({baseUrl:this.baseUrl()},this.wuid()),this._wuHandle&&this._wuHandle.release(),this._wuHandle=this._wu.watch(e=>{this.lazyRender()}))}createVertex(e){return(new h.Vertex).icon_diameter(32).icon_shape_colorFill("none").icon_shape_colorStroke("none").icon_image_colorFill("darkgray").iconAnchor("middle").textbox_shape_colorFill("none").textbox_shape_colorStroke("none").textbox_text_colorFill("darkgray").faChar(e)}updateVertex(e,t){e.icon_image_colorFill(t).textbox_text_colorFill(t)}updateVertexStatus(e,t=!1){const r=this._wu.isFailed()?"darkred":"darkgreen";switch(this._create.text(E.CREATE),this._compile.text(E.COMPILE),this._execute.text(E.EXECUTE),this._complete.text(E.COMPLETE),e){case 0:this.updateVertex(this._create,"darkgray"),this.updateVertex(this._compile,"darkgray"),this.updateVertex(this._execute,"darkgray"),this.updateVertex(this._complete,"darkgray");break;case 1:this._create.text(P.CREATE),this.updateVertex(this._create,t?"orange":r),this.updateVertex(this._compile,"darkgray"),this.updateVertex(this._execute,"darkgray"),this.updateVertex(this._complete,"darkgray");break;case 2:this._compile.text(P.COMPILE),this.updateVertex(this._create,r),this.updateVertex(this._compile,t?"orange":r),this.updateVertex(this._execute,r),this.updateVertex(this._complete,"darkgray");break;case 3:this._execute.text(P.EXECUTE),this.updateVertex(this._create,r),this.updateVertex(this._compile,r),this.updateVertex(this._execute,t?"orange":r),this.updateVertex(this._complete,"darkgray");break;case 4:this.updateVertex(this._create,r),this.updateVertex(this._compile,r),this.updateVertex(this._execute,r),this.updateVertex(this._complete,r)}}createEdge(e,t){return(new h.Edge).sourceVertex(e).targetVertex(t).strokeColor("black").showArc(!1)}enter(e,t){super.enter(e,t),this._create=this.createVertex(""),this._compile=this.createVertex(""),this._execute=this.createVertex(""),this._complete=this.createVertex("");const r=this.createEdge(this._create,this._compile),s=this.createEdge(this._compile,this._execute),i=this.createEdge(this._execute,this._complete);this.data({vertices:[this._create,this._compile,this._execute,this._complete],edges:[r,s,i]})}update(e,t){switch(this.attachWorkunit(),this._wu.StateID){case r.WUStateID.Blocked:case r.WUStateID.Wait:case r.WUStateID.Scheduled:case r.WUStateID.UploadingFiled:this.updateVertexStatus(1);break;case r.WUStateID.Compiling:this.updateVertexStatus(2,!0);break;case r.WUStateID.Submitted:this.updateVertexStatus(1,!0);break;case r.WUStateID.Compiled:this.updateVertexStatus(2);break;case r.WUStateID.Aborting:case r.WUStateID.Running:this.updateVertexStatus(3,!0);break;case r.WUStateID.Aborted:case r.WUStateID.Archived:case r.WUStateID.Completed:this.updateVertexStatus(4);break;case r.WUStateID.Failed:this.updateVertexStatus(4,!1);break;case r.WUStateID.DebugPaused:case r.WUStateID.DebugRunning:case r.WUStateID.Paused:case r.WUStateID.Unknown:default:this.updateVertexStatus(0)}super.update(e,t),this.zoomToFit()}exit(e,t){this._wuHandle&&this._wuHandle.release(),super.exit(e,t)}};D.prototype._class+=" eclwatch_WUStatus",D.prototype.publish("baseUrl","","string","HPCC Platform Base URL"),D.prototype.publish("wuid","","string","Workunit ID");var M=["label","start","end","icon","color","series"],j=class extends l.ReactTimelineSeries{_palette=o.Palette.ordinal("default");constructor(){super(),this.columns(M).titleColumn("label").iconColumn("icon").colorColumn("color").seriesColumn("series").timePattern("%Y-%m-%dT%H:%M:%S.%LZ").tickFormat("%H:%M").tooltipTimeFormat("%H:%M:%S.%L").tooltipHTML(e=>e[M.length].calcTooltip())}_prevHashSum;clear(){return delete this._prevHashSum,this}fetchScopes(){const e=(0,a.hashSum)({baseUrl:this.baseUrl(),wuid:this.wuid(),request:this.request()});this._prevHashSum!==e&&(this._prevHashSum=e,r.Workunit.attach({baseUrl:this.baseUrl()},this.wuid()).fetchDetails(this.request()).then(e=>e.filter(e=>e.Id&&e.attr("WhenStarted").RawValue).map(e=>{const t=+e.attr("WhenStarted").RawValue/1e3,r=+e.attr("TimeElapsed").RawValue/1e6;return[e.Id,new Date(t).toISOString(),r?new Date(t+r).toISOString():void 0,null,this._palette(e.ScopeType),e.ScopeName.split("::").join(":").split(":").slice(0,1),e]})).then(e=>{this.data(e).render()}))}enter(e,t){super.enter(e,t)}update(e,t){this.fetchScopes(),super.update(e,t)}exit(e,t){super.exit(e,t)}};j.prototype._class+=" eclwatch_WUTimeline",j.prototype.publish("baseUrl","","string","HPCC Platform Base URL"),j.prototype.publish("wuid","","string","Workunit ID"),j.prototype.publish("request",{ScopeFilter:{MaxDepth:3,ScopeTypes:["graph","subgraph"]},NestedFilter:{Depth:0,ScopeTypes:[]},PropertiesToReturn:{AllProperties:!1,AllStatistics:!0,AllHints:!1,Properties:["WhenStarted","TimeElapsed"]},ScopeOptions:{IncludeId:!0,IncludeScope:!0,IncludeScopeType:!0},PropertyOptions:{IncludeName:!0,IncludeRawValue:!0,IncludeFormatted:!0,IncludeMeasure:!0,IncludeCreator:!1,IncludeCreatorType:!1}},"object","WUDetails Request"),e.BUILD_VERSION="3.2.1",e.ECLArchiveViewer=f,e.PKG_NAME="@hpcc-js/eclwatch",e.PKG_VERSION="3.1.1",e.STATUS=E,e.STATUS_ACTIVE=P,e.WUGraph=v,e.WUResult=C,e.WUScopeController=x,e.WUStatus=D,e.WUTimeline=j});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@hpcc-js/codemirror"),require("@hpcc-js/comms"),require("@hpcc-js/phosphor"),require("@hpcc-js/tree"),require("@hpcc-js/util"),require("@hpcc-js/common"),require("@hpcc-js/dgrid"),require("@hpcc-js/graph"),require("@hpcc-js/layout"),require("@hpcc-js/timeline")):"function"==typeof define&&define.amd?define(["exports","@hpcc-js/codemirror","@hpcc-js/comms","@hpcc-js/phosphor","@hpcc-js/tree","@hpcc-js/util","@hpcc-js/common","@hpcc-js/dgrid","@hpcc-js/graph","@hpcc-js/layout","@hpcc-js/timeline"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@hpcc-js/eclwatch"]={},e["@hpcc-js/codemirror"],e["@hpcc-js/comms"],e["@hpcc-js/phosphor"],e["@hpcc-js/tree"],e["@hpcc-js/util"],e["@hpcc-js/common"],e["@hpcc-js/dgrid"],e["@hpcc-js/graph"],e["@hpcc-js/layout"],e["@hpcc-js/timeline"])}(this,function(e,t,r,s,i,a,o,c,h,n,l){var p=Object.create,u=Object.defineProperty,d=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyNames,_=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty,m=(e,t,r)=>(r=null!=e?p(_(e)):{},((e,t,r,s)=>{if(t&&"object"==typeof t||"function"==typeof t)for(var i,a=g(t),o=0,c=a.length;o<c;o++)i=a[o],b.call(e,i)||i===r||u(e,i,{get:(e=>t[e]).bind(null,i),enumerable:!(s=d(t,i))||s.enumerable});return e})(!t&&e&&e.__esModule?r:u(r,"default",{value:e,enumerable:!0}),e));t=m(t),r=m(r),s=m(s),i=m(i),a=m(a),o=m(o),c=m(c),h=m(h),n=m(n),l=m(l);var f=class extends s.SplitPanel{_prevHash;_contentStr;_directoryPane=new i.DirectoryTree;_fileEditorPane=(new t.Editor).text("");constructor(){super("horizontal"),this._directoryPane.rowClick=e=>{this._fileEditorPane.text(e).render()}}transformArchiveTreeData(e){const t={label:e.name,children:e._children.map(function e(t){const r={};if(r.label=t.name+(t.$&&t.$.key?` (${t.$.key})`:""),t._children&&t._children.length>0)r.children=t._children.map(t=>e(t)).filter(e=>e);else{if("string"!=typeof t.content||!t.content.trim())return!1;r.content=t.content}return r}).filter(e=>e)};return t.children&&t.children[0]&&"html"===t.children[0].label?{label:"root",children:[{label:"error",content:JSON.stringify(t,null,4)}]}:t}updateDirectoryPane(e){let t;if(e)try{t=JSON.parse(e)}catch(r){t=(0,a.xml2json)(e)}if(t){const e=this.transformArchiveTreeData(t);this._directoryPane.data(e).render()}}enter(e,t){super.enter(e,t),this.addWidget(this._directoryPane).addWidget(this._fileEditorPane)}update(e,t){super.update(e,t);const s=(0,a.hashSum)({baseUrl:this.baseUrl(),wuid:this.wuid()});this._prevHash!==s||void 0===this._contentStr?r.Workunit.attach({baseUrl:this.baseUrl()},this.wuid()).fetchArchive().then(e=>{this._contentStr=e,this.updateDirectoryPane(this._contentStr),this._prevHash=s}):this.updateDirectoryPane(this._contentStr),this.relativeSizes([this.directoryWidthRatio(),1-this.directoryWidthRatio()])}};f.prototype._class+=" eclwatch_ECLArchiveViewer",f.prototype.publish("baseUrl","","string","HPCC Platform Base URL"),f.prototype.publish("wuid","","string","Workunit ID"),f.prototype.publish("directoryWidthRatio",.38,"number","Default directory panel width ratio relative to the full width"),f.prototype.publish("contentString",null,"string","XML/JSON archive content string"),f.prototype.publishProxy("directoryPaneColor","_directoryPane","backgroundColor"),f.prototype.publishProxy("directoryPaneHoverColor","_directoryPane","hoverBackgroundColor"),f.prototype.publishProxy("iconSize","_directoryPane"),f.prototype.publishProxy("fontColor","_directoryPane"),f.prototype.publishProxy("fontFamily","_directoryPane"),f.prototype.publishProxy("fontSize","_directoryPane"),f.prototype.publishProxy("folderIconOpen","_directoryPane"),f.prototype.publishProxy("folderIconClosed","_directoryPane"),f.prototype.publishProxy("textFileIcon","_directoryPane"),f.prototype.publishProxy("codeFileIcon","_directoryPane"),f.prototype.publishProxy("verticalScroll","_directoryPane");var S=class extends h.Vertex{constructor(){super()}enter(e,t){super.enter(e,t),this._icon.on("click",()=>{this.click(this.data())})}click(e){}},y=class extends n.Legend{icon=(0,o.local)();_disabled2={};disabled(e){if(!arguments.length){const e=[];for(const t in this._disabled2)this._disabled2[t]&&e.push(t);return e}return this._disabled2={},e.forEach(e=>this._disabled2[e]=!0),this}toggle(e){this._disabled2[e]=!this._disabled2[e]}update(e,t){super.update(e,t);const r=this,s=this._g.selectAll(".legendItem").data(this.data(),e=>e.kind);s.enter().append("g").attr("class","legendItem").each(function(e){r.icon.set(this,(new S).target(this).data(e.kind).textbox_shape_colorStroke("none").textbox_shape_colorFill("none").iconAnchor("left").faChar(e.faChar).text(`${e.label} (${e.count})`).tooltip(`${e.kind} - ${e.label}`).on("click",e=>{r.toggle(e),r.render(),r.click(e)}).on("mouseover",e=>{r.mouseover(e)}).on("mouseout",e=>{r.mouseout(e)}))}).merge(s).each(function(e,t){const s=r.icon.get(this).icon_shape_colorFill(r._disabled2[e.kind]?"gray":null).render().getBBox();(0,o.select)(this).attr("transform",`translate(${+s.width/2}, ${30*t})`)}),s.exit().each(function(e){r.icon.get(this).target(null).render()}).remove();const i=this.getBBox(!0,!0);this._g.attr("transform",`translate(16, ${this.height()/2-i.height/2})`)}click(e){}mouseover(e){}mouseout(e){}};function w(e){switch(e){case"2":case"44":case"47":case"56":case"61":case"35":case"37":return"";case"3":return"";case"5":return"";case"6":return"";case"12":return"";case"15":case"17":case"59":return"";case"22":return"";case"23":return"";case"25":case"133":case"148":return"";case"26":case"19":return"";case"29":case"16":return"";case"36":return"";case"54":return"";case"82":case"88":case"99":case"105":case"71":return"";case"92":case"93":return"";case"7":return"";case"9":return"";case"21":case"168":return""}return""}y.prototype._class+=" eclwatch_WUGraphLegend";var x=class{graphDB;subgraphsMap={};rSubgraphsMap={};verticesMap={};rVerticesMap={};edgesMap={};rEdgesMap={};kindMap={};_disabled={};constructor(){}clear(){this.subgraphsMap={},this.rSubgraphsMap={},this.verticesMap={},this.rVerticesMap={},this.edgesMap={},this.rEdgesMap={}}set(e){this.graphDB=e,this.graphGui(this.graphDB),this.kindMap={},this.graphDB.walk(e=>{if(e instanceof a.Subgraph);else if(e instanceof a.Vertex){const t=e._.attr("Kind").RawValue;this.kindMap[t]||(this.kindMap[t]=[]),this.kindMap[t].push(e)}else a.Edge})}disabled(e){if(!arguments.length){const e=[];for(const t in this._disabled)this._disabled[t]&&e.push(t);return e}return this._disabled={},e.forEach(e=>this._disabled[e]=!0),this}graphGui(e){const t={subgraphs:[],vertices:[],edges:[],hierarchy:[]};return e.walk(e=>{if(e instanceof a.Subgraph){const r=this.appendSubgraph(e,t.hierarchy,t.subgraphs);r.showMinMax(e.vertices.length>3||"normal"!==r.minState())}else e instanceof a.Vertex?this.appendVertex(e,t.hierarchy,t.vertices):e instanceof a.Edge&&this.appendEdge(e,t.edges)}),t}format(e,t){let r="",s=e.indexOf("%"),i=-1;for(;s>=0;){if(r+=e.substring(i+1,s),i=e.indexOf("%",s+1),i<0){console.warn("Invalid Label Template");break}r+=e.substring(s+1,i)?t[e.substring(s+1,i)]||"":"%",s=e.indexOf("%",i+1)}return r+=e.substring(i+1,e.length),r.split("\\n").join("\n")}createSubgraph(e){let t=this.subgraphsMap[e._.Id];return t||(t=(new h.Subgraph).title(e._.Id).on("minClick",()=>{this.minClick(t)}),this.subgraphsMap[e._.Id]=t,this.rSubgraphsMap[t.id()]=e),t}createVertex(e){let t=this.verticesMap[e._.Id];if(!t){const r=e._.rawAttrs();if("dummy"===e._.ScopeType){const r=this.subgraphsMap[e.parent._.Id];t=(new o.Icon).shape_colorFill("darkred").shape_colorStroke("darkred").image_colorFill("white").faChar("").on("click",()=>{r.minState("normal"),this.minClick(r)})}else{t=(new h.Vertex).icon_shape_colorFill("#1f77b4").icon_image_colorFill("white").faChar(w(r.Kind)).text(r.Label);const s=[];e._.hasAttr("Definition")&&s.push({faChar:"",tooltip:"Definition",shape_colorFill:"lightgray",shape_colorStroke:"lightgray",image_colorFill:"black"}),e._.hasAttr("IsInternal")&&s.push({faChar:"",tooltip:"IsInternal",shape_colorFill:"red",shape_colorStroke:"red",image_colorFill:"white"}),t.annotationIcons(s)}this.verticesMap[e._.Id]=t,this.rVerticesMap[t.id()]=e}return t}isSpill(e){const t=e.source._.attr("Kind").RawValue,r=e.target._.attr("Kind").RawValue;return"2"===t||"71"===r}spansSubgraph(e){return e.source.parent._.Id!==e.target.parent._.Id}createEdge(e){let t=this.edgesMap[e._.Id];if(!t){const r=e._.rawAttrs(),s=this.verticesMap[e.source._.Id],i=this.verticesMap[e.target._.Id];if(s&&i){const a=this.isSpill(e),o=this.spansSubgraph(e),c=this.format("%Label%\n%NumRowsProcessed%",r);let n=null,l=100;r.IsDependency?(l=10,n="1,5"):r._childGraph?n="5,5":a?(l=25,n="5,5,10,5"):o&&(l=5,n="5,5"),t=(new h.Edge).sourceVertex(s).targetVertex(i).sourceMarker("circle").targetMarker("arrow").weight(l).strokeDasharray(n).text(c),this.edgesMap[e._.Id]=t,this.rEdgesMap[t.id()]=e}}return t}appendSubgraph(e,t,r){const s=this.createSubgraph(e);r.push(s);const i=this.subgraphsMap[e.parent._.Id];return i&&t.push({parent:i,child:s}),s}appendVertex(e,t,r){const s=this.createVertex(e);r.push(s);const i=this.subgraphsMap[e.parent._.Id];return i&&t.push({parent:i,child:s}),s}appendEdge(e,t){const r=this.createEdge(e);return r&&t.push(r),r}filterLegend(e){for(let t=e.vertices.length-1;t>=0;--t){const s=e.vertices[t],i=s._.attr("Kind").RawValue;this._disabled[i]&&s.remove(!1,(e,t)=>new r.BaseScope({ScopeName:s._.ScopeName+":in",Id:e.Id+"->"+t.Id,ScopeType:"dummy-edge",Properties:{Property:[s._.attr("Label")]},Notes:{Note:[]},SinkActivity:""}))}}filterPartial(e){for(const t of e.subgraphs)if("partial"===this.subgraphsMap[t._.Id].minState()){const e=t.vertices,s=[],i=[];for(const t of e)0===t.inEdges.length||t.inEdges.some(e=>e.source.parent!==e.target.parent)||0===t.outEdges.length||t.outEdges.some(e=>e.source.parent!==e.target.parent)?s.push(t):i.push(t);if(i.length>1){const e=new r.BaseScope({ScopeName:t._.ScopeName,Id:t._.Id+":dummy",ScopeType:"dummy",Properties:{Property:[{Name:"Activities",RawValue:""+i.length,Formatted:""+i.length,Measure:"count",Creator:"",CreatorType:""}]},Notes:{Note:[]},SinkActivity:""}),a=t.createVertex(e);for(const o of i){for(const e of o.inEdges)if(s.indexOf(e.source)>=0){const s=new r.BaseScope({ScopeName:e.source._.ScopeName,Id:e.source._.Id+"->"+a._.Id,ScopeType:"dummy-in",Properties:{Property:[]},Notes:{Note:[]},SinkActivity:""});t.createEdge(e.source,a,s)}for(const e of o.outEdges)if(s.indexOf(e.target)>=0){const s=new r.BaseScope({ScopeName:e.target._.ScopeName,Id:a._.Id+"->"+e.target._.Id,ScopeType:"dummy-out",Properties:{Property:[]},Notes:{Note:[]},SinkActivity:""});t.createEdge(a,e.target,s)}}i.forEach(e=>e.remove(!0))}}}filterEmptySubgraphs(e){for(;;){const t=e.subgraphs.filter(e=>0===e.subgraphs.length&&0===e.vertices.length);if(0===t.length)break;t.forEach(e=>e.remove(!0))}}removeObsoleteSubgraphs(e){for(const t of[...e.subgraphs])0===t.vertices.length&&t.remove(!1)}graphData(){const e=this.graphDB.clone();return this.filterLegend(e),this.filterPartial(e),this.filterEmptySubgraphs(e),this.removeObsoleteSubgraphs(e),this.graphGui(e)}calcLegend(){const e=[];for(const t in this.kindMap)e.push({kind:parseInt(t),faChar:w(t),label:this.kindMap[t][0]._.attr("Label").RawValue.split("\n")[0],count:this.kindMap[t].length});return e}vertices(e){const t=[];for(const r of this.kindMap[e])t.push(this.verticesMap[r._.Id]);return t}formatRow(e,t,r){const s=e._.formattedAttrs();for(const i in s){const e=t.indexOf(i);-1===e?(t.push(i),r.push(s[i])):r[e]=s[i]}for(let i=0;i<100;++i)void 0===r[i]&&(r[i]="");return r}activityData(){const e=["Id","Kind","Label"];return{columns:e,data:this.graphDB.vertices.map(t=>{const r=[parseInt(t._.Id.split("a")[1])];return this.formatRow(t,e,r)})}}edgeData(){const e=["Id","Label"];return{columns:e,data:this.graphDB.edges.map(t=>{const r=[t._.Id];return this.formatRow(t,e,r)})}}subgraphData(){const e=["Id","Label"];return{columns:e,data:this.graphDB.subgraphs.map(t=>{const r=[t._.Id];return this.formatRow(t,e,r)})}}calcGraphTooltip(e){let t,r;if(e instanceof h.Subgraph){const s=this.rSubgraphsMap[e.id()];t=s._,r=s.parent._}else if(e instanceof h.Vertex||e instanceof o.Icon){const s=this.rVerticesMap[e.id()];t=s._,r=s.parent._}else if(e instanceof h.Edge){const s=this.rEdgesMap[e.id()];t=s._,r=s.parent._}return t?t.calcTooltip(r):""}subgraph(e){return this.subgraphsMap[e]}vertex(e){return this.verticesMap[e]}edge(e){return this.edgesMap[e]}minClick(e){}},v=class extends n.ChartPanel{_partialAll=(new o.Button).faChar("fa-window-restore").tooltip("Partial All").on("click",()=>{this.stateClick(this._partialAll)});_maxAll=(new o.Button).faChar("fa-window-maximize").tooltip("Max All").on("click",()=>{this.stateClick(this._maxAll)});_toggleGraph=(new o.ToggleButton).faChar("fa-chain").tooltip("Graph").selected(!0).on("click",()=>{this.viewClick(this._toggleGraph)});_toggleActivities=(new o.ToggleButton).faChar("fa-table").tooltip("Activitiies").selected(!1).on("click",()=>{this.viewClick(this._toggleActivities)});_toggleEdges=(new o.ToggleButton).faChar("fa-table").tooltip("Edges").selected(!1).on("click",()=>{this.viewClick(this._toggleEdges)});_toggleSubgraphs=(new o.ToggleButton).faChar("fa-table").tooltip("Subgraphs").selected(!1).on("click",()=>{this.viewClick(this._toggleSubgraphs)});_graph=(new h.Graph).layout("Hierarchy").applyScaleOnLayout(!0).showToolbar(!1).allowDragging(!1);_activities=(new c.Table).pagination(!1);_edges=(new c.Table).pagination(!1);_subgraphs=(new c.Table).pagination(!1);_legend=new y(this).on("click",e=>{this.render()}).on("mouseover",e=>{const t={};for(const r of this._gc.vertices(e))t[r.id()]=!0;this._graph.highlightVerticies(t)}).on("mouseout",e=>{this._graph.highlightVerticies()});_view=(new n.Carousel).widgets([this._graph,this._activities,this._edges,this._subgraphs]);_gc=new x;constructor(){super(),this.topOverlay(!1),this.widget(this._view);const e=[this._toggleGraph,this._toggleActivities,this._toggleEdges,this._toggleSubgraphs,new o.Spacer,this._partialAll,this._maxAll,new o.Spacer,...this._graph.iconBarButtons(),new o.Spacer];this.buttons(e.concat(this.buttons())),this._gc.minClick=e=>{this.loadGraph(),this._graph.render(t=>{this._graph.selection([e]).centerOnItem(e)})},this._graph.tooltipHTML(e=>this._gc.calcGraphTooltip(e))}stateClick(e){switch(e){case this._partialAll:this._graph.data().subgraphs.forEach(e=>{e.minState("partial")});break;case this._maxAll:this._graph.data().subgraphs.forEach(e=>{e.minState("normal")})}this.render()}viewClick(e){switch(this._toggleGraph.selected(e===this._toggleGraph),this._toggleActivities.selected(e===this._toggleActivities),this._toggleEdges.selected(e===this._toggleEdges),this._toggleSubgraphs.selected(e===this._toggleSubgraphs),e){case this._toggleGraph:this._view.active(0);break;case this._toggleActivities:this._view.active(1);break;case this._toggleEdges:this._view.active(2);break;case this._toggleSubgraphs:this._view.active(3)}this.render(e=>{})}_prevHashSum;_prevScopeGraph;fetchScopeGraph(){const e=(0,a.hashSum)({baseUrl:this.baseUrl(),wuid:this.wuid(),graphID:this.graphID(),subgraphID:this.subgraphID()});return this._prevScopeGraph&&this._prevHashSum===e?Promise.resolve(this._prevScopeGraph):(this.startProgress(),this._prevHashSum=e,this._gc.clear(),r.Workunit.attach({baseUrl:this.baseUrl()},this.wuid()).fetchGraphs().then(e=>{for(const t of e)if(t.Name===this.graphID())return this.finishProgress(),t.fetchScopeGraph(this.subgraphID())}).then(e=>(this._prevScopeGraph=e,this._prevScopeGraph)))}enter(e,t){super.enter(e,t)}update(e,t){super.update(e,t)}exit(e,t){super.exit(e,t)}loadGraph(){this._gc.disabled(this._legend.disabled()),this._graph.data(this._gc.graphData(),!0);{const{columns:e,data:t}=this._gc.activityData();this._activities.columns(e).data(t)}{const{columns:e,data:t}=this._gc.edgeData();this._edges.columns(e).data(t)}{const{columns:e,data:t}=this._gc.subgraphData();this._subgraphs.columns(e).data(t)}}render(e){return this.wuid()&&this.graphID()?this.fetchScopeGraph().then(t=>{this._gc.set(t),this._legend.data(this._gc.calcLegend()),this.loadGraph(),super.render(e)}):super.render(e),this}selection(e){if(!arguments.length)return this._graph.selection();const t=this._gc.vertex(e)||this._gc.edge(e)||this._gc.subgraph(e);return t&&this._graph.selection([t]),this}};function k(e){switch(Object.prototype.toString.call(e)){case"[object Undefined]":case"[object Boolean]":case"[object Number]":return e;case"[object String]":return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;");default:console.warn("Unknown cell type: "+Object.prototype.toString.call(e))}return e}v.prototype._class+=" eclwatch_WUGraph",v.prototype.publish("baseUrl","","string","HPCC Platform Base URL"),v.prototype.publish("wuid","","string","Workunit ID"),v.prototype.publish("graphID","","string","Graph ID"),v.prototype.publish("subgraphID","","string","Subgraph ID");var I=class{wuResult;schema;_columns;_cache={};rowFormatter;_filter={};onError;constructor(e,t,r,s={},i){this.wuResult=e,this.schema=t,this._columns=this.schema2Columns(this.schema.root),this.rowFormatter=new c.RowFormatter(this._columns,r),this._filter=s,this.onError=i}columns(){return this._columns}schema2Columns(e,t=""){return e?e.children().filter(e=>-1===e.name.indexOf("__hidden",e.name.length-8)).map((e,r)=>{const s=e.name,i=e.attrs["hpcc:keyed"],a={field:t+s,leafID:s,idx:r,label:s+(i?" (i)":""),className:"resultGridCell",sortable:!1,width:i?16:0,isSet:e.isSet},o=this.schema2Columns(e,t+s+"_");return o.length?(a.width+=10+o.reduce((e,t)=>e+t.width,0),a.children=o):(a.width+=9*e.charWidth(),a.formatter=(e,t)=>{switch(typeof e){case"string":return{html:e.replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;").trim()};case"undefined":return""}return e}),a}):[]}isChildDataset(e){if("[object Object]"!==Object.prototype.toString.call(e))return!1;let t=0,r=null;for(const s in e)r||(r=Object.prototype.toString.call(e[s])),t++;return 1===t&&"[object Array]"===r}rowToTable(e,t,r){if(this.isChildDataset(e)){for(const s in e)this.rowToTable(e[s],t,r);return}const s=c.domConstruct.create("table",{border:1,cellspacing:0,width:"100%"},r);switch(Object.prototype.toString.call(e)){case"[object Object]":let i=c.domConstruct.create("tr",null,s);for(const t in e)c.domConstruct.create("th",{innerHTML:k(t)},i);i=c.domConstruct.create("tr",null,s);for(const s in e)switch(Object.prototype.toString.call(e[s])){case"[object Object]":case"[object Array]":this.rowToTable(e[s],t,r);break;default:c.domConstruct.create("td",{innerHTML:k(e[s])},i)}break;case"[object Array]":for(let t=0;t<e.length;++t)switch(Object.prototype.toString.call(e[t])){case"[object Boolean]":case"[object Number]":case"[object String]":const r=c.domConstruct.create("tr",null,s);c.domConstruct.create("td",{innerHTML:k(e[t])},r);break;default:if(0===t){const r=c.domConstruct.create("tr",null,s);for(const s in e[t])c.domConstruct.create("th",{innerHTML:k(s)},r)}c.domConstruct.create("tr",null,s);for(const s in e[t])if(e[t][s])if("[object Object]"===Object.prototype.toString.call(e[t][s])||"[object Array]"===Object.prototype.toString.call(e[t][s])){const i=c.domConstruct.create("td",null,r);this.rowToTable(e[t][s],e[t],i)}else if(-1!==s.indexOf("__html",s.length-6))c.domConstruct.create("td",{innerHTML:e[t][s]},r);else if(-1!==s.indexOf("__javascript",s.length-12))c.domConstruct.create("td",null,r);else{const i=e[t][s];c.domConstruct.create("td",{innerHTML:k(i)},r)}else c.domConstruct.create("td",{innerHTML:""},r)}}}getIdentity(e){return e.__hpcc_id}_request(e,t){if(!this.wuResult)return Promise.resolve({totalLength:0,data:[]});const r=`${e}->${t}`;if(this._cache[r])return this._cache[r];const s=this.wuResult.fetchRows(e,t-e,!1,this._filter).then(t=>({totalLength:this.wuResult.Total,data:t.map((t,r)=>{const s=this.rowFormatter.format(t);return s.__hpcc_id=e+r,s.__hpcc_orig=t,s})})).catch(e=>(this.onError(e.Message||"An exception has occurred"),{totalLength:0,data:[]}));return this._cache[r]=s,s}fetchRange(e){const t=new c.Deferred;return this._request(e.start,e.end).then(e=>t.resolve(e)),new c.QueryResults(t.then(e=>e.data),{totalLength:t.then(e=>e.totalLength)})}},C=class extends c.Common{_result;_localStore;constructor(){super(),this.renderHtml(!1)}hashSum(e={}){return(0,a.hashSum)({baseUrl:this.baseUrl(),wuid:this.wuid(),resultName:this.resultName(),sequence:this.sequence(),nodeGroup:this.nodeGroup(),logicalFile:this.logicalFile(),userID:this.user(),password:this.password(),bypassCache:this.bypassCache(),...e})}_prevResultHash;calcResult(){const e=this.hashSum();if(this._prevResultHash!==e){this._prevResultHash=e;const t={baseUrl:this.baseUrl(),userID:this.user(),password:this.password()};this.wuid()&&this.resultName()?this._result=r.Result.attach(t,this.wuid(),this.resultName()):this.wuid()&&void 0!==this.sequence()?this._result=r.Result.attach(t,this.wuid(),this.sequence()):this.logicalFile()&&this.nodeGroup()?this._result=r.Result.attachLogicalFile(t,this.nodeGroup(),this.logicalFile()):this.logicalFile()&&(this._result=r.Result.attachLogicalFile(t,"",this.logicalFile())),this._result&&this.bypassCache()&&this._result.bypassCache(this.bypassCache())}return this._result}fetch(e,t,r=new AbortController){const s=this.calcResult();return s?s.fetchRows(e,t,!1,{},r.signal):Promise.resolve([])}_prevStoreHash;_prevQueryHash;update(e,t){super.update(e,t);const r=this.hashSum({renderHtml:this.renderHtml(),filter:this.filter()});if(this._prevStoreHash!==r){this._prevStoreHash=r;const e=this.calcResult();e&&e.fetchXMLSchema().then(t=>{this._localStore=new I(e,t,this.renderHtml(),this.filter(),e=>{this._dgrid&&(this._dgrid.noDataMessage=`<span class='dojoxGridNoData'>${e}</span>`,this._dgrid.refresh())}),this._dgrid?.set("columns",this._localStore.columns()),this._dgrid?.set("collection",this._localStore)})}}click(e,t,r){}};C.prototype._class+=" eclwatch_WUResult",C.prototype.publish("baseUrl","","string","URL to WsWorkunits"),C.prototype.publish("user","","string","User ID"),C.prototype.publish("password","","string","Password"),C.prototype.publish("wuid","","string","Workunit ID"),C.prototype.publish("resultName","","string","Result Name"),C.prototype.publish("sequence",void 0,"number","Sequence Number"),C.prototype.publish("nodeGroup","","string","NodeGroup"),C.prototype.publish("logicalFile","","string","Logical File Name"),C.prototype.publish("filter",{},"object","Filter"),C.prototype.publish("bypassCache",!1,"boolean","Bypass cached results");let E=function(e){return e.CREATE="Created",e.COMPILE="Compiled",e.EXECUTE="Executed",e.COMPLETE="Completed",e}({}),P=function(e){return e.CREATE="Creating",e.COMPILE="Compiling",e.EXECUTE="Executing",e.COMPLETE="Completed",e}({});var D=class extends h.Graph{_wu;_wuHandle;_create;_compile;_execute;_complete;constructor(){super(),this.zoomable(!1).zoomToFitLimit(1).layout("Hierarchy").hierarchyRankDirection("LR").showToolbar(!1).allowDragging(!1)}_prevHash;attachWorkunit(){const e=(0,a.hashSum)({baseUrl:this.baseUrl(),wuid:this.wuid()});this._prevHash!==e&&(this._prevHash=e,this._wu=r.Workunit.attach({baseUrl:this.baseUrl()},this.wuid()),this._wuHandle&&this._wuHandle.release(),this._wuHandle=this._wu.watch(e=>{this.lazyRender()}))}createVertex(e){return(new h.Vertex).icon_diameter(32).icon_shape_colorFill("none").icon_shape_colorStroke("none").icon_image_colorFill("darkgray").iconAnchor("middle").textbox_shape_colorFill("none").textbox_shape_colorStroke("none").textbox_text_colorFill("darkgray").faChar(e)}updateVertex(e,t){e.icon_image_colorFill(t).textbox_text_colorFill(t)}updateVertexStatus(e,t=!1){const r=this._wu.isFailed()?"darkred":"darkgreen";switch(this._create.text(E.CREATE),this._compile.text(E.COMPILE),this._execute.text(E.EXECUTE),this._complete.text(E.COMPLETE),e){case 0:this.updateVertex(this._create,"darkgray"),this.updateVertex(this._compile,"darkgray"),this.updateVertex(this._execute,"darkgray"),this.updateVertex(this._complete,"darkgray");break;case 1:this._create.text(P.CREATE),this.updateVertex(this._create,t?"orange":r),this.updateVertex(this._compile,"darkgray"),this.updateVertex(this._execute,"darkgray"),this.updateVertex(this._complete,"darkgray");break;case 2:this._compile.text(P.COMPILE),this.updateVertex(this._create,r),this.updateVertex(this._compile,t?"orange":r),this.updateVertex(this._execute,r),this.updateVertex(this._complete,"darkgray");break;case 3:this._execute.text(P.EXECUTE),this.updateVertex(this._create,r),this.updateVertex(this._compile,r),this.updateVertex(this._execute,t?"orange":r),this.updateVertex(this._complete,"darkgray");break;case 4:this.updateVertex(this._create,r),this.updateVertex(this._compile,r),this.updateVertex(this._execute,r),this.updateVertex(this._complete,r)}}createEdge(e,t){return(new h.Edge).sourceVertex(e).targetVertex(t).strokeColor("black").showArc(!1)}enter(e,t){super.enter(e,t),this._create=this.createVertex(""),this._compile=this.createVertex(""),this._execute=this.createVertex(""),this._complete=this.createVertex("");const r=this.createEdge(this._create,this._compile),s=this.createEdge(this._compile,this._execute),i=this.createEdge(this._execute,this._complete);this.data({vertices:[this._create,this._compile,this._execute,this._complete],edges:[r,s,i]})}update(e,t){switch(this.attachWorkunit(),this._wu.StateID){case r.WUStateID.Blocked:case r.WUStateID.Wait:case r.WUStateID.Scheduled:case r.WUStateID.UploadingFiled:this.updateVertexStatus(1);break;case r.WUStateID.Compiling:this.updateVertexStatus(2,!0);break;case r.WUStateID.Submitted:this.updateVertexStatus(1,!0);break;case r.WUStateID.Compiled:this.updateVertexStatus(2);break;case r.WUStateID.Aborting:case r.WUStateID.Running:this.updateVertexStatus(3,!0);break;case r.WUStateID.Aborted:case r.WUStateID.Archived:case r.WUStateID.Completed:this.updateVertexStatus(4);break;case r.WUStateID.Failed:this.updateVertexStatus(4,!1);break;case r.WUStateID.DebugPaused:case r.WUStateID.DebugRunning:case r.WUStateID.Paused:case r.WUStateID.Unknown:default:this.updateVertexStatus(0)}super.update(e,t),this.zoomToFit()}exit(e,t){this._wuHandle&&this._wuHandle.release(),super.exit(e,t)}};D.prototype._class+=" eclwatch_WUStatus",D.prototype.publish("baseUrl","","string","HPCC Platform Base URL"),D.prototype.publish("wuid","","string","Workunit ID");var M=["label","start","end","icon","color","series"],j=class extends l.ReactTimelineSeries{_palette=o.Palette.ordinal("default");constructor(){super(),this.columns(M).titleColumn("label").iconColumn("icon").colorColumn("color").seriesColumn("series").timePattern("%Y-%m-%dT%H:%M:%S.%LZ").tickFormat("%H:%M").tooltipTimeFormat("%H:%M:%S.%L").tooltipHTML(e=>e[M.length].calcTooltip())}_prevHashSum;clear(){return delete this._prevHashSum,this}fetchScopes(){const e=(0,a.hashSum)({baseUrl:this.baseUrl(),wuid:this.wuid(),request:this.request()});this._prevHashSum!==e&&(this._prevHashSum=e,r.Workunit.attach({baseUrl:this.baseUrl()},this.wuid()).fetchDetails(this.request()).then(e=>e.filter(e=>e.Id&&e.attr("WhenStarted").RawValue).map(e=>{const t=+e.attr("WhenStarted").RawValue/1e3,r=+e.attr("TimeElapsed").RawValue/1e6;return[e.Id,new Date(t).toISOString(),r?new Date(t+r).toISOString():void 0,null,this._palette(e.ScopeType),e.ScopeName.split("::").join(":").split(":").slice(0,1),e]})).then(e=>{this.data(e).render()}))}enter(e,t){super.enter(e,t)}update(e,t){this.fetchScopes(),super.update(e,t)}exit(e,t){super.exit(e,t)}};j.prototype._class+=" eclwatch_WUTimeline",j.prototype.publish("baseUrl","","string","HPCC Platform Base URL"),j.prototype.publish("wuid","","string","Workunit ID"),j.prototype.publish("request",{ScopeFilter:{MaxDepth:3,ScopeTypes:["graph","subgraph"]},NestedFilter:{Depth:0,ScopeTypes:[]},PropertiesToReturn:{AllProperties:!1,AllStatistics:!0,AllHints:!1,Properties:["WhenStarted","TimeElapsed"]},ScopeOptions:{IncludeId:!0,IncludeScope:!0,IncludeScopeType:!0},PropertyOptions:{IncludeName:!0,IncludeRawValue:!0,IncludeFormatted:!0,IncludeMeasure:!0,IncludeCreator:!1,IncludeCreatorType:!1}},"object","WUDetails Request"),e.BUILD_VERSION="3.15.0",e.ECLArchiveViewer=f,e.PKG_NAME="@hpcc-js/eclwatch",e.PKG_VERSION="3.5.0",e.STATUS=E,e.STATUS_ACTIVE=P,e.WUGraph=v,e.WUResult=C,e.WUScopeController=x,e.WUStatus=D,e.WUTimeline=j});
2
2
  //# sourceMappingURL=index.umd.cjs.map!function(){try{if("undefined"!=typeof document){var e=document.createElement("style");e.appendChild(document.createTextNode(".eclwatch_WUGraphLegend .graph_Vertex{cursor:auto}.eclwatch_WUGraphLegend .graph_Vertex .common_Icon{cursor:pointer}.eclwatch_WUGraph .graph_Vertex{cursor:auto}.eclwatch_WUGraph .marker{fill:#656565;stroke:none;stroke-width:1px}.eclwatch_WUGraph .zoom{fill:none;pointer-events:all}.eclwatch_WUGraph .selectionBrush{fill:none;stroke:#a9a9a9}.d3-tip .eclwatch_WUGraph_Tooltip h3,.d3-tip .eclwatch_WUGraph_Tooltip h4{margin:0}.d3-tip .eclwatch_WUGraph_Tooltip table{border-collapse:separate;border-spacing:5px}.d3-tip .eclwatch_WUGraph_Tooltip table .key{font-weight:700}.d3-tip .eclwatch_WUGraph_Tooltip table .value{font-weight:400}\n/*$vite$:1*/")),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}}();
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.cjs","names":["_node: any","graphGui: MyGraphData","childVertices: ReadonlyArray<ScopeVertex>","vShow: ScopeVertex[]","vHide: ScopeVertex[]","retVal: WUGraphLegendData[]","retVal: VertexType[]","verticesMap: { [id: string]: boolean }","buttons: Widget[]","column: ColumnType","formattedRow: any","opts: IOptions"],"sources":["../src/__package__.ts","../src/ECLArchiveViewer.ts","../src/WUGraphLegend.ts","../src/WUScopeController.ts","../src/WUGraph.ts","../src/WUResultStore.ts","../src/WUResult.ts","../src/WUStatus.ts","../src/WUTimeline.ts"],"sourcesContent":["export const PKG_NAME = \"@hpcc-js/eclwatch\";\nexport const PKG_VERSION = \"3.1.1\";\nexport const BUILD_VERSION = \"3.2.1\";\n","import { Editor } from \"@hpcc-js/codemirror\";\nimport { Workunit } from \"@hpcc-js/comms\";\nimport { SplitPanel } from \"@hpcc-js/phosphor\";\nimport { DirectoryTree } from \"@hpcc-js/tree\";\nimport { hashSum, xml2json } from \"@hpcc-js/util\";\n\nexport class ECLArchiveViewer extends SplitPanel {\n private _prevHash;\n private _contentStr;\n public _directoryPane = new DirectoryTree();\n public _fileEditorPane = new Editor()\n .text(\"\")\n ;\n\n constructor() {\n super(\"horizontal\");\n this._directoryPane.rowClick = (text) => {\n this._fileEditorPane\n .text(text)\n .render()\n ;\n };\n }\n\n protected transformArchiveTreeData(json) {\n const ret = {\n label: json.name,\n children: json._children.map(transformNode).filter(n => n)\n };\n\n if (ret.children && ret.children[0] && ret.children[0].label === \"html\") {\n // must be parsererror\n return {\n label: \"root\",\n children: [\n {\n label: \"error\",\n content: JSON.stringify(ret, null, 4)\n }\n ]\n };\n }\n return ret;\n\n function transformNode(node) {\n const _node: any = {};\n _node.label = node.name + (node[\"$\"] && node[\"$\"].key ? ` (${node[\"$\"].key})` : \"\");\n if (node._children && node._children.length > 0) {\n _node.children = node._children.map(_node => {\n return transformNode(_node);\n })\n .filter(n => n)\n ;\n } else if (typeof node.content === \"string\" && node.content.trim()) {\n _node.content = node.content;\n } else {\n return false;\n }\n return _node;\n }\n }\n\n updateDirectoryPane(contentStr) {\n let json;\n if (contentStr) {\n try {\n json = JSON.parse(contentStr);\n } catch (e) {\n json = xml2json(contentStr);\n }\n }\n if (json) {\n const _data = this.transformArchiveTreeData(json);\n this._directoryPane\n .data(_data)\n .render()\n ;\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this\n .addWidget(this._directoryPane)\n .addWidget(this._fileEditorPane)\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid()\n });\n\n if (this._prevHash !== hash || typeof this._contentStr === \"undefined\") {\n Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid())\n .fetchArchive()\n .then(resp => {\n\n this._contentStr = resp;\n this.updateDirectoryPane(this._contentStr);\n\n this._prevHash = hash;\n });\n } else {\n this.updateDirectoryPane(this._contentStr);\n }\n\n this.relativeSizes([this.directoryWidthRatio(), 1 - this.directoryWidthRatio()]);\n }\n}\nECLArchiveViewer.prototype._class += \" eclwatch_ECLArchiveViewer\";\n\nexport interface ECLArchiveViewer {\n directoryPaneColor(): string;\n directoryPaneColor(_: string): this;\n directoryPaneHoverColor(): string;\n directoryPaneHoverColor(_: string): this;\n fontColor(): string;\n fontColor(_: string): this;\n fontFamily(): string;\n fontFamily(_: string): this;\n fontSize(): number;\n fontSize(_: number): this;\n fileIconSize(): number;\n fileIconSize(_: number): this;\n folderIconOpen(): string;\n folderIconOpen(_: string): this;\n folderIconClosed(): string;\n folderIconClosed(_: string): this;\n textFileIcon(): string;\n textFileIcon(_: string): this;\n codeFileIcon(): string;\n codeFileIcon(_: string): this;\n verticalScroll(): boolean;\n verticalScroll(_: boolean): this;\n directoryWidthRatio(): number;\n directoryWidthRatio(_: number): this;\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\nECLArchiveViewer.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nECLArchiveViewer.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nECLArchiveViewer.prototype.publish(\"directoryWidthRatio\", 0.38, \"number\", \"Default directory panel width ratio relative to the full width\");\nECLArchiveViewer.prototype.publish(\"contentString\", null, \"string\", \"XML/JSON archive content string\");\nECLArchiveViewer.prototype.publishProxy(\"directoryPaneColor\", \"_directoryPane\", \"backgroundColor\");\nECLArchiveViewer.prototype.publishProxy(\"directoryPaneHoverColor\", \"_directoryPane\", \"hoverBackgroundColor\");\nECLArchiveViewer.prototype.publishProxy(\"iconSize\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontColor\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontFamily\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontSize\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"folderIconOpen\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"folderIconClosed\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"textFileIcon\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"codeFileIcon\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"verticalScroll\", \"_directoryPane\");\n","import { Vertex } from \"@hpcc-js/graph\";\nimport { Legend } from \"@hpcc-js/layout\";\nimport { local as d3Local, select as d3Select } from \"d3-selection\";\n\nimport \"../src/WUGraphLegend.css\";\n\nexport interface WUGraphLegendData {\n kind: number;\n faChar: string;\n label: string;\n count: number;\n}\n\nclass LegendVertex extends Vertex {\n\n constructor() {\n super();\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._icon.on(\"click\", () => {\n this.click(this.data());\n });\n }\n\n click(kind: number) {\n }\n}\n\nexport class WUGraphLegend extends Legend {\n\n private icon = d3Local<Vertex>();\n protected _disabled2: { [kind: number]: boolean } = {\n /* TODO: Default some to disabled?\n 43: true,\n 71: true,\n 82: true,\n 88: true\n */\n };\n\n disabled(): number[];\n disabled(_: number[]): this;\n disabled(_?: number[]): number[] | this {\n if (!arguments.length) {\n const retVal = [];\n for (const key in this._disabled2) {\n if (this._disabled2[key]) {\n retVal.push(key);\n }\n }\n return retVal;\n }\n this._disabled2 = {};\n _.forEach(kind => this._disabled2[kind] = true);\n return this;\n }\n\n toggle(kind: number) {\n this._disabled2[kind] = !this._disabled2[kind];\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const context = this;\n const items = this._g.selectAll(\".legendItem\").data(this.data(), (d: any) => d.kind);\n items.enter().append(\"g\")\n .attr(\"class\", \"legendItem\")\n .each(function (this: HTMLElement, d) {\n context.icon.set(this, new LegendVertex()\n .target(this)\n .data(d.kind)\n .textbox_shape_colorStroke(\"none\")\n .textbox_shape_colorFill(\"none\")\n .iconAnchor(\"left\")\n .faChar(d.faChar)\n .text(`${d.label} (${d.count})`)\n .tooltip(`${d.kind} - ${d.label}`)\n .on(\"click\", kind => {\n context.toggle(kind);\n context.render();\n context.click(kind);\n })\n .on(\"mouseover\", kind => {\n context.mouseover(kind);\n })\n .on(\"mouseout\", kind => {\n context.mouseout(kind);\n })\n );\n })\n .merge(items)\n .each(function (this: HTMLElement, d, i) {\n const bbox = context.icon.get(this)\n .icon_shape_colorFill(context._disabled2[d.kind] ? \"gray\" : null)\n .render().getBBox();\n\n d3Select(this)\n .attr(\"transform\", `translate(${+bbox.width / 2}, ${i * 30})`)\n ;\n })\n ;\n items.exit()\n .each(function (this: HTMLElement, d) {\n context.icon.get(this)\n .target(null)\n .render();\n })\n .remove();\n const bbox = this.getBBox(true, true);\n this._g.attr(\"transform\", `translate(16, ${this.height() / 2 - bbox.height / 2})`);\n }\n\n // Events ---\n click(kind: number) {\n }\n\n mouseover(kind: number) {\n }\n\n mouseout(kind: number) {\n }\n}\nWUGraphLegend.prototype._class += \" eclwatch_WUGraphLegend\";\n","import { Icon } from \"@hpcc-js/common\";\nimport { BaseScope, ScopeEdge, ScopeGraph, ScopeSubgraph, ScopeVertex } from \"@hpcc-js/comms\";\nimport { Edge, IGraphData, Lineage, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Edge as UtilEdge, Subgraph as UtilSubgraph, Vertex as UtilVertex } from \"@hpcc-js/util\";\nimport { WUGraphLegendData } from \"./WUGraphLegend.ts\";\n\nexport type VertexType = Vertex | Icon;\n\nexport interface MyGraphData {\n subgraphs: Subgraph[];\n vertices: VertexType[];\n edges: Edge[];\n hierarchy: Lineage[];\n}\n\nfunction faCharFactory(kind): string {\n switch (kind) {\n case \"2\": return \"\\uf0c7\"; // Disk Write\n case \"3\": return \"\\uf15d\"; // sort\n case \"5\": return \"\\uf0b0\"; // Filter\n case \"6\": return \"\\uf1e0\"; // Split\n case \"12\": return \"\\uf039\"; // First N\n case \"15\": return \"\\uf126\"; // Lightweight Join\n case \"17\": return \"\\uf126\"; // Lookup Join\n case \"22\": return \"\\uf1e6\"; // Pipe Output\n case \"23\": return \"\\uf078\"; // Funnel\n case \"25\": return \"\\uf0ce\"; // Inline Dataset\n case \"26\": return \"\\uf074\"; // distribute\n case \"29\": return \"\\uf005\"; // Store Internal Result\n case \"36\": return \"\\uf128\"; // If\n case \"44\": return \"\\uf0c7\"; // write csv\n case \"47\": return \"\\uf0c7\"; // write\n case \"54\": return \"\\uf013\"; // Workunit Read\n case \"56\": return \"\\uf0c7\"; // Spill\n case \"59\": return \"\\uf126\"; // Merge\n case \"61\": return \"\\uf0c7\"; // write xml\n case \"82\": return \"\\uf1c0\"; // Projected Disk Read Spill\n case \"88\": return \"\\uf1c0\"; // Projected Disk Read Spill\n case \"92\": return \"\\uf129\"; // Limted Index Read\n case \"93\": return \"\\uf129\"; // Limted Index Read\n case \"99\": return \"\\uf1c0\"; // CSV Read\n case \"105\": return \"\\uf1c0\"; // CSV Read\n\n case \"7\": return \"\\uf090\"; // Project\n case \"9\": return \"\\uf0e2\"; // Local Iterate\n case \"16\": return \"\\uf005\"; // Output Internal\n case \"19\": return \"\\uf074\"; // Hash Distribute\n case \"21\": return \"\\uf275\"; // Normalize\n case \"35\": return \"\\uf0c7\"; // CSV Write\n case \"37\": return \"\\uf0c7\"; // Index Write\n case \"71\": return \"\\uf1c0\"; // Disk Read Spill\n case \"133\": return \"\\uf0ce\"; // Inline Dataset\n case \"148\": return \"\\uf0ce\"; // Inline Dataset\n case \"168\": return \"\\uf275\"; // Local Denormalize\n }\n return \"\\uf063\";\n}\n\nexport class WUScopeController {\n private graphDB: ScopeGraph;\n private subgraphsMap: { [id: string]: Subgraph } = {};\n private rSubgraphsMap: { [id: string]: ScopeSubgraph } = {};\n private verticesMap: { [id: string]: VertexType } = {};\n private rVerticesMap: { [id: string]: ScopeVertex } = {};\n private edgesMap: { [id: string]: Edge } = {};\n private rEdgesMap: { [id: string]: ScopeEdge } = {};\n private kindMap: { [id: string]: ScopeVertex[] } = {};\n\n protected _disabled: { [kind: number]: boolean } = {};\n\n constructor() {\n }\n\n clear() {\n this.subgraphsMap = {};\n this.rSubgraphsMap = {};\n this.verticesMap = {};\n this.rVerticesMap = {};\n this.edgesMap = {};\n this.rEdgesMap = {};\n }\n\n set(masterGraph: ScopeGraph) {\n this.graphDB = masterGraph;\n this.graphGui(this.graphDB);\n\n this.kindMap = {};\n this.graphDB.walk(item => {\n if (item instanceof UtilSubgraph) {\n } else if (item instanceof UtilVertex) {\n const kind = item._.attr(\"Kind\").RawValue;\n if (!this.kindMap[kind]) {\n this.kindMap[kind] = [];\n }\n this.kindMap[kind].push(item);\n } else if (item instanceof UtilEdge) {\n }\n });\n }\n\n disabled(): number[];\n disabled(_: number[]): this;\n disabled(_?: number[]): number[] | this {\n if (!arguments.length) {\n const retVal = [];\n for (const key in this._disabled) {\n if (this._disabled[key]) {\n retVal.push(key);\n }\n }\n return retVal;\n }\n this._disabled = {};\n _.forEach(kind => this._disabled[kind] = true);\n return this;\n }\n\n graphGui(graphDB: ScopeGraph): IGraphData {\n const graphGui: MyGraphData = {\n subgraphs: [],\n vertices: [],\n edges: [],\n hierarchy: []\n };\n\n graphDB.walk((item) => {\n if (item instanceof UtilSubgraph) {\n const subgraph = this.appendSubgraph(item, graphGui.hierarchy, graphGui.subgraphs);\n subgraph.showMinMax(item.vertices.length > 3 || subgraph.minState() !== \"normal\");\n } else if (item instanceof UtilVertex) {\n this.appendVertex(item, graphGui.hierarchy, graphGui.vertices);\n } else if (item instanceof UtilEdge) {\n this.appendEdge(item, graphGui.edges);\n }\n });\n\n return graphGui;\n }\n\n format(labelTpl, obj) {\n let retVal = \"\";\n let lpos = labelTpl.indexOf(\"%\");\n let rpos = -1;\n while (lpos >= 0) {\n retVal += labelTpl.substring(rpos + 1, lpos);\n rpos = labelTpl.indexOf(\"%\", lpos + 1);\n if (rpos < 0) {\n console.warn(\"Invalid Label Template\");\n break;\n }\n const key = labelTpl.substring(lpos + 1, rpos);\n retVal += !key ? \"%\" : (obj[labelTpl.substring(lpos + 1, rpos)] || \"\");\n lpos = labelTpl.indexOf(\"%\", rpos + 1);\n }\n retVal += labelTpl.substring(rpos + 1, labelTpl.length);\n return retVal.split(\"\\\\n\").join(\"\\n\");\n }\n\n createSubgraph(subgraph: ScopeSubgraph): Subgraph {\n let sg = this.subgraphsMap[subgraph._.Id];\n if (!sg) {\n sg = new Subgraph()\n .title(subgraph._.Id)\n .on(\"minClick\", () => {\n this.minClick(sg);\n })\n ;\n this.subgraphsMap[subgraph._.Id] = sg;\n this.rSubgraphsMap[sg.id()] = subgraph;\n }\n return sg;\n }\n\n createVertex(vertex: ScopeVertex): VertexType {\n let v = this.verticesMap[vertex._.Id];\n if (!v) {\n const attrs = vertex._.rawAttrs();\n if (vertex._.ScopeType === \"dummy\") {\n const parent = this.subgraphsMap[vertex.parent._.Id];\n v = new Icon()\n .shape_colorFill(\"darkred\")\n .shape_colorStroke(\"darkred\")\n .image_colorFill(\"white\")\n .faChar(\"\\uf067\")\n .on(\"click\", () => {\n parent.minState(\"normal\");\n this.minClick(parent);\n })\n ;\n } else {\n v = new Vertex()\n .icon_shape_colorFill(\"#1f77b4\")\n .icon_image_colorFill(\"white\")\n .faChar(faCharFactory(attrs[\"Kind\"]))\n .text(attrs[\"Label\"])\n ;\n const annotations = [];\n if (vertex._.hasAttr(\"Definition\")) {\n annotations.push({\n faChar: \"\\uf036\",\n tooltip: \"Definition\",\n shape_colorFill: \"lightgray\",\n shape_colorStroke: \"lightgray\",\n image_colorFill: \"black\"\n });\n }\n if (vertex._.hasAttr(\"IsInternal\")) {\n annotations.push({\n faChar: \"\\uf085\",\n tooltip: \"IsInternal\",\n shape_colorFill: \"red\",\n shape_colorStroke: \"red\",\n image_colorFill: \"white\"\n });\n }\n v.annotationIcons(annotations);\n }\n this.verticesMap[vertex._.Id] = v;\n this.rVerticesMap[v.id()] = vertex;\n }\n return v;\n }\n\n isSpill(edge: ScopeEdge): boolean {\n const sourceKind = edge.source._.attr(\"Kind\").RawValue;\n const targetKind = edge.target._.attr(\"Kind\").RawValue;\n return sourceKind === \"2\" || targetKind === \"71\";\n }\n\n spansSubgraph(edge: ScopeEdge): boolean {\n return edge.source.parent._.Id !== edge.target.parent._.Id;\n }\n\n createEdge(edge: ScopeEdge): Edge | undefined {\n let e = this.edgesMap[edge._.Id];\n if (!e) {\n const attrs = edge._.rawAttrs();\n const sourceV = this.verticesMap[edge.source._.Id];\n const targetV = this.verticesMap[edge.target._.Id];\n if (sourceV && targetV) {\n const isSpill = this.isSpill(edge);\n const spansSubgraph = this.spansSubgraph(edge);\n\n const label = this.format(\"%Label%\\n%NumRowsProcessed%\", attrs);\n /* TODO: Add extra annotations once WUDetails is fixed...\n const numSlaves = parseInt(attrs[\"NumSlaves\"]);\n const numStarts = parseInt(attrs[\"NumStarts\"]);\n const numStops = parseInt(attrs[\"NumStops\"]);\n const started = numStarts > 0;\n const finished = numStops === numSlaves;\n const active = started && !finished;\n */\n\n let strokeDasharray = null;\n let weight = 100;\n if (attrs[\"IsDependency\"]) {\n weight = 10;\n strokeDasharray = \"1,5\";\n } else if (attrs[\"_childGraph\"]) {\n strokeDasharray = \"5,5\";\n } else if (isSpill) {\n weight = 25;\n strokeDasharray = \"5,5,10,5\";\n } else if (spansSubgraph) {\n weight = 5;\n strokeDasharray = \"5,5\";\n }\n e = new Edge()\n .sourceVertex(sourceV)\n .targetVertex(targetV)\n .sourceMarker(\"circle\")\n .targetMarker(\"arrow\")\n .weight(weight)\n .strokeDasharray(strokeDasharray)\n .text(label)\n ;\n this.edgesMap[edge._.Id] = e;\n this.rEdgesMap[e.id()] = edge;\n }\n }\n return e;\n }\n\n appendSubgraph(subgraph: ScopeSubgraph, hierarchy: Lineage[], subgraphs: Subgraph[]): Subgraph {\n const sg = this.createSubgraph(subgraph);\n subgraphs.push(sg);\n const parent = this.subgraphsMap[subgraph.parent._.Id];\n if (parent) {\n hierarchy.push({ parent, child: sg });\n }\n return sg;\n }\n\n appendVertex(vertex: ScopeVertex, hierarchy: Lineage[], vertices: VertexType[]): VertexType {\n const v = this.createVertex(vertex);\n vertices.push(v);\n const parent = this.subgraphsMap[vertex.parent._.Id];\n if (parent) {\n hierarchy.push({ parent, child: v });\n }\n return v;\n }\n\n appendEdge(edge: ScopeEdge, edges: Edge[]): Edge {\n const e = this.createEdge(edge);\n if (e) {\n edges.push(e);\n }\n return e;\n }\n\n filterLegend(graphDB: ScopeGraph) {\n for (let i = graphDB.vertices.length - 1; i >= 0; --i) {\n const vertex = graphDB.vertices[i];\n const kind = vertex._.attr(\"Kind\").RawValue;\n if (this._disabled[kind]) {\n vertex.remove(false, (source: BaseScope, target: BaseScope) => {\n return new BaseScope({\n ScopeName: vertex._.ScopeName + \":in\",\n Id: source.Id + \"->\" + target.Id,\n ScopeType: \"dummy-edge\",\n Properties: {\n Property: [vertex._.attr(\"Label\")]\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n });\n }\n }\n }\n\n filterPartial(graphDB: ScopeGraph) {\n for (const subgraph of graphDB.subgraphs) {\n const sg = this.subgraphsMap[subgraph._.Id];\n switch (sg.minState()) {\n case \"partial\":\n const childVertices: ReadonlyArray<ScopeVertex> = subgraph.vertices;\n const vShow: ScopeVertex[] = [];\n const vHide: ScopeVertex[] = [];\n\n for (const vertex of childVertices) {\n if (vertex.inEdges.length === 0 || vertex.inEdges.some(edge => edge.source.parent !== edge.target.parent) ||\n vertex.outEdges.length === 0 || vertex.outEdges.some(edge => edge.source.parent !== edge.target.parent)) {\n vShow.push(vertex);\n } else {\n vHide.push(vertex);\n }\n }\n\n if (vHide.length > 1) {\n const dummyDetails = {\n ScopeName: subgraph._.ScopeName,\n Id: subgraph._.Id + \":dummy\",\n ScopeType: \"dummy\",\n Properties: {\n Property: [{\n Name: \"Activities\",\n RawValue: \"\" + vHide.length,\n Formatted: \"\" + vHide.length,\n Measure: \"count\",\n Creator: \"\",\n CreatorType: \"\"\n }]\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n };\n const dummyScope = new BaseScope(dummyDetails);\n const dummyVertex = subgraph.createVertex(dummyScope);\n\n for (const vertex of vHide) {\n for (const edge of vertex.inEdges) {\n if (vShow.indexOf(edge.source) >= 0) {\n const dummyEdgeScope = new BaseScope({\n ScopeName: edge.source._.ScopeName,\n Id: edge.source._.Id + \"->\" + dummyVertex._.Id,\n ScopeType: \"dummy-in\",\n Properties: {\n Property: []\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n subgraph.createEdge(edge.source, dummyVertex, dummyEdgeScope);\n }\n }\n for (const edge of vertex.outEdges) {\n if (vShow.indexOf(edge.target) >= 0) {\n const dummyEdgeScope = new BaseScope({\n ScopeName: edge.target._.ScopeName,\n Id: dummyVertex._.Id + \"->\" + edge.target._.Id,\n ScopeType: \"dummy-out\",\n Properties: {\n Property: []\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n subgraph.createEdge(dummyVertex, edge.target, dummyEdgeScope);\n }\n }\n }\n vHide.forEach(vertex => vertex.remove(true));\n }\n break;\n }\n }\n }\n\n filterEmptySubgraphs(graphDB: ScopeGraph) {\n while (true) {\n const emptySubgraphs = graphDB.subgraphs.filter(subgraph => subgraph.subgraphs.length === 0 && subgraph.vertices.length === 0);\n if (emptySubgraphs.length === 0) break;\n emptySubgraphs.forEach(subgraph => subgraph.remove(true));\n }\n }\n\n removeObsoleteSubgraphs(graphDB: ScopeGraph) {\n for (const subgraph of [...graphDB.subgraphs]) {\n if (subgraph.vertices.length === 0) {\n subgraph.remove(false);\n }\n }\n }\n\n graphData(): IGraphData {\n const graphDB = this.graphDB.clone();\n this.filterLegend(graphDB);\n this.filterPartial(graphDB);\n this.filterEmptySubgraphs(graphDB);\n this.removeObsoleteSubgraphs(graphDB);\n return this.graphGui(graphDB);\n }\n\n calcLegend(): WUGraphLegendData[] {\n const retVal: WUGraphLegendData[] = [];\n for (const kind in this.kindMap) {\n retVal.push({\n kind: parseInt(kind),\n faChar: faCharFactory(kind),\n label: this.kindMap[kind][0]._.attr(\"Label\").RawValue.split(\"\\n\")[0],\n count: this.kindMap[kind].length\n });\n }\n return retVal;\n }\n\n vertices(kind: number): VertexType[] {\n const retVal: VertexType[] = [];\n for (const v of this.kindMap[kind]) {\n retVal.push(this.verticesMap[v._.Id]);\n }\n return retVal;\n }\n\n formatRow(item: ScopeEdge | ScopeSubgraph | ScopeVertex, columns, row) {\n const attrs = item._.formattedAttrs();\n for (const key in attrs) {\n const idx = columns.indexOf(key);\n if (idx === -1) {\n columns.push(key);\n row.push(attrs[key]);\n } else {\n row[idx] = attrs[key];\n }\n }\n for (let i = 0; i < 100; ++i) {\n if (row[i] === undefined) {\n row[i] = \"\";\n }\n }\n return row;\n }\n\n activityData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Kind\", \"Label\"];\n const data = this.graphDB.vertices.map(v => {\n const row = [parseInt(v._.Id.split(\"a\")[1])];\n return this.formatRow(v, columns, row);\n });\n return { columns, data };\n }\n\n edgeData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Label\"];\n const data = this.graphDB.edges.map(e => {\n const row = [e._.Id];\n return this.formatRow(e, columns, row);\n });\n return { columns, data };\n }\n\n subgraphData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Label\"];\n const data = this.graphDB.subgraphs.map(sg => {\n const row = [sg._.Id];\n return this.formatRow(sg, columns, row);\n });\n return { columns, data };\n }\n\n calcGraphTooltip(item: VertexType | Edge) {\n let scope;\n let parentScope;\n if (item instanceof Subgraph) {\n const subgraph = this.rSubgraphsMap[item.id()];\n scope = subgraph._;\n parentScope = subgraph.parent._;\n } else if (item instanceof Vertex || item instanceof Icon) {\n const vertex = this.rVerticesMap[item.id()];\n scope = vertex._;\n parentScope = vertex.parent._;\n } else if (item instanceof Edge) {\n const edge = this.rEdgesMap[item.id()];\n scope = edge._;\n parentScope = edge.parent._;\n }\n if (scope) {\n return scope.calcTooltip(parentScope);\n }\n return \"\";\n }\n\n subgraph(id: string): Subgraph | undefined {\n return this.subgraphsMap[id];\n }\n\n vertex(id: string): VertexType | undefined {\n return this.verticesMap[id];\n }\n\n edge(id: string): Edge {\n return this.edgesMap[id];\n }\n\n // Events ---\n minClick(sg: Subgraph) {\n }\n}\n","import { Button, Spacer, ToggleButton, Widget } from \"@hpcc-js/common\";\nimport { ScopeGraph, Workunit } from \"@hpcc-js/comms\";\nimport { Table } from \"@hpcc-js/dgrid\";\nimport { Graph as GraphWidget, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Carousel, ChartPanel } from \"@hpcc-js/layout\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { WUGraphLegend } from \"./WUGraphLegend.ts\";\nimport { WUScopeController } from \"./WUScopeController.ts\";\n\nimport \"../src/WUGraph.css\";\n\nexport class WUGraph extends ChartPanel {\n\n private _partialAll = new Button().faChar(\"fa-window-restore\").tooltip(\"Partial All\")\n .on(\"click\", () => {\n this.stateClick(this._partialAll);\n });\n\n private _maxAll = new Button().faChar(\"fa-window-maximize\").tooltip(\"Max All\")\n .on(\"click\", () => {\n this.stateClick(this._maxAll);\n });\n\n private _toggleGraph = new ToggleButton().faChar(\"fa-chain\").tooltip(\"Graph\")\n .selected(true)\n .on(\"click\", () => {\n this.viewClick(this._toggleGraph);\n });\n\n private _toggleActivities = new ToggleButton().faChar(\"fa-table\").tooltip(\"Activitiies\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleActivities);\n });\n\n private _toggleEdges = new ToggleButton().faChar(\"fa-table\").tooltip(\"Edges\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleEdges);\n });\n\n private _toggleSubgraphs = new ToggleButton().faChar(\"fa-table\").tooltip(\"Subgraphs\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleSubgraphs);\n });\n\n protected _graph = new GraphWidget()\n .layout(\"Hierarchy\")\n .applyScaleOnLayout(true)\n .showToolbar(false)\n .allowDragging(false)\n ;\n\n private _activities = new Table()\n .pagination(false)\n ;\n\n private _edges = new Table()\n .pagination(false)\n ;\n\n private _subgraphs = new Table()\n .pagination(false)\n ;\n\n protected _legend = new WUGraphLegend(this)\n .on(\"click\", kind => {\n this.render();\n })\n .on(\"mouseover\", kind => {\n const verticesMap: { [id: string]: boolean } = {};\n for (const vertex of this._gc.vertices(kind)) {\n verticesMap[vertex.id()] = true;\n }\n this._graph.highlightVerticies(verticesMap);\n })\n .on(\"mouseout\", kind => {\n this._graph.highlightVerticies();\n })\n ;\n\n protected _view = new Carousel().widgets([this._graph, this._activities, this._edges, this._subgraphs]);\n\n protected _gc = new WUScopeController();\n\n constructor() {\n super();\n this.topOverlay(false);\n this.widget(this._view);\n const buttons: Widget[] = [\n this._toggleGraph,\n this._toggleActivities,\n this._toggleEdges,\n this._toggleSubgraphs,\n new Spacer(),\n this._partialAll,\n this._maxAll,\n new Spacer(),\n ...this._graph.iconBarButtons(),\n new Spacer()];\n this.buttons(buttons.concat(this.buttons()));\n this._gc.minClick = (sg: Subgraph) => {\n this.loadGraph();\n this._graph.render(w => {\n this._graph\n .selection([sg])\n .centerOnItem(sg)\n ;\n });\n };\n\n this._graph.tooltipHTML((v: Vertex) => {\n return this._gc.calcGraphTooltip(v);\n });\n }\n\n stateClick(sourceB: Button) {\n switch (sourceB) {\n case this._partialAll:\n this._graph.data().subgraphs.forEach((sg: Subgraph) => {\n sg.minState(\"partial\");\n });\n break;\n case this._maxAll:\n this._graph.data().subgraphs.forEach((sg: Subgraph) => {\n sg.minState(\"normal\");\n });\n break;\n }\n this.render();\n }\n\n viewClick(sourceTB: ToggleButton) {\n this._toggleGraph.selected(sourceTB === this._toggleGraph);\n this._toggleActivities.selected(sourceTB === this._toggleActivities);\n this._toggleEdges.selected(sourceTB === this._toggleEdges);\n this._toggleSubgraphs.selected(sourceTB === this._toggleSubgraphs);\n switch (sourceTB) {\n case this._toggleGraph:\n this._view.active(0);\n break;\n case this._toggleActivities:\n this._view.active(1);\n break;\n case this._toggleEdges:\n this._view.active(2);\n break;\n case this._toggleSubgraphs:\n this._view.active(3);\n break;\n }\n this.render(w => {\n });\n }\n\n private _prevHashSum;\n private _prevScopeGraph: ScopeGraph;\n fetchScopeGraph(): Promise<ScopeGraph> {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n graphID: this.graphID(),\n subgraphID: this.subgraphID()\n });\n if (!this._prevScopeGraph || this._prevHashSum !== hash) {\n this.startProgress();\n this._prevHashSum = hash;\n this._gc.clear();\n const wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n return wu.fetchGraphs().then(graphs => {\n for (const graph of graphs) {\n if (graph.Name === this.graphID()) {\n this.finishProgress();\n return graph.fetchScopeGraph(this.subgraphID());\n }\n }\n }).then(scopeGraph => {\n this._prevScopeGraph = scopeGraph;\n return this._prevScopeGraph;\n });\n }\n return Promise.resolve(this._prevScopeGraph);\n }\n\n enter(domNode, _element) {\n super.enter(domNode, _element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n loadGraph() {\n this._gc.disabled(this._legend.disabled());\n this._graph\n .data(this._gc.graphData(), true)\n ;\n {\n const { columns, data } = this._gc.activityData();\n this._activities\n .columns(columns)\n .data(data)\n ;\n }\n {\n const { columns, data } = this._gc.edgeData();\n this._edges\n .columns(columns)\n .data(data)\n ;\n }\n {\n const { columns, data } = this._gc.subgraphData();\n this._subgraphs\n .columns(columns)\n .data(data)\n ;\n }\n }\n\n render(callback?: (w: Widget) => void): this {\n if (this.wuid() && this.graphID()) {\n this.fetchScopeGraph().then(scopedGraph => {\n this._gc.set(scopedGraph);\n this._legend.data(this._gc.calcLegend());\n this.loadGraph();\n super.render(callback);\n });\n } else {\n super.render(callback);\n }\n return this;\n }\n\n selection(_?) {\n if (!arguments.length) return this._graph.selection();\n const item = this._gc.vertex(_) || this._gc.edge(_) || this._gc.subgraph(_);\n if (item) {\n this._graph.selection([item]);\n }\n return this;\n }\n}\nWUGraph.prototype._class += \" eclwatch_WUGraph\";\n\nexport interface WUGraph {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n graphID(): string;\n graphID(_: string): this;\n subgraphID(): string;\n subgraphID(_: string): this;\n}\n\nWUGraph.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUGraph.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUGraph.prototype.publish(\"graphID\", \"\", \"string\", \"Graph ID\");\nWUGraph.prototype.publish(\"subgraphID\", \"\", \"string\", \"Subgraph ID\");\n","import { Exception, ResultFilter, Result, XSDSchema, XSDXMLNode } from \"@hpcc-js/comms\";\nimport { ColumnType, Deferred, domConstruct, QueryResults, RowFormatter } from \"@hpcc-js/dgrid\";\n\nfunction entitiesEncode(str) {\n return String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n\nfunction safeEncode(item) {\n switch (Object.prototype.toString.call(item)) {\n case \"[object Undefined]\":\n case \"[object Boolean]\":\n case \"[object Number]\":\n return item;\n case \"[object String]\":\n return entitiesEncode(item);\n default:\n console.warn(\"Unknown cell type: \" + Object.prototype.toString.call(item)); \n }\n return item;\n}\n\nexport class Store {\n protected wuResult: Result;\n protected schema: XSDSchema;\n protected _columns: any[];\n protected _cache: { [key: string]: Promise<{ totalLength: number, data: any[] }> } = {};\n private rowFormatter: RowFormatter;\n protected _filter: ResultFilter = {};\n private onError?: (msg: string) => void;\n\n constructor(wuResult: Result, schema: XSDSchema, renderHtml: boolean, filter: ResultFilter = {}, onError?: (msg: string) => void) {\n this.wuResult = wuResult;\n this.schema = schema;\n this._columns = this.schema2Columns(this.schema.root);\n this.rowFormatter = new RowFormatter(this._columns, renderHtml);\n this._filter = filter;\n this.onError = onError;\n }\n\n columns() {\n return this._columns;\n }\n\n schema2Columns(parentNode: XSDXMLNode, prefix: string = \"\"): ColumnType[] {\n if (!parentNode) return [];\n return parentNode.children().filter(node => node.name.indexOf(\"__hidden\", node.name.length - \"__hidden\".length) === -1).map((node, idx) => {\n const label = node.name;\n const keyed = node.attrs[\"hpcc:keyed\"];\n const column: ColumnType = {\n field: prefix + label,\n leafID: label,\n idx,\n label: label + (keyed ? \" (i)\" : \"\"),\n className: \"resultGridCell\",\n sortable: false,\n width: keyed ? 16 : 0,\n isSet: node.isSet\n };\n const children = this.schema2Columns(node, prefix + label + \"_\");\n if (children.length) {\n column.width += 10 + children.reduce((prev: number, childNode: ColumnType) => {\n return prev + childNode.width!;\n }, 0);\n column.children = children;\n } else {\n column.width += node.charWidth() * 9;\n column.formatter = (cell, row) => {\n switch (typeof cell) {\n case \"string\":\n return {\n html: cell.replace(/\\t/g, \"&nbsp;&nbsp;&nbsp;&nbsp;\").trim()\n };\n case \"undefined\":\n return \"\";\n }\n return cell;\n };\n }\n return column;\n });\n }\n\n isChildDataset(cell) {\n if (Object.prototype.toString.call(cell) !== \"[object Object]\") {\n return false;\n }\n let propCount = 0;\n let firstPropType = null;\n for (const key in cell) {\n if (!firstPropType) {\n firstPropType = Object.prototype.toString.call(cell[key]);\n }\n propCount++;\n }\n return propCount === 1 && firstPropType === \"[object Array]\";\n }\n\n rowToTable(cell, __row, node) {\n if (this.isChildDataset(cell)) { // Don't display \"Row\" as a header ---\n for (const key in cell) {\n this.rowToTable(cell[key], __row, node);\n }\n return;\n }\n\n const table = domConstruct.create(\"table\", { border: 1, cellspacing: 0, width: \"100%\" }, node);\n switch (Object.prototype.toString.call(cell)) {\n case \"[object Object]\":\n let tr = domConstruct.create(\"tr\", null, table);\n for (const key in cell) {\n domConstruct.create(\"th\", { innerHTML: safeEncode(key) }, tr);\n }\n tr = domConstruct.create(\"tr\", null, table);\n for (const key in cell) {\n switch (Object.prototype.toString.call(cell[key])) {\n case \"[object Object]\":\n case \"[object Array]\":\n this.rowToTable(cell[key], __row, node);\n break;\n default:\n domConstruct.create(\"td\", { innerHTML: safeEncode(cell[key]) }, tr);\n break;\n }\n }\n break;\n case \"[object Array]\":\n for (let i = 0; i < cell.length; ++i) {\n switch (Object.prototype.toString.call(cell[i])) {\n case \"[object Boolean]\":\n case \"[object Number]\":\n case \"[object String]\":\n // Item in Scalar ---\n const tr1 = domConstruct.create(\"tr\", null, table);\n domConstruct.create(\"td\", { innerHTML: safeEncode(cell[i]) }, tr1);\n break;\n default:\n // Child Dataset ---\n if (i === 0) {\n const tr2 = domConstruct.create(\"tr\", null, table);\n for (const key in cell[i]) {\n domConstruct.create(\"th\", { innerHTML: safeEncode(key) }, tr2);\n }\n }\n domConstruct.create(\"tr\", null, table);\n for (const key in cell[i]) {\n if (cell[i][key]) {\n if (Object.prototype.toString.call(cell[i][key]) === \"[object Object]\" || Object.prototype.toString.call(cell[i][key]) === \"[object Array]\") {\n const td = domConstruct.create(\"td\", null, tr1);\n this.rowToTable(cell[i][key], cell[i], td);\n } else if (key.indexOf(\"__html\", key.length - \"__html\".length) !== -1) {\n domConstruct.create(\"td\", { innerHTML: cell[i][key] }, tr1);\n } else if (key.indexOf(\"__javascript\", key.length - \"__javascript\".length) !== -1) {\n /*const td = */ domConstruct.create(\"td\", null, tr1);\n // this.injectJavascript(cell[i][key], cell[i], td);\n } else {\n const val = cell[i][key];\n domConstruct.create(\"td\", { innerHTML: safeEncode(val) }, tr1);\n }\n } else {\n domConstruct.create(\"td\", { innerHTML: \"\" }, tr1);\n }\n }\n }\n }\n break;\n }\n }\n\n getIdentity(row) {\n return row.__hpcc_id;\n }\n\n _request(start, end): Promise<{ totalLength: number, data: any[] }> {\n if (!this.wuResult) return Promise.resolve({ totalLength: 0, data: [] });\n const cacheKey = `${start}->${end}`;\n if (this._cache[cacheKey]) return this._cache[cacheKey];\n const retVal = this.wuResult.fetchRows(start, end - start, false, this._filter).then((rows: any[]) => {\n return {\n totalLength: this.wuResult.Total,\n data: rows.map((row, idx) => {\n const formattedRow: any = this.rowFormatter.format(row);\n formattedRow.__hpcc_id = start + idx;\n formattedRow.__hpcc_orig = row;\n return formattedRow;\n })\n };\n }).catch((err: Exception) => {\n this.onError(err.Message || \"An exception has occurred\");\n return { totalLength: 0, data: [] };\n });\n this._cache[cacheKey] = retVal;\n return retVal;\n }\n\n fetchRange(options): Promise<any[]> {\n const retVal = new Deferred();\n this._request(options.start, options.end).then(response => retVal.resolve(response));\n return new QueryResults(retVal.then(response => response.data), {\n totalLength: retVal.then(response => response.totalLength)\n });\n }\n}\n","import { ResultFilter, IOptions, Result } from \"@hpcc-js/comms\";\nimport { Common } from \"@hpcc-js/dgrid\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { Store } from \"./WUResultStore.ts\";\n\nexport class WUResult extends Common {\n\n protected _result: Result;\n protected _localStore: Store;\n\n constructor() {\n super();\n this.renderHtml(false);\n }\n\n hashSum(opts: any = {}) {\n return hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n resultName: this.resultName(),\n sequence: this.sequence(),\n nodeGroup: this.nodeGroup(),\n logicalFile: this.logicalFile(),\n userID: this.user(),\n password: this.password(),\n bypassCache: this.bypassCache(),\n ...opts\n });\n }\n\n protected _prevResultHash: string;\n calcResult(): Result | null {\n const resultHash = this.hashSum();\n if (this._prevResultHash !== resultHash) {\n this._prevResultHash = resultHash;\n\n const opts: IOptions = {\n baseUrl: this.baseUrl(),\n userID: this.user(),\n password: this.password()\n };\n if (this.wuid() && this.resultName()) {\n this._result = Result.attach(opts, this.wuid(), this.resultName());\n } else if (this.wuid() && this.sequence() !== undefined) {\n this._result = Result.attach(opts, this.wuid(), this.sequence());\n } else if (this.logicalFile() && this.nodeGroup()) {\n this._result = Result.attachLogicalFile(opts, this.nodeGroup(), this.logicalFile());\n } else if (this.logicalFile()) {\n this._result = Result.attachLogicalFile(opts, \"\", this.logicalFile());\n }\n\n if (this._result && this.bypassCache()) {\n this._result.bypassCache(this.bypassCache());\n }\n }\n return this._result;\n }\n\n fetch(row, count, abortController = new AbortController()): Promise<object[]> {\n const result = this.calcResult();\n if (result) {\n return result.fetchRows(row, count, false, {}, abortController.signal);\n }\n return Promise.resolve([]);\n }\n\n protected _prevStoreHash: string;\n protected _prevQueryHash: string;\n update(domNode, element) {\n super.update(domNode, element);\n const storeHash = this.hashSum({\n renderHtml: this.renderHtml(),\n filter: this.filter()\n });\n if (this._prevStoreHash !== storeHash) {\n this._prevStoreHash = storeHash;\n const result = this.calcResult();\n if (result) {\n result.fetchXMLSchema().then(schema => {\n this._localStore = new Store(result, schema, this.renderHtml(), this.filter(), (msg) => {\n if (this._dgrid) {\n this._dgrid.noDataMessage = `<span class='dojoxGridNoData'>${msg}</span>`;\n this._dgrid.refresh();\n }\n });\n this._dgrid?.set(\"columns\", this._localStore.columns());\n this._dgrid?.set(\"collection\", this._localStore);\n });\n }\n }\n }\n\n click(row, col, sel) {\n }\n}\nWUResult.prototype._class += \" eclwatch_WUResult\";\n\nexport interface WUResult {\n baseUrl(): string;\n baseUrl(_: string): this;\n user(): string;\n user(_: string): this;\n password(): string;\n password(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n resultName(): string;\n resultName(_: string): this;\n sequence(): number;\n sequence(_: number): this;\n nodeGroup(): string;\n nodeGroup(_: string): this;\n logicalFile(): string;\n logicalFile(_: string): this;\n filter(): ResultFilter;\n filter(_: ResultFilter): this;\n bypassCache(): boolean;\n bypassCache(_: boolean): this;\n}\n\nWUResult.prototype.publish(\"baseUrl\", \"\", \"string\", \"URL to WsWorkunits\");\nWUResult.prototype.publish(\"user\", \"\", \"string\", \"User ID\");\nWUResult.prototype.publish(\"password\", \"\", \"string\", \"Password\");\nWUResult.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUResult.prototype.publish(\"resultName\", \"\", \"string\", \"Result Name\");\nWUResult.prototype.publish(\"sequence\", undefined, \"number\", \"Sequence Number\");\nWUResult.prototype.publish(\"nodeGroup\", \"\", \"string\", \"NodeGroup\");\nWUResult.prototype.publish(\"logicalFile\", \"\", \"string\", \"Logical File Name\");\nWUResult.prototype.publish(\"filter\", {}, \"object\", \"Filter\");\nWUResult.prototype.publish(\"bypassCache\", false, \"boolean\", \"Bypass cached results\");\n","import { Workunit, WUStateID } from \"@hpcc-js/comms\";\nimport { Edge, Graph, Vertex } from \"@hpcc-js/graph\";\nimport { hashSum, IObserverHandle } from \"@hpcc-js/util\";\n\nexport enum STATUS {\n CREATE = \"Created\",\n COMPILE = \"Compiled\",\n EXECUTE = \"Executed\",\n COMPLETE = \"Completed\"\n}\n\nexport enum STATUS_ACTIVE {\n CREATE = \"Creating\",\n COMPILE = \"Compiling\",\n EXECUTE = \"Executing\",\n COMPLETE = \"Completed\"\n}\n\nexport class WUStatus extends Graph {\n\n protected _wu: Workunit;\n protected _wuHandle: IObserverHandle;\n\n protected _create: Vertex;\n protected _compile: Vertex;\n protected _execute: Vertex;\n protected _complete: Vertex;\n\n constructor() {\n super();\n this\n .zoomable(false)\n .zoomToFitLimit(1)\n .layout(\"Hierarchy\")\n .hierarchyRankDirection(\"LR\")\n .showToolbar(false)\n .allowDragging(false)\n ;\n }\n\n private _prevHash;\n attachWorkunit() {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid()\n });\n if (this._prevHash !== hash) {\n this._prevHash = hash;\n this._wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n if (this._wuHandle) {\n this._wuHandle.release();\n }\n this._wuHandle = this._wu.watch(changes => {\n this.lazyRender();\n });\n }\n }\n\n createVertex(faChar: string) {\n return new Vertex()\n .icon_diameter(32)\n .icon_shape_colorFill(\"none\")\n .icon_shape_colorStroke(\"none\")\n .icon_image_colorFill(\"darkgray\")\n .iconAnchor(\"middle\")\n .textbox_shape_colorFill(\"none\")\n .textbox_shape_colorStroke(\"none\")\n .textbox_text_colorFill(\"darkgray\")\n .faChar(faChar)\n ;\n }\n\n updateVertex(vertex: Vertex, color: string) {\n vertex\n .icon_image_colorFill(color)\n .textbox_text_colorFill(color)\n ;\n }\n\n updateVertexStatus(level: 0 | 1 | 2 | 3 | 4, active: boolean = false) {\n const completeColor = this._wu.isFailed() ? \"darkred\" : \"darkgreen\";\n this._create.text(STATUS.CREATE);\n this._compile.text(STATUS.COMPILE);\n this._execute.text(STATUS.EXECUTE);\n this._complete.text(STATUS.COMPLETE);\n switch (level) {\n case 0:\n this.updateVertex(this._create, \"darkgray\");\n this.updateVertex(this._compile, \"darkgray\");\n this.updateVertex(this._execute, \"darkgray\");\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 1:\n this._create.text(STATUS_ACTIVE.CREATE);\n this.updateVertex(this._create, active ? \"orange\" : completeColor);\n this.updateVertex(this._compile, \"darkgray\");\n this.updateVertex(this._execute, \"darkgray\");\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 2:\n this._compile.text(STATUS_ACTIVE.COMPILE);\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, active ? \"orange\" : completeColor);\n this.updateVertex(this._execute, completeColor);\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 3:\n this._execute.text(STATUS_ACTIVE.EXECUTE);\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, completeColor);\n this.updateVertex(this._execute, active ? \"orange\" : completeColor);\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 4:\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, completeColor);\n this.updateVertex(this._execute, completeColor);\n this.updateVertex(this._complete, completeColor);\n break;\n }\n }\n\n createEdge(source, target) {\n return new Edge()\n .sourceVertex(source)\n .targetVertex(target)\n .strokeColor(\"black\")\n .showArc(false)\n ;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._create = this.createVertex(\"\\uf11d\");\n this._compile = this.createVertex(\"\\uf085\");\n this._execute = this.createVertex(\"\\uf275\");\n this._complete = this.createVertex(\"\\uf11e\");\n const e1 = this.createEdge(this._create, this._compile);\n const e2 = this.createEdge(this._compile, this._execute);\n const e3 = this.createEdge(this._execute, this._complete);\n this.data({\n vertices: [this._create, this._compile, this._execute, this._complete],\n edges: [e1, e2, e3]\n });\n }\n\n update(domNode, element) {\n this.attachWorkunit();\n switch (this._wu.StateID) {\n case WUStateID.Blocked:\n case WUStateID.Wait:\n case WUStateID.Scheduled:\n case WUStateID.UploadingFiled:\n this.updateVertexStatus(1);\n break;\n case WUStateID.Compiling:\n this.updateVertexStatus(2, true);\n break;\n case WUStateID.Submitted:\n this.updateVertexStatus(1, true);\n break;\n case WUStateID.Compiled:\n this.updateVertexStatus(2);\n break;\n case WUStateID.Aborting:\n case WUStateID.Running:\n this.updateVertexStatus(3, true);\n break;\n case WUStateID.Aborted:\n case WUStateID.Archived:\n case WUStateID.Completed:\n this.updateVertexStatus(4);\n break;\n case WUStateID.Failed:\n this.updateVertexStatus(4, false);\n break;\n case WUStateID.DebugPaused:\n case WUStateID.DebugRunning:\n case WUStateID.Paused:\n case WUStateID.Unknown:\n default:\n this.updateVertexStatus(0);\n break;\n }\n super.update(domNode, element);\n this.zoomToFit();\n }\n\n exit(domNode, element) {\n if (this._wuHandle) {\n this._wuHandle.release();\n }\n super.exit(domNode, element);\n }\n}\nWUStatus.prototype._class += \" eclwatch_WUStatus\";\n\nexport interface WUStatus {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\n\nWUStatus.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUStatus.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\n","import { Palette } from \"@hpcc-js/common\";\nimport { Scope, Workunit, WsWorkunits } from \"@hpcc-js/comms\";\nimport { ReactTimelineSeries } from \"@hpcc-js/timeline\";\nimport { hashSum, RecursivePartial } from \"@hpcc-js/util\";\n\nimport \"../src/WUGraph.css\";\n\nconst columns = [\"label\", \"start\", \"end\", \"icon\", \"color\", \"series\"];\n\nexport class WUTimeline extends ReactTimelineSeries {\n\n protected _palette = Palette.ordinal(\"default\");\n\n constructor() {\n super();\n this\n .columns(columns)\n .titleColumn(\"label\")\n .iconColumn(\"icon\")\n .colorColumn(\"color\")\n .seriesColumn(\"series\")\n .timePattern(\"%Y-%m-%dT%H:%M:%S.%LZ\")\n .tickFormat(\"%H:%M\")\n .tooltipTimeFormat(\"%H:%M:%S.%L\")\n .tooltipHTML(d => {\n return d[columns.length].calcTooltip();\n })\n ;\n }\n\n private _prevHashSum;\n clear(): this {\n delete this._prevHashSum;\n return this;\n }\n fetchScopes() {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n request: this.request()\n });\n if (this._prevHashSum !== hash) {\n this._prevHashSum = hash;\n const wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n wu.fetchDetails(this.request()).then(scopes => {\n return scopes.filter(scope => scope.Id && scope.attr(\"WhenStarted\").RawValue).map((scope: Scope) => {\n const whenStarted = +scope.attr(\"WhenStarted\").RawValue / 1000;\n const timeElapsed = +scope.attr(\"TimeElapsed\").RawValue / 1000000;\n return [\n scope.Id,\n new Date(whenStarted).toISOString(),\n timeElapsed ? new Date(whenStarted + timeElapsed).toISOString() : undefined,\n null,\n this._palette(scope.ScopeType),\n scope.ScopeName.split(\"::\").join(\":\").split(\":\").slice(0, 1),\n scope\n ];\n });\n }).then(scopes => {\n this\n .data(scopes)\n .render()\n ;\n });\n }\n }\n\n enter(domNode, _element) {\n super.enter(domNode, _element);\n }\n\n update(domNode, element) {\n this.fetchScopes();\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n}\nWUTimeline.prototype._class += \" eclwatch_WUTimeline\";\n\nexport interface WUTimeline {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n request(): Partial<WsWorkunits.WUDetails>;\n request(_: RecursivePartial<WsWorkunits.WUDetails>): this;\n}\n\nWUTimeline.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUTimeline.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUTimeline.prototype.publish(\"request\", {\n ScopeFilter: {\n MaxDepth: 3,\n ScopeTypes: [\"graph\", \"subgraph\"]\n },\n NestedFilter: {\n Depth: 0,\n ScopeTypes: []\n },\n PropertiesToReturn: {\n AllProperties: false,\n AllStatistics: true,\n AllHints: false,\n Properties: [\"WhenStarted\", \"TimeElapsed\"]\n },\n ScopeOptions: {\n IncludeId: true,\n IncludeScope: true,\n IncludeScopeType: true\n },\n PropertyOptions: {\n IncludeName: true,\n IncludeRawValue: true,\n IncludeFormatted: true,\n IncludeMeasure: true,\n IncludeCreator: false,\n IncludeCreatorType: false\n }\n}, \"object\", \"WUDetails Request\");\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.cjs","names":["_node: any","graphGui: MyGraphData","childVertices: ReadonlyArray<ScopeVertex>","vShow: ScopeVertex[]","vHide: ScopeVertex[]","retVal: WUGraphLegendData[]","retVal: VertexType[]","verticesMap: { [id: string]: boolean }","buttons: Widget[]","column: ColumnType","formattedRow: any","opts: IOptions"],"sources":["../src/__package__.ts","../src/ECLArchiveViewer.ts","../src/WUGraphLegend.ts","../src/WUScopeController.ts","../src/WUGraph.ts","../src/WUResultStore.ts","../src/WUResult.ts","../src/WUStatus.ts","../src/WUTimeline.ts"],"sourcesContent":["export const PKG_NAME = \"__PACKAGE_NAME__\";\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\n","import { Editor } from \"@hpcc-js/codemirror\";\nimport { Workunit } from \"@hpcc-js/comms\";\nimport { SplitPanel } from \"@hpcc-js/phosphor\";\nimport { DirectoryTree } from \"@hpcc-js/tree\";\nimport { hashSum, xml2json } from \"@hpcc-js/util\";\n\nexport class ECLArchiveViewer extends SplitPanel {\n private _prevHash;\n private _contentStr;\n public _directoryPane = new DirectoryTree();\n public _fileEditorPane = new Editor()\n .text(\"\")\n ;\n\n constructor() {\n super(\"horizontal\");\n this._directoryPane.rowClick = (text) => {\n this._fileEditorPane\n .text(text)\n .render()\n ;\n };\n }\n\n protected transformArchiveTreeData(json) {\n const ret = {\n label: json.name,\n children: json._children.map(transformNode).filter(n => n)\n };\n\n if (ret.children && ret.children[0] && ret.children[0].label === \"html\") {\n // must be parsererror\n return {\n label: \"root\",\n children: [\n {\n label: \"error\",\n content: JSON.stringify(ret, null, 4)\n }\n ]\n };\n }\n return ret;\n\n function transformNode(node) {\n const _node: any = {};\n _node.label = node.name + (node[\"$\"] && node[\"$\"].key ? ` (${node[\"$\"].key})` : \"\");\n if (node._children && node._children.length > 0) {\n _node.children = node._children.map(_node => {\n return transformNode(_node);\n })\n .filter(n => n)\n ;\n } else if (typeof node.content === \"string\" && node.content.trim()) {\n _node.content = node.content;\n } else {\n return false;\n }\n return _node;\n }\n }\n\n updateDirectoryPane(contentStr) {\n let json;\n if (contentStr) {\n try {\n json = JSON.parse(contentStr);\n } catch (e) {\n json = xml2json(contentStr);\n }\n }\n if (json) {\n const _data = this.transformArchiveTreeData(json);\n this._directoryPane\n .data(_data)\n .render()\n ;\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this\n .addWidget(this._directoryPane)\n .addWidget(this._fileEditorPane)\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid()\n });\n\n if (this._prevHash !== hash || typeof this._contentStr === \"undefined\") {\n Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid())\n .fetchArchive()\n .then(resp => {\n\n this._contentStr = resp;\n this.updateDirectoryPane(this._contentStr);\n\n this._prevHash = hash;\n });\n } else {\n this.updateDirectoryPane(this._contentStr);\n }\n\n this.relativeSizes([this.directoryWidthRatio(), 1 - this.directoryWidthRatio()]);\n }\n}\nECLArchiveViewer.prototype._class += \" eclwatch_ECLArchiveViewer\";\n\nexport interface ECLArchiveViewer {\n directoryPaneColor(): string;\n directoryPaneColor(_: string): this;\n directoryPaneHoverColor(): string;\n directoryPaneHoverColor(_: string): this;\n fontColor(): string;\n fontColor(_: string): this;\n fontFamily(): string;\n fontFamily(_: string): this;\n fontSize(): number;\n fontSize(_: number): this;\n fileIconSize(): number;\n fileIconSize(_: number): this;\n folderIconOpen(): string;\n folderIconOpen(_: string): this;\n folderIconClosed(): string;\n folderIconClosed(_: string): this;\n textFileIcon(): string;\n textFileIcon(_: string): this;\n codeFileIcon(): string;\n codeFileIcon(_: string): this;\n verticalScroll(): boolean;\n verticalScroll(_: boolean): this;\n directoryWidthRatio(): number;\n directoryWidthRatio(_: number): this;\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\nECLArchiveViewer.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nECLArchiveViewer.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nECLArchiveViewer.prototype.publish(\"directoryWidthRatio\", 0.38, \"number\", \"Default directory panel width ratio relative to the full width\");\nECLArchiveViewer.prototype.publish(\"contentString\", null, \"string\", \"XML/JSON archive content string\");\nECLArchiveViewer.prototype.publishProxy(\"directoryPaneColor\", \"_directoryPane\", \"backgroundColor\");\nECLArchiveViewer.prototype.publishProxy(\"directoryPaneHoverColor\", \"_directoryPane\", \"hoverBackgroundColor\");\nECLArchiveViewer.prototype.publishProxy(\"iconSize\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontColor\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontFamily\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontSize\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"folderIconOpen\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"folderIconClosed\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"textFileIcon\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"codeFileIcon\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"verticalScroll\", \"_directoryPane\");\n","import { Vertex } from \"@hpcc-js/graph\";\nimport { Legend } from \"@hpcc-js/layout\";\nimport { local as d3Local, select as d3Select } from \"d3-selection\";\n\nimport \"../src/WUGraphLegend.css\";\n\nexport interface WUGraphLegendData {\n kind: number;\n faChar: string;\n label: string;\n count: number;\n}\n\nclass LegendVertex extends Vertex {\n\n constructor() {\n super();\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._icon.on(\"click\", () => {\n this.click(this.data());\n });\n }\n\n click(kind: number) {\n }\n}\n\nexport class WUGraphLegend extends Legend {\n\n private icon = d3Local<Vertex>();\n protected _disabled2: { [kind: number]: boolean } = {\n /* TODO: Default some to disabled?\n 43: true,\n 71: true,\n 82: true,\n 88: true\n */\n };\n\n disabled(): number[];\n disabled(_: number[]): this;\n disabled(_?: number[]): number[] | this {\n if (!arguments.length) {\n const retVal = [];\n for (const key in this._disabled2) {\n if (this._disabled2[key]) {\n retVal.push(key);\n }\n }\n return retVal;\n }\n this._disabled2 = {};\n _.forEach(kind => this._disabled2[kind] = true);\n return this;\n }\n\n toggle(kind: number) {\n this._disabled2[kind] = !this._disabled2[kind];\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const context = this;\n const items = this._g.selectAll(\".legendItem\").data(this.data(), (d: any) => d.kind);\n items.enter().append(\"g\")\n .attr(\"class\", \"legendItem\")\n .each(function (this: HTMLElement, d) {\n context.icon.set(this, new LegendVertex()\n .target(this)\n .data(d.kind)\n .textbox_shape_colorStroke(\"none\")\n .textbox_shape_colorFill(\"none\")\n .iconAnchor(\"left\")\n .faChar(d.faChar)\n .text(`${d.label} (${d.count})`)\n .tooltip(`${d.kind} - ${d.label}`)\n .on(\"click\", kind => {\n context.toggle(kind);\n context.render();\n context.click(kind);\n })\n .on(\"mouseover\", kind => {\n context.mouseover(kind);\n })\n .on(\"mouseout\", kind => {\n context.mouseout(kind);\n })\n );\n })\n .merge(items)\n .each(function (this: HTMLElement, d, i) {\n const bbox = context.icon.get(this)\n .icon_shape_colorFill(context._disabled2[d.kind] ? \"gray\" : null)\n .render().getBBox();\n\n d3Select(this)\n .attr(\"transform\", `translate(${+bbox.width / 2}, ${i * 30})`)\n ;\n })\n ;\n items.exit()\n .each(function (this: HTMLElement, d) {\n context.icon.get(this)\n .target(null)\n .render();\n })\n .remove();\n const bbox = this.getBBox(true, true);\n this._g.attr(\"transform\", `translate(16, ${this.height() / 2 - bbox.height / 2})`);\n }\n\n // Events ---\n click(kind: number) {\n }\n\n mouseover(kind: number) {\n }\n\n mouseout(kind: number) {\n }\n}\nWUGraphLegend.prototype._class += \" eclwatch_WUGraphLegend\";\n","import { Icon } from \"@hpcc-js/common\";\nimport { BaseScope, ScopeEdge, ScopeGraph, ScopeSubgraph, ScopeVertex } from \"@hpcc-js/comms\";\nimport { Edge, IGraphData, Lineage, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Edge as UtilEdge, Subgraph as UtilSubgraph, Vertex as UtilVertex } from \"@hpcc-js/util\";\nimport { WUGraphLegendData } from \"./WUGraphLegend.ts\";\n\nexport type VertexType = Vertex | Icon;\n\nexport interface MyGraphData {\n subgraphs: Subgraph[];\n vertices: VertexType[];\n edges: Edge[];\n hierarchy: Lineage[];\n}\n\nfunction faCharFactory(kind): string {\n switch (kind) {\n case \"2\": return \"\\uf0c7\"; // Disk Write\n case \"3\": return \"\\uf15d\"; // sort\n case \"5\": return \"\\uf0b0\"; // Filter\n case \"6\": return \"\\uf1e0\"; // Split\n case \"12\": return \"\\uf039\"; // First N\n case \"15\": return \"\\uf126\"; // Lightweight Join\n case \"17\": return \"\\uf126\"; // Lookup Join\n case \"22\": return \"\\uf1e6\"; // Pipe Output\n case \"23\": return \"\\uf078\"; // Funnel\n case \"25\": return \"\\uf0ce\"; // Inline Dataset\n case \"26\": return \"\\uf074\"; // distribute\n case \"29\": return \"\\uf005\"; // Store Internal Result\n case \"36\": return \"\\uf128\"; // If\n case \"44\": return \"\\uf0c7\"; // write csv\n case \"47\": return \"\\uf0c7\"; // write\n case \"54\": return \"\\uf013\"; // Workunit Read\n case \"56\": return \"\\uf0c7\"; // Spill\n case \"59\": return \"\\uf126\"; // Merge\n case \"61\": return \"\\uf0c7\"; // write xml\n case \"82\": return \"\\uf1c0\"; // Projected Disk Read Spill\n case \"88\": return \"\\uf1c0\"; // Projected Disk Read Spill\n case \"92\": return \"\\uf129\"; // Limted Index Read\n case \"93\": return \"\\uf129\"; // Limted Index Read\n case \"99\": return \"\\uf1c0\"; // CSV Read\n case \"105\": return \"\\uf1c0\"; // CSV Read\n\n case \"7\": return \"\\uf090\"; // Project\n case \"9\": return \"\\uf0e2\"; // Local Iterate\n case \"16\": return \"\\uf005\"; // Output Internal\n case \"19\": return \"\\uf074\"; // Hash Distribute\n case \"21\": return \"\\uf275\"; // Normalize\n case \"35\": return \"\\uf0c7\"; // CSV Write\n case \"37\": return \"\\uf0c7\"; // Index Write\n case \"71\": return \"\\uf1c0\"; // Disk Read Spill\n case \"133\": return \"\\uf0ce\"; // Inline Dataset\n case \"148\": return \"\\uf0ce\"; // Inline Dataset\n case \"168\": return \"\\uf275\"; // Local Denormalize\n }\n return \"\\uf063\";\n}\n\nexport class WUScopeController {\n private graphDB: ScopeGraph;\n private subgraphsMap: { [id: string]: Subgraph } = {};\n private rSubgraphsMap: { [id: string]: ScopeSubgraph } = {};\n private verticesMap: { [id: string]: VertexType } = {};\n private rVerticesMap: { [id: string]: ScopeVertex } = {};\n private edgesMap: { [id: string]: Edge } = {};\n private rEdgesMap: { [id: string]: ScopeEdge } = {};\n private kindMap: { [id: string]: ScopeVertex[] } = {};\n\n protected _disabled: { [kind: number]: boolean } = {};\n\n constructor() {\n }\n\n clear() {\n this.subgraphsMap = {};\n this.rSubgraphsMap = {};\n this.verticesMap = {};\n this.rVerticesMap = {};\n this.edgesMap = {};\n this.rEdgesMap = {};\n }\n\n set(masterGraph: ScopeGraph) {\n this.graphDB = masterGraph;\n this.graphGui(this.graphDB);\n\n this.kindMap = {};\n this.graphDB.walk(item => {\n if (item instanceof UtilSubgraph) {\n } else if (item instanceof UtilVertex) {\n const kind = item._.attr(\"Kind\").RawValue;\n if (!this.kindMap[kind]) {\n this.kindMap[kind] = [];\n }\n this.kindMap[kind].push(item);\n } else if (item instanceof UtilEdge) {\n }\n });\n }\n\n disabled(): number[];\n disabled(_: number[]): this;\n disabled(_?: number[]): number[] | this {\n if (!arguments.length) {\n const retVal = [];\n for (const key in this._disabled) {\n if (this._disabled[key]) {\n retVal.push(key);\n }\n }\n return retVal;\n }\n this._disabled = {};\n _.forEach(kind => this._disabled[kind] = true);\n return this;\n }\n\n graphGui(graphDB: ScopeGraph): IGraphData {\n const graphGui: MyGraphData = {\n subgraphs: [],\n vertices: [],\n edges: [],\n hierarchy: []\n };\n\n graphDB.walk((item) => {\n if (item instanceof UtilSubgraph) {\n const subgraph = this.appendSubgraph(item, graphGui.hierarchy, graphGui.subgraphs);\n subgraph.showMinMax(item.vertices.length > 3 || subgraph.minState() !== \"normal\");\n } else if (item instanceof UtilVertex) {\n this.appendVertex(item, graphGui.hierarchy, graphGui.vertices);\n } else if (item instanceof UtilEdge) {\n this.appendEdge(item, graphGui.edges);\n }\n });\n\n return graphGui;\n }\n\n format(labelTpl, obj) {\n let retVal = \"\";\n let lpos = labelTpl.indexOf(\"%\");\n let rpos = -1;\n while (lpos >= 0) {\n retVal += labelTpl.substring(rpos + 1, lpos);\n rpos = labelTpl.indexOf(\"%\", lpos + 1);\n if (rpos < 0) {\n console.warn(\"Invalid Label Template\");\n break;\n }\n const key = labelTpl.substring(lpos + 1, rpos);\n retVal += !key ? \"%\" : (obj[labelTpl.substring(lpos + 1, rpos)] || \"\");\n lpos = labelTpl.indexOf(\"%\", rpos + 1);\n }\n retVal += labelTpl.substring(rpos + 1, labelTpl.length);\n return retVal.split(\"\\\\n\").join(\"\\n\");\n }\n\n createSubgraph(subgraph: ScopeSubgraph): Subgraph {\n let sg = this.subgraphsMap[subgraph._.Id];\n if (!sg) {\n sg = new Subgraph()\n .title(subgraph._.Id)\n .on(\"minClick\", () => {\n this.minClick(sg);\n })\n ;\n this.subgraphsMap[subgraph._.Id] = sg;\n this.rSubgraphsMap[sg.id()] = subgraph;\n }\n return sg;\n }\n\n createVertex(vertex: ScopeVertex): VertexType {\n let v = this.verticesMap[vertex._.Id];\n if (!v) {\n const attrs = vertex._.rawAttrs();\n if (vertex._.ScopeType === \"dummy\") {\n const parent = this.subgraphsMap[vertex.parent._.Id];\n v = new Icon()\n .shape_colorFill(\"darkred\")\n .shape_colorStroke(\"darkred\")\n .image_colorFill(\"white\")\n .faChar(\"\\uf067\")\n .on(\"click\", () => {\n parent.minState(\"normal\");\n this.minClick(parent);\n })\n ;\n } else {\n v = new Vertex()\n .icon_shape_colorFill(\"#1f77b4\")\n .icon_image_colorFill(\"white\")\n .faChar(faCharFactory(attrs[\"Kind\"]))\n .text(attrs[\"Label\"])\n ;\n const annotations = [];\n if (vertex._.hasAttr(\"Definition\")) {\n annotations.push({\n faChar: \"\\uf036\",\n tooltip: \"Definition\",\n shape_colorFill: \"lightgray\",\n shape_colorStroke: \"lightgray\",\n image_colorFill: \"black\"\n });\n }\n if (vertex._.hasAttr(\"IsInternal\")) {\n annotations.push({\n faChar: \"\\uf085\",\n tooltip: \"IsInternal\",\n shape_colorFill: \"red\",\n shape_colorStroke: \"red\",\n image_colorFill: \"white\"\n });\n }\n v.annotationIcons(annotations);\n }\n this.verticesMap[vertex._.Id] = v;\n this.rVerticesMap[v.id()] = vertex;\n }\n return v;\n }\n\n isSpill(edge: ScopeEdge): boolean {\n const sourceKind = edge.source._.attr(\"Kind\").RawValue;\n const targetKind = edge.target._.attr(\"Kind\").RawValue;\n return sourceKind === \"2\" || targetKind === \"71\";\n }\n\n spansSubgraph(edge: ScopeEdge): boolean {\n return edge.source.parent._.Id !== edge.target.parent._.Id;\n }\n\n createEdge(edge: ScopeEdge): Edge | undefined {\n let e = this.edgesMap[edge._.Id];\n if (!e) {\n const attrs = edge._.rawAttrs();\n const sourceV = this.verticesMap[edge.source._.Id];\n const targetV = this.verticesMap[edge.target._.Id];\n if (sourceV && targetV) {\n const isSpill = this.isSpill(edge);\n const spansSubgraph = this.spansSubgraph(edge);\n\n const label = this.format(\"%Label%\\n%NumRowsProcessed%\", attrs);\n /* TODO: Add extra annotations once WUDetails is fixed...\n const numSlaves = parseInt(attrs[\"NumSlaves\"]);\n const numStarts = parseInt(attrs[\"NumStarts\"]);\n const numStops = parseInt(attrs[\"NumStops\"]);\n const started = numStarts > 0;\n const finished = numStops === numSlaves;\n const active = started && !finished;\n */\n\n let strokeDasharray = null;\n let weight = 100;\n if (attrs[\"IsDependency\"]) {\n weight = 10;\n strokeDasharray = \"1,5\";\n } else if (attrs[\"_childGraph\"]) {\n strokeDasharray = \"5,5\";\n } else if (isSpill) {\n weight = 25;\n strokeDasharray = \"5,5,10,5\";\n } else if (spansSubgraph) {\n weight = 5;\n strokeDasharray = \"5,5\";\n }\n e = new Edge()\n .sourceVertex(sourceV)\n .targetVertex(targetV)\n .sourceMarker(\"circle\")\n .targetMarker(\"arrow\")\n .weight(weight)\n .strokeDasharray(strokeDasharray)\n .text(label)\n ;\n this.edgesMap[edge._.Id] = e;\n this.rEdgesMap[e.id()] = edge;\n }\n }\n return e;\n }\n\n appendSubgraph(subgraph: ScopeSubgraph, hierarchy: Lineage[], subgraphs: Subgraph[]): Subgraph {\n const sg = this.createSubgraph(subgraph);\n subgraphs.push(sg);\n const parent = this.subgraphsMap[subgraph.parent._.Id];\n if (parent) {\n hierarchy.push({ parent, child: sg });\n }\n return sg;\n }\n\n appendVertex(vertex: ScopeVertex, hierarchy: Lineage[], vertices: VertexType[]): VertexType {\n const v = this.createVertex(vertex);\n vertices.push(v);\n const parent = this.subgraphsMap[vertex.parent._.Id];\n if (parent) {\n hierarchy.push({ parent, child: v });\n }\n return v;\n }\n\n appendEdge(edge: ScopeEdge, edges: Edge[]): Edge {\n const e = this.createEdge(edge);\n if (e) {\n edges.push(e);\n }\n return e;\n }\n\n filterLegend(graphDB: ScopeGraph) {\n for (let i = graphDB.vertices.length - 1; i >= 0; --i) {\n const vertex = graphDB.vertices[i];\n const kind = vertex._.attr(\"Kind\").RawValue;\n if (this._disabled[kind]) {\n vertex.remove(false, (source: BaseScope, target: BaseScope) => {\n return new BaseScope({\n ScopeName: vertex._.ScopeName + \":in\",\n Id: source.Id + \"->\" + target.Id,\n ScopeType: \"dummy-edge\",\n Properties: {\n Property: [vertex._.attr(\"Label\")]\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n });\n }\n }\n }\n\n filterPartial(graphDB: ScopeGraph) {\n for (const subgraph of graphDB.subgraphs) {\n const sg = this.subgraphsMap[subgraph._.Id];\n switch (sg.minState()) {\n case \"partial\":\n const childVertices: ReadonlyArray<ScopeVertex> = subgraph.vertices;\n const vShow: ScopeVertex[] = [];\n const vHide: ScopeVertex[] = [];\n\n for (const vertex of childVertices) {\n if (vertex.inEdges.length === 0 || vertex.inEdges.some(edge => edge.source.parent !== edge.target.parent) ||\n vertex.outEdges.length === 0 || vertex.outEdges.some(edge => edge.source.parent !== edge.target.parent)) {\n vShow.push(vertex);\n } else {\n vHide.push(vertex);\n }\n }\n\n if (vHide.length > 1) {\n const dummyDetails = {\n ScopeName: subgraph._.ScopeName,\n Id: subgraph._.Id + \":dummy\",\n ScopeType: \"dummy\",\n Properties: {\n Property: [{\n Name: \"Activities\",\n RawValue: \"\" + vHide.length,\n Formatted: \"\" + vHide.length,\n Measure: \"count\",\n Creator: \"\",\n CreatorType: \"\"\n }]\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n };\n const dummyScope = new BaseScope(dummyDetails);\n const dummyVertex = subgraph.createVertex(dummyScope);\n\n for (const vertex of vHide) {\n for (const edge of vertex.inEdges) {\n if (vShow.indexOf(edge.source) >= 0) {\n const dummyEdgeScope = new BaseScope({\n ScopeName: edge.source._.ScopeName,\n Id: edge.source._.Id + \"->\" + dummyVertex._.Id,\n ScopeType: \"dummy-in\",\n Properties: {\n Property: []\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n subgraph.createEdge(edge.source, dummyVertex, dummyEdgeScope);\n }\n }\n for (const edge of vertex.outEdges) {\n if (vShow.indexOf(edge.target) >= 0) {\n const dummyEdgeScope = new BaseScope({\n ScopeName: edge.target._.ScopeName,\n Id: dummyVertex._.Id + \"->\" + edge.target._.Id,\n ScopeType: \"dummy-out\",\n Properties: {\n Property: []\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n subgraph.createEdge(dummyVertex, edge.target, dummyEdgeScope);\n }\n }\n }\n vHide.forEach(vertex => vertex.remove(true));\n }\n break;\n }\n }\n }\n\n filterEmptySubgraphs(graphDB: ScopeGraph) {\n while (true) {\n const emptySubgraphs = graphDB.subgraphs.filter(subgraph => subgraph.subgraphs.length === 0 && subgraph.vertices.length === 0);\n if (emptySubgraphs.length === 0) break;\n emptySubgraphs.forEach(subgraph => subgraph.remove(true));\n }\n }\n\n removeObsoleteSubgraphs(graphDB: ScopeGraph) {\n for (const subgraph of [...graphDB.subgraphs]) {\n if (subgraph.vertices.length === 0) {\n subgraph.remove(false);\n }\n }\n }\n\n graphData(): IGraphData {\n const graphDB = this.graphDB.clone();\n this.filterLegend(graphDB);\n this.filterPartial(graphDB);\n this.filterEmptySubgraphs(graphDB);\n this.removeObsoleteSubgraphs(graphDB);\n return this.graphGui(graphDB);\n }\n\n calcLegend(): WUGraphLegendData[] {\n const retVal: WUGraphLegendData[] = [];\n for (const kind in this.kindMap) {\n retVal.push({\n kind: parseInt(kind),\n faChar: faCharFactory(kind),\n label: this.kindMap[kind][0]._.attr(\"Label\").RawValue.split(\"\\n\")[0],\n count: this.kindMap[kind].length\n });\n }\n return retVal;\n }\n\n vertices(kind: number): VertexType[] {\n const retVal: VertexType[] = [];\n for (const v of this.kindMap[kind]) {\n retVal.push(this.verticesMap[v._.Id]);\n }\n return retVal;\n }\n\n formatRow(item: ScopeEdge | ScopeSubgraph | ScopeVertex, columns, row) {\n const attrs = item._.formattedAttrs();\n for (const key in attrs) {\n const idx = columns.indexOf(key);\n if (idx === -1) {\n columns.push(key);\n row.push(attrs[key]);\n } else {\n row[idx] = attrs[key];\n }\n }\n for (let i = 0; i < 100; ++i) {\n if (row[i] === undefined) {\n row[i] = \"\";\n }\n }\n return row;\n }\n\n activityData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Kind\", \"Label\"];\n const data = this.graphDB.vertices.map(v => {\n const row = [parseInt(v._.Id.split(\"a\")[1])];\n return this.formatRow(v, columns, row);\n });\n return { columns, data };\n }\n\n edgeData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Label\"];\n const data = this.graphDB.edges.map(e => {\n const row = [e._.Id];\n return this.formatRow(e, columns, row);\n });\n return { columns, data };\n }\n\n subgraphData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Label\"];\n const data = this.graphDB.subgraphs.map(sg => {\n const row = [sg._.Id];\n return this.formatRow(sg, columns, row);\n });\n return { columns, data };\n }\n\n calcGraphTooltip(item: VertexType | Edge) {\n let scope;\n let parentScope;\n if (item instanceof Subgraph) {\n const subgraph = this.rSubgraphsMap[item.id()];\n scope = subgraph._;\n parentScope = subgraph.parent._;\n } else if (item instanceof Vertex || item instanceof Icon) {\n const vertex = this.rVerticesMap[item.id()];\n scope = vertex._;\n parentScope = vertex.parent._;\n } else if (item instanceof Edge) {\n const edge = this.rEdgesMap[item.id()];\n scope = edge._;\n parentScope = edge.parent._;\n }\n if (scope) {\n return scope.calcTooltip(parentScope);\n }\n return \"\";\n }\n\n subgraph(id: string): Subgraph | undefined {\n return this.subgraphsMap[id];\n }\n\n vertex(id: string): VertexType | undefined {\n return this.verticesMap[id];\n }\n\n edge(id: string): Edge {\n return this.edgesMap[id];\n }\n\n // Events ---\n minClick(sg: Subgraph) {\n }\n}\n","import { Button, Spacer, ToggleButton, Widget } from \"@hpcc-js/common\";\nimport { ScopeGraph, Workunit } from \"@hpcc-js/comms\";\nimport { Table } from \"@hpcc-js/dgrid\";\nimport { Graph as GraphWidget, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Carousel, ChartPanel } from \"@hpcc-js/layout\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { WUGraphLegend } from \"./WUGraphLegend.ts\";\nimport { WUScopeController } from \"./WUScopeController.ts\";\n\nimport \"../src/WUGraph.css\";\n\nexport class WUGraph extends ChartPanel {\n\n private _partialAll = new Button().faChar(\"fa-window-restore\").tooltip(\"Partial All\")\n .on(\"click\", () => {\n this.stateClick(this._partialAll);\n });\n\n private _maxAll = new Button().faChar(\"fa-window-maximize\").tooltip(\"Max All\")\n .on(\"click\", () => {\n this.stateClick(this._maxAll);\n });\n\n private _toggleGraph = new ToggleButton().faChar(\"fa-chain\").tooltip(\"Graph\")\n .selected(true)\n .on(\"click\", () => {\n this.viewClick(this._toggleGraph);\n });\n\n private _toggleActivities = new ToggleButton().faChar(\"fa-table\").tooltip(\"Activitiies\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleActivities);\n });\n\n private _toggleEdges = new ToggleButton().faChar(\"fa-table\").tooltip(\"Edges\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleEdges);\n });\n\n private _toggleSubgraphs = new ToggleButton().faChar(\"fa-table\").tooltip(\"Subgraphs\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleSubgraphs);\n });\n\n protected _graph = new GraphWidget()\n .layout(\"Hierarchy\")\n .applyScaleOnLayout(true)\n .showToolbar(false)\n .allowDragging(false)\n ;\n\n private _activities = new Table()\n .pagination(false)\n ;\n\n private _edges = new Table()\n .pagination(false)\n ;\n\n private _subgraphs = new Table()\n .pagination(false)\n ;\n\n protected _legend = new WUGraphLegend(this)\n .on(\"click\", kind => {\n this.render();\n })\n .on(\"mouseover\", kind => {\n const verticesMap: { [id: string]: boolean } = {};\n for (const vertex of this._gc.vertices(kind)) {\n verticesMap[vertex.id()] = true;\n }\n this._graph.highlightVerticies(verticesMap);\n })\n .on(\"mouseout\", kind => {\n this._graph.highlightVerticies();\n })\n ;\n\n protected _view = new Carousel().widgets([this._graph, this._activities, this._edges, this._subgraphs]);\n\n protected _gc = new WUScopeController();\n\n constructor() {\n super();\n this.topOverlay(false);\n this.widget(this._view);\n const buttons: Widget[] = [\n this._toggleGraph,\n this._toggleActivities,\n this._toggleEdges,\n this._toggleSubgraphs,\n new Spacer(),\n this._partialAll,\n this._maxAll,\n new Spacer(),\n ...this._graph.iconBarButtons(),\n new Spacer()];\n this.buttons(buttons.concat(this.buttons()));\n this._gc.minClick = (sg: Subgraph) => {\n this.loadGraph();\n this._graph.render(w => {\n this._graph\n .selection([sg])\n .centerOnItem(sg)\n ;\n });\n };\n\n this._graph.tooltipHTML((v: Vertex) => {\n return this._gc.calcGraphTooltip(v);\n });\n }\n\n stateClick(sourceB: Button) {\n switch (sourceB) {\n case this._partialAll:\n this._graph.data().subgraphs.forEach((sg: Subgraph) => {\n sg.minState(\"partial\");\n });\n break;\n case this._maxAll:\n this._graph.data().subgraphs.forEach((sg: Subgraph) => {\n sg.minState(\"normal\");\n });\n break;\n }\n this.render();\n }\n\n viewClick(sourceTB: ToggleButton) {\n this._toggleGraph.selected(sourceTB === this._toggleGraph);\n this._toggleActivities.selected(sourceTB === this._toggleActivities);\n this._toggleEdges.selected(sourceTB === this._toggleEdges);\n this._toggleSubgraphs.selected(sourceTB === this._toggleSubgraphs);\n switch (sourceTB) {\n case this._toggleGraph:\n this._view.active(0);\n break;\n case this._toggleActivities:\n this._view.active(1);\n break;\n case this._toggleEdges:\n this._view.active(2);\n break;\n case this._toggleSubgraphs:\n this._view.active(3);\n break;\n }\n this.render(w => {\n });\n }\n\n private _prevHashSum;\n private _prevScopeGraph: ScopeGraph;\n fetchScopeGraph(): Promise<ScopeGraph> {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n graphID: this.graphID(),\n subgraphID: this.subgraphID()\n });\n if (!this._prevScopeGraph || this._prevHashSum !== hash) {\n this.startProgress();\n this._prevHashSum = hash;\n this._gc.clear();\n const wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n return wu.fetchGraphs().then(graphs => {\n for (const graph of graphs) {\n if (graph.Name === this.graphID()) {\n this.finishProgress();\n return graph.fetchScopeGraph(this.subgraphID());\n }\n }\n }).then(scopeGraph => {\n this._prevScopeGraph = scopeGraph;\n return this._prevScopeGraph;\n });\n }\n return Promise.resolve(this._prevScopeGraph);\n }\n\n enter(domNode, _element) {\n super.enter(domNode, _element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n loadGraph() {\n this._gc.disabled(this._legend.disabled());\n this._graph\n .data(this._gc.graphData(), true)\n ;\n {\n const { columns, data } = this._gc.activityData();\n this._activities\n .columns(columns)\n .data(data)\n ;\n }\n {\n const { columns, data } = this._gc.edgeData();\n this._edges\n .columns(columns)\n .data(data)\n ;\n }\n {\n const { columns, data } = this._gc.subgraphData();\n this._subgraphs\n .columns(columns)\n .data(data)\n ;\n }\n }\n\n render(callback?: (w: Widget) => void): this {\n if (this.wuid() && this.graphID()) {\n this.fetchScopeGraph().then(scopedGraph => {\n this._gc.set(scopedGraph);\n this._legend.data(this._gc.calcLegend());\n this.loadGraph();\n super.render(callback);\n });\n } else {\n super.render(callback);\n }\n return this;\n }\n\n selection(_?) {\n if (!arguments.length) return this._graph.selection();\n const item = this._gc.vertex(_) || this._gc.edge(_) || this._gc.subgraph(_);\n if (item) {\n this._graph.selection([item]);\n }\n return this;\n }\n}\nWUGraph.prototype._class += \" eclwatch_WUGraph\";\n\nexport interface WUGraph {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n graphID(): string;\n graphID(_: string): this;\n subgraphID(): string;\n subgraphID(_: string): this;\n}\n\nWUGraph.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUGraph.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUGraph.prototype.publish(\"graphID\", \"\", \"string\", \"Graph ID\");\nWUGraph.prototype.publish(\"subgraphID\", \"\", \"string\", \"Subgraph ID\");\n","import { Exception, ResultFilter, Result, XSDSchema, XSDXMLNode } from \"@hpcc-js/comms\";\nimport { ColumnType, Deferred, domConstruct, QueryResults, RowFormatter } from \"@hpcc-js/dgrid\";\n\nfunction entitiesEncode(str) {\n return String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n\nfunction safeEncode(item) {\n switch (Object.prototype.toString.call(item)) {\n case \"[object Undefined]\":\n case \"[object Boolean]\":\n case \"[object Number]\":\n return item;\n case \"[object String]\":\n return entitiesEncode(item);\n default:\n console.warn(\"Unknown cell type: \" + Object.prototype.toString.call(item)); \n }\n return item;\n}\n\nexport class Store {\n protected wuResult: Result;\n protected schema: XSDSchema;\n protected _columns: any[];\n protected _cache: { [key: string]: Promise<{ totalLength: number, data: any[] }> } = {};\n private rowFormatter: RowFormatter;\n protected _filter: ResultFilter = {};\n private onError?: (msg: string) => void;\n\n constructor(wuResult: Result, schema: XSDSchema, renderHtml: boolean, filter: ResultFilter = {}, onError?: (msg: string) => void) {\n this.wuResult = wuResult;\n this.schema = schema;\n this._columns = this.schema2Columns(this.schema.root);\n this.rowFormatter = new RowFormatter(this._columns, renderHtml);\n this._filter = filter;\n this.onError = onError;\n }\n\n columns() {\n return this._columns;\n }\n\n schema2Columns(parentNode: XSDXMLNode, prefix: string = \"\"): ColumnType[] {\n if (!parentNode) return [];\n return parentNode.children().filter(node => node.name.indexOf(\"__hidden\", node.name.length - \"__hidden\".length) === -1).map((node, idx) => {\n const label = node.name;\n const keyed = node.attrs[\"hpcc:keyed\"];\n const column: ColumnType = {\n field: prefix + label,\n leafID: label,\n idx,\n label: label + (keyed ? \" (i)\" : \"\"),\n className: \"resultGridCell\",\n sortable: false,\n width: keyed ? 16 : 0,\n isSet: node.isSet\n };\n const children = this.schema2Columns(node, prefix + label + \"_\");\n if (children.length) {\n column.width += 10 + children.reduce((prev: number, childNode: ColumnType) => {\n return prev + childNode.width!;\n }, 0);\n column.children = children;\n } else {\n column.width += node.charWidth() * 9;\n column.formatter = (cell, row) => {\n switch (typeof cell) {\n case \"string\":\n return {\n html: cell.replace(/\\t/g, \"&nbsp;&nbsp;&nbsp;&nbsp;\").trim()\n };\n case \"undefined\":\n return \"\";\n }\n return cell;\n };\n }\n return column;\n });\n }\n\n isChildDataset(cell) {\n if (Object.prototype.toString.call(cell) !== \"[object Object]\") {\n return false;\n }\n let propCount = 0;\n let firstPropType = null;\n for (const key in cell) {\n if (!firstPropType) {\n firstPropType = Object.prototype.toString.call(cell[key]);\n }\n propCount++;\n }\n return propCount === 1 && firstPropType === \"[object Array]\";\n }\n\n rowToTable(cell, __row, node) {\n if (this.isChildDataset(cell)) { // Don't display \"Row\" as a header ---\n for (const key in cell) {\n this.rowToTable(cell[key], __row, node);\n }\n return;\n }\n\n const table = domConstruct.create(\"table\", { border: 1, cellspacing: 0, width: \"100%\" }, node);\n switch (Object.prototype.toString.call(cell)) {\n case \"[object Object]\":\n let tr = domConstruct.create(\"tr\", null, table);\n for (const key in cell) {\n domConstruct.create(\"th\", { innerHTML: safeEncode(key) }, tr);\n }\n tr = domConstruct.create(\"tr\", null, table);\n for (const key in cell) {\n switch (Object.prototype.toString.call(cell[key])) {\n case \"[object Object]\":\n case \"[object Array]\":\n this.rowToTable(cell[key], __row, node);\n break;\n default:\n domConstruct.create(\"td\", { innerHTML: safeEncode(cell[key]) }, tr);\n break;\n }\n }\n break;\n case \"[object Array]\":\n for (let i = 0; i < cell.length; ++i) {\n switch (Object.prototype.toString.call(cell[i])) {\n case \"[object Boolean]\":\n case \"[object Number]\":\n case \"[object String]\":\n // Item in Scalar ---\n const tr1 = domConstruct.create(\"tr\", null, table);\n domConstruct.create(\"td\", { innerHTML: safeEncode(cell[i]) }, tr1);\n break;\n default:\n // Child Dataset ---\n if (i === 0) {\n const tr2 = domConstruct.create(\"tr\", null, table);\n for (const key in cell[i]) {\n domConstruct.create(\"th\", { innerHTML: safeEncode(key) }, tr2);\n }\n }\n domConstruct.create(\"tr\", null, table);\n for (const key in cell[i]) {\n if (cell[i][key]) {\n if (Object.prototype.toString.call(cell[i][key]) === \"[object Object]\" || Object.prototype.toString.call(cell[i][key]) === \"[object Array]\") {\n const td = domConstruct.create(\"td\", null, tr1);\n this.rowToTable(cell[i][key], cell[i], td);\n } else if (key.indexOf(\"__html\", key.length - \"__html\".length) !== -1) {\n domConstruct.create(\"td\", { innerHTML: cell[i][key] }, tr1);\n } else if (key.indexOf(\"__javascript\", key.length - \"__javascript\".length) !== -1) {\n /*const td = */ domConstruct.create(\"td\", null, tr1);\n // this.injectJavascript(cell[i][key], cell[i], td);\n } else {\n const val = cell[i][key];\n domConstruct.create(\"td\", { innerHTML: safeEncode(val) }, tr1);\n }\n } else {\n domConstruct.create(\"td\", { innerHTML: \"\" }, tr1);\n }\n }\n }\n }\n break;\n }\n }\n\n getIdentity(row) {\n return row.__hpcc_id;\n }\n\n _request(start, end): Promise<{ totalLength: number, data: any[] }> {\n if (!this.wuResult) return Promise.resolve({ totalLength: 0, data: [] });\n const cacheKey = `${start}->${end}`;\n if (this._cache[cacheKey]) return this._cache[cacheKey];\n const retVal = this.wuResult.fetchRows(start, end - start, false, this._filter).then((rows: any[]) => {\n return {\n totalLength: this.wuResult.Total,\n data: rows.map((row, idx) => {\n const formattedRow: any = this.rowFormatter.format(row);\n formattedRow.__hpcc_id = start + idx;\n formattedRow.__hpcc_orig = row;\n return formattedRow;\n })\n };\n }).catch((err: Exception) => {\n this.onError(err.Message || \"An exception has occurred\");\n return { totalLength: 0, data: [] };\n });\n this._cache[cacheKey] = retVal;\n return retVal;\n }\n\n fetchRange(options): Promise<any[]> {\n const retVal = new Deferred();\n this._request(options.start, options.end).then(response => retVal.resolve(response));\n return new QueryResults(retVal.then(response => response.data), {\n totalLength: retVal.then(response => response.totalLength)\n });\n }\n}\n","import { ResultFilter, IOptions, Result } from \"@hpcc-js/comms\";\nimport { Common } from \"@hpcc-js/dgrid\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { Store } from \"./WUResultStore.ts\";\n\nexport class WUResult extends Common {\n\n protected _result: Result;\n protected _localStore: Store;\n\n constructor() {\n super();\n this.renderHtml(false);\n }\n\n hashSum(opts: any = {}) {\n return hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n resultName: this.resultName(),\n sequence: this.sequence(),\n nodeGroup: this.nodeGroup(),\n logicalFile: this.logicalFile(),\n userID: this.user(),\n password: this.password(),\n bypassCache: this.bypassCache(),\n ...opts\n });\n }\n\n protected _prevResultHash: string;\n calcResult(): Result | null {\n const resultHash = this.hashSum();\n if (this._prevResultHash !== resultHash) {\n this._prevResultHash = resultHash;\n\n const opts: IOptions = {\n baseUrl: this.baseUrl(),\n userID: this.user(),\n password: this.password()\n };\n if (this.wuid() && this.resultName()) {\n this._result = Result.attach(opts, this.wuid(), this.resultName());\n } else if (this.wuid() && this.sequence() !== undefined) {\n this._result = Result.attach(opts, this.wuid(), this.sequence());\n } else if (this.logicalFile() && this.nodeGroup()) {\n this._result = Result.attachLogicalFile(opts, this.nodeGroup(), this.logicalFile());\n } else if (this.logicalFile()) {\n this._result = Result.attachLogicalFile(opts, \"\", this.logicalFile());\n }\n\n if (this._result && this.bypassCache()) {\n this._result.bypassCache(this.bypassCache());\n }\n }\n return this._result;\n }\n\n fetch(row, count, abortController = new AbortController()): Promise<object[]> {\n const result = this.calcResult();\n if (result) {\n return result.fetchRows(row, count, false, {}, abortController.signal);\n }\n return Promise.resolve([]);\n }\n\n protected _prevStoreHash: string;\n protected _prevQueryHash: string;\n update(domNode, element) {\n super.update(domNode, element);\n const storeHash = this.hashSum({\n renderHtml: this.renderHtml(),\n filter: this.filter()\n });\n if (this._prevStoreHash !== storeHash) {\n this._prevStoreHash = storeHash;\n const result = this.calcResult();\n if (result) {\n result.fetchXMLSchema().then(schema => {\n this._localStore = new Store(result, schema, this.renderHtml(), this.filter(), (msg) => {\n if (this._dgrid) {\n this._dgrid.noDataMessage = `<span class='dojoxGridNoData'>${msg}</span>`;\n this._dgrid.refresh();\n }\n });\n this._dgrid?.set(\"columns\", this._localStore.columns());\n this._dgrid?.set(\"collection\", this._localStore);\n });\n }\n }\n }\n\n click(row, col, sel) {\n }\n}\nWUResult.prototype._class += \" eclwatch_WUResult\";\n\nexport interface WUResult {\n baseUrl(): string;\n baseUrl(_: string): this;\n user(): string;\n user(_: string): this;\n password(): string;\n password(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n resultName(): string;\n resultName(_: string): this;\n sequence(): number;\n sequence(_: number): this;\n nodeGroup(): string;\n nodeGroup(_: string): this;\n logicalFile(): string;\n logicalFile(_: string): this;\n filter(): ResultFilter;\n filter(_: ResultFilter): this;\n bypassCache(): boolean;\n bypassCache(_: boolean): this;\n}\n\nWUResult.prototype.publish(\"baseUrl\", \"\", \"string\", \"URL to WsWorkunits\");\nWUResult.prototype.publish(\"user\", \"\", \"string\", \"User ID\");\nWUResult.prototype.publish(\"password\", \"\", \"string\", \"Password\");\nWUResult.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUResult.prototype.publish(\"resultName\", \"\", \"string\", \"Result Name\");\nWUResult.prototype.publish(\"sequence\", undefined, \"number\", \"Sequence Number\");\nWUResult.prototype.publish(\"nodeGroup\", \"\", \"string\", \"NodeGroup\");\nWUResult.prototype.publish(\"logicalFile\", \"\", \"string\", \"Logical File Name\");\nWUResult.prototype.publish(\"filter\", {}, \"object\", \"Filter\");\nWUResult.prototype.publish(\"bypassCache\", false, \"boolean\", \"Bypass cached results\");\n","import { Workunit, WUStateID } from \"@hpcc-js/comms\";\nimport { Edge, Graph, Vertex } from \"@hpcc-js/graph\";\nimport { hashSum, IObserverHandle } from \"@hpcc-js/util\";\n\nexport enum STATUS {\n CREATE = \"Created\",\n COMPILE = \"Compiled\",\n EXECUTE = \"Executed\",\n COMPLETE = \"Completed\"\n}\n\nexport enum STATUS_ACTIVE {\n CREATE = \"Creating\",\n COMPILE = \"Compiling\",\n EXECUTE = \"Executing\",\n COMPLETE = \"Completed\"\n}\n\nexport class WUStatus extends Graph {\n\n protected _wu: Workunit;\n protected _wuHandle: IObserverHandle;\n\n protected _create: Vertex;\n protected _compile: Vertex;\n protected _execute: Vertex;\n protected _complete: Vertex;\n\n constructor() {\n super();\n this\n .zoomable(false)\n .zoomToFitLimit(1)\n .layout(\"Hierarchy\")\n .hierarchyRankDirection(\"LR\")\n .showToolbar(false)\n .allowDragging(false)\n ;\n }\n\n private _prevHash;\n attachWorkunit() {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid()\n });\n if (this._prevHash !== hash) {\n this._prevHash = hash;\n this._wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n if (this._wuHandle) {\n this._wuHandle.release();\n }\n this._wuHandle = this._wu.watch(changes => {\n this.lazyRender();\n });\n }\n }\n\n createVertex(faChar: string) {\n return new Vertex()\n .icon_diameter(32)\n .icon_shape_colorFill(\"none\")\n .icon_shape_colorStroke(\"none\")\n .icon_image_colorFill(\"darkgray\")\n .iconAnchor(\"middle\")\n .textbox_shape_colorFill(\"none\")\n .textbox_shape_colorStroke(\"none\")\n .textbox_text_colorFill(\"darkgray\")\n .faChar(faChar)\n ;\n }\n\n updateVertex(vertex: Vertex, color: string) {\n vertex\n .icon_image_colorFill(color)\n .textbox_text_colorFill(color)\n ;\n }\n\n updateVertexStatus(level: 0 | 1 | 2 | 3 | 4, active: boolean = false) {\n const completeColor = this._wu.isFailed() ? \"darkred\" : \"darkgreen\";\n this._create.text(STATUS.CREATE);\n this._compile.text(STATUS.COMPILE);\n this._execute.text(STATUS.EXECUTE);\n this._complete.text(STATUS.COMPLETE);\n switch (level) {\n case 0:\n this.updateVertex(this._create, \"darkgray\");\n this.updateVertex(this._compile, \"darkgray\");\n this.updateVertex(this._execute, \"darkgray\");\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 1:\n this._create.text(STATUS_ACTIVE.CREATE);\n this.updateVertex(this._create, active ? \"orange\" : completeColor);\n this.updateVertex(this._compile, \"darkgray\");\n this.updateVertex(this._execute, \"darkgray\");\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 2:\n this._compile.text(STATUS_ACTIVE.COMPILE);\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, active ? \"orange\" : completeColor);\n this.updateVertex(this._execute, completeColor);\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 3:\n this._execute.text(STATUS_ACTIVE.EXECUTE);\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, completeColor);\n this.updateVertex(this._execute, active ? \"orange\" : completeColor);\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 4:\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, completeColor);\n this.updateVertex(this._execute, completeColor);\n this.updateVertex(this._complete, completeColor);\n break;\n }\n }\n\n createEdge(source, target) {\n return new Edge()\n .sourceVertex(source)\n .targetVertex(target)\n .strokeColor(\"black\")\n .showArc(false)\n ;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._create = this.createVertex(\"\\uf11d\");\n this._compile = this.createVertex(\"\\uf085\");\n this._execute = this.createVertex(\"\\uf275\");\n this._complete = this.createVertex(\"\\uf11e\");\n const e1 = this.createEdge(this._create, this._compile);\n const e2 = this.createEdge(this._compile, this._execute);\n const e3 = this.createEdge(this._execute, this._complete);\n this.data({\n vertices: [this._create, this._compile, this._execute, this._complete],\n edges: [e1, e2, e3]\n });\n }\n\n update(domNode, element) {\n this.attachWorkunit();\n switch (this._wu.StateID) {\n case WUStateID.Blocked:\n case WUStateID.Wait:\n case WUStateID.Scheduled:\n case WUStateID.UploadingFiled:\n this.updateVertexStatus(1);\n break;\n case WUStateID.Compiling:\n this.updateVertexStatus(2, true);\n break;\n case WUStateID.Submitted:\n this.updateVertexStatus(1, true);\n break;\n case WUStateID.Compiled:\n this.updateVertexStatus(2);\n break;\n case WUStateID.Aborting:\n case WUStateID.Running:\n this.updateVertexStatus(3, true);\n break;\n case WUStateID.Aborted:\n case WUStateID.Archived:\n case WUStateID.Completed:\n this.updateVertexStatus(4);\n break;\n case WUStateID.Failed:\n this.updateVertexStatus(4, false);\n break;\n case WUStateID.DebugPaused:\n case WUStateID.DebugRunning:\n case WUStateID.Paused:\n case WUStateID.Unknown:\n default:\n this.updateVertexStatus(0);\n break;\n }\n super.update(domNode, element);\n this.zoomToFit();\n }\n\n exit(domNode, element) {\n if (this._wuHandle) {\n this._wuHandle.release();\n }\n super.exit(domNode, element);\n }\n}\nWUStatus.prototype._class += \" eclwatch_WUStatus\";\n\nexport interface WUStatus {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\n\nWUStatus.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUStatus.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\n","import { Palette } from \"@hpcc-js/common\";\nimport { Scope, Workunit, WsWorkunits } from \"@hpcc-js/comms\";\nimport { ReactTimelineSeries } from \"@hpcc-js/timeline\";\nimport { hashSum, RecursivePartial } from \"@hpcc-js/util\";\n\nimport \"../src/WUGraph.css\";\n\nconst columns = [\"label\", \"start\", \"end\", \"icon\", \"color\", \"series\"];\n\nexport class WUTimeline extends ReactTimelineSeries {\n\n protected _palette = Palette.ordinal(\"default\");\n\n constructor() {\n super();\n this\n .columns(columns)\n .titleColumn(\"label\")\n .iconColumn(\"icon\")\n .colorColumn(\"color\")\n .seriesColumn(\"series\")\n .timePattern(\"%Y-%m-%dT%H:%M:%S.%LZ\")\n .tickFormat(\"%H:%M\")\n .tooltipTimeFormat(\"%H:%M:%S.%L\")\n .tooltipHTML(d => {\n return d[columns.length].calcTooltip();\n })\n ;\n }\n\n private _prevHashSum;\n clear(): this {\n delete this._prevHashSum;\n return this;\n }\n fetchScopes() {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n request: this.request()\n });\n if (this._prevHashSum !== hash) {\n this._prevHashSum = hash;\n const wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n wu.fetchDetails(this.request()).then(scopes => {\n return scopes.filter(scope => scope.Id && scope.attr(\"WhenStarted\").RawValue).map((scope: Scope) => {\n const whenStarted = +scope.attr(\"WhenStarted\").RawValue / 1000;\n const timeElapsed = +scope.attr(\"TimeElapsed\").RawValue / 1000000;\n return [\n scope.Id,\n new Date(whenStarted).toISOString(),\n timeElapsed ? new Date(whenStarted + timeElapsed).toISOString() : undefined,\n null,\n this._palette(scope.ScopeType),\n scope.ScopeName.split(\"::\").join(\":\").split(\":\").slice(0, 1),\n scope\n ];\n });\n }).then(scopes => {\n this\n .data(scopes)\n .render()\n ;\n });\n }\n }\n\n enter(domNode, _element) {\n super.enter(domNode, _element);\n }\n\n update(domNode, element) {\n this.fetchScopes();\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n}\nWUTimeline.prototype._class += \" eclwatch_WUTimeline\";\n\nexport interface WUTimeline {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n request(): Partial<WsWorkunits.WUDetails>;\n request(_: RecursivePartial<WsWorkunits.WUDetails>): this;\n}\n\nWUTimeline.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUTimeline.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUTimeline.prototype.publish(\"request\", {\n ScopeFilter: {\n MaxDepth: 3,\n ScopeTypes: [\"graph\", \"subgraph\"]\n },\n NestedFilter: {\n Depth: 0,\n ScopeTypes: []\n },\n PropertiesToReturn: {\n AllProperties: false,\n AllStatistics: true,\n AllHints: false,\n Properties: [\"WhenStarted\", \"TimeElapsed\"]\n },\n ScopeOptions: {\n IncludeId: true,\n IncludeScope: true,\n IncludeScopeType: true\n },\n PropertyOptions: {\n IncludeName: true,\n IncludeRawValue: true,\n IncludeFormatted: true,\n IncludeMeasure: true,\n IncludeCreator: false,\n IncludeCreatorType: false\n }\n}, \"object\", \"WUDetails Request\");\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hpcc-js/eclwatch",
3
- "version": "3.4.1",
3
+ "version": "3.5.0",
4
4
  "description": "hpcc-js - ECL Watch",
5
5
  "type": "module",
6
6
  "main": "./dist/index.umd.cjs",
@@ -37,19 +37,19 @@
37
37
  "update-major": "npx --yes npm-check-updates -u"
38
38
  },
39
39
  "dependencies": {
40
- "@hpcc-js/codemirror": "^3.5.2",
41
- "@hpcc-js/common": "^3.4.2",
42
- "@hpcc-js/comms": "^3.10.1",
43
- "@hpcc-js/dgrid": "^3.4.1",
44
- "@hpcc-js/graph": "^3.4.2",
45
- "@hpcc-js/layout": "^3.3.1",
46
- "@hpcc-js/phosphor": "^3.2.13",
47
- "@hpcc-js/timeline": "^3.1.0",
48
- "@hpcc-js/tree": "^3.1.0",
49
- "@hpcc-js/util": "^3.3.12"
40
+ "@hpcc-js/codemirror": "^3.6.0",
41
+ "@hpcc-js/common": "^3.5.0",
42
+ "@hpcc-js/comms": "^3.11.0",
43
+ "@hpcc-js/dgrid": "^3.5.0",
44
+ "@hpcc-js/graph": "^3.5.0",
45
+ "@hpcc-js/layout": "^3.4.0",
46
+ "@hpcc-js/phosphor": "^3.3.0",
47
+ "@hpcc-js/timeline": "^3.2.0",
48
+ "@hpcc-js/tree": "^3.2.0",
49
+ "@hpcc-js/util": "^3.4.0"
50
50
  },
51
51
  "devDependencies": {
52
- "@hpcc-js/esbuild-plugins": "^1.5.2",
52
+ "@hpcc-js/esbuild-plugins": "^1.6.0",
53
53
  "d3-selection": "^1"
54
54
  },
55
55
  "repository": {
@@ -63,5 +63,5 @@
63
63
  "url": "https://github.com/hpcc-systems/Visualization/issues"
64
64
  },
65
65
  "homepage": "https://github.com/hpcc-systems/Visualization",
66
- "gitHead": "f513b6a61ea7756a6374dd74e99c9cec4c6bab85"
66
+ "gitHead": "bfefa70bf4e4232dcdaaa8498a2985a4e9aaadb5"
67
67
  }
@@ -1,3 +1,3 @@
1
- export const PKG_NAME = "@hpcc-js/eclwatch";
2
- export const PKG_VERSION = "3.1.1";
3
- export const BUILD_VERSION = "3.2.1";
1
+ export const PKG_NAME = "__PACKAGE_NAME__";
2
+ export const PKG_VERSION = "__PACKAGE_VERSION__";
3
+ export const BUILD_VERSION = "__BUILD_VERSION__";
@@ -1,3 +1,3 @@
1
- export declare const PKG_NAME = "@hpcc-js/eclwatch";
2
- export declare const PKG_VERSION = "3.1.1";
3
- export declare const BUILD_VERSION = "3.2.1";
1
+ export declare const PKG_NAME = "__PACKAGE_NAME__";
2
+ export declare const PKG_VERSION = "__PACKAGE_VERSION__";
3
+ export declare const BUILD_VERSION = "__BUILD_VERSION__";