You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spot.apache.org by na...@apache.org on 2017/09/26 21:37:10 UTC

[04/18] incubator-spot git commit: syncing with master

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/ingest/ingest-summary.html
----------------------------------------------------------------------
diff --git a/spot-oa/ui/ingest/ingest-summary.html b/spot-oa/ui/ingest/ingest-summary.html
new file mode 100644
index 0000000..41324e1
--- /dev/null
+++ b/spot-oa/ui/ingest/ingest-summary.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<html>
+<head>
+    <title>Ingest Summary</title>
+
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
+
+    <!--Bootstrap styles-->
+    <link rel="stylesheet" type="text/css" href="../css/bootstrap-spot.min.css" />
+    <!--Bootstrap Date picker styles-->
+    <link rel="stylesheet" type="text/css" href="../node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker3.min.css" />
+    <!-- Spot styles -->
+    <link rel="stylesheet" type="text/css" href="../css/main.css" />
+    <!-- Favicon -->
+    <link rel="apple-touch-icon" sizes="57x57" href="../images/favicon/apple-icon-57x57.png">
+    <link rel="apple-touch-icon" sizes="60x60" href="../images/favicon/apple-icon-60x60.png"
+    <link rel="apple-touch-icon" sizes="72x72" href="../images/favicon/apple-icon-72x72.png">
+    <link rel="apple-touch-icon" sizes="76x76" href="../images/favicon/apple-icon-76x76.png">
+    <link rel="apple-touch-icon" sizes="114x114" href="../images/favicon/apple-icon-114x114.png">
+    <link rel="apple-touch-icon" sizes="120x120" href="../images/favicon/apple-icon-120x120.png">
+    <link rel="apple-touch-icon" sizes="144x144" href="../images/favicon/apple-icon-144x144.png">
+    <link rel="apple-touch-icon" sizes="152x152" href="../images/favicon/apple-icon-152x152.png">
+    <link rel="apple-touch-icon" sizes="180x180" href="../images/favicon/apple-icon-180x180.png">
+    <link rel="icon" type="image/png" sizes="192x192"  href="../images/favicon/android-icon-192x192.png">
+    <link rel="icon" type="image/png" sizes="32x32" href="../images/favicon/favicon-32x32.png">
+    <link rel="icon" type="image/png" sizes="96x96" href="../images/favicon/favicon-96x96.png">
+    <link rel="icon" type="image/png" sizes="16x16" href="../images/favicon/favicon-16x16.png">
+    <link rel="manifest" href="../images/favicon/manifest.json">
+    <meta name="msapplication-TileColor" content="#ffffff">
+    <meta name="msapplication-TileImage" content="images/favicon/ms-icon-144x144.png">
+    <meta name="theme-color" content="#ffffff">
+    <style type="text/css">
+        .spot-row {
+            height: 100%;
+        }
+
+        .is-chart svg {
+            width: 100%;
+            height: 100%;
+        }
+
+        .is-chart svg .header text {
+            text-anchor: middle;
+            fill: #82837e;
+        }
+
+        .is-chart svg .header text tspan.bold {
+            font-weight: bold;
+        }
+
+        .is-chart .axis {
+            shape-rendering: crispEdges;
+        }
+
+        .is-chart .axis path, .is-chart .axis line {
+            fill: none;
+        }
+
+        .is-chart .pipeline {
+            pointer-events: all;
+        }
+
+        .is-chart .pipeline.zoom-in {
+            cursor: zoom-in;
+        }
+
+        .is-chart .pipeline.zoom-out {
+            cursor: zoom-out;
+        }
+
+        .is-chart .pipeline.e-resize {
+            cursor: e-resize;
+        }
+    </style>
+</head>
+<body>
+    <nav id="spot-nav" class="navbar navbar-default">
+        <div class="container-fluid">
+            <!-- App name and toggle get grouped for better mobile display -->
+            <div class="navbar-header">
+                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#main-menu">
+                    <span class="sr-only">Toggle navigation</span>
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                </button>
+                <span class="navbar-brand">Apache Spot :: Ingest Summary</span>
+            </div>
+            <!-- Collect the nav links, forms, and other content for toggling -->
+            <div class="collapse navbar-collapse" id="main-menu">
+              <!-- Main Menu -->
+            </div>
+            <div id="search-box" class="row text-right">
+                <!--Tools Buttons-->
+                <div id="nav_form" class="col-md-12">
+                  <!-- Search form placeholder -->
+                </div>
+            </div> <!-- /Tools Buttons-->
+        </div>
+    </nav>
+    <div id="spot-content-wrapper" class="container-fluid">
+      <!-- Main Content Placeholder -->
+    </div>
+
+    <!-- SCRIPTS -->
+    <script type="application/javascript" src="../node_modules/jquery/dist/jquery.min.js"></script>
+    <script type="application/javascript" src="../node_modules/d3/d3.min.js"></script>
+    <script type="application/javascript" src="../node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
+    <script type="application/javascript" src="../node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js"></script>
+    <script type="application/javascript" src="../node_modules/react/dist/react.min.js"></script>
+    <script type="application/javascript" src="../node_modules/react-dom/dist/react-dom.min.js"></script>
+    <script type="application/javascript" src="../js/ingest-summary.bundle.min.js"></script>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/ipython/custom/ajax-loader.gif
----------------------------------------------------------------------
diff --git a/spot-oa/ui/ipython/custom/ajax-loader.gif b/spot-oa/ui/ipython/custom/ajax-loader.gif
deleted file mode 100644
index 7dc5c7a..0000000
Binary files a/spot-oa/ui/ipython/custom/ajax-loader.gif and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/ipython/custom/custom.css
----------------------------------------------------------------------
diff --git a/spot-oa/ui/ipython/custom/custom.css b/spot-oa/ui/ipython/custom/custom.css
deleted file mode 100755
index 0ae3a96..0000000
--- a/spot-oa/ui/ipython/custom/custom.css
+++ /dev/null
@@ -1,145 +0,0 @@
-.spot.spot_easy_mode {
-    background-color: white;
-}
-
-.spot.spot_easy_mode:not(.spot_easy_mode_loading) #site {
-    height: 100% !important;
-}
-
-.spot.spot_easy_mode:not(.spot_easy_mode_loading) #notebook {
-    padding: 0 !important;
-    box-shadow: none;
-    -webkit-box-shadow: none;
-}
-
-.spot.spot_easy_mode #header,
-.spot.spot_easy_mode #pager,
-.spot.spot_easy_mode #tooltip,
-.spot.spot_easy_mode #notebook > .end_space,
-.spot.spot_easy_mode .cell:not(.code_cell),
-.spot.spot_easy_mode .cell.code_cell > .input,
-.spot.spot_easy_mode .cell.code_cell > .widget-area > .prompt {
-    position: absolute !important;
-    top: -1000000000px;
-    left: -1000000000px;
-}
-
-.spot.spot_easy_mode.spot_easy_mode_loading .cell.code_cell {
-    position: absolute !important;
-    top: -1000000000px;
-    left: -1000000000px;
-}
-
-.spot.spot_easy_mode #notebook-container {
-    -webkit-box-shadow: none;
-    box-shadow: none;
-}
-
-.spot.spot_easy_mode .cell.code_cell {
-    border-color: transparent !important;
-    padding: 0 !important;
-}
-
-/*****************************************
- **         EASY MODE SPINNER           **
- *****************************************/
-.spot #spot_easy_mode_loader {
-    display: none;
-}
-
-.spot.spot_easy_mode #spot_easy_mode_loader {
-    display: block;
-    position: fixed;
-    top: 10px;
-    width: 100%;
-    text-align: center;
-    margin-top: 50px;
-}
-
-.spot.spot_easy_mode #spot_easy_mode_loader_spinner
-{
-    display: inline-block;
-    width: 16px;
-    height: 11px;
-    margin-left: 5px;
-    background-image: url(./ajax-loader.gif);
-}
-
-.spot.spot_easy_mode:not(.spot_easy_mode_loading) #spot_easy_mode_loader
-{
-    right: 25px;
-    margin-top: 0px;
-    width: auto;
-}
-
-.spot.spot_ninja_mode #spot_easy_mode_loader
-{
-    display: none;
-}
-
-/*****************************************
- **         Spot TOOLTIP STYLING         **
- *****************************************/
-.spot .spot-tooltip .tooltip-inner {
-    word-wrap: break-word;
-}
-
-.spot .spot-text-wrapper.overflown {
-    color: red;
-}
-
-.spot .spot-text-wrapper {
-    white-space: nowrap;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    width: 12em;
-}
-
-.spot .spot-text-wrapper.spot-text-sm {
-    width: 6em;
-}
-
-.spot .spot-text-wrapper.spot-text-lg {
-    width: 18em;
-}
-
-.spot .spot-text-wrapper.spot-text-xlg {
-    width: 30em;
-}
-
-/* Classes for the threat investigation notebooks*/
-body.spot_easy_mode[data-notebook-name*="Threat"] .widget-area .widget-box div table,
-body.spot_ninja_mode[data-notebook-name*="Threat"] .widget-area .widget-box div table{
-    margin:10px 10px 20px 0px;
-    font-size:12px;
-}
-
-
-body.spot_easy_mode[data-notebook-name*="Threat"] .widget-area .widget-box div table td, th,
-body.spot_ninja_mode[data-notebook-name*="Threat"] .widget-area .widget-box div table td, th{
-    border: solid 1px #CCC;
-    padding: 3px;
-    background-color: #FFF;
-    line-height:14px;
-}
-
-body.spot_easy_mode[data-notebook-name*="Threat"] .widget-area .widget-box div table td,
-body.spot_ninja_mode[data-notebook-name*="Threat"] .widget-area .widget-box div table td{
-    height:25px;
-    max-width: 180px;
-    width:100px;
-}
-
-body.spot_easy_mode[data-notebook-name*="Threat"] .widget-area .widget-box div table th,
-body.spot_ninja_mode[data-notebook-name*="Threat"] .widget-area .widget-box div table th{
-
-    background-color: #0071C5;
-    color: #FFF;
-    text-align: center;
-}
-
-body.spot_easy_mode[data-notebook-name*="Threat"] .widget-area > .widget-subarea,
-body.spot_ninja_mode[data-notebook-name*="Threat"] .widget-area > .widget-subarea
-{
-    width: 90%;
-}

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/ipython/custom/custom.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/ipython/custom/custom.js b/spot-oa/ui/ipython/custom/custom.js
deleted file mode 100755
index 2496d59..0000000
--- a/spot-oa/ui/ipython/custom/custom.js
+++ /dev/null
@@ -1,337 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
-
-/**
- * Trigger reload event on parent document
- */
-function reloadParentData()
-{
-    window.parent.iframeReloadHook && window.parent.iframeReloadHook();
-}
-
-require(['jquery', 'bootstrap'], function($, bootstrap)
-{
-    function retry(query) {
-        var regex = new RegExp(query + '=(\\d)');
-
-        var matcher = regex.exec(window.location.hash);
-
-        var attempt = matcher ? ++matcher[1] : 2;
-
-        // Set hash
-        window.location.hash = '#' + query + '=' + attempt;
-        window.location.reload();
-    }
-
-    // jQuery must be available for easy mode to woark properly
-    if ($===undefined) {
-        if (/#spot_jquery_retry=[015-9]/.test(window.location.hash)) {
-            alert('Notebook was not able to load jQuery after 5 attempts. Please try again later, this is a known issue.');
-            console.warn('Bootstrap\'s tooltip was not loaded.');
-        }
-        else {
-            confirm('Notebook failed to load jQuery, easy mode would not work properly without it. Would you you like to try again?')
-            && retry('spot_jquery_retry');
-        }
-
-        return;
-    }
-
-    if ($.fn.tooltip===undefined) {
-        if (/#spot_bootstrap_retry=\d/.test(window.location.hash)) {
-            alert('Notebook was not able to load bootstrap\'s tooltip plugin. You can still work withuot this feature.');
-        } else {
-            confirm('Notebook was not able to load bootstrap\'s tooltip plugin. You can still work withuot this feature. Would you like to try again?')
-            && retry('spot_bootstrap_retry');
-        }
-    }
-
-    var easyMode = {
-        stage: 0,
-        KERNEL_READY: 1,
-        NOTEBOOK_READY: 2,
-        DOM_READY: 4,
-        ENV_READY: 7,
-        building: false,
-        present: false,
-        ready: false,
-        cells: {
-            total: 0,
-            execution_queue: []
-        }
-    }
-
-    /**
-     *  Show EasyMode
-     *
-     *  Hide everything but IPython form
-     */
-    function showEasyMode()
-    {
-        $(document.body).addClass('spot_easy_mode').removeClass('spot_ninja_mode');
-    }
-
-    /**
-     *  Hide Easy Mode
-     *
-     *  Show full IPython Notebook
-     */
-    function hideEasyMode()
-    {
-        $(document.body).addClass('spot_ninja_mode').removeClass('spot_easy_mode');
-    }
-
-    function insertProgressIndicator()
-    {
-        $(document.body).append(
-            '<div id="spot_easy_mode_loader">' +
-                '<span id="spot_easy_mode_loader_details"></span>' +
-                '<span id="spot_easy_mode_loader_spinner"></span>' +
-            '</div>'
-        );
-    }
-
-    /**
-     *  Remove progress indicator
-     */
-    function removeProgressIndicator()
-    {
-        $(document.body).removeClass('spot_easy_mode_loading');
-
-        $('#spot_easy_mode_loader').remove();
-    }
-
-    /**
-     *  Updates progress indicator's details
-     */
-    function updateProgressIndicator(content)
-    {
-        $('#spot_easy_mode_loader_details').html(content);
-    }
-
-    /**
-     *  Show a progress indicator to users
-     */
-    function showBuildingUiIndicator()
-    {
-        $(document.body).addClass('spot_easy_mode_loading');
-
-        insertProgressIndicator();
-
-        updateProgressIndicator(
-            'Building UI <span id="spot_easy_mode_loader_progress">0</span>%'
-        );
-    }
-
-    /**
-     *  Update progress indicator
-     */
-    function updateBuildingUiIndicator()
-    {
-        var p;
-
-        p = (easyMode.cells.total-easyMode.cells.execution_queue.length) * 100 / easyMode.cells.total;
-
-        $('#spot_easy_mode_loader_progress').text(Math.floor(p));
-    }
-
-    function easyModeBootStrap (IPython)
-    {
-        if (easyMode.stage!=easyMode.ENV_READY) return;
-
-        // 1 Build widgets
-        easyMode.building = true;
-
-        console.info('Spot: Building easy mode...');
-
-        // 2 Create an execution queue to display progress
-        easyMode.cells.execution_queue = [];
-
-        easyMode.cells.total = 0;
-        IPython.notebook.get_cells().forEach(function (cell)
-        {
-            if (cell.cell_type==='code')
-            {
-                easyMode.cells.total++;
-            }
-        });
-
-        // Add an extra cell to show progress when requesting execution
-        easyMode.cells.total++;
-
-        // 3 Execute all cells ( Generate UI )
-        IPython.notebook.execute_all_cells();
-
-        updateBuildingUiIndicator();
-    }
-
-    function isEasyModeAvailable()
-    {
-        return window.parent!=window;
-    }
-
-    function isEasyModeEnabled() {
-        return /showEasyMode/.test(window.location.hash);
-    }
-
-    function isNinjaModeEnabled() {
-        return /showNinjaMode/.test(window.location.hash);
-    }
-
-    if (isEasyModeAvailable()) {
-        // Add spot CSS classes (easymode enabled by default)
-        $(document.body).addClass('spot').addClass('spot_easy_mode').addClass('spot_easy_mode_loading');
-
-        // Listen for URL's hash changes
-        $(window).on('hashchange', function ()
-        {
-            if (isEasyModeEnabled()) showEasyMode();
-            else if (isNinjaModeEnabled()) hideEasyMode();
-        });
-
-        $(function () {
-            // Show progress indicator
-            showBuildingUiIndicator();
-        });
-    }
-
-    // Enable spot tooltip text wrapper
-    $(function () {
-        $('body').tooltip({
-            selector: '.spot-text-wrapper[data-toggle]',
-            container: 'body',
-            template: '<div class="spot-tooltip tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
-            title: function () {
-                return $(this).html();
-            },
-            html: true
-        });
-
-        $('body').on('show.bs.tooltip', '.spot-text-wrapper', function () {
-            return this.clientWidth !== this.scrollWidth || this.clientHeight !== this.scrollHeight;
-        });
-    });
-
-    /**
-     * The following code enables toggle from normal user mode (wizard) and ninja node (notebook UI)
-     */
-    require(['base/js/namespace', 'base/js/events'], function(IPython, events)
-    {
-        // Do nothing when running stand alone
-        if (!isEasyModeAvailable()) return;
-
-        // We are running inside and iframe from Spot. Let's have some fun!
-
-        // Let Notebook be aware it is running on an iframe
-        IPython._target = '_self';
-
-        events.on('kernel_busy.Kernel', function ()
-        {
-            // Skip this event while building UI
-            if (!easyMode.ready) return;
-
-            $('#notebook button.btn:not([disabled])').addClass('spotDisabled').attr('disabled', 'disabled');
-
-            insertProgressIndicator();
-        });
-
-        events.on('kernel_idle.Kernel', function ()
-        {
-            // Skip this event while building UI
-            if (!easyMode.ready) return;
-
-            removeProgressIndicator();
-
-            $('#notebook button.btn.spotDisabled').removeClass('spotDisabled').removeAttr('disabled');
-        });
-
-        events.on('kernel_ready.Kernel', function ()
-        {
-            console.info('Spot: Kernel is ready');
-
-            easyMode.stage |= easyMode.KERNEL_READY;
-
-            easyModeBootStrap(IPython);
-        });
-
-        events.on('notebook_loaded.Notebook', function ()
-        {
-            console.info('Spot: Notebook loaded');
-
-            easyMode.stage |= easyMode.NOTEBOOK_READY;
-
-            easyModeBootStrap(IPython);
-        });
-
-        events.on('shell_reply.Kernel', function (evt, data)
-        {
-            var reply, cell, cellIdx;
-
-            reply = data.reply;
-            cell = easyMode.cells.execution_queue.shift();
-
-            console.log('Last execution status: ' + reply.content.status);
-
-            if ((easyMode.building || easyMode.ready) && reply.content.status==='error')
-            {
-                // First error found
-                easyMode.building = false;
-                easyMode.ready = false;
-                isEasyModeEnabled() && alert('Ooops some code failed. Please go to ipython notebook mode and manually fix the error.');
-                $(document.body).removeClass('spot');
-                removeProgressIndicator();
-                hideEasyMode();
-                // Select and scroll to first cell with errors
-                cellIdx = IPython.notebook.find_cell_index(cell);
-                IPython.notebook.scroll_to_cell(cellIdx);
-                IPython.notebook.select(cellIdx);
-            }
-
-            if (!easyMode.building)
-            {
-                return;
-            }
-
-            if (easyMode.cells.execution_queue.length===0)
-            {
-                console.info('Spot: Cell execution has finished');
-
-                easyMode.ready = true;
-                easyMode.building = false;
-
-                removeProgressIndicator();
-                isEasyModeEnabled() && showEasyMode();
-            }
-            else
-            {
-                updateBuildingUiIndicator();
-            }
-        });
-
-        events.on('execute.CodeCell', function (ev, obj)
-        {
-            var cell;
-
-            if (!easyMode.building && !easyMode.ready) return;
-
-            cell = obj.cell;
-
-            easyMode.cells.execution_queue.push(cell);
-
-            console.info('Spot: Cell execution requested: ' + easyMode.cells.execution_queue.length + ' of ' + easyMode.cells.total);
-
-            cell.clear_output(false);
-            // There seems to be a bug on IPython sometimes cells with widgets dont get cleared
-            // Workaround:
-            cell.output_area.clear_output(false, true);
-        });
-
-        $(function ()
-        {
-            console.info('Spot: DOM is ready');
-
-            easyMode.stage |= easyMode.DOM_READY;
-
-            easyModeBootStrap(IPython);
-        });
-    });
-});

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/actions/EdInActions.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/actions/EdInActions.js b/spot-oa/ui/js/actions/EdInActions.js
index 4e9d4e8..4fb39d8 100755
--- a/spot-oa/ui/js/actions/EdInActions.js
+++ b/spot-oa/ui/js/actions/EdInActions.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 var SpotDispatcher = require('../dispatchers/SpotDispatcher');
 var SpotActions = require('./SpotActions');
@@ -58,6 +73,23 @@ var EdInActions = {
       ip: ip
     });
   },
+  saveScoring: function(scoredEmelents) {
+    SpotDispatcher.dispatch({
+      actionType: SpotConstants.SAVE_SCORED_ELEMENTS,
+      scoredElems: scoredEmelents
+    });
+  },
+  resetScoring: function(date) {
+    SpotDispatcher.dispatch({
+      actionType: SpotConstants.RESET_SCORED_ELEMENTS,
+      date: date
+    });
+  },
+  setClassWidth: function() {
+    SpotDispatcher.dispatch({
+      actionType: SpotConstants.CHANGE_CSS_CLS
+    });
+  }
 };
 
 module.exports = EdInActions;

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/actions/InSumActions.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/actions/InSumActions.js b/spot-oa/ui/js/actions/InSumActions.js
index ea5cbe0..8c439ac 100755
--- a/spot-oa/ui/js/actions/InSumActions.js
+++ b/spot-oa/ui/js/actions/InSumActions.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 const SpotDispatcher = require('../dispatchers/SpotDispatcher');
 const SpotConstants = require('../constants/SpotConstants');

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/actions/SpotActions.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/actions/SpotActions.js b/spot-oa/ui/js/actions/SpotActions.js
index a70f2a9..6cb3f0d 100755
--- a/spot-oa/ui/js/actions/SpotActions.js
+++ b/spot-oa/ui/js/actions/SpotActions.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 var $ = require('jquery');
 
@@ -35,6 +50,12 @@ var SpotActions = {
             name: name
         });
     },
+    setPipeline(pipeline) {
+       SpotDispatcher.dispatch({
+           actionType: SpotConstants.UPDATE_PIPELINE,
+           pipeline
+       });
+   },
     expandPanel: function (panel) {
         SpotDispatcher.dispatch({
             actionType: SpotConstants.EXPAND_PANEL,

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/actions/StoryboardActions.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/actions/StoryboardActions.js b/spot-oa/ui/js/actions/StoryboardActions.js
index bf60b7c..13fb5e6 100755
--- a/spot-oa/ui/js/actions/StoryboardActions.js
+++ b/spot-oa/ui/js/actions/StoryboardActions.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 var SpotDispatcher = require('../dispatchers/SpotDispatcher');
 var SpotConstants = require('../constants/SpotConstants');

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/actions/__tests__/EdInActions.test.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/actions/__tests__/EdInActions.test.js b/spot-oa/ui/js/actions/__tests__/EdInActions.test.js
index 0732997..ac13819 100644
--- a/spot-oa/ui/js/actions/__tests__/EdInActions.test.js
+++ b/spot-oa/ui/js/actions/__tests__/EdInActions.test.js
@@ -1,4 +1,17 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+
+//    http://www.apache.org/licenses/LICENSE-2.0
+
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License
 
 jest.mock('../../dispatchers/SpotDispatcher');
 jest.mock('../SpotActions');

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/actions/__tests__/SpotActions.test.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/actions/__tests__/SpotActions.test.js b/spot-oa/ui/js/actions/__tests__/SpotActions.test.js
index ebaf30c..aabc119 100644
--- a/spot-oa/ui/js/actions/__tests__/SpotActions.test.js
+++ b/spot-oa/ui/js/actions/__tests__/SpotActions.test.js
@@ -1,4 +1,18 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+
+//    http://www.apache.org/licenses/LICENSE-2.0
+
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License
+
 
 jest.mock('../../dispatchers/SpotDispatcher');
 jest.mock('../../utils/SpotUtils');

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/actions/__tests__/StoryboardActions.test.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/actions/__tests__/StoryboardActions.test.js b/spot-oa/ui/js/actions/__tests__/StoryboardActions.test.js
index 377e6fd..1d1c390 100644
--- a/spot-oa/ui/js/actions/__tests__/StoryboardActions.test.js
+++ b/spot-oa/ui/js/actions/__tests__/StoryboardActions.test.js
@@ -1,4 +1,18 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+
+//    http://www.apache.org/licenses/LICENSE-2.0
+
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License
+
 
 jest.mock('../../dispatchers/SpotDispatcher');
 

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/ChartMixin.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/ChartMixin.react.js b/spot-oa/ui/js/components/ChartMixin.react.js
index 210c3c9..edcf205 100755
--- a/spot-oa/ui/js/components/ChartMixin.react.js
+++ b/spot-oa/ui/js/components/ChartMixin.react.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 const React = require('react');
 const $ = require('jquery');

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/ContentLoaderMixin.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/ContentLoaderMixin.react.js b/spot-oa/ui/js/components/ContentLoaderMixin.react.js
index ba1b98e..aa34b71 100755
--- a/spot-oa/ui/js/components/ContentLoaderMixin.react.js
+++ b/spot-oa/ui/js/components/ContentLoaderMixin.react.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 var React = require('react');
 

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/DateInput.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/DateInput.react.js b/spot-oa/ui/js/components/DateInput.react.js
index 72f89b4..e20d646 100755
--- a/spot-oa/ui/js/components/DateInput.react.js
+++ b/spot-oa/ui/js/components/DateInput.react.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 var $ = require('jquery');
 var React = require('react');

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/DendrogramMixin.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/DendrogramMixin.react.js b/spot-oa/ui/js/components/DendrogramMixin.react.js
index 74328f4..9eca114 100755
--- a/spot-oa/ui/js/components/DendrogramMixin.react.js
+++ b/spot-oa/ui/js/components/DendrogramMixin.react.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 var $ = require('jquery');
 const Base64 = require('js-base64').Base64;

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/DetailsGridMixin.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/DetailsGridMixin.react.js b/spot-oa/ui/js/components/DetailsGridMixin.react.js
index 1213581..6598552 100755
--- a/spot-oa/ui/js/components/DetailsGridMixin.react.js
+++ b/spot-oa/ui/js/components/DetailsGridMixin.react.js
@@ -1,5 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
-
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 var DetailsGridMixin = {
     emptySetMessage: 'Please select one row from Suspicious Frame',
     getInitialState: function ()

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/ExecutiveThreatBriefingPanel.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/ExecutiveThreatBriefingPanel.react.js b/spot-oa/ui/js/components/ExecutiveThreatBriefingPanel.react.js
index e1964c5..8d66957 100755
--- a/spot-oa/ui/js/components/ExecutiveThreatBriefingPanel.react.js
+++ b/spot-oa/ui/js/components/ExecutiveThreatBriefingPanel.react.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 var React = require('react');
 

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/GridPanelMixin.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/GridPanelMixin.react.js b/spot-oa/ui/js/components/GridPanelMixin.react.js
index c116dd4..99c549c 100755
--- a/spot-oa/ui/js/components/GridPanelMixin.react.js
+++ b/spot-oa/ui/js/components/GridPanelMixin.react.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 var React = require('react');
 

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/IPythonNotebookPanel.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/IPythonNotebookPanel.react.js b/spot-oa/ui/js/components/IPythonNotebookPanel.react.js
index 424d6ce..f5af7ce 100755
--- a/spot-oa/ui/js/components/IPythonNotebookPanel.react.js
+++ b/spot-oa/ui/js/components/IPythonNotebookPanel.react.js
@@ -1,10 +1,26 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 var React = require('react');
 
 var SpotActions = require('../actions/SpotActions');
 var SpotConstants = require('../constants/SpotConstants');
 var SpotStore = require('../stores/SpotStore');
+var easyModeS = true;
 
 var IPythonNotebookPanel = React.createClass({
     propTypes: {
@@ -14,10 +30,11 @@ var IPythonNotebookPanel = React.createClass({
     },
     statics: {
         createIPythonNotebookClosure: function (title, easyMode) {
-            var closure;
-
+            var closure; 
+            
             easyMode = typeof easyMode=='undefined' ? true : typeof easyMode=='boolean' ? easyMode : !!easyMode;
 
+            easyModeS = easyMode; 
             closure = {
                 getTitle: function () {
                     return title;
@@ -57,7 +74,7 @@ var IPythonNotebookPanel = React.createClass({
         }
     },
     getInitialState: function () {
-        return {date: this.props.date.replace(/-/g, ''), easyMode: true};
+        return {date: this.props.date.replace(/-/g, ''), easyMode: easyModeS};
     },
     componentDidMount: function () {
         SpotStore.addChangeDateListener(this._onDateChange);

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/IngestSummaryPanel.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/IngestSummaryPanel.react.js b/spot-oa/ui/js/components/IngestSummaryPanel.react.js
index 6e2b98d..bc8c48f 100755
--- a/spot-oa/ui/js/components/IngestSummaryPanel.react.js
+++ b/spot-oa/ui/js/components/IngestSummaryPanel.react.js
@@ -1,14 +1,27 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 const $ = require('jquery');
 const d3 = require('d3');
 const React = require('react');
-const ReactDOM = require('react-dom');
 
 const ContentLoaderMixin = require('./ContentLoaderMixin.react');
 const ChartMixin = require('./ChartMixin.react');
 const DateUtils = require('../utils/DateUtils');
-const InSumActions = require('../actions/InSumActions');
 
 const IngestSummaryStore = require('../stores/IngestSummaryStore');
 

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/OptionPicker.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/OptionPicker.react.js b/spot-oa/ui/js/components/OptionPicker.react.js
index 44f4166..5c4ce9f 100644
--- a/spot-oa/ui/js/components/OptionPicker.react.js
+++ b/spot-oa/ui/js/components/OptionPicker.react.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 const React = require('react');
 

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/Panel.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/Panel.react.js b/spot-oa/ui/js/components/Panel.react.js
index 732b62b..a746edc 100755
--- a/spot-oa/ui/js/components/Panel.react.js
+++ b/spot-oa/ui/js/components/Panel.react.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 var React = require('react');
 var assign = require('object-assign');
@@ -39,6 +54,17 @@ var Panel = React.createClass({
 
         if (this.props.header) {
             buttons = [];
+            if (this.props.switchable) {
+                buttons.push(
+                    <li key="switchBtn">
+                        <button type="button" className="btn btn-default btn-xs pull-right"
+                                onClick={this.props.onSwitch}>
+                            <span className="glyphicon glyphicon-sort" aria-hidden="true"></span>
+                        </button>
+                    </li>
+                );
+            }
+
             if (this.props.reloadable) {
                 buttons.push(
                     <li key="realoadBtn" className="refresh">

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/PanelRow.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/PanelRow.react.js b/spot-oa/ui/js/components/PanelRow.react.js
index ca10d38..4d8bdb8 100755
--- a/spot-oa/ui/js/components/PanelRow.react.js
+++ b/spot-oa/ui/js/components/PanelRow.react.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 var React = require('react');
 
@@ -32,9 +47,10 @@ var PanelRow = React.createClass({
   },
   render: function () {
     var cssCls = this.state.maximized ? 'spot-maximized' : this.state.minimized ? 'spot-minimized' : '';
+    var sortable = {'order':1};
 
     return (
-      <div className={'spot-row row ' + cssCls}>
+      <div id={this.props.title || ''} className={'spot-row row fit ' + cssCls} style={sortable}>
         {this.props.children}
       </div>
     );

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/PolloNetworkViewMixin.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/PolloNetworkViewMixin.react.js b/spot-oa/ui/js/components/PolloNetworkViewMixin.react.js
index 09b684c..e31cfa9 100755
--- a/spot-oa/ui/js/components/PolloNetworkViewMixin.react.js
+++ b/spot-oa/ui/js/components/PolloNetworkViewMixin.react.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 const Base64 = require('js-base64').Base64;
 const d3Interpolate = require('d3-interpolate');
@@ -19,7 +34,7 @@ const PolloNetworkViewMixin = {
 
         // Node related scales
         const hitsDomain = [1, this.state.data.maxNodes];
-        const ipDomain = [false, true];
+        const ipDomain = [0,1];
         this.nodeSizeScale = d3.scale.linear().domain(hitsDomain);
         this.chargeScale = d3.scale.linear().domain(hitsDomain);
         this.typeScale = d3.scale.ordinal().domain(ipDomain).range(["circle", "diamond"]);

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/SuspiciousGridMixin.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/SuspiciousGridMixin.react.js b/spot-oa/ui/js/components/SuspiciousGridMixin.react.js
index e42ad8d..297978f 100755
--- a/spot-oa/ui/js/components/SuspiciousGridMixin.react.js
+++ b/spot-oa/ui/js/components/SuspiciousGridMixin.react.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 var $ = require('jquery');
 var React = require('react');

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/TimelineMixin.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/TimelineMixin.react.js b/spot-oa/ui/js/components/TimelineMixin.react.js
index 8d28830..3c568a5 100755
--- a/spot-oa/ui/js/components/TimelineMixin.react.js
+++ b/spot-oa/ui/js/components/TimelineMixin.react.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 const $ = require('jquery');
 const d3 = require('d3');

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/scoring/ButtonsScoring.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/scoring/ButtonsScoring.react.js b/spot-oa/ui/js/components/scoring/ButtonsScoring.react.js
new file mode 100644
index 0000000..39ebcff
--- /dev/null
+++ b/spot-oa/ui/js/components/scoring/ButtonsScoring.react.js
@@ -0,0 +1,48 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+var React = require('react');
+
+var ButtonsScoring = React.createClass({
+    getInitialState: function() {
+      return {dataScored: []};
+    },
+    render: function() {
+
+      let classNameCol, classNameBtn;
+
+      if(this.props.action === 'reset') {
+        classNameCol = `col-md-${this.props.col} col-xs-12 col-lg-${this.props.col} col-md-offset-3 col-lg-offset-3`;
+        classNameBtn = "btn col-md-12 col-xs-12 col-lg-12";
+      } else {
+        classNameCol = `col-md-${this.props.col} col-xs-6 col-lg-${this.props.col}`;
+        classNameBtn = "btn btn-primary col-md-12 col-xs-12 col-lg-12";
+      }
+
+      return(
+        <div className={classNameCol}>
+          <button className={classNameBtn} onClick={this.checkAction}>{this.props.name}</button>
+        </div>
+      );
+
+    },
+    checkAction: function() {
+      this.props.onChange();
+    }
+});
+
+module.exports = ButtonsScoring;

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/scoring/FilterSelectInput.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/scoring/FilterSelectInput.react.js b/spot-oa/ui/js/components/scoring/FilterSelectInput.react.js
new file mode 100644
index 0000000..9b76377
--- /dev/null
+++ b/spot-oa/ui/js/components/scoring/FilterSelectInput.react.js
@@ -0,0 +1,45 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+var React = require('react');
+var SpotUtils = require('../../utils/SpotUtils');
+
+var FilterSelectInput = React.createClass({
+  getInitialState: function() {
+    return {filterBox: ''}
+  },
+  render: function() {
+
+    return(
+      <div className={`col-md-${this.props.col} col-xs-12 col-sm-6 col-lg-${this.props.col}`}>
+        <div className="inner-addon right-addon">
+          <i className="glyphicon glyphicon-search"></i>
+          <input className="form-control filter-select" type="text" maxLength="15" placeholder={this.props.nameBox} id={this.props.idInput} autoFocus={false} onChange={this._onChange} value={this.state.filterBox} />
+        </div>
+      </div>
+    )
+  },
+  _onChange: function (e)
+  {
+    this.setState({filterBox: e.target.value});
+    SpotUtils.filterTextOnSelect($(this.props.idSelect), e.target.value);
+  },
+
+});
+
+
+module.exports = FilterSelectInput;

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/scoring/RatingInput.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/scoring/RatingInput.react.js b/spot-oa/ui/js/components/scoring/RatingInput.react.js
new file mode 100644
index 0000000..9da6db2
--- /dev/null
+++ b/spot-oa/ui/js/components/scoring/RatingInput.react.js
@@ -0,0 +1,42 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+var React = require('react');
+
+var RatingInput = React.createClass({
+  render: function() {
+    var radioOptions = this.props.data.map((obj, i) =>
+    <label className="radio-inline">
+      <input key={i} type="radio" name={obj.radioName} id="rating" value={obj.value} defaultChecked={obj.selected}/>{obj.name}
+    </label>
+    );
+
+    return(
+      <div className={`col-md-${this.props.col} col-lg-${this.props.col} col-xs-12`}>
+        <div className="col-md-2 col-lg-2 col-xs-12">
+          <label>Rating: </label>
+        </div>
+        <div className="col-md-10 col-lg-10 col-xs-12">
+          {radioOptions}
+        </div>
+      </div>
+    );
+  }
+});
+
+
+module.exports = RatingInput;

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/scoring/ScoreMessage.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/scoring/ScoreMessage.react.js b/spot-oa/ui/js/components/scoring/ScoreMessage.react.js
new file mode 100644
index 0000000..37beebe
--- /dev/null
+++ b/spot-oa/ui/js/components/scoring/ScoreMessage.react.js
@@ -0,0 +1,38 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+var React = require('react');
+
+var ScoreMessage = React.createClass({
+    getInitialState : function() {
+       return { showMe : false };
+    },
+
+    render: function() {
+            return(
+                <div className="text-center hidden" id={this.props.who}>
+                    <label className="text-danger">"Click the 'Save' button when you’re finished scoring"</label>
+                </div>
+            );
+     },
+
+    checkAction: function(value) {
+        this.setState({ showMe : value}) ;
+    }
+});
+
+module.exports = ScoreMessage;

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/scoring/SearchGlobalInput.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/scoring/SearchGlobalInput.react.js b/spot-oa/ui/js/components/scoring/SearchGlobalInput.react.js
new file mode 100644
index 0000000..664fcfa
--- /dev/null
+++ b/spot-oa/ui/js/components/scoring/SearchGlobalInput.react.js
@@ -0,0 +1,49 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+var React = require('react');
+
+var SearchGlobalInput = React.createClass({
+    getInitialState: function() {
+      return {filter: ''}
+    },
+    render: function() {
+      return(
+        <div className={`col-md-${this.props.col} col-lg-${this.props.col} col-xs-12`}>
+          <div className="inner-addon right-addon">
+            <i className="glyphicon glyphicon-search"></i>
+            <input className="form-control" type="text" placeholder="Quick scoring..." maxLength={this.props.maxlength || 15} id="globalTxt" autoFocus={false} onChange={this._onChange} value={this.state.filter} onKeyUp={this._onKeyUp} />
+          </div>
+        </div>
+      );
+    },
+    // _onKeyUp: function (e)
+    // {
+    //   this.setState({filterBox: e.target.value})
+    // },
+    _onChange: function (e)
+    {
+      this.setState({filter: e.target.value})
+    },
+    _onFilterChange: function ()
+    {
+      console.log(e.target)
+    }
+});
+
+
+module.exports = SearchGlobalInput;

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/components/scoring/SelectInput.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/components/scoring/SelectInput.react.js b/spot-oa/ui/js/components/scoring/SelectInput.react.js
new file mode 100644
index 0000000..321b154
--- /dev/null
+++ b/spot-oa/ui/js/components/scoring/SelectInput.react.js
@@ -0,0 +1,46 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+var React = require('react');
+
+var SelectInput = React.createClass({
+  propTypes: {
+    title: React.PropTypes.string.isRequired
+  },
+  componentDidMount: function() {
+    // $('.panel-body-container').height();
+  },
+  render: function() {
+
+    var labelOptions = this.props.options.map((data, i) =>
+      <option key={i} value={data}>{data}</option>
+    );
+
+
+    return(
+      <div className={`text-left col-md-${this.props.col} col-xs-12 col-sm-6 col-lg-${this.props.col}`}>
+        <select size="8" className="col-md-12 select-picker form-control" id={this.props.who} onChange={this.logChange}>
+          <option value="" selected>- Select -</option>
+          {labelOptions}
+        </select>
+      </div>
+    );
+  }
+});
+
+
+module.exports = SelectInput;

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/constants/SpotConstants.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/constants/SpotConstants.js b/spot-oa/ui/js/constants/SpotConstants.js
index 08f3335..448068e 100755
--- a/spot-oa/ui/js/constants/SpotConstants.js
+++ b/spot-oa/ui/js/constants/SpotConstants.js
@@ -1,9 +1,25 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 const SpotConstants = {
   PIPELINE_NETFLOW: 'flow',
   PIPELINE_DNS: 'dns',
   PIPELINE_PROXY: 'proxy',
+  UPDATE_PIPELINE: 'UPDATE_PIPELINE',
   // Search Actions
   UPDATE_FILTER: 'UPDATE_FILTER',
   UPDATE_DATE: 'UPDATE_DATE',
@@ -17,6 +33,11 @@ const SpotConstants = {
   SUSPICIOUS_PANEL:'Suspicious',
   NETVIEW_PANEL: 'Network View',
   NOTEBOOK_PANEL: 'Notebook',
+  NO_IPYTHON_NOTEBOOK: 'NoIpythonNotebooks',
+  SCORING_PANEL: 'Scoring',
+  SAVE_SCORED_ELEMENTS: 'SAVE_SCORED_ELEMENTS',
+  RESET_SCORED_ELEMENTS: 'RESET_SCORED_ELEMENTS',
+  CHANGE_CSS_CLS: 'CHANGE_CSS_CLS',
   DETAILS_PANEL: 'Details',
   COMMENTS_PANEL:'Executive Threat Briefing',
   INCIDENT_PANEL:'Incident Progression',
@@ -42,7 +63,8 @@ const SpotConstants = {
   START_DATE: 'start-date',
   END_DATE: 'end-date',
   // Server Paths
-  NOTEBOOKS_PATH: '/notebooks/ipynb'
+  NOTEBOOKS_PATH: '/notebooks/ipynb',
+  GRAPHQL_ENDPOINT: '/graphql'
 };
 
 module.exports = SpotConstants;

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/cubehelix/cubehelix.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/cubehelix/cubehelix.js b/spot-oa/ui/js/cubehelix/cubehelix.js
index 4a68fa0..cf13cc0 100755
--- a/spot-oa/ui/js/cubehelix/cubehelix.js
+++ b/spot-oa/ui/js/cubehelix/cubehelix.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 (function() {
   var radians = Math.PI / 180;

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/dispatchers/SpotDispatcher.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/dispatchers/SpotDispatcher.js b/spot-oa/ui/js/dispatchers/SpotDispatcher.js
index ea57c1c..e001161 100755
--- a/spot-oa/ui/js/dispatchers/SpotDispatcher.js
+++ b/spot-oa/ui/js/dispatchers/SpotDispatcher.js
@@ -1,4 +1,19 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 var Dispatcher = require('flux').Dispatcher;
 

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/ingest-summary.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/ingest-summary.js b/spot-oa/ui/js/ingest-summary.js
index f907477..7afecd8 100755
--- a/spot-oa/ui/js/ingest-summary.js
+++ b/spot-oa/ui/js/ingest-summary.js
@@ -1,10 +1,26 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
 
 const React = require('react');
 const ReactDOM = require('react-dom');
 
 const SpotActions = require('./actions/SpotActions');
 const InSumActions = require('./actions/InSumActions');
+const EdInActions = require('./actions/EdInActions');
 const IngestSummaryStore = require('./stores/IngestSummaryStore');
 const SpotConstants = require('./constants/SpotConstants');
 const SpotUtils = require('./utils/SpotUtils');
@@ -13,6 +29,7 @@ const DateUtils = require('./utils/DateUtils');
 // Build and Render Toolbar
 const DateInput = require('./components/DateInput.react');
 const OptionPicker = require('./components/OptionPicker.react');
+const MainMenu = require('./menu/components/MainMenu.react');
 
 // Find out period
 var startDate, endDate, today;
@@ -44,16 +61,23 @@ if (endDate < startDate)
   startDate = endDate;
   endDate = today;
 }
-
 const PIPELINES = IngestSummaryStore.PIPELINES;
-const DEFAULT_PIPELINE = Object.keys(PIPELINES)[0];
+//check if pipeline is on URL, if not the first element of PIPELINES is taken
+const DEFAULT_PIPELINE =  SpotUtils.getUrlParam('pipeline') || Object.keys(PIPELINES)[0];
 
 const loadPipeline = function loadPipeline(pipeline) {
-    IngestSummaryStore.setPipeline(pipeline);
+    SpotActions.setPipeline(pipeline);
     InSumActions.reloadSummary();
 }
 
 ReactDOM.render(
+  <MainMenu />,
+  document.getElementById('main-menu')
+);
+
+SpotActions.setDate(SpotUtils.getCurrentDate());
+
+ReactDOM.render(
     <form className="form-inline">
         <div className="form-group">
             <label htmlFor="pipeline-picker">Source: </label>
@@ -106,9 +130,12 @@ ReactDOM.render(
   document.getElementById('spot-content-wrapper')
 );
 
+
+
 // Set period
 SpotActions.setDate(startDate, SpotConstants.START_DATE);
 SpotActions.setDate(endDate, SpotConstants.END_DATE);
+SpotActions.setPipeline(DEFAULT_PIPELINE);
 
 // Load data
 loadPipeline(DEFAULT_PIPELINE);

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/menu/components/MainMenu.react.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/menu/components/MainMenu.react.js b/spot-oa/ui/js/menu/components/MainMenu.react.js
new file mode 100644
index 0000000..78f9c72
--- /dev/null
+++ b/spot-oa/ui/js/menu/components/MainMenu.react.js
@@ -0,0 +1,73 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+var React = require('react');
+
+var MainMenuStore = require('../stores/MainMenuStore');
+
+var MainMenu = React.createClass({
+  getInitialState: function () {
+    return {
+      menu: MainMenuStore.getMenu()
+    };
+  },
+  componentDidMount: function () {
+    MainMenuStore.addChangeMenuListener(this.onChange);
+  },
+  componentWillUnmount: function () {
+    MainMenuStore.removeChangeMenuListener(this.onChange);
+  },
+  render: function () {
+    let createdMenu = this.state.menu.map((dropdwn) =>
+      <li className="dropdown">
+          {(dropdwn.sub.length === 0 && dropdwn.labelledby === 'pluginsMenu') ? '' : dropdwn.sub.length === 0 ?
+            <a data-href={dropdwn.link} target={dropdwn.target}>{dropdwn.name}</a>
+            :
+            <a className="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
+                {dropdwn.glyphicon !== '' ? <span className={'glyphicon ' + dropdwn.glyphicon} aria-hidden="true"></span>
+                :
+                dropdwn.name}&nbsp;
+                <span className="caret"></span>
+            </a>
+          }
+          <ul className="dropdown-menu" aria-labelledby={dropdwn.labelledby}>
+            {dropdwn.sub.map((li) =>
+              <li>
+                  <a data-href={li.link} target={li.target}>{li.name}</a>
+              </li>
+            )}
+          </ul>
+      </li>
+    );
+
+    return(
+      <div>
+        <ul className="nav navbar-nav navbar-right">
+          {createdMenu}
+        </ul>
+      </div>
+    );
+  },
+  onChange: function ()
+  {
+    this.setState({menu: MainMenuStore.getMenu()});
+  }
+
+});
+
+
+module.exports = MainMenu;

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/menu/menu.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/menu/menu.js b/spot-oa/ui/js/menu/menu.js
new file mode 100644
index 0000000..ac00647
--- /dev/null
+++ b/spot-oa/ui/js/menu/menu.js
@@ -0,0 +1,52 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+let menu =
+    {
+       menu:
+          [
+             {name: 'Flows', link: '', glyphicon: '', labelledby: 'flowsMenu', sub:
+                [
+                   {name: 'Suspicious', link: '../flow/suspicious.html#date=${date}', target: '_self'},
+                   {name: 'Threat Investigation', link: '../flow/threat-investigation.html#date=${date}', target: '_self'},
+                   {name: 'Storyboard', link: '../flow/storyboard.html#date=${date}', target: '_self'},
+                   {name: 'Advanced Mode', link: '../flow/ipython_notebook.html#date=${date}', target: '_blank'}
+                ]
+             },
+             {name: 'DNS', link: '', glyphicon: '', labelledby: 'dnsMenu', sub:
+                [
+                  {name: 'Suspicious', link: '../dns/suspicious.html#date=${date}', target: '_self'},
+                  {name: 'Threat Investigation', link: '../dns/threat-investigation.html#date=${date}', target: '_self'},
+                  {name: 'Storyboard', link: '../dns/storyboard.html#date=${date}', target: '_self'},
+                  {name: 'Advanced Mode', link: '../dns/ipython_notebook.html#date=${date}', target: '_blank'}
+                ]
+              },
+              {name: 'Proxy', link: '', glyphicon: '', labelledby: 'proxyMenu', sub:
+                [
+                  {name: 'Suspicious', link: '../proxy/suspicious.html#date=${date}', target: '_self'},
+                  {name: 'Threat Investigation', link: '../proxy/threat-investigation.html#date=${date}', target: '_self'},
+                  {name: 'Storyboard', link: '../proxy/storyboard.html#date=${date}', target: '_self'},
+                  {name: 'Advanced Mode', link: '../proxy/ipython_notebook.html#date=${date}', target: '_blank'}
+                ]
+              },
+              {name: 'Ingest Summary', link: '../ingest/ingest-summary.html#end-date=${date}', glyphicon: '', labelledby: '', sub: [], target: '_self'},
+              {name: 'Plugins', link: '', glyphicon: '', labelledby: 'pluginsMenu', sub: []}
+
+          ]
+    };
+
+module.exports = menu;

http://git-wip-us.apache.org/repos/asf/incubator-spot/blob/fbcfa683/spot-oa/ui/js/menu/stores/MainMenuStore.js
----------------------------------------------------------------------
diff --git a/spot-oa/ui/js/menu/stores/MainMenuStore.js b/spot-oa/ui/js/menu/stores/MainMenuStore.js
new file mode 100644
index 0000000..2253500
--- /dev/null
+++ b/spot-oa/ui/js/menu/stores/MainMenuStore.js
@@ -0,0 +1,57 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+const EventEmitter = require('events').EventEmitter;
+
+const SpotDispatcher = require('../../../js/dispatchers/SpotDispatcher');
+const SpotConstants = require('../../../js/constants/SpotConstants');
+const Menu = require('../menu');
+
+class MainMenuStore {
+    constructor() {
+        this.menu = Menu.menu;
+        this.eventEmitter = new EventEmitter();
+    }
+
+    getMenu() {
+      return this.menu;
+    }
+
+    addChangeMenuListener(callback) {
+        this.eventEmitter.on('change', callback);
+    }
+
+    removeChangeMenuListener(callback) {
+        this.eventEmitter.removeListener('change', callback);
+    }
+
+    notifyListeners() {
+        this.eventEmitter.emit('change');
+    }
+
+}
+
+const mm = new MainMenuStore();
+
+SpotDispatcher.register(function (action) {
+    switch (action.actionType) {
+        case SpotConstants.RELOAD_MENU:
+            mm.notifyListeners();
+            break;
+    }
+});
+
+module.exports = mm;