diff --git a/docs/kibana-yml.asciidoc b/docs/kibana-yml.asciidoc index 2a5e7fc86dde2..ecc459b501475 100644 --- a/docs/kibana-yml.asciidoc +++ b/docs/kibana-yml.asciidoc @@ -14,6 +14,7 @@ to this Kibana instance. `kibana.index:`:: *Default: ".kibana"* Kibana uses an index in Elasticsearch to store saved searches, visualizations and dashboards. Kibana creates a new index if the index doesn’t already exist. `kibana.defaultAppId:`:: *Default: "discover"* The default application to load. +`kibana.addDataMaxBytes:`:: *Default: 1073741824* The maximum upload size in bytes for the CSV Upload wizard [[tilemap-settings]]`tilemap.url:`:: *Default: `"https://tiles.elastic.co/v1/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana"`* The URL to the tile service that Kibana uses to display map tiles in tilemap visualizations. `tilemap.options.minZoom:`:: *Default: 1* The minimum zoom level. diff --git a/src/core_plugins/kibana/index.js b/src/core_plugins/kibana/index.js index 516e8ce5e3d70..2187a9ff64216 100644 --- a/src/core_plugins/kibana/index.js +++ b/src/core_plugins/kibana/index.js @@ -14,10 +14,13 @@ module.exports = function (kibana) { return new kibana.Plugin({ id: 'kibana', config: function (Joi) { + const ONE_GIGABYTE = 1024 * 1024 * 1024; + return Joi.object({ enabled: Joi.boolean().default(true), defaultAppId: Joi.string().default('discover'), - index: Joi.string().default('.kibana') + index: Joi.string().default('.kibana'), + addDataMaxBytes: Joi.number().default(ONE_GIGABYTE) }).default(); }, @@ -41,7 +44,8 @@ module.exports = function (kibana) { let config = server.config(); return { kbnDefaultAppId: config.get('kibana.defaultAppId'), - tilemap: config.get('tilemap') + tilemap: config.get('tilemap'), + addDataMaxBytes: config.get('kibana.addDataMaxBytes') }; }, }, diff --git a/src/core_plugins/kibana/public/management/sections/indices/add_data_steps/parse_csv_step/parse_csv_step.html b/src/core_plugins/kibana/public/management/sections/indices/add_data_steps/parse_csv_step/parse_csv_step.html index 8c0a0d7812b4c..8532912bd3fd6 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/add_data_steps/parse_csv_step/parse_csv_step.html +++ b/src/core_plugins/kibana/public/management/sections/indices/add_data_steps/parse_csv_step/parse_csv_step.html @@ -9,7 +9,7 @@

Pick a CSV file to get started. -
Maximum upload file size: 1 GB
+
Maximum upload file size: {{ wizard.maxBytesFormatted }}
diff --git a/src/core_plugins/kibana/public/management/sections/indices/add_data_steps/parse_csv_step/parse_csv_step.js b/src/core_plugins/kibana/public/management/sections/indices/add_data_steps/parse_csv_step/parse_csv_step.js index 32cd5a7234a4b..a0922797d5371 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/add_data_steps/parse_csv_step/parse_csv_step.js +++ b/src/core_plugins/kibana/public/management/sections/indices/add_data_steps/parse_csv_step/parse_csv_step.js @@ -4,9 +4,10 @@ import modules from 'ui/modules'; import validateHeaders from './lib/validate_headers'; import template from './parse_csv_step.html'; import './styles/_add_data_parse_csv_step.less'; +import numeral from '@spalger/numeral'; modules.get('apps/management') - .directive('parseCsvStep', function () { + .directive('parseCsvStep', function (addDataMaxBytes) { return { restrict: 'E', template: template, @@ -21,6 +22,8 @@ modules.get('apps/management') const maxSampleRows = 10; const maxSampleColumns = 20; + this.maxBytesFormatted = numeral(addDataMaxBytes).format('0 b'); + this.delimiterOptions = [ { label: 'comma', @@ -55,6 +58,13 @@ modules.get('apps/management') this.formattedErrors = []; this.formattedWarnings = []; + if (this.file.size > addDataMaxBytes) { + this.formattedErrors.push( + `File size (${this.file.size} bytes) is greater than the configured limit of ${addDataMaxBytes} bytes` + ); + return; + } + const config = _.assign( { header: true, diff --git a/src/core_plugins/kibana/server/routes/api/ingest/register_data.js b/src/core_plugins/kibana/server/routes/api/ingest/register_data.js index 9172e5ba88d6a..979bace5c8260 100644 --- a/src/core_plugins/kibana/server/routes/api/ingest/register_data.js +++ b/src/core_plugins/kibana/server/routes/api/ingest/register_data.js @@ -6,16 +6,16 @@ import { patternToIngest } from '../../../../common/lib/convert_pattern_and_inge import { PassThrough } from 'stream'; import JSONStream from 'JSONStream'; -const ONE_GIGABYTE = 1024 * 1024 * 1024; - export function registerData(server) { + const maxBytes = server.config().get('kibana.addDataMaxBytes'); + server.route({ path: '/api/kibana/{id}/_data', method: 'POST', config: { payload: { output: 'stream', - maxBytes: ONE_GIGABYTE + maxBytes } }, handler: function (req, reply) {