mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
[add data] adds the lowercase processor
This commit is contained in:
parent
335c82a022
commit
d42ac6ea12
8 changed files with 151 additions and 0 deletions
|
@ -6,4 +6,5 @@ import './processor_ui_geoip';
|
|||
import './processor_ui_grok';
|
||||
import './processor_ui_gsub';
|
||||
import './processor_ui_join';
|
||||
import './processor_ui_lowercase';
|
||||
import './processor_ui_set';
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
import uiModules from 'ui/modules';
|
||||
import _ from 'lodash';
|
||||
import keysDeep from '../lib/keys_deep';
|
||||
import template from '../views/processor_ui_lowercase.html';
|
||||
|
||||
const app = uiModules.get('kibana');
|
||||
|
||||
//scope.processor, scope.pipeline are attached by the process_container.
|
||||
app.directive('processorUiLowercase', function () {
|
||||
return {
|
||||
restrict: 'E',
|
||||
template: template,
|
||||
controller : function ($scope) {
|
||||
const processor = $scope.processor;
|
||||
const pipeline = $scope.pipeline;
|
||||
|
||||
function consumeNewInputObject() {
|
||||
$scope.fields = keysDeep(processor.inputObject);
|
||||
refreshFieldData();
|
||||
}
|
||||
|
||||
function refreshFieldData() {
|
||||
$scope.fieldData = _.get(processor.inputObject, processor.sourceField);
|
||||
}
|
||||
|
||||
function processorUiChanged() {
|
||||
pipeline.setDirty();
|
||||
}
|
||||
|
||||
$scope.$watch('processor.inputObject', consumeNewInputObject);
|
||||
|
||||
$scope.$watch('processor.sourceField', () => {
|
||||
refreshFieldData();
|
||||
processorUiChanged();
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
|
@ -201,6 +201,26 @@ export class Join extends Processor {
|
|||
}
|
||||
};
|
||||
|
||||
export class Lowercase extends Processor {
|
||||
constructor(processorId) {
|
||||
super(processorId, 'lowercase', 'Lowercase');
|
||||
this.sourceField = '';
|
||||
}
|
||||
|
||||
get description() {
|
||||
const source = this.sourceField || '?';
|
||||
return `[${source}]`;
|
||||
}
|
||||
|
||||
get model() {
|
||||
return {
|
||||
processorId: this.processorId,
|
||||
typeId: this.typeId,
|
||||
sourceField: this.sourceField || ''
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
export class Set extends Processor {
|
||||
constructor(processorId) {
|
||||
super(processorId, 'set', 'Set');
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
<div class="form-group">
|
||||
<label>Field:</label>
|
||||
<select
|
||||
class="form-control"
|
||||
ng-options="field as field for field in fields"
|
||||
ng-model="processor.sourceField">
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Field Data:</label>
|
||||
<pre>{{ fieldData }}</pre>
|
||||
</div>
|
|
@ -98,6 +98,15 @@ export function join(processorApiDocument) {
|
|||
};
|
||||
}
|
||||
|
||||
export function lowercase(processorApiDocument) {
|
||||
return {
|
||||
lowercase: {
|
||||
tag: processorApiDocument.processor_id,
|
||||
field: processorApiDocument.source_field
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export function set(processorApiDocument) {
|
||||
return {
|
||||
set: {
|
||||
|
|
|
@ -52,6 +52,11 @@ export const join = base.keys({
|
|||
separator: Joi.string().allow('')
|
||||
});
|
||||
|
||||
export const lowercase = base.keys({
|
||||
type_id: Joi.string().only('lowercase').required(),
|
||||
source_field: Joi.string().allow('')
|
||||
});
|
||||
|
||||
export const set = base.keys({
|
||||
type_id: Joi.string().only('set').required(),
|
||||
target_field: Joi.string().allow(''),
|
||||
|
|
64
test/unit/api/ingest/processors/_lowercase.js
Normal file
64
test/unit/api/ingest/processors/_lowercase.js
Normal file
|
@ -0,0 +1,64 @@
|
|||
define(function (require) {
|
||||
var Promise = require('bluebird');
|
||||
var _ = require('intern/dojo/node!lodash');
|
||||
var expect = require('intern/dojo/node!expect.js');
|
||||
|
||||
const testPipeline = {
|
||||
processors: [{
|
||||
processor_id: 'processor1',
|
||||
type_id: 'lowercase',
|
||||
source_field: 'foo'
|
||||
}],
|
||||
input: { foo: 'I am Mixed Case' }
|
||||
};
|
||||
|
||||
return function (bdd, scenarioManager, request) {
|
||||
bdd.describe('simulate - lowercase processor', () => {
|
||||
|
||||
bdd.it('should return 400 for an invalid payload', () => {
|
||||
return Promise.all([
|
||||
// processor requires source_field property
|
||||
request.post('/kibana/ingest/simulate')
|
||||
.send({
|
||||
processors: [{
|
||||
processor_id: 'processor1',
|
||||
type_id: 'lowercase',
|
||||
source_field: 1234
|
||||
}],
|
||||
input: { foo: 'I am Mixed Case' }
|
||||
})
|
||||
.expect(400)
|
||||
]);
|
||||
});
|
||||
|
||||
bdd.it('should return 200 for a valid simulate request', () => {
|
||||
return request.post('/kibana/ingest/simulate')
|
||||
.send(testPipeline)
|
||||
.expect(200);
|
||||
});
|
||||
|
||||
bdd.it('should return a simulated output with the correct result for the given processor', () => {
|
||||
return request.post('/kibana/ingest/simulate')
|
||||
.send(testPipeline)
|
||||
.expect(200)
|
||||
.then(function (response) {
|
||||
expect(response.body[0].output.foo).to.be('i am mixed case');
|
||||
});
|
||||
});
|
||||
|
||||
bdd.it('should enforce snake case', () => {
|
||||
return request.post('/kibana/ingest/simulate')
|
||||
.send({
|
||||
processors: [{
|
||||
processorId: 'processor1',
|
||||
typeId: 'lowercase',
|
||||
sourceField: 'foo'
|
||||
}],
|
||||
input: { foo: 'I am Mixed Case' }
|
||||
})
|
||||
.expect(400);
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
});
|
|
@ -6,6 +6,7 @@ define(function (require) {
|
|||
var grok = require('./_grok');
|
||||
var gsub = require('./_gsub');
|
||||
var join = require('./_join');
|
||||
var lowercase = require('./_lowercase');
|
||||
var set = require('./_set');
|
||||
|
||||
return function processors(bdd, scenarioManager, request) {
|
||||
|
@ -16,6 +17,7 @@ define(function (require) {
|
|||
grok(bdd, scenarioManager, request);
|
||||
gsub(bdd, scenarioManager, request);
|
||||
join(bdd, scenarioManager, request);
|
||||
lowercase(bdd, scenarioManager, request);
|
||||
set(bdd, scenarioManager, request);
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue