mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 09:19:04 -04:00
Backport PR #8228
---------
**Commit 1:**
Make CSV upload limit configurable
Kibana's Upload CSV feature isn't intended for gigantic import jobs, so
I originally set a sane default of 1GB. Some users exprssed a desire to
import slightly larger files, they should be able to import something
that's 1.1GB without being blocked by an arbitrary limit. So I've made
the limit configurable via kibana.yml.
This change includes a few pieces:
* Added optional `kibana.addDataMaxBytes` key to kibana.yml with 1GB
default
* Set upload data route payload limit based on new config value
* Updated help text in UI to use the dynamic config value on the parse
csv page
* Updated parse csv page to check file size and fail early if the
selected file is too big
Resolves: https://github.com/elastic/kibana/issues/7671
* Original sha: 0503aa8a31
* Authored by Matthew Bargar <mbargar@gmail.com> on 2016-09-12T18:13:44Z
This commit is contained in:
parent
79b09dcf74
commit
425c66b69d
5 changed files with 22 additions and 7 deletions
|
@ -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.
|
||||
|
|
|
@ -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')
|
||||
};
|
||||
},
|
||||
},
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<button class="btn btn-primary btn-lg controls upload" ng-click>
|
||||
Select File
|
||||
</button>
|
||||
<div>Maximum upload file size: 1 GB</div>
|
||||
<div>Maximum upload file size: {{ wizard.maxBytesFormatted }}</div>
|
||||
</div>
|
||||
</file-upload>
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue