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 667849fa7aa50c..813be624664c5f 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
@@ -10,25 +10,10 @@ import './source_data';
import './processor_ui_container';
import '../processors';
import pipelineSetupTemplate from '../views/pipeline_setup.html';
+import buildProcessorTypeArray from '../lib/build_processor_type_array';
const app = uiModules.get('kibana');
-function buildProcessorTypeList(enabledProcessorTypeIds) {
- return _(ProcessorTypes)
- .map(Type => {
- const instance = new Type();
- return {
- typeId: instance.typeId,
- title: instance.title,
- Type
- };
- })
- .compact()
- .filter((processorType) => enabledProcessorTypeIds.includes(processorType.typeId))
- .sortBy('title')
- .value();
-}
-
app.directive('pipelineSetup', function () {
return {
restrict: 'E',
@@ -45,7 +30,10 @@ app.directive('pipelineSetup', function () {
//determines which processors are available on the cluster
ingest.getProcessors()
.then((enabledProcessorTypeIds) => {
- $scope.processorTypes = buildProcessorTypeList(enabledProcessorTypeIds);
+ $scope.processorTypes = _(buildProcessorTypeArray(ProcessorTypes))
+ .filter((processorType) => enabledProcessorTypeIds.includes(processorType.typeId))
+ .sortBy('title')
+ .value();
})
.catch(notify.error);
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/build_processor_type_array.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/build_processor_type_array.js
new file mode 100644
index 00000000000000..645e6107da0d79
--- /dev/null
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/lib/build_processor_type_array.js
@@ -0,0 +1,15 @@
+import _ from 'lodash';
+
+export default function buildProcessorTypeArray(Types) {
+ return _(Types)
+ .map(Type => {
+ const instance = new Type();
+ return {
+ typeId: instance.typeId,
+ title: instance.title,
+ Type
+ };
+ })
+ .compact()
+ .value();
+}
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 17f562e677ade7..75682e1567c616 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
@@ -109,20 +109,19 @@ export default class Pipeline {
processors[index] = temp;
}
- addExisting(existingProcessor) {
- const Type = existingProcessor.constructor;
- const newProcessor = this.add(Type);
- _.assign(newProcessor, _.omit(existingProcessor, 'processorId'));
+ addExisting(oldProcessor) {
+ const Type = oldProcessor.constructor;
+ const newProcessor = this.add(Type, oldProcessor);
return newProcessor;
}
- add(ProcessorType) {
+ add(ProcessorType, oldProcessor) {
const processors = this.processors;
this.processorCounter += 1;
const processorId = `processor_${this.processorCounter}`;
- const newProcessor = new ProcessorType(processorId);
+ const newProcessor = new ProcessorType(processorId, oldProcessor);
processors.push(newProcessor);
return newProcessor;
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/append/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/append/view_model.js
index a0a9711367a429..0b708747989b07 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/append/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/append/view_model.js
@@ -1,10 +1,15 @@
+import _ from 'lodash';
import Processor from '../base/view_model';
export class Append extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'append', 'Append');
- this.targetField = '';
- this.values = [];
+ _.assign(this,
+ {
+ targetField: '',
+ values: []
+ },
+ _.pick(oldProcessor, ['targetField', 'values']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/convert/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/convert/view_model.js
index ada158dc34454f..f713b0e6041dc2 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/convert/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/convert/view_model.js
@@ -2,11 +2,15 @@ import _ from 'lodash';
import Processor from '../base/view_model';
export class Convert extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'convert', 'Convert');
- this.sourceField = '';
- this.targetField = '';
- this.type = 'auto';
+ _.assign(this,
+ {
+ sourceField: '',
+ targetField: '',
+ type: 'auto'
+ },
+ _.pick(oldProcessor, ['sourceField', 'targetField', 'type']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/date/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/date/view_model.js
index 0186675e3e2295..ef66eeb6937f56 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/date/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/date/view_model.js
@@ -1,14 +1,19 @@
+import _ from 'lodash';
import Processor from '../base/view_model';
export class Date extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'date', 'Date');
- this.sourceField = '';
- this.targetField = '@timestamp';
- this.formats = [];
- this.timezone = 'Etc/UTC';
- this.locale = 'ENGLISH';
- this.customFormat = '';
+ _.assign(this,
+ {
+ sourceField: '',
+ targetField: '@timestamp',
+ formats: [],
+ timezone: 'Etc/UTC',
+ locale: 'ENGLISH',
+ customFormat: ''
+ },
+ _.pick(oldProcessor, ['sourceField', 'targetField', 'formats', 'timezone', 'locale', 'customFormat']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/geoip/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/geoip/view_model.js
index 7041b92cb4a44d..2fb87493e85676 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/geoip/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/geoip/view_model.js
@@ -1,12 +1,17 @@
+import _ from 'lodash';
import Processor from '../base/view_model';
export class GeoIp extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'geoip', 'Geo IP');
- this.sourceField = '';
- this.targetField = '';
- this.databaseFile = '';
- this.databaseFields = [];
+ _.assign(this,
+ {
+ sourceField: '',
+ targetField: '',
+ databaseFile: '',
+ databaseFields: []
+ },
+ _.pick(oldProcessor, ['sourceField', 'targetField', 'databaseFile', 'databaseFields']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/grok/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/grok/view_model.js
index 548b2d52f2a2ff..3866f953ebf24b 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/grok/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/grok/view_model.js
@@ -3,10 +3,14 @@ import keysDeep from '../../lib/keys_deep';
import Processor from '../base/view_model';
export class Grok extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'grok', 'Grok');
- this.sourceField = '';
- this.pattern = '';
+ _.assign(this,
+ {
+ sourceField: '',
+ pattern: ''
+ },
+ _.pick(oldProcessor, ['sourceField', 'pattern']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/gsub/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/gsub/view_model.js
index 32559f9d8ea59b..aecd6355190d75 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/gsub/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/gsub/view_model.js
@@ -1,11 +1,16 @@
+import _ from 'lodash';
import Processor from '../base/view_model';
export class Gsub extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'gsub', 'Gsub');
- this.sourceField = '';
- this.pattern = '';
- this.replacement = '';
+ _.assign(this,
+ {
+ sourceField: '',
+ pattern: '',
+ replacement: ''
+ },
+ _.pick(oldProcessor, ['sourceField', 'pattern', 'replacement']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/join/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/join/view_model.js
index a480b749d8680d..1e4fa3e3bf942f 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/join/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/join/view_model.js
@@ -1,10 +1,15 @@
+import _ from 'lodash';
import Processor from '../base/view_model';
export class Join extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'join', 'Join');
- this.sourceField = '';
- this.separator = '';
+ _.assign(this,
+ {
+ sourceField: '',
+ separator: ''
+ },
+ _.pick(oldProcessor, ['sourceField', 'separator']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/lowercase/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/lowercase/view_model.js
index 4cc12cd0437df8..8beebfba3381b5 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/lowercase/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/lowercase/view_model.js
@@ -1,9 +1,14 @@
+import _ from 'lodash';
import Processor from '../base/view_model';
export class Lowercase extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'lowercase', 'Lowercase');
- this.sourceField = '';
+ _.assign(this,
+ {
+ sourceField: ''
+ },
+ _.pick(oldProcessor, ['sourceField']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/remove/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/remove/view_model.js
index fb33cfc5e4cef7..aa236f7b559ed9 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/remove/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/remove/view_model.js
@@ -1,9 +1,14 @@
+import _ from 'lodash';
import Processor from '../base/view_model';
export class Remove extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'remove', 'Remove');
- this.sourceField = '';
+ _.assign(this,
+ {
+ sourceField: ''
+ },
+ _.pick(oldProcessor, ['sourceField']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/rename/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/rename/view_model.js
index 1899fcfc3c2a9b..a511eaf3381543 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/rename/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/rename/view_model.js
@@ -1,10 +1,15 @@
+import _ from 'lodash';
import Processor from '../base/view_model';
export class Rename extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'rename', 'Rename');
- this.sourceField = '';
- this.targetField = '';
+ _.assign(this,
+ {
+ sourceField: '',
+ targetField: ''
+ },
+ _.pick(oldProcessor, ['sourceField', 'targetField']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/set/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/set/view_model.js
index 4c7f31352c2d9a..48e87ecef35191 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/set/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/set/view_model.js
@@ -1,10 +1,15 @@
import Processor from '../base/view_model';
+import _ from 'lodash';
export class Set extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'set', 'Set');
- this.targetField = '';
- this.value = '';
+ _.assign(this,
+ {
+ targetField: '',
+ value: ''
+ },
+ _.pick(oldProcessor, ['targetField', 'value']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/split/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/split/view_model.js
index 30e7c8d81473c8..1800cab5454cc8 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/split/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/split/view_model.js
@@ -1,10 +1,15 @@
+import _ from 'lodash';
import Processor from '../base/view_model';
export class Split extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'split', 'Split');
- this.sourceField = '';
- this.separator = '';
+ _.assign(this,
+ {
+ sourceField: '',
+ separator: ''
+ },
+ _.pick(oldProcessor, ['sourceField', 'separator']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/trim/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/trim/view_model.js
index c0a52f2a899fcf..4e125a1472fc16 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/trim/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/trim/view_model.js
@@ -1,9 +1,14 @@
+import _ from 'lodash';
import Processor from '../base/view_model';
export class Trim extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'trim', 'Trim');
- this.sourceField = '';
+ _.assign(this,
+ {
+ sourceField: ''
+ },
+ _.pick(oldProcessor, ['sourceField']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/uppercase/view_model.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/uppercase/view_model.js
index ce831ab40028cd..76db9c4f3cb548 100644
--- a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/uppercase/view_model.js
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/pipeline_setup/processors/uppercase/view_model.js
@@ -1,9 +1,14 @@
+import _ from 'lodash';
import Processor from '../base/view_model';
export class Uppercase extends Processor {
- constructor(processorId) {
+ constructor(processorId, oldProcessor) {
super(processorId, 'uppercase', 'Uppercase');
- this.sourceField = '';
+ _.assign(this,
+ {
+ sourceField: ''
+ },
+ _.pick(oldProcessor, ['sourceField']));
}
get description() {
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/select_pipeline/select_pipeline.html b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/select_pipeline/select_pipeline.html
new file mode 100644
index 00000000000000..dedf0171e11221
--- /dev/null
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/select_pipeline/select_pipeline.html
@@ -0,0 +1,10 @@
+
New or Existing?
+Do you want to create a new pipeline, or edit an existing pipline?
+
+
+
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/select_pipeline/select_pipeline.js b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/select_pipeline/select_pipeline.js
new file mode 100644
index 00000000000000..75152d1d1d1971
--- /dev/null
+++ b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/select_pipeline/select_pipeline.js
@@ -0,0 +1,56 @@
+import modules from 'ui/modules';
+import template from './select_pipeline.html';
+import _ from 'lodash';
+import IngestProvider from 'ui/ingest';
+import * as ProcessorTypes from '../../add_data_steps/pipeline_setup/processors/view_models';
+import './styles/styles.less';
+import buildProcessorTypeArray from '../pipeline_setup/lib/build_processor_type_array';
+
+modules.get('apps/settings')
+ .directive('selectPipeline', function () {
+ return {
+ template: template,
+ scope: {
+ pipeline: '='
+ },
+ bindToController: true,
+ controllerAs: 'selectPipeline',
+ controller: function ($scope, Private, Notifier) {
+ const ingest = Private(IngestProvider);
+ const notify = new Notifier({ location: `Select Pipeline` });
+ const processorTypes = buildProcessorTypeArray(ProcessorTypes);
+
+ ingest.getPipelines()
+ .then((pipelines) => {
+ this.pipelines = pipelines;
+ })
+ .catch(notify.error);
+
+ $scope.$watch('selectPipeline.pipelineName', (newValue) => {
+ if (newValue) {
+ delete this.pipeline;
+
+ ingest.getPipeline(newValue)
+ .then((result) => {
+ const pipeline = {
+ processors: []
+ };
+
+ _.forEach(result.processors, (esProcessor) => {
+ const Type = _.find(processorTypes, { typeId: esProcessor.typeId }).Type;
+ const processor = new Type('', esProcessor);
+ processor.collapsed = true;
+ pipeline.processors.push(processor);
+ });
+
+ this.pipeline = pipeline;
+ })
+ .catch(notify.error);
+ } else {
+ this.pipeline = { processors: [] };
+ }
+ });
+ }
+ };
+ });
+
diff --git a/src/plugins/kibana/public/settings/sections/indices/add_data_steps/select_pipeline/styles/styles.less b/src/plugins/kibana/public/settings/sections/indices/add_data_steps/select_pipeline/styles/styles.less
new file mode 100644
index 00000000000000..e69de29bb2d1d6
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 b1a219a0ef4bc2..c3ca321fba4eb6 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
@@ -3,34 +3,39 @@
- 1. Paste
+ 1. New/Edit
- 2. Parse
+ ng-click="wizard.setCurrentStep(1)">
+ 2. Paste
- 3. Review
+ 3. Parse
- 4. Install Filebeat
+ 4. Review
+
+
+ 5. Install Filebeat
-
+
-
+
-
+
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 6de8287171bfff..91b4a8ec755017 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
@@ -4,6 +4,7 @@ import IngestProvider from 'ui/ingest';
import 'plugins/kibana/settings/sections/indices/add_data_steps/pattern_review_step';
import 'plugins/kibana/settings/sections/indices/add_data_steps/paste_samples_step';
import 'plugins/kibana/settings/sections/indices/add_data_steps/pipeline_setup';
+import 'plugins/kibana/settings/sections/indices/add_data_steps/select_pipeline';
import 'plugins/kibana/settings/sections/indices/add_data_steps/install_filebeat_step';
import '../../styles/_add_data_wizard.less';
@@ -24,7 +25,7 @@ modules.get('apps/settings')
location: 'Add Data'
});
- var totalSteps = 4;
+ var totalSteps = 5;
this.stepResults = {};
this.setCurrentStep = (step) => {
@@ -77,10 +78,10 @@ modules.get('apps/settings')
return safeConfirm('Going back will reset any changes you\'ve made to this step, do you want to continue?')
.then(
() => {
- if ($state.currentStep < 1) {
+ if ($state.currentStep < 2) {
delete this.stepResults.pipeline;
}
- if ($state.currentStep < 2) {
+ if ($state.currentStep < 3) {
delete this.stepResults.indexPattern;
}
this.currentStep = newValue;
diff --git a/src/plugins/kibana/server/lib/converters/ingest_pipeline_api_es_to_kibana_converter.js b/src/plugins/kibana/server/lib/converters/ingest_pipeline_api_es_to_kibana_converter.js
new file mode 100644
index 00000000000000..bd33b51257b9d1
--- /dev/null
+++ b/src/plugins/kibana/server/lib/converters/ingest_pipeline_api_es_to_kibana_converter.js
@@ -0,0 +1,14 @@
+import _ from 'lodash';
+import * as esToKibanaProcessorConverters from '../processors/es_to_kibana_converters';
+
+export default function ingestPipelineApiEsToKibanaConverter(pipelineEsDocument) {
+ const esProcessors = _.get(pipelineEsDocument, 'config.processors');
+ const result = {
+ processors: _.map(esProcessors, (processor) => {
+ const typeId = _.keys(processor)[0];
+ return esToKibanaProcessorConverters[typeId](processor[typeId]);
+ })
+ };
+
+ return result;
+}
diff --git a/src/plugins/kibana/server/lib/converters/ingest_pipeline_api_kibana_to_es_converter.js b/src/plugins/kibana/server/lib/converters/ingest_pipeline_api_kibana_to_es_converter.js
index b26f14de1224a0..647ed49e9f6cdb 100644
--- a/src/plugins/kibana/server/lib/converters/ingest_pipeline_api_kibana_to_es_converter.js
+++ b/src/plugins/kibana/server/lib/converters/ingest_pipeline_api_kibana_to_es_converter.js
@@ -1,5 +1,5 @@
import _ from 'lodash';
-import * as ingestProcessorApiKibanaToEsConverters from '../processors/converters';
+import * as ingestProcessorApiKibanaToEsConverters from '../processors/kibana_to_es_converters';
export default function ingestPipelineApiKibanaToEsConverter(pipelineApiDocument) {
return {
diff --git a/src/plugins/kibana/server/lib/processors/append/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/append/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..71f14d31a7eec0
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/append/es_to_kibana_converter.js
@@ -0,0 +1,8 @@
+export default function append(processorEsDocument) {
+ return {
+ typeId: 'append',
+ processor_id: processorEsDocument.tag,
+ target_field: processorEsDocument.field,
+ values: processorEsDocument.value
+ };
+}
diff --git a/src/plugins/kibana/server/lib/processors/convert/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/convert/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..db42dc49a4571d
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/convert/es_to_kibana_converter.js
@@ -0,0 +1,17 @@
+export default function convert(processorEsDocument) {
+ const types = {
+ //:
+ auto: 'auto',
+ float: 'number',
+ string: 'string',
+ boolean: 'boolean'
+ };
+
+ return {
+ typeId: 'convert',
+ processor_id: processorEsDocument.tag,
+ source_field: processorEsDocument.field,
+ target_field: processorEsDocument.target_field,
+ type: types[processorEsDocument.type]
+ };
+}
diff --git a/src/plugins/kibana/server/lib/processors/date/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/date/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..5176162c7a503c
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/date/es_to_kibana_converter.js
@@ -0,0 +1,27 @@
+const _ = require('lodash');
+
+export default function date(processorEsDocument) {
+ const standardFormats = ['ISO8601', 'UNIX', 'UNIX_MS', 'TAI64N'];
+
+ const formats = [];
+ let customFormat = '';
+ _.forEach(processorEsDocument.formats, (format) => {
+ if (_.contains(standardFormats, format.toUpperCase())) {
+ formats.push(format.toUpperCase());
+ } else {
+ formats.push('CUSTOM');
+ customFormat = format;
+ }
+ });
+
+ return {
+ typeId: 'date',
+ processor_id: processorEsDocument.tag,
+ source_field: processorEsDocument.field,
+ target_field: processorEsDocument.target_field,
+ formats: formats,
+ custom_format: customFormat,
+ timezone: processorEsDocument.timezone,
+ locale: processorEsDocument.locale
+ };
+}
diff --git a/src/plugins/kibana/server/lib/processors/es_to_kibana_converters.js b/src/plugins/kibana/server/lib/processors/es_to_kibana_converters.js
new file mode 100644
index 00000000000000..64c76f80d48495
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/es_to_kibana_converters.js
@@ -0,0 +1,14 @@
+export append from '../processors/append/es_to_kibana_converter';
+export convert from '../processors/convert/es_to_kibana_converter';
+export date from '../processors/date/es_to_kibana_converter';
+export geoip from '../processors/geoip/es_to_kibana_converter';
+export grok from '../processors/grok/es_to_kibana_converter';
+export gsub from '../processors/gsub/es_to_kibana_converter';
+export join from '../processors/join/es_to_kibana_converter';
+export lowercase from '../processors/lowercase/es_to_kibana_converter';
+export remove from '../processors/remove/es_to_kibana_converter';
+export rename from '../processors/rename/es_to_kibana_converter';
+export set from '../processors/set/es_to_kibana_converter';
+export split from '../processors/split/es_to_kibana_converter';
+export trim from '../processors/trim/es_to_kibana_converter';
+export uppercase from '../processors/uppercase/es_to_kibana_converter';
diff --git a/src/plugins/kibana/server/lib/processors/geoip/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/geoip/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..af7a5116dd523b
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/geoip/es_to_kibana_converter.js
@@ -0,0 +1,10 @@
+export default function geoip(processorEsDocument) {
+ return {
+ typeId: 'geoip',
+ processor_id: processorEsDocument.tag,
+ source_field: processorEsDocument.field,
+ target_field: processorEsDocument.target_field,
+ database_file: processorEsDocument.database_file,
+ database_fields: processorEsDocument.properties
+ };
+}
diff --git a/src/plugins/kibana/server/lib/processors/grok/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/grok/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..1fd6816015f070
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/grok/es_to_kibana_converter.js
@@ -0,0 +1,8 @@
+export default function grok(processorEsDocument) {
+ return {
+ typeId: 'grok',
+ processor_id: processorEsDocument.tag,
+ source_field: processorEsDocument.field,
+ pattern: processorEsDocument.pattern
+ };
+}
diff --git a/src/plugins/kibana/server/lib/processors/gsub/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/gsub/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..322b897bd8dc64
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/gsub/es_to_kibana_converter.js
@@ -0,0 +1,9 @@
+export default function gsub(processorEsDocument) {
+ return {
+ typeId: 'gsub',
+ processor_id: processorEsDocument.tag,
+ source_field: processorEsDocument.field,
+ pattern: processorEsDocument.pattern,
+ replacement: processorEsDocument.replacement
+ };
+}
diff --git a/src/plugins/kibana/server/lib/processors/join/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/join/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..47dfb1b0c1e848
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/join/es_to_kibana_converter.js
@@ -0,0 +1,8 @@
+export default function join(processorEsDocument) {
+ return {
+ typeId: 'join',
+ processor_id: processorEsDocument.tag,
+ source_field: processorEsDocument.field,
+ separator: processorEsDocument.separator
+ };
+}
diff --git a/src/plugins/kibana/server/lib/processors/converters.js b/src/plugins/kibana/server/lib/processors/kibana_to_es_converters.js
similarity index 100%
rename from src/plugins/kibana/server/lib/processors/converters.js
rename to src/plugins/kibana/server/lib/processors/kibana_to_es_converters.js
diff --git a/src/plugins/kibana/server/lib/processors/lowercase/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/lowercase/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..12619fec26f256
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/lowercase/es_to_kibana_converter.js
@@ -0,0 +1,7 @@
+export default function lowercase(processorEsDocument) {
+ return {
+ typeId: 'lowercase',
+ processor_id: processorEsDocument.tag,
+ source_field: processorEsDocument.field
+ };
+}
diff --git a/src/plugins/kibana/server/lib/processors/remove/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/remove/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..4ee979a28ffd1f
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/remove/es_to_kibana_converter.js
@@ -0,0 +1,7 @@
+export default function remove(processorEsDocument) {
+ return {
+ typeId: 'remove',
+ processor_id: processorEsDocument.tag,
+ source_field: processorEsDocument.field
+ };
+}
diff --git a/src/plugins/kibana/server/lib/processors/rename/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/rename/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..edbffff934ad56
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/rename/es_to_kibana_converter.js
@@ -0,0 +1,8 @@
+export default function rename(processorEsDocument) {
+ return {
+ typeId: 'rename',
+ processor_id: processorEsDocument.tag,
+ source_field: processorEsDocument.field,
+ target_field: processorEsDocument.target_field
+ };
+}
diff --git a/src/plugins/kibana/server/lib/processors/set/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/set/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..8a1a35538aa3e7
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/set/es_to_kibana_converter.js
@@ -0,0 +1,8 @@
+export default function set(processorEsDocument) {
+ return {
+ typeId: 'set',
+ processor_id: processorEsDocument.tag,
+ target_field: processorEsDocument.field,
+ value: processorEsDocument.value
+ };
+}
diff --git a/src/plugins/kibana/server/lib/processors/split/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/split/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..881b7a7316cbee
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/split/es_to_kibana_converter.js
@@ -0,0 +1,8 @@
+export default function split(processorEsDocument) {
+ return {
+ typeId: 'split',
+ processor_id: processorEsDocument.tag,
+ source_field: processorEsDocument.field,
+ separator: processorEsDocument.separator
+ };
+}
diff --git a/src/plugins/kibana/server/lib/processors/trim/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/trim/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..9a513601229e7a
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/trim/es_to_kibana_converter.js
@@ -0,0 +1,7 @@
+export default function trim(processorEsDocument) {
+ return {
+ typeId: 'trim',
+ processor_id: processorEsDocument.tag,
+ source_field: processorEsDocument.field
+ };
+}
diff --git a/src/plugins/kibana/server/lib/processors/uppercase/es_to_kibana_converter.js b/src/plugins/kibana/server/lib/processors/uppercase/es_to_kibana_converter.js
new file mode 100644
index 00000000000000..b6ec60cd8059f3
--- /dev/null
+++ b/src/plugins/kibana/server/lib/processors/uppercase/es_to_kibana_converter.js
@@ -0,0 +1,7 @@
+export default function uppercase(processorEsDocument) {
+ return {
+ typeId: 'uppercase',
+ processor_id: processorEsDocument.tag,
+ source_field: processorEsDocument.field
+ };
+}
diff --git a/src/plugins/kibana/server/routes/api/ingest/index.js b/src/plugins/kibana/server/routes/api/ingest/index.js
index 8b723c800946a0..8c95aa11c2cb1c 100644
--- a/src/plugins/kibana/server/routes/api/ingest/index.js
+++ b/src/plugins/kibana/server/routes/api/ingest/index.js
@@ -2,6 +2,7 @@ import { registerPost } from './register_post';
import { registerDelete } from './register_delete';
import { registerProcessors } from './register_processors';
import { registerSimulate } from './register_simulate';
+import { registerPipelines } from './register_pipelines';
import { registerData } from './register_data';
export default function (server) {
@@ -9,5 +10,6 @@ export default function (server) {
registerDelete(server);
registerProcessors(server);
registerSimulate(server);
+ registerPipelines(server);
registerData(server);
}
diff --git a/src/plugins/kibana/server/routes/api/ingest/register_pipelines.js b/src/plugins/kibana/server/routes/api/ingest/register_pipelines.js
new file mode 100644
index 00000000000000..16247270b644e6
--- /dev/null
+++ b/src/plugins/kibana/server/routes/api/ingest/register_pipelines.js
@@ -0,0 +1,54 @@
+import _ from 'lodash';
+import esToKibanaPipelineConverter from '../../../lib/converters/ingest_pipeline_api_es_to_kibana_converter';
+import handleESError from '../../../lib/handle_es_error';
+
+function handlePipelinesResponse(response) {
+ const pipelines = _.get(response, 'pipelines');
+ const results = _.map(pipelines, 'id');
+
+ return results;
+}
+
+function handlePipelineResponse(response) {
+ const esPipeline = _.get(response, 'pipelines[0]');
+ const kibanaPipeline = esToKibanaPipelineConverter(esPipeline);
+ return kibanaPipeline;
+}
+
+export function registerPipelines(server) {
+ server.route({
+ path: '/api/kibana/ingest/pipelines',
+ method: 'GET',
+ handler: function (request, reply) {
+ const boundCallWithRequest = _.partial(server.plugins.elasticsearch.callWithRequest, request);
+
+ return boundCallWithRequest('transport.request', {
+ path: '/_ingest/pipeline/*',
+ method: 'GET'
+ })
+ .then(handlePipelinesResponse)
+ .then(reply)
+ .catch((error) => {
+ reply(handleESError(error));
+ });
+ }
+ });
+
+ server.route({
+ path: '/api/kibana/ingest/pipeline/{id}',
+ method: 'GET',
+ handler: function (request, reply) {
+ const boundCallWithRequest = _.partial(server.plugins.elasticsearch.callWithRequest, request);
+
+ return boundCallWithRequest('transport.request', {
+ path: `/_ingest/pipeline/${request.params.id}`,
+ method: 'GET'
+ })
+ .then(handlePipelineResponse)
+ .then(reply)
+ .catch((error) => {
+ reply(handleESError(error));
+ });
+ }
+ });
+};
diff --git a/src/ui/public/ingest/ingest.js b/src/ui/public/ingest/ingest.js
index bee1cb564d3af3..9ec5f45ebbd440 100644
--- a/src/ui/public/ingest/ingest.js
+++ b/src/ui/public/ingest/ingest.js
@@ -71,4 +71,31 @@ export default function IngestProvider($rootScope, $http, config, $q) {
});
};
+ this.getPipelines = function () {
+ function unpack(response) {
+ return response.data;
+ }
+
+ return $http.get(`${ingestAPIPrefix}/pipelines`)
+ .then(unpack)
+ .catch(err => {
+ return $q.reject(new Error('Error fetching pipelines'));
+ });
+ };
+
+ this.getPipeline = function (id) {
+ function unpack(response) {
+ const pipeline = response.data;
+ pipeline.processors = _.map(pipeline.processors, processor => keysToCamelCaseShallow(processor));
+
+ return pipeline;
+ }
+
+ return $http.get(`${ingestAPIPrefix}/pipeline/${id}`)
+ .then(unpack)
+ .catch(err => {
+ return $q.reject(new Error('Error fetching pipeline'));
+ });
+ };
+
}