├── .dockerignore ├── Simulator ├── tests │ ├── end-to-end │ │ ├── config.js │ │ ├── earthquakeUSGS.js │ │ ├── earthquakeMultitable.js │ │ ├── StandardConnectionsExample.js │ │ ├── incrementalRefreshConnector.js │ │ └── GeneralSimulator.js │ └── unit │ │ ├── misc.js │ │ ├── validation.js │ │ ├── simulator_thunks.js │ │ ├── simulator_actions.js │ │ ├── reducers.js │ │ └── messaging_thunks.js ├── tableau_logo.png ├── utils │ ├── misc.js │ ├── canvas_helper.js │ ├── validation.js │ └── consts.js ├── custom.js ├── components │ ├── StandardConnectionValidator.jsx │ ├── GatherDataFrame.jsx │ ├── SimulatorNavbar.jsx │ ├── CollapsibleTable.jsx │ ├── AddressBar.jsx │ ├── JoinViz.jsx │ ├── StartConnectorGroup.jsx │ ├── DataTables.jsx │ ├── StandardConnections.jsx │ ├── SimulatorAttributes.jsx │ ├── JoinFilter.jsx │ ├── App.jsx │ └── TablePreview.jsx ├── vis.css ├── store │ └── store.js ├── index.html ├── reducers │ └── reducers.js ├── static │ ├── toastr.min.js │ └── toastr.min.css └── actions │ ├── simulator_actions.js │ └── messaging_actions.js ├── src ├── static │ ├── favicon.ico │ ├── fa-brands-400.ttf │ ├── fa-solid-900.ttf │ ├── fa-solid-900.woff │ ├── handmadepaper.png │ ├── fa-brands-400.woff │ ├── fa-brands-400.woff2 │ ├── fa-solid-900.woff2 │ ├── 4iCv6KVjbNBYlgoC1CzjsGyNPYZvgw.woff2 │ ├── 4iCv6KVjbNBYlgoC1Czjs2yNPYZvg7UI.woff2 │ ├── 4iCv6KVjbNBYlgoC1CzjtGyNPYZvg7UI.woff2 │ ├── 4iCv6KVjbNBYlgoC1CzjvGyNPYZvg7UI.woff2 │ ├── 4iCv6KVjbNBYlgoC1CzjvWyNPYZvg7UI.woff2 │ ├── 4iCv6KVjbNBYlgoC1CzjvmyNPYZvg7UI.woff2 │ ├── css_family_Ubuntu_300 │ └── promise-7.0.4.min.js ├── img │ └── logo_splunk_2color_K.png ├── common.css ├── common.js ├── splunk-wdc.html └── splunkConnector.js ├── screenshots ├── 4-wdc-link-page-preview.png ├── 8-ssl-certificate-invalid.png ├── 9-ssl-certificate-valid.png ├── 1-test-splunk-connectivity.png ├── 7-wdc-simulator-browser-console.png ├── 5-wdc-simulator-tables-with-columns.png ├── 6-wdc-simulator-fetched-table-data.png ├── 2-select-search-and-generate-wdc-link.png └── 3-wdc-simulator-to-test-data-retrieved.png ├── .gitignore ├── package.json ├── Dockerfile ├── app.js └── LICENSE /.dockerignore: -------------------------------------------------------------------------------- 1 | node_module 2 | npm-debug.log 3 | -------------------------------------------------------------------------------- /Simulator/tests/end-to-end/config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'port': 8333 3 | } -------------------------------------------------------------------------------- /src/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/favicon.ico -------------------------------------------------------------------------------- /Simulator/tableau_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/Simulator/tableau_logo.png -------------------------------------------------------------------------------- /src/static/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/fa-brands-400.ttf -------------------------------------------------------------------------------- /src/static/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/fa-solid-900.ttf -------------------------------------------------------------------------------- /src/static/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/fa-solid-900.woff -------------------------------------------------------------------------------- /src/static/handmadepaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/handmadepaper.png -------------------------------------------------------------------------------- /src/static/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/fa-brands-400.woff -------------------------------------------------------------------------------- /src/static/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/fa-brands-400.woff2 -------------------------------------------------------------------------------- /src/static/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/fa-solid-900.woff2 -------------------------------------------------------------------------------- /src/img/logo_splunk_2color_K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/img/logo_splunk_2color_K.png -------------------------------------------------------------------------------- /screenshots/4-wdc-link-page-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/screenshots/4-wdc-link-page-preview.png -------------------------------------------------------------------------------- /screenshots/8-ssl-certificate-invalid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/screenshots/8-ssl-certificate-invalid.png -------------------------------------------------------------------------------- /screenshots/9-ssl-certificate-valid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/screenshots/9-ssl-certificate-valid.png -------------------------------------------------------------------------------- /screenshots/1-test-splunk-connectivity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/screenshots/1-test-splunk-connectivity.png -------------------------------------------------------------------------------- /screenshots/7-wdc-simulator-browser-console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/screenshots/7-wdc-simulator-browser-console.png -------------------------------------------------------------------------------- /src/static/4iCv6KVjbNBYlgoC1CzjsGyNPYZvgw.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/4iCv6KVjbNBYlgoC1CzjsGyNPYZvgw.woff2 -------------------------------------------------------------------------------- /screenshots/5-wdc-simulator-tables-with-columns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/screenshots/5-wdc-simulator-tables-with-columns.png -------------------------------------------------------------------------------- /screenshots/6-wdc-simulator-fetched-table-data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/screenshots/6-wdc-simulator-fetched-table-data.png -------------------------------------------------------------------------------- /src/static/4iCv6KVjbNBYlgoC1Czjs2yNPYZvg7UI.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/4iCv6KVjbNBYlgoC1Czjs2yNPYZvg7UI.woff2 -------------------------------------------------------------------------------- /src/static/4iCv6KVjbNBYlgoC1CzjtGyNPYZvg7UI.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/4iCv6KVjbNBYlgoC1CzjtGyNPYZvg7UI.woff2 -------------------------------------------------------------------------------- /src/static/4iCv6KVjbNBYlgoC1CzjvGyNPYZvg7UI.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/4iCv6KVjbNBYlgoC1CzjvGyNPYZvg7UI.woff2 -------------------------------------------------------------------------------- /src/static/4iCv6KVjbNBYlgoC1CzjvWyNPYZvg7UI.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/4iCv6KVjbNBYlgoC1CzjvWyNPYZvg7UI.woff2 -------------------------------------------------------------------------------- /src/static/4iCv6KVjbNBYlgoC1CzjvmyNPYZvg7UI.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/src/static/4iCv6KVjbNBYlgoC1CzjvmyNPYZvg7UI.woff2 -------------------------------------------------------------------------------- /screenshots/2-select-search-and-generate-wdc-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/screenshots/2-select-search-and-generate-wdc-link.png -------------------------------------------------------------------------------- /screenshots/3-wdc-simulator-to-test-data-retrieved.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splunk/splunk-tableau-wdc/HEAD/screenshots/3-wdc-simulator-to-test-data-retrieved.png -------------------------------------------------------------------------------- /Simulator/utils/misc.js: -------------------------------------------------------------------------------- 1 | export function cleanUrl(url) { 2 | const regex = /^http|^https|^\/|^\.\/|^\.\.\//i; 3 | return regex.test(url) ? url : `http://${url}`; 4 | } 5 | -------------------------------------------------------------------------------- /Simulator/custom.js: -------------------------------------------------------------------------------- 1 | $( document ).ready(function() { 2 | setTimeout(() => { 3 | $("#address-input").val(""); 4 | $(".data-gather-properties").attr("style","visibility: hidden;"); 5 | $("#interactive-btn").html("Initialize Connector"); 6 | 7 | }, 100); 8 | }); -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Dependency directories & file 15 | node_modules/ 16 | jspm_packages/ 17 | package-lock.json 18 | 19 | # Code Snippets 20 | code_snippets 21 | 22 | # Local files 23 | identify_lan_ip.html 24 | -------------------------------------------------------------------------------- /Simulator/utils/canvas_helper.js: -------------------------------------------------------------------------------- 1 | export function node(params, alias, data, displayDiv) { 2 | // Traditional DOM manipulation is used here as a 3 | // hacky way to not have to force partial redraws 4 | const div = displayDiv; 5 | div.innerHTML = ''; 6 | for (const j of params.edges) { 7 | for (const i of data.edges) { 8 | if (i.id === j) { 9 | div.innerHTML += `${i.joinValue}
`; 10 | } 11 | } 12 | } 13 | } 14 | 15 | export function edge(params, alias, data, displayDiv) { 16 | const div = displayDiv; 17 | if (params.nodes.length === 0) { 18 | for (const i of data.edges) { 19 | if (i.id === params.edges[0]) { 20 | div.innerHTML = i.joinValue; 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Simulator/components/StandardConnectionValidator.jsx: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react'; 2 | 3 | class Validator extends Component { 4 | constructor(props) { 5 | super(props); 6 | this.errors = props.errors; 7 | } 8 | 9 | render() { 10 | return ( 11 |
12 |

Errors

13 | {(this.errors.length > 0) ? 14 | this.errors.map(error => 15 | ({error}) 16 | ) 17 | : 18 | (No Errors Found!) 19 | } 20 |
21 | ); 22 | } 23 | } 24 | 25 | Validator.propTypes = { 26 | errors: PropTypes.array.isRequired, 27 | }; 28 | 29 | export default Validator; 30 | -------------------------------------------------------------------------------- /Simulator/vis.css: -------------------------------------------------------------------------------- 1 | div.vis-navigation div.vis-button { 2 | width: 34px; 3 | height: 34px; 4 | border-radius: 50%; 5 | position: absolute; 6 | display: inline-block; 7 | background-color: red; 8 | cursor: pointer; 9 | } 10 | 11 | .standard-connection-joins { 12 | background-color: #fafafa; 13 | border: 1px solid #ddd; 14 | max-width: 100%; 15 | max-height: 100%; 16 | width: 60%; 17 | height: 400px; 18 | } 19 | .standard-connection-errors { 20 | padding-left: 10px; 21 | width: 35%; 22 | height: 400px; 23 | max-height: 100%; 24 | } 25 | .standard-connection-errors h3 { 26 | padding-bottom: 10px; 27 | } 28 | 29 | .standard-connection-viz { 30 | display: flex; 31 | } 32 | .validation-errors span{ 33 | display: block; 34 | color: red; 35 | } 36 | .validation-errors .no-errors { 37 | color: green; 38 | } 39 | -------------------------------------------------------------------------------- /Simulator/tests/unit/misc.js: -------------------------------------------------------------------------------- 1 | import should from 'should'; 2 | import * as consts from '../../utils/consts.js'; 3 | import { cleanUrl } from '../../utils/misc.js'; 4 | import { validateUrl } from '../../utils/validation.js'; 5 | 6 | //Validation Tests 7 | describe("Misc Utils", function() { 8 | describe("Clean Url Missing http://", function() { 9 | it("Should Clean an Invalid Url", function() { 10 | const data = "notAUrl.com"; 11 | should.equal("http://notAUrl.com", cleanUrl(data)); 12 | }); 13 | 14 | it("Not Clean a Valid Url", function() { 15 | const data = "https://notAUrl.com"; 16 | should.notEqual("http://notAUrl.com", cleanUrl(data)); 17 | }); 18 | 19 | it("Not Clean a Valid Path", function() { 20 | const data = "../notAUrl.com"; 21 | should.notEqual("http://../notAUrl.com", cleanUrl(data)); 22 | }); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /Simulator/components/GatherDataFrame.jsx: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react'; 2 | 3 | //----------------------Gather Data Frame---------------------// 4 | // Component which houses the iframe that gets rendered in the 5 | // Gather Data Phase. It uses it's ref function to set the 6 | // state of simulatorWindow to be the frames content window 7 | //-----------------------------------------------------------// 8 | 9 | class GatherDataFrame extends Component { 10 | render() { 11 | return ( 12 |