From 0a9d58a104b43ef64c423caab9eb28abf87862dd Mon Sep 17 00:00:00 2001 From: Jim Unger Date: Fri, 5 Feb 2016 12:36:40 -0600 Subject: [PATCH 01/24] [ingest] creates pipeline setup directives --- .../add_data_steps/paste_samples_step.html | 1 - .../directives/output_preview.js | 47 ++++ .../directives/pipeline_output.js | 15 ++ .../directives/pipeline_setup.js | 85 ++++++++ .../directives/process_container.js | 29 +++ .../directives/process_container_header.js | 14 ++ .../directives/processor_ui_set.js | 22 ++ .../pipeline_setup/directives/processors.js | 3 + .../pipeline_setup/directives/source_data.js | 35 +++ .../add_data_steps/pipeline_setup/index.js | 1 + .../pipeline_setup/lib/__tests__/pipeline.js | 200 ++++++++++++++++++ .../pipeline_setup/lib/pipeline.js | 157 ++++++++++++++ .../pipeline_setup/lib/processor.js | 25 +++ .../pipeline_setup/lib/selectable_array.js | 14 ++ .../pipeline_setup/sample_pipeline.json | 153 ++++++++++++++ .../pipeline_setup/services/ingest.js | 21 ++ .../styles/_output_preview.less | 28 +++ .../styles/_pipeline_output.less | 19 ++ .../styles/_pipeline_setup.less | 29 +++ .../styles/_process_container.less | 40 ++++ .../styles/_process_container_header.less | 42 ++++ .../styles/_processor_ui_date.less | 5 + .../pipeline_setup/styles/_source_data.less | 10 + .../pipeline_setup/views/output_preview.html | 24 +++ .../pipeline_setup/views/pipeline_output.html | 12 ++ .../pipeline_setup/views/pipeline_setup.html | 36 ++++ .../views/process_container.html | 21 ++ .../views/process_container_header.html | 58 +++++ .../views/processor_ui_set.html | 8 + .../pipeline_setup/views/source_data.html | 28 +++ .../filebeat/directives/filebeat_wizard.html | 10 +- .../filebeat/directives/filebeat_wizard.js | 2 +- src/ui/public/styles/variables/for-theme.less | 8 + 33 files changed, 1194 insertions(+), 8 deletions(-) create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/output_preview.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_output.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container_header.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_set.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processors.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/index.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/__tests__/pipeline.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/pipeline.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/processor.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/selectable_array.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/sample_pipeline.json create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/services/ingest.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_output_preview.less create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_pipeline_output.less create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_pipeline_setup.less create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container.less create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container_header.less create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_processor_ui_date.less create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_source_data.less create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/output_preview.html create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_output.html create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_setup.html create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/process_container.html create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/process_container_header.html create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/processor_ui_set.html create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/source_data.html diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/paste_samples_step.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/paste_samples_step.html index b24c6b74094f..382b31765d07 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/paste_samples_step.html +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/paste_samples_step.html @@ -10,4 +10,3 @@
- diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/output_preview.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/output_preview.js new file mode 100644 index 000000000000..9020df1ebf9b --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/output_preview.js @@ -0,0 +1,47 @@ +const app = require('ui/modules').get('kibana'); +const jsondiffpatch = require('@bigfunger/jsondiffpatch'); +const htmlFormat = jsondiffpatch.formatters.html.format; +require('../styles/_output_preview.less'); + +app.directive('outputPreview', function () { + return { + restrict: 'E', + template: require('../views/output_preview.html'), + scope: { + oldObject: '=', + newObject: '=' + }, + link: function ($scope, $el) { + const div = $el.find('.visual')[0]; + + $scope.diffpatch = jsondiffpatch.create({ + arrays: { + detectMove: false + }, + textDiff: { + minLength: 120 + } + }); + + $scope.updateUi = function () { + const left = $scope.oldObject; + const right = $scope.newObject; + let delta = $scope.diffpatch.diff(left, right); + if (!delta) delta = {}; + + div.innerHTML = htmlFormat(delta, left); + }; + }, + controller: function ($scope, debounce) { + $scope.collapsed = true; + + function updateOutput() { + $scope.updateUi(); + } + updateOutput = debounce(updateOutput, 200); + + $scope.$watch('oldObject', updateOutput); + $scope.$watch('newObject', updateOutput); + } + }; +}); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_output.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_output.js new file mode 100644 index 000000000000..33db870cbb63 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_output.js @@ -0,0 +1,15 @@ +const app = require('ui/modules').get('kibana'); +require('../styles/_pipeline_output.less'); + +app.directive('pipelineOutput', function () { + return { + restrict: 'E', + template: require('../views/pipeline_output.html'), + scope: { + pipeline: '=' + }, + controller: function ($scope) { + $scope.collapsed = true; + } + }; +}); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js new file mode 100644 index 000000000000..ac679b015a67 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js @@ -0,0 +1,85 @@ +const app = require('ui/modules').get('kibana'); +const _ = require('lodash'); +const Pipeline = require('../lib/pipeline'); +const Processor = require('../lib/processor'); +const angular = require('angular'); +const processorTypes = require('../../../../../../../common/ingest_processor_types'); +const savedPipeline = require('../sample_pipeline.json'); //temp for debugging purposes + +require('../services/ingest'); +require('../styles/_pipeline_setup.less'); +require('./pipeline_output'); +require('./source_data'); +require('./processors'); + +app.directive('pipelineSetup', function () { + return { + restrict: 'E', + template: require('../views/pipeline_setup.html'), + scope: { + samples: '=', + pipeline: '=' + }, + controller: function ($scope, ingest, debounce, Notifier) { + const notify = new Notifier({ location: `Ingest Pipeline Setup` }); + $scope.processorTypes = _.sortBy(processorTypes, 'title'); + $scope.sample = {}; + + const pipeline = new Pipeline(processorTypes, Processor); + if ($scope.pipeline) { + pipeline.load($scope.pipeline); + $scope.sample = $scope.pipeline.input; + } + $scope.pipeline = pipeline; + + //initiates the simulate call if the pipeline is dirty + function simulatePipeline(event, message) { + if (!pipeline.dirty) return; + + if (pipeline.processors.length === 0) { + pipeline.updateOutput(); + return; + } + + ingest.simulatePipeline(pipeline) + .then((results) => { pipeline.applySimulateResults(results); }) + .catch(notify.error); + } + simulatePipeline = debounce(simulatePipeline, 200); + + $scope.$watchCollection('pipeline.processors', (newVal, oldVal) => { + pipeline.updateParents(); + pipeline.dirty = true; + simulatePipeline(); + }); + + $scope.$watch('sample', (newVal) => { + pipeline.input = $scope.sample; + pipeline.updateParents(); + pipeline.dirty = true; + simulatePipeline(); + }); + + $scope.$watch('pipeline.dirty', simulatePipeline); + + //temp for debugging purposes + $scope.loadPipeline = function () { + pipeline.load(savedPipeline); + }; + + //temp for debugging purposes + $scope.savePipeline = function () { + const tempPipeline = _.cloneDeep(pipeline); + tempPipeline.processors.forEach((processor) => { + delete processor.inputObject; + delete processor.outputObject; + delete processor.parent; + }); + delete tempPipeline.input; + delete tempPipeline.output; + + //console.log(angular.toJson(tempPipeline, true)); + }; + } + }; +}); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js new file mode 100644 index 000000000000..6eb8d7349dd6 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js @@ -0,0 +1,29 @@ +const app = require('ui/modules').get('kibana'); +const _ = require('lodash'); +require('../styles/_process_container.less'); +require('./process_container_header'); + +app.directive('processContainer', function ($compile) { + return { + restrict: 'E', + scope: { + pipeline: '=', + processor: '=' + }, + template: require('../views/process_container.html'), + link: function ($scope, $el) { + const processor = $scope.processor; + const pipeline = $scope.pipeline; + const $container = $el.find('.process-worker-container'); + + const newScope = $scope.$new(); + newScope.pipeline = pipeline; + newScope.processor = processor; + + const template = ``; + const $innerEl = $compile(template)(newScope); + + $innerEl.appendTo($container); + } + }; +}); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container_header.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container_header.js new file mode 100644 index 000000000000..6bb2acab2a73 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container_header.js @@ -0,0 +1,14 @@ +const app = require('ui/modules').get('kibana'); +require('../styles/_process_container_header.less'); + +app.directive('processContainerHeader', function () { + return { + restrict: 'E', + scope: { + processor: '=', + field: '=', + pipeline: '=' + }, + template: require('../views/process_container_header.html') + }; +}); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_set.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_set.js new file mode 100644 index 000000000000..5c4715ed15de --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_set.js @@ -0,0 +1,22 @@ +const app = require('ui/modules').get('kibana'); +const _ = require('lodash'); +const keysDeep = require('../../../../../../../common/lib/keys_deep'); + +//scope.processor, scope.pipeline are attached by the process_container. +app.directive('processorUiSet', function () { + return { + restrict: 'E', + template: require('../views/processor_ui_set.html'), + controller : function ($scope) { + const processor = $scope.processor; + const pipeline = $scope.pipeline; + + function processorUiChanged() { + pipeline.dirty = true; + } + + $scope.$watch('processor.targetField', processorUiChanged); + $scope.$watch('processor.value', processorUiChanged); + } + }; +}); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processors.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processors.js new file mode 100644 index 000000000000..e26a38fb4c22 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processors.js @@ -0,0 +1,3 @@ +require('./process_container'); +require('./output_preview'); +require('./processor_ui_set'); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js new file mode 100644 index 000000000000..84d976e3dc7d --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js @@ -0,0 +1,35 @@ +const app = require('ui/modules').get('kibana'); +const _ = require('lodash'); +require('../styles/_source_data.less'); + +app.directive('sourceData', function () { + return { + restrict: 'E', + scope: { + samples: '=', + sample: '=' + }, + template: require('../views/source_data.html'), + controller: function ($scope) { + const samples = $scope.samples; + + if (samples.length > 0) { + $scope.sample = samples[0]; + } + + $scope.previousLine = function () { + let currentIndex = samples.indexOf($scope.sample); + if (currentIndex <= 0) return; + + $scope.sample = samples[currentIndex - 1]; + }; + + $scope.nextLine = function () { + let currentIndex = samples.indexOf($scope.sample); + if (currentIndex >= samples.length - 1) return; + + $scope.sample = samples[currentIndex + 1]; + }; + } + }; +}); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/index.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/index.js new file mode 100644 index 000000000000..26fb2f95d6ab --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/index.js @@ -0,0 +1 @@ +require('./directives/pipeline_setup'); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/__tests__/pipeline.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/__tests__/pipeline.js new file mode 100644 index 000000000000..2a64aef7ff77 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/__tests__/pipeline.js @@ -0,0 +1,200 @@ +const _ = require('lodash'); +const expect = require('expect.js'); +import Pipeline from '../../lib/pipeline'; + +function Processor(processorType) { + const self = this; + + _.merge(self, processorType); +}; + +describe('processor pipeline', function () { + + describe('remove', function () { + + it('remove the specified processor from the processors collection', function () { + const pipeline = new Pipeline(null, Processor); + pipeline.add({ value: 'item1' }); + pipeline.add({ value: 'item2' }); + pipeline.add({ value: 'item3' }); + + pipeline.remove(pipeline.processors[1]); + + expect(pipeline.processors[0].value).to.be('item1'); + expect(pipeline.processors[1].value).to.be('item3'); + }); + + }); + + describe('add', function () { + + it('should append new items to the processors collection', function () { + const pipeline = new Pipeline(null, Processor); + pipeline.add({ value: 'item1' }); + pipeline.add({ value: 'item2' }); + pipeline.add({ value: 'item3' }); + + expect(pipeline.processors[0].value).to.be('item1'); + expect(pipeline.processors[1].value).to.be('item2'); + expect(pipeline.processors[2].value).to.be('item3'); + }); + + it('should append assign each new processor a unique processorId', function () { + const pipeline = new Pipeline(null, Processor); + pipeline.add({ value: 'item1' }); + pipeline.add({ value: 'item2' }); + pipeline.add({ value: 'item3' }); + + const ids = pipeline.processors.map((p) => { return p.processorId; }); + expect(_.uniq(ids).length).to.be(3); + }); + + it('added processors should be an instance of the type supplied in constructor', function () { + function SomeClass() { + this.someProperty = 'foo'; + } + + const pipeline = new Pipeline(null, SomeClass); + pipeline.add({ value: 'item1' }); + pipeline.add({ value: 'item2' }); + pipeline.add({ value: 'item3' }); + + expect(pipeline.processors[0]).to.have.property('someProperty'); + expect(pipeline.processors[1]).to.have.property('someProperty'); + expect(pipeline.processors[2]).to.have.property('someProperty'); + }); + + }); + + describe('moveUp', function () { + + it('should be able to move an item up in the array', function () { + const pipeline = new Pipeline(null, Processor); + pipeline.add({ value: 'item1' }); + pipeline.add({ value: 'item2' }); + pipeline.add({ value: 'item3' }); + + const target = pipeline.processors[1]; + pipeline.moveUp(target); + + expect(pipeline.processors[0].value).to.be('item2'); + expect(pipeline.processors[1].value).to.be('item1'); + expect(pipeline.processors[2].value).to.be('item3'); + }); + + it('should be able to move the same item move than once', function () { + const pipeline = new Pipeline(null, Processor); + pipeline.add({ value: 'item1' }); + pipeline.add({ value: 'item2' }); + pipeline.add({ value: 'item3' }); + + const target = pipeline.processors[2]; + pipeline.moveUp(target); + pipeline.moveUp(target); + + expect(pipeline.processors[0].value).to.be('item3'); + expect(pipeline.processors[1].value).to.be('item1'); + expect(pipeline.processors[2].value).to.be('item2'); + }); + + it('should not move the selected item past the top', function () { + const pipeline = new Pipeline(null, Processor); + pipeline.add({ value: 'item1' }); + pipeline.add({ value: 'item2' }); + pipeline.add({ value: 'item3' }); + + const target = pipeline.processors[2]; + pipeline.moveUp(target); + pipeline.moveUp(target); + pipeline.moveUp(target); + pipeline.moveUp(target); + pipeline.moveUp(target); + + expect(pipeline.processors[0].value).to.be('item3'); + expect(pipeline.processors[1].value).to.be('item1'); + expect(pipeline.processors[2].value).to.be('item2'); + }); + + it('should not allow the top item to be moved up', function () { + const pipeline = new Pipeline(null, Processor); + pipeline.add({ value: 'item1' }); + pipeline.add({ value: 'item2' }); + pipeline.add({ value: 'item3' }); + + const target = pipeline.processors[0]; + pipeline.moveUp(target); + + expect(pipeline.processors[0].value).to.be('item1'); + expect(pipeline.processors[1].value).to.be('item2'); + expect(pipeline.processors[2].value).to.be('item3'); + }); + + }); + + describe('moveDown', function () { + + it('should be able to move an item down in the array', function () { + const pipeline = new Pipeline(null, Processor); + pipeline.add({ value: 'item1' }); + pipeline.add({ value: 'item2' }); + pipeline.add({ value: 'item3' }); + + const target = pipeline.processors[1]; + pipeline.moveDown(target); + + expect(pipeline.processors[0].value).to.be('item1'); + expect(pipeline.processors[1].value).to.be('item3'); + expect(pipeline.processors[2].value).to.be('item2'); + }); + + it('should be able to move the same item move than once', function () { + const pipeline = new Pipeline(null, Processor); + pipeline.add({ value: 'item1' }); + pipeline.add({ value: 'item2' }); + pipeline.add({ value: 'item3' }); + + const target = pipeline.processors[0]; + pipeline.moveDown(target); + pipeline.moveDown(target); + + expect(pipeline.processors[0].value).to.be('item2'); + expect(pipeline.processors[1].value).to.be('item3'); + expect(pipeline.processors[2].value).to.be('item1'); + }); + + it('should not move the selected item past the bottom', function () { + const pipeline = new Pipeline(null, Processor); + pipeline.add({ value: 'item1' }); + pipeline.add({ value: 'item2' }); + pipeline.add({ value: 'item3' }); + + const target = pipeline.processors[0]; + pipeline.moveDown(target); + pipeline.moveDown(target); + pipeline.moveDown(target); + pipeline.moveDown(target); + pipeline.moveDown(target); + + expect(pipeline.processors[0].value).to.be('item2'); + expect(pipeline.processors[1].value).to.be('item3'); + expect(pipeline.processors[2].value).to.be('item1'); + }); + + it('should not allow the bottom item to be moved down', function () { + const pipeline = new Pipeline(null, Processor); + pipeline.add({ value: 'item1' }); + pipeline.add({ value: 'item2' }); + pipeline.add({ value: 'item3' }); + + const target = pipeline.processors[2]; + pipeline.moveDown(target); + + expect(pipeline.processors[0].value).to.be('item1'); + expect(pipeline.processors[1].value).to.be('item2'); + expect(pipeline.processors[2].value).to.be('item3'); + }); + + }); + + +}); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/pipeline.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/pipeline.js new file mode 100644 index 000000000000..0aaddc2e7adf --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/pipeline.js @@ -0,0 +1,157 @@ +const _ = require('lodash'); + +export default function Pipeline(processorTypes, Processor) { + const self = this; + + self.processors = []; + self.counter = 0; + self.input = {}; + self.output = undefined; + self.dirty = false; + self.Processor = Processor; + self.processorTypes = processorTypes; +}; + +Pipeline.prototype.load = function (pipeline) { + const self = this; + + while (self.processors.length > 0) { + self.processors.pop(); + } + + pipeline.processors.forEach((processor) => { + self.addExisting(processor); + }); +}; + +Pipeline.prototype.remove = function (processor) { + const self = this; + const processors = self.processors; + const index = processors.indexOf(processor); + + processors.splice(index, 1); +}; + +Pipeline.prototype.moveUp = function (processor) { + const self = this; + const processors = self.processors; + const index = processors.indexOf(processor); + + if (index === 0) return; + + const temp = processors[index - 1]; + processors[index - 1] = processors[index]; + processors[index] = temp; +}; + +Pipeline.prototype.moveDown = function (processor) { + const self = this; + const processors = self.processors; + const index = processors.indexOf(processor); + + if (index === processors.length - 1) return; + + const temp = processors[index + 1]; + processors[index + 1] = processors[index]; + processors[index] = temp; +}; + +function remove(array, arrayToRemove) { + arrayToRemove.forEach((itemToRemove) => { + _.remove(array, (o) => { return o === itemToRemove; }); + }); +}; + +Pipeline.prototype.addExisting = function (existingProcessor) { + const self = this; + const processors = self.processors; + + const processorType = _.find(self.processorTypes, (o) => { return o.typeId === existingProcessor.typeId; }); + const newProcessor = self.add(processorType); + + const keys = _.keys(existingProcessor); + remove(keys, ['title', 'template', 'typeId', 'processorId', 'outputObject', 'inputObject', 'description']); + keys.forEach((key) => { + _.set(newProcessor, key, _.get(existingProcessor, key)); + }); + + return newProcessor; +}; + +Pipeline.prototype.add = function (processorType) { + const self = this; + const processors = self.processors; + + const newProcessor = new self.Processor(processorType); + + self.counter += 1; + newProcessor.processorId = `processor_${self.counter}`; + processors.push(newProcessor); + + return newProcessor; +}; + +Pipeline.prototype.updateParents = function () { + const self = this; + const processors = self.processors; + + processors.forEach((processor, index) => { + let newParent; + if (index === 0) { + newParent = self.input; + } else { + newParent = processors[index - 1]; + } + + processor.setParent(newParent); + }); +}; + +Pipeline.prototype.updateOutput = function () { + const self = this; + const processors = self.processors; + + self.output = undefined; + if (processors.length > 0) { + self.output = processors[processors.length - 1].outputObject; + } +}; + +Pipeline.prototype.getProcessorById = function (processorId) { + const self = this; + return _.find(self.processors, (processor) => { return processor.processorId === processorId; }); +}; + +// Updates the state of the pipeline and processors with the results +// from an ingest simulate call. +Pipeline.prototype.applySimulateResults = function (results) { + const self = this; + + //update the outputObject of each processor + results.forEach((result) => { + const processor = self.getProcessorById(result.processorId); + + processor.outputObject = _.get(result, 'output'); + processor.error = _.get(result, 'error'); + }); + + //update the inputObject of each processor + results.forEach((result) => { + const processor = self.getProcessorById(result.processorId); + + //we don't want to change the inputObject if the parent processor + //is in error because that can cause us to lose state. + if (!_.get(processor, 'error.isNested')) { + if (processor.parent.processorId) { + processor.inputObject = _.cloneDeep(processor.parent.outputObject); + } else { + processor.inputObject = _.cloneDeep(processor.parent); + } + } + + processor.updateDescription(); + }); + + self.updateOutput(); + self.dirty = false; +}; diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/processor.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/processor.js new file mode 100644 index 000000000000..e2550ea55935 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/processor.js @@ -0,0 +1,25 @@ +const _ = require('lodash'); + +export default function Processor(processorType) { + const self = this; + + self.collapsed = false; + self.error = undefined; + + _.merge(self, processorType); +}; + +Processor.prototype.setParent = function (newParent) { + const self = this; + + const oldParent = self.parent; + self.parent = newParent; + + return (oldParent !== self.parent); +}; + +Processor.prototype.updateDescription = function () { + const self = this; + + self.description = self.getDescription(self); +}; diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/selectable_array.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/selectable_array.js new file mode 100644 index 000000000000..0904eb384d4e --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/selectable_array.js @@ -0,0 +1,14 @@ +const _ = require('lodash'); + +export default function selectableArray(array, selectedValues) { + return array.map((item) => { + const selected = _.find(selectedValues, (o) => { + return o.toUpperCase() === item.toUpperCase(); + }); + + return { + title: item, + selected: !_.isUndefined(selected) + }; + }); +}; diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/sample_pipeline.json b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/sample_pipeline.json new file mode 100644 index 000000000000..24f7869d4d8b --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/sample_pipeline.json @@ -0,0 +1,153 @@ +{ + "processors": [ + { + "collapsed": true, + "typeId": "grok", + "title": "Grok", + "sourceField": "message", + "pattern": "%{GREEDYDATA:source} - - %{GREEDYDATA:content}", + "processorId": "processor_18", + "description": "[message] -> [message], [source]" + }, + { + "collapsed": true, + "typeId": "grok", + "title": "Grok", + "sourceField": "content", + "pattern": "\\[%{GREEDYDATA:datestamp}] \"%{WORD:action} %{GREEDYDATA:document} %{GREEDYDATA:protocol}\" %{WORD:response_code} %{WORD:extended_response_code}", + "processorId": "processor_19", + "description": "[content] -> [action], [datestamp], [document], [extended_response_code], [protocol], [response_code]" + }, + { + "collapsed": true, + "typeId": "grok", + "title": "Grok", + "sourceField": "datestamp", + "pattern": "%{GREEDYDATA:timestamp} %{GREEDYDATA:timezone}", + "processorId": "processor_20", + "description": "[datestamp] -> [timestamp], [timezone]" + }, + { + "collapsed": true, + "typeId": "date", + "title": "Date", + "sourceField": "timestamp", + "targetField": "timestamp", + "formats": [ + "Custom" + ], + "timezone": "UTC", + "locale": "ENGLISH", + "customFormat": "DD/MMM/yyyy:HH:mm:ss", + "processorId": "processor_21", + "description": "[timestamp] -> [timestamp]" + }, + { + "collapsed": true, + "typeId": "set", + "title": "Set", + "targetField": "tags_text", + "value": " new hot super duper ", + "processorId": "processor_22", + "description": "[tags_text]" + }, + { + "collapsed": true, + "typeId": "trim", + "title": "Trim", + "sourceField": "tags_text", + "processorId": "processor_23", + "description": "[tags_text]" + }, + { + "collapsed": true, + "typeId": "gsub", + "title": "Gsub", + "sourceField": "tags_text", + "pattern": "\\s", + "replacement": ",", + "processorId": "processor_24", + "description": "[tags_text] - '\\s' -> ','" + }, + { + "collapsed": true, + "typeId": "uppercase", + "title": "Uppercase", + "sourceField": "tags_text", + "processorId": "processor_25", + "description": "[tags_text]" + }, + { + "collapsed": true, + "typeId": "split", + "title": "Split", + "sourceField": "tags_text", + "separator": ",", + "processorId": "processor_26", + "description": "[tags_text] on ','" + }, + { + "collapsed": true, + "typeId": "rename", + "title": "Rename", + "sourceField": "tags_text", + "targetField": "tags", + "processorId": "processor_27", + "description": "[tags_text] -> [tags]" + }, + { + "collapsed": true, + "typeId": "lowercase", + "title": "Lowercase", + "sourceField": "document", + "processorId": "processor_28", + "description": "[document]" + }, + { + "collapsed": true, + "typeId": "geoip", + "title": "Geo IP", + "sourceField": "source", + "targetField": "source_geoip", + "processorId": "processor_29", + "description": "[source] -> [source_geoip]" + }, + { + "collapsed": true, + "typeId": "append", + "title": "Append", + "targetField": "sentence", + "values": [ + "i", + "am", + "the", + "words", + "of", + "a", + "new", + "sentence" + ], + "processorId": "processor_30", + "description": "[sentence]" + }, + { + "collapsed": true, + "typeId": "join", + "title": "Join", + "sourceField": "sentence", + "separator": " ", + "processorId": "processor_31", + "description": "[sentence] on ' '" + }, + { + "collapsed": true, + "typeId": "remove", + "title": "Remove", + "sourceField": "message", + "processorId": "processor_32", + "description": "[message]" + } + ], + "counter": 32, + "dirty": false +} diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/services/ingest.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/services/ingest.js new file mode 100644 index 000000000000..c2f7afdc12f1 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/services/ingest.js @@ -0,0 +1,21 @@ +const app = require('ui/modules').get('kibana'); +const _ = require('lodash'); +const angular = require('angular'); + +app.service('ingest', function ($http) { + return { + simulatePipeline: simulatePipeline + }; + + function simulatePipeline(pipeline) { + const data = angular.toJson(pipeline); + + return $http.post(`../api/kibana/ingest/simulate`, data) + .then((result) => { + return result.data; + }) + .catch((err) => { + throw ('Error communicating with Kibana server'); + }); + } +}); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_output_preview.less b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_output_preview.less new file mode 100644 index 000000000000..b1ef4b9e8c78 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_output_preview.less @@ -0,0 +1,28 @@ +@import (reference) "~ui/styles/variables"; +@import (reference) "~ui/styles/mixins"; +@import (reference) "~ui/styles/theme"; + +output-preview { + .visual { + background-color: @settings-pipeline-setup-output-preview-bg; + border: 1px solid; + border-color: @settings-pipeline-setup-output-preview-border; + overflow-x: auto; + } + + .visual.collapsed { + max-height: 125px; + overflow-y: scroll; + } + + pre { + background-color: transparent; + border: none; + } + + .hide-unchanged { + .jsondiffpatch-unchanged { + display: none; + } + } +} diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_pipeline_output.less b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_pipeline_output.less new file mode 100644 index 000000000000..3cb27352985a --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_pipeline_output.less @@ -0,0 +1,19 @@ +pipeline-output { + display: block; + + .header-line { + display: flex; + + label { + width: 100%; + } + } + + pre { + min-height: 100px; + } + + pre.collapsed { + max-height: 100px; + } +} diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_pipeline_setup.less b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_pipeline_setup.less new file mode 100644 index 000000000000..2f558fcb47a5 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_pipeline_setup.less @@ -0,0 +1,29 @@ +@import (reference) "~ui/styles/variables"; +@import (reference) "~ui/styles/mixins"; +@import (reference) "~ui/styles/theme"; + +pipeline-setup { + label { + margin-bottom: 0px; + } + + ul.pipeline-container { + list-style-type: none; + padding: 0px; + + &>li { + border: 1px solid; + border-color: @settings-pipeline-setup-pipeline-border; + } + } + + .empty-pipeline { + border: 1px solid; + border-color: @settings-pipeline-setup-pipeline-border; + padding: 5px; + + p { + font-size: 15px; + } + } +} diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container.less b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container.less new file mode 100644 index 000000000000..7ef19baf5c51 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container.less @@ -0,0 +1,40 @@ +@import (reference) "~ui/styles/variables"; +@import (reference) "~ui/styles/mixins"; +@import (reference) "~ui/styles/theme"; + +process-container { + display: block; + margin-bottom: 1px; + + .process-container-body { + display: block; + overflow: hidden; + position: relative; + + &-content { + padding: 5px; + } + + .overlay { + display: none; + position: absolute; + + top: -5000px; + left: -5000px; + width: 10000px; + height: 10000px; + background-color: @settings-pipeline-setup-processor-container-overlay-bg; + } + + &.dirty { + .overlay { + display: block; + } + } + } + + .form-group { + margin-bottom: 5px; + } + +} diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container_header.less b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container_header.less new file mode 100644 index 000000000000..87eab0359056 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container_header.less @@ -0,0 +1,42 @@ +@import (reference) "~ui/styles/variables"; +@import (reference) "~ui/styles/mixins"; +@import (reference) "~ui/styles/theme"; + +process-container-header { + .process-container-header { + display: flex; + align-items: center; + flex: 1 0 auto; + background-color: @settings-pipeline-setup-processor-container-overlay-bg; + border-bottom: 1px solid; + border-bottom-color: @settings-pipeline-setup-processor-container-header-border; + + &-toggle { + flex: 0 0 auto; + margin-right: 5px; + } + + &-title { + flex: 1 1 auto; + .ellipsis(); + font-weight: bold; + + .processor-title { + width: 100%; + } + + .processor-description { + font-weight: normal; + } + + .processor-description.danger { + font-weight: bold; + color: @brand-danger; + } + } + + &-controls { + flex: 0 0 auto; + } + } +} diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_processor_ui_date.less b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_processor_ui_date.less new file mode 100644 index 000000000000..9b28eb3adc86 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_processor_ui_date.less @@ -0,0 +1,5 @@ +processor-ui-date { + .custom-date-format { + display: flex; + } +} diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_source_data.less b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_source_data.less new file mode 100644 index 000000000000..c250d9761f83 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_source_data.less @@ -0,0 +1,10 @@ +source-data { + button { + width: 40px; + margin-left: 5px; + } + + div.controls { + display: flex; + } +} diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/output_preview.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/output_preview.html new file mode 100644 index 000000000000..00622f43c4e7 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/output_preview.html @@ -0,0 +1,24 @@ +
+ + + collapse + expand +  /  + only show changes + show all +
+
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_output.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_output.html new file mode 100644 index 000000000000..e32b720dc770 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_output.html @@ -0,0 +1,12 @@ +
+
+ + expand + collapse +
+
{{ pipeline.output | json }}
+
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_setup.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_setup.html new file mode 100644 index 000000000000..67316bdf5e24 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_setup.html @@ -0,0 +1,36 @@ + + + + +
+ + +
+

Your pipeline is currently empty. Add a processor to get started!

+
+
+ +
+ + +
+ + + + diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/process_container.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/process_container.html new file mode 100644 index 000000000000..bed0c7eda4a4 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/process_container.html @@ -0,0 +1,21 @@ + + +
+
+
+ {{processor.error.message}} +
+
+ +
+
+
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/process_container_header.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/process_container_header.html new file mode 100644 index 000000000000..9246ca46020f --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/process_container_header.html @@ -0,0 +1,58 @@ +
+ + +
+ + {{processor.title}} + + + + - {{ processor.description }} + + + + + - Error + +
+ +
+ + + + + +
+
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/processor_ui_set.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/processor_ui_set.html new file mode 100644 index 000000000000..c6459b62f384 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/processor_ui_set.html @@ -0,0 +1,8 @@ +
+ + +
+
+ + +
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/source_data.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/source_data.html new file mode 100644 index 000000000000..cff65e23d484 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/source_data.html @@ -0,0 +1,28 @@ +
+ +
+ + + +
+
diff --git a/src/plugins/kibana/public/settings/sections/indices/filebeat/directives/filebeat_wizard.html b/src/plugins/kibana/public/settings/sections/indices/filebeat/directives/filebeat_wizard.html index 0a9983258197..dfdf6d78e337 100644 --- a/src/plugins/kibana/public/settings/sections/indices/filebeat/directives/filebeat_wizard.html +++ b/src/plugins/kibana/public/settings/sections/indices/filebeat/directives/filebeat_wizard.html @@ -38,22 +38,20 @@
- - + samples="wizard.stepResults.samples"> +
diff --git a/src/plugins/kibana/public/settings/sections/indices/filebeat/directives/filebeat_wizard.js b/src/plugins/kibana/public/settings/sections/indices/filebeat/directives/filebeat_wizard.js index 2c5cc55a6133..d71829513a4d 100644 --- a/src/plugins/kibana/public/settings/sections/indices/filebeat/directives/filebeat_wizard.js +++ b/src/plugins/kibana/public/settings/sections/indices/filebeat/directives/filebeat_wizard.js @@ -3,7 +3,7 @@ var template = require('plugins/kibana/settings/sections/indices/filebeat/direct require('plugins/kibana/settings/sections/indices/add_data_steps/pattern_review_step'); require('plugins/kibana/settings/sections/indices/add_data_steps/paste_samples_step'); -require('plugins/kibana/settings/sections/indices/add_data_steps/pipeline_step'); +require('plugins/kibana/settings/sections/indices/add_data_steps/pipeline_setup'); require('plugins/kibana/settings/sections/indices/add_data_steps/install_filebeat_step'); // wrapper directive, which sets up the breadcrumb for all filebeat steps diff --git a/src/ui/public/styles/variables/for-theme.less b/src/ui/public/styles/variables/for-theme.less index e3eb53f5c0bc..2c6f2a6904ad 100644 --- a/src/ui/public/styles/variables/for-theme.less +++ b/src/ui/public/styles/variables/for-theme.less @@ -121,6 +121,14 @@ @settings-indices-active-color: @btn-success-bg; +// Settings - Add Data Wizard - Pipeline Setup ================================= +@settings-pipeline-setup-output-preview-border: @gray12; +@settings-pipeline-setup-output-preview-bg: @gray-lighter; + +@settings-pipeline-setup-pipeline-border: @gray12; + +@settings-pipeline-setup-processor-container-overlay-bg: fade(#000, 10%); +@settings-pipeline-setup-processor-container-header-border: @gray12; // Visualize =================================================================== @visualize-show-spy-border: @gray-lighter; From a4603ca1d17f965e3454700400ff0277b9334394 Mon Sep 17 00:00:00 2001 From: Jim Unger Date: Fri, 5 Feb 2016 14:50:06 -0600 Subject: [PATCH 02/24] [ingest] step 3 no longer overwrites pipeline --- .../add_data_steps/pattern_review_step.js | 55 +------------------ .../directives/pipeline_setup.js | 1 + 2 files changed, 2 insertions(+), 54 deletions(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pattern_review_step.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pattern_review_step.js index be7a220636ed..db9de42cecc6 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pattern_review_step.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pattern_review_step.js @@ -3,56 +3,6 @@ const template = require('plugins/kibana/settings/sections/indices/add_data_step const _ = require('lodash'); const editFieldTypeHTML = require('plugins/kibana/settings/sections/indices/partials/_edit_field_type.html'); -const testData = { - message: '11/24/2015 ip=1.1.1.1 bytes=1234', - clientip: '1.1.1.1', - bytes: 1234, - geoip: { - lat: 37.3894, - lon: 122.0819 - }, - location: { - lat: 37.3894, - lon: 122.0819 - }, - '@timestamp': '2015-11-24T00:00:00.000Z', - otherdate: '2015-11-24T00:00:00.000Z', - codes: [1, 2, 3, 4] -}; - -const testPipeline = [ - { - grok: { - match_field: 'message', - match_pattern: 'foo' - } - }, - { - geoip: { - source_field: 'ip' - } - }, - { - geoip: { - source_field: 'ip', - target_field: 'location' - } - }, - { - date: { - match_field: 'initialDate', - match_formats: ['dd/MM/yyyy hh:mm:ss'] - } - }, - { - date: { - match_field: 'initialDate', - match_formats: ['dd/MM/yyyy hh:mm:ss'], - target_field: 'otherdate' - } - } -]; - function pickDefaultTimeFieldName(dateFields) { if (_.isEmpty(dateFields)) { return undefined; @@ -73,16 +23,13 @@ modules.get('apps/settings') controllerAs: 'reviewStep', bindToController: true, controller: function ($scope, Private) { - this.sampleDocs = testData; - this.pipeline = testPipeline; - if (_.isUndefined(this.indexPattern)) { this.indexPattern = {}; } const knownFieldTypes = {}; this.dateFields = []; - this.pipeline.forEach((processor) => { + this.pipeline.processors.forEach((processor) => { if (processor.geoip) { const field = processor.geoip.target_field || 'geoip'; knownFieldTypes[field] = 'geo_point'; diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js index ac679b015a67..2ce70d9e8537 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js @@ -27,6 +27,7 @@ app.directive('pipelineSetup', function () { const pipeline = new Pipeline(processorTypes, Processor); if ($scope.pipeline) { + //debugger; pipeline.load($scope.pipeline); $scope.sample = $scope.pipeline.input; } From a30602b47ccf030f32a311f1eafaec95fc32a684 Mon Sep 17 00:00:00 2001 From: Jim Unger Date: Fri, 5 Feb 2016 16:08:32 -0600 Subject: [PATCH 03/24] [ingest] fixed issue with source_data --- .../pipeline_setup/directives/pipeline_setup.js | 1 - .../pipeline_setup/directives/source_data.js | 15 ++++++++++----- .../pipeline_setup/views/source_data.html | 4 ++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js index 2ce70d9e8537..ac679b015a67 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js @@ -27,7 +27,6 @@ app.directive('pipelineSetup', function () { const pipeline = new Pipeline(processorTypes, Processor); if ($scope.pipeline) { - //debugger; pipeline.load($scope.pipeline); $scope.sample = $scope.pipeline.input; } diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js index 84d976e3dc7d..1e97cff2c578 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js @@ -1,5 +1,6 @@ const app = require('ui/modules').get('kibana'); const _ = require('lodash'); +const angular = require('angular'); require('../styles/_source_data.less'); app.directive('sourceData', function () { @@ -14,21 +15,25 @@ app.directive('sourceData', function () { const samples = $scope.samples; if (samples.length > 0) { - $scope.sample = samples[0]; + $scope.selectedSample = samples[0]; } + $scope.$watch('selectedSample', (newValue) => { + $scope.sample = angular.copy(newValue); + }); + $scope.previousLine = function () { - let currentIndex = samples.indexOf($scope.sample); + let currentIndex = samples.indexOf($scope.selectedSample); if (currentIndex <= 0) return; - $scope.sample = samples[currentIndex - 1]; + $scope.selectedSample = samples[currentIndex - 1]; }; $scope.nextLine = function () { - let currentIndex = samples.indexOf($scope.sample); + let currentIndex = samples.indexOf($scope.selectedSample); if (currentIndex >= samples.length - 1) return; - $scope.sample = samples[currentIndex + 1]; + $scope.selectedSample = samples[currentIndex + 1]; }; } }; diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/source_data.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/source_data.html index cff65e23d484..297230e318db 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/source_data.html +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/source_data.html @@ -3,8 +3,8 @@
- - - From 98700eeddfb1d23205ddb8279f07aab451c96087 Mon Sep 17 00:00:00 2001 From: Jim Unger Date: Mon, 14 Mar 2016 13:11:33 -0500 Subject: [PATCH 12/24] [ingest client] fixed require statements --- .../pipeline_setup/directives/output_preview.js | 3 +-- .../pipeline_setup/directives/pipeline_output.js | 3 +-- .../pipeline_setup/directives/process_container.js | 5 ++--- .../pipeline_setup/directives/process_container_header.js | 3 +-- .../add_data_steps/pipeline_setup/directives/source_data.js | 3 +-- 5 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/output_preview.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/output_preview.js index 54210e9b94a0..6231326fe2a6 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/output_preview.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/output_preview.js @@ -1,7 +1,6 @@ import uiModules from 'ui/modules'; import jsondiffpatch from '@bigfunger/jsondiffpatch'; - -require('../styles/_output_preview.less'); +import '../styles/_output_preview.less'; const htmlFormat = jsondiffpatch.formatters.html.format; const app = uiModules.get('kibana'); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_output.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_output.js index 54770e7eb79b..fb1e2e707a85 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_output.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_output.js @@ -1,6 +1,5 @@ import uiModules from 'ui/modules'; - -require('../styles/_pipeline_output.less'); +import '../styles/_pipeline_output.less'; const app = uiModules.get('kibana'); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js index a925f1455bbd..b60324f132ae 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js @@ -1,8 +1,7 @@ import uiModules from 'ui/modules'; import _ from 'lodash'; - -require('../styles/_process_container.less'); -require('./process_container_header'); +import '../styles/_process_container.less'; +import './process_container_header'; const app = uiModules.get('kibana'); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container_header.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container_header.js index 4cba3194751f..23a91e0f6c3b 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container_header.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container_header.js @@ -1,6 +1,5 @@ import uiModules from 'ui/modules'; - -require('../styles/_process_container_header.less'); +import '../styles/_process_container_header.less'; const app = uiModules.get('kibana'); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js index c4afddc151db..e35c4f388a1e 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js @@ -1,7 +1,6 @@ import uiModules from 'ui/modules'; import angular from 'angular'; - -require('../styles/_source_data.less'); +import '../styles/_source_data.less'; const app = uiModules.get('kibana'); From 28ae8a5cb0d8d25d04690b3401dedf36e5c5089e Mon Sep 17 00:00:00 2001 From: Jim Unger Date: Mon, 14 Mar 2016 13:21:12 -0500 Subject: [PATCH 13/24] [ingest client] tweaks to source_data directive --- .../add_data_steps/pipeline_setup/directives/source_data.js | 2 ++ .../add_data_steps/pipeline_setup/views/source_data.html | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js index e35c4f388a1e..b4335eaed742 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/source_data.js @@ -20,6 +20,8 @@ app.directive('sourceData', function () { } $scope.$watch('selectedSample', (newValue) => { + //the added complexity of this directive is to strip out the properties + //that angular adds to array objects that are bound via ng-options $scope.sample = angular.copy(newValue); }); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/source_data.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/source_data.html index 297230e318db..f0309b639eba 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/source_data.html +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/source_data.html @@ -3,7 +3,7 @@
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_step.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_step.js deleted file mode 100644 index fc946f14f40a..000000000000 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_step.js +++ /dev/null @@ -1,15 +0,0 @@ -var modules = require('ui/modules'); -var template = require('plugins/kibana/settings/sections/indices/add_data_steps/pipeline_step.html'); - -modules.get('apps/settings') - .directive('pipelineStep', function () { - return { - template: template, - scope: { - samples: '=', - sampleDocs: '=', - pipeline: '=' - } - }; - }); - From ae400816816fef9a446a6bdeefd6a6bfc5220f93 Mon Sep 17 00:00:00 2001 From: Jim Unger Date: Tue, 15 Mar 2016 10:54:00 -0500 Subject: [PATCH 16/24] [ingest client] changed processor types into classes, added data prop --- .../directives/pipeline_setup.js | 23 ++++++-- .../directives/process_container.js | 3 +- .../directives/processor_ui_set.js | 4 +- .../pipeline_setup/lib/pipeline.js | 54 +++++++++---------- .../pipeline_setup/lib/processor_types.js | 40 +++++++++++--- .../pipeline_setup/views/pipeline_setup.html | 6 +-- .../views/processor_ui_set.html | 4 +- src/ui/public/ingest/ingest.js | 17 +----- 8 files changed, 89 insertions(+), 62 deletions(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js index 704c508120f8..818ebd715776 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js @@ -1,9 +1,8 @@ import uiModules from 'ui/modules'; import _ from 'lodash'; import Pipeline from '../lib/pipeline'; -import Processor from '../lib/processor'; import angular from 'angular'; -import * as processorTypes from '../lib/processor_types'; +import * as ProcessorTypes from '../lib/processor_types'; import IngestProvider from 'ui/ingest'; import '../styles/_pipeline_setup.less'; import './pipeline_output'; @@ -12,6 +11,22 @@ import './processors'; const app = uiModules.get('kibana'); +function buildProcessorTypeList() { + var result = []; + _.forIn(ProcessorTypes, function (Type, key) { + var instance = new Type(''); + if (instance.data.typeId !== 'base') { + result.push({ + typeId: instance.data.typeId, + title: instance.title, + Type: Type + }); + } + }); + + return result; +} + app.directive('pipelineSetup', function () { return { restrict: 'E', @@ -23,10 +38,10 @@ app.directive('pipelineSetup', function () { controller: function ($scope, debounce, Private, Notifier) { const ingest = Private(IngestProvider); const notify = new Notifier({ location: `Ingest Pipeline Setup` }); - $scope.processorTypes = _.sortBy(processorTypes, 'title'); + $scope.processorTypes = _.sortBy(buildProcessorTypeList(), 'title'); $scope.sample = {}; - const pipeline = new Pipeline(processorTypes, Processor); + const pipeline = new Pipeline(ProcessorTypes); // Loads pre-existing pipeline which will exist if the user returns from // a later step in the wizard if ($scope.pipeline) { diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js index b60324f132ae..fe58caf849a5 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js @@ -17,12 +17,13 @@ app.directive('processContainer', function ($compile) { const processor = $scope.processor; const pipeline = $scope.pipeline; const $container = $el.find('.process-worker-container'); + const typeId = processor.data.typeId; const newScope = $scope.$new(); newScope.pipeline = pipeline; newScope.processor = processor; - const template = ``; + const template = ``; const $innerEl = $compile(template)(newScope); $innerEl.appendTo($container); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_set.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_set.js index 76b58a6a7d2d..90235a245e7d 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_set.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_set.js @@ -15,8 +15,8 @@ app.directive('processorUiSet', function () { pipeline.dirty = true; } - $scope.$watch('processor.targetField', processorUiChanged); - $scope.$watch('processor.value', processorUiChanged); + $scope.$watch('processor.data.targetField', processorUiChanged); + $scope.$watch('processor.data.value', processorUiChanged); } }; }); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/pipeline.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/pipeline.js index 42f262526187..86ee0f4a6692 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/pipeline.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/pipeline.js @@ -2,13 +2,12 @@ import _ from 'lodash'; export default class Pipeline { - constructor(processorTypes, Processor) { + constructor(processorTypes) { this.processors = []; this.counter = 0; this.input = {}; this.output = undefined; this.dirty = false; - this.Processor = Processor; this.processorTypes = processorTypes; } @@ -52,35 +51,36 @@ export default class Pipeline { } addExisting(existingProcessor) { - const processors = this.processors; - const processorType = _.find(this.processorTypes, (o) => { return o.typeId === existingProcessor.typeId; }); - const newProcessor = this.add(processorType); + // console.log('DO SOMETHING TO CREATE A NEW PROCESSOR'); + // const processors = this.processors; + // const processorType = _.find(this.processorTypes, (o) => { return o.typeId === existingProcessor.typeId; }); + // const newProcessor = this.add(processorType); - const keys = _(existingProcessor) - .keys() - .omit([ - 'title', - 'template', - 'typeId', - 'processorId', - 'outputObject', - 'inputObject', - 'description' - ]) - .value(); - keys.forEach((key) => { - _.set(newProcessor, key, _.get(existingProcessor, key)); - }); + // const keys = _(existingProcessor) + // .keys() + // .omit([ + // 'title', + // 'template', + // 'typeId', + // 'processorId', + // 'outputObject', + // 'inputObject', + // 'description' + // ]) + // .value(); + // keys.forEach((key) => { + // _.set(newProcessor, key, _.get(existingProcessor, key)); + // }); - return newProcessor; + // return newProcessor; } - add(processorType) { + add(ProcessorType) { const processors = this.processors; this.counter += 1; const processorId = `processor_${this.counter}`; - const newProcessor = new this.Processor(processorType, processorId); + const newProcessor = new ProcessorType(processorId); processors.push(newProcessor); return newProcessor; @@ -113,7 +113,7 @@ export default class Pipeline { } getProcessorById(processorId) { - const result = _.find(this.processors, (processor) => { return processor.processorId === processorId; }); + const result = _.find(this.processors, (processor) => { return processor.data.processorId === processorId; }); return result; } @@ -124,8 +124,10 @@ export default class Pipeline { results.forEach((result) => { const processor = this.getProcessorById(result.processorId); + //console.log(`applySimulateResults before ${result.processorId}`, _.cloneDeep(processor)); processor.outputObject = _.get(result, 'output'); processor.error = _.get(result, 'error'); + //console.log(`applySimulateResults after ${result.processorId}`, _.cloneDeep(processor)); }); //update the inputObject of each processor @@ -135,14 +137,12 @@ export default class Pipeline { //we don't want to change the inputObject if the parent processor //is in error because that can cause us to lose state. if (!_.get(processor, 'error.isNested')) { - if (processor.parent.processorId) { + if (processor.parent.data) { processor.inputObject = _.cloneDeep(processor.parent.outputObject); } else { processor.inputObject = _.cloneDeep(processor.parent); } } - - processor.updateDescription(); }); this.updateOutput(); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/processor_types.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/processor_types.js index 878a16561e12..e86f939beb3b 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/processor_types.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/processor_types.js @@ -1,10 +1,36 @@ -export const set = { - typeId: 'set', - title: 'Set', - targetField: '', - value: '', - getDescription: function (processor) { - const target = (processor.targetField) ? processor.targetField : '?'; +export class Processor { + constructor(processorId) { + this.collapsed = false; + this.parent = undefined; + this.inputObject = undefined; + this.outputObject = undefined; + this.error = undefined; + + this.data = { + processorId, + typeId: 'base' + }; + } + + setParent(newParent) { + const oldParent = this.parent; + this.parent = newParent; + + return (oldParent !== this.parent); + } +} + +export class SetProcessor extends Processor { + constructor(processorId) { + super(processorId); + this.title = 'Set'; + this.data.typeId = 'set'; + this.data.targetField = ''; + this.data.value = ''; + } + + get description() { + const target = this.data.targetField || '?'; return `[${target}]`; } }; diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_setup.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_setup.html index 59f7f9ea9745..b8f0aff805d2 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_setup.html +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_setup.html @@ -7,7 +7,7 @@
    -
  • +
@@ -22,12 +22,12 @@
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/processor_ui_set.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/processor_ui_set.html index c6459b62f384..967abb20ebb4 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/processor_ui_set.html +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/processor_ui_set.html @@ -1,8 +1,8 @@
- +
- +
diff --git a/src/ui/public/ingest/ingest.js b/src/ui/public/ingest/ingest.js index b586b93d49c3..097a539c448a 100644 --- a/src/ui/public/ingest/ingest.js +++ b/src/ui/public/ingest/ingest.js @@ -46,22 +46,7 @@ export default function IngestProvider($rootScope, $http, config) { } function packageSimulateProcessor(processor) { - const uiFields = [ - '$$hashKey', - 'collapsed', - 'description', - 'error', - 'getDescription', - 'inputObject', - 'outputObject', - 'parent', - 'setParent', - 'title', - 'updateDescription' - ]; - - const cleanedProcessor = _.omit(processor, uiFields); - return keysToSnakeCaseShallow(cleanedProcessor); + return keysToSnakeCaseShallow(processor.data); } function packageSimulateRequest(pipeline) { From b5a86e1a49d66f5e75d4439e6eed76119406ec35 Mon Sep 17 00:00:00 2001 From: Jim Unger Date: Tue, 15 Mar 2016 12:05:41 -0500 Subject: [PATCH 17/24] [ingest client] fixed pipeline.addExisting logic --- .../directives/pipeline_setup.js | 6 ++-- .../pipeline_setup/lib/pipeline.js | 30 ++++--------------- 2 files changed, 8 insertions(+), 28 deletions(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js index 818ebd715776..17ee7029a7c5 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js @@ -12,9 +12,9 @@ import './processors'; const app = uiModules.get('kibana'); function buildProcessorTypeList() { - var result = []; + const result = []; _.forIn(ProcessorTypes, function (Type, key) { - var instance = new Type(''); + const instance = new Type(''); if (instance.data.typeId !== 'base') { result.push({ typeId: instance.data.typeId, @@ -41,7 +41,7 @@ app.directive('pipelineSetup', function () { $scope.processorTypes = _.sortBy(buildProcessorTypeList(), 'title'); $scope.sample = {}; - const pipeline = new Pipeline(ProcessorTypes); + const pipeline = new Pipeline(); // Loads pre-existing pipeline which will exist if the user returns from // a later step in the wizard if ($scope.pipeline) { diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/pipeline.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/pipeline.js index 86ee0f4a6692..c4a0f5a97857 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/pipeline.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/pipeline.js @@ -2,13 +2,12 @@ import _ from 'lodash'; export default class Pipeline { - constructor(processorTypes) { + constructor() { this.processors = []; this.counter = 0; this.input = {}; this.output = undefined; this.dirty = false; - this.processorTypes = processorTypes; } load(pipeline) { @@ -51,28 +50,11 @@ export default class Pipeline { } addExisting(existingProcessor) { - // console.log('DO SOMETHING TO CREATE A NEW PROCESSOR'); - // const processors = this.processors; - // const processorType = _.find(this.processorTypes, (o) => { return o.typeId === existingProcessor.typeId; }); - // const newProcessor = this.add(processorType); + const newProcessor = this.add(existingProcessor.constructor); + _.assign(newProcessor, _.omit(existingProcessor, 'data')); + _.assign(newProcessor.data, _.omit(existingProcessor.data, 'processorId')); - // const keys = _(existingProcessor) - // .keys() - // .omit([ - // 'title', - // 'template', - // 'typeId', - // 'processorId', - // 'outputObject', - // 'inputObject', - // 'description' - // ]) - // .value(); - // keys.forEach((key) => { - // _.set(newProcessor, key, _.get(existingProcessor, key)); - // }); - - // return newProcessor; + return newProcessor; } add(ProcessorType) { @@ -124,10 +106,8 @@ export default class Pipeline { results.forEach((result) => { const processor = this.getProcessorById(result.processorId); - //console.log(`applySimulateResults before ${result.processorId}`, _.cloneDeep(processor)); processor.outputObject = _.get(result, 'output'); processor.error = _.get(result, 'error'); - //console.log(`applySimulateResults after ${result.processorId}`, _.cloneDeep(processor)); }); //update the inputObject of each processor From 6ba72d814a2b622ea8ba61514b19bec2bee35ab8 Mon Sep 17 00:00:00 2001 From: Jim Unger Date: Tue, 15 Mar 2016 13:13:05 -0500 Subject: [PATCH 18/24] [ingest client] renamed files --- .../pipeline_setup/directives/pipeline_setup.js | 2 +- .../pipeline_setup/directives/processor_ui.js | 2 ++ ...process_container.js => processor_ui_container.js} | 11 ++++++----- ...ner_header.js => processor_ui_container_header.js} | 6 +++--- .../pipeline_setup/directives/processors.js | 3 --- ...ss_container.less => _processor_ui_container.less} | 4 ++-- ...eader.less => _processor_ui_container_header.less} | 4 ++-- .../pipeline_setup/views/pipeline_setup.html | 2 +- ...ess_container.html => processor_ui_container.html} | 10 +++++----- ...header.html => processor_ui_container_header.html} | 8 ++++---- src/plugins/kibana/public/settings/styles/main.less | 4 ++++ 11 files changed, 30 insertions(+), 26 deletions(-) create mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui.js rename src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/{process_container.js => processor_ui_container.js} (68%) rename src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/{process_container_header.js => processor_ui_container_header.js} (51%) delete mode 100644 src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processors.js rename src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/{_process_container.less => _processor_ui_container.less} (91%) rename src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/{_process_container_header.less => _processor_ui_container_header.less} (92%) rename src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/{process_container.html => processor_ui_container.html} (69%) rename src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/{process_container_header.html => processor_ui_container_header.html} (87%) diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js index 17ee7029a7c5..5b95eb13ff46 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/pipeline_setup.js @@ -7,7 +7,7 @@ import IngestProvider from 'ui/ingest'; import '../styles/_pipeline_setup.less'; import './pipeline_output'; import './source_data'; -import './processors'; +import './processor_ui'; const app = uiModules.get('kibana'); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui.js new file mode 100644 index 000000000000..ae2542846547 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui.js @@ -0,0 +1,2 @@ +import './processor_ui_container'; +import './processor_ui_set'; diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_container.js similarity index 68% rename from src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js rename to src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_container.js index fe58caf849a5..d5576c0057bb 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_container.js @@ -1,22 +1,23 @@ import uiModules from 'ui/modules'; import _ from 'lodash'; -import '../styles/_process_container.less'; -import './process_container_header'; +import '../styles/_processor_ui_container.less'; +import './output_preview'; +import './processor_ui_container_header'; const app = uiModules.get('kibana'); -app.directive('processContainer', function ($compile) { +app.directive('processorUiContainer', function ($compile) { return { restrict: 'E', scope: { pipeline: '=', processor: '=' }, - template: require('../views/process_container.html'), + template: require('../views/processor_ui_container.html'), link: function ($scope, $el) { const processor = $scope.processor; const pipeline = $scope.pipeline; - const $container = $el.find('.process-worker-container'); + const $container = $el.find('.processor-ui-content'); const typeId = processor.data.typeId; const newScope = $scope.$new(); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container_header.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_container_header.js similarity index 51% rename from src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container_header.js rename to src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_container_header.js index 23a91e0f6c3b..77cf33c0cf1f 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/process_container_header.js +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processor_ui_container_header.js @@ -1,9 +1,9 @@ import uiModules from 'ui/modules'; -import '../styles/_process_container_header.less'; +import '../styles/_processor_ui_container_header.less'; const app = uiModules.get('kibana'); -app.directive('processContainerHeader', function () { +app.directive('processorUiContainerHeader', function () { return { restrict: 'E', scope: { @@ -11,6 +11,6 @@ app.directive('processContainerHeader', function () { field: '=', pipeline: '=' }, - template: require('../views/process_container_header.html') + template: require('../views/processor_ui_container_header.html') }; }); diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processors.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processors.js deleted file mode 100644 index 3a25b1cb1a1f..000000000000 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/directives/processors.js +++ /dev/null @@ -1,3 +0,0 @@ -import './process_container'; -import './output_preview'; -import './processor_ui_set'; diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container.less b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_processor_ui_container.less similarity index 91% rename from src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container.less rename to src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_processor_ui_container.less index 7ef19baf5c51..eeb5f6e655c3 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container.less +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_processor_ui_container.less @@ -2,11 +2,11 @@ @import (reference) "~ui/styles/mixins"; @import (reference) "~ui/styles/theme"; -process-container { +processor-ui-container { display: block; margin-bottom: 1px; - .process-container-body { + .processor-ui-container-body { display: block; overflow: hidden; position: relative; diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container_header.less b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_processor_ui_container_header.less similarity index 92% rename from src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container_header.less rename to src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_processor_ui_container_header.less index 87eab0359056..ce262d901f94 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_process_container_header.less +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/styles/_processor_ui_container_header.less @@ -2,8 +2,8 @@ @import (reference) "~ui/styles/mixins"; @import (reference) "~ui/styles/theme"; -process-container-header { - .process-container-header { +processor-ui-container-header { + .processor-ui-container-header { display: flex; align-items: center; flex: 1 0 auto; diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_setup.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_setup.html index b8f0aff805d2..eaa005d5fc74 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_setup.html +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/pipeline_setup.html @@ -8,7 +8,7 @@ class="pipeline-container" ng-show="pipeline.processors.length > 0">
  • - +
  • - +
    {{processor.error.message}}
    -
    +
    diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/process_container_header.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/processor_ui_container_header.html similarity index 87% rename from src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/process_container_header.html rename to src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/processor_ui_container_header.html index 9246ca46020f..c5e7aa9e582d 100644 --- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/process_container_header.html +++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/views/processor_ui_container_header.html @@ -1,15 +1,15 @@ -
    +
    -
    +
    {{processor.title}} @@ -24,7 +24,7 @@
    -
    +