From 0aa891188739e949919969722d0cd491c5404176 Mon Sep 17 00:00:00 2001 From: Spencer Date: Thu, 8 Oct 2020 14:40:50 -0700 Subject: [PATCH] [7.10] [kbn/optimizer] bump low or add missing limits when updating automatically (#80013) (#80044) Co-authored-by: spalger # Conflicts: # packages/kbn-optimizer/limits.yml --- packages/kbn-optimizer/limits.yml | 198 +++++++++--------- packages/kbn-optimizer/src/limits.ts | 38 +++- .../src/optimizer/get_output_stats.ts | 2 +- .../src/optimizer/optimizer_config.ts | 2 +- 4 files changed, 130 insertions(+), 110 deletions(-) diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 98558fb556c77e..4808eaf53f3d1f 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -1,100 +1,100 @@ pageLoadAssetSize: - advancedSettings: 27_596 - alerts: 106_936 - apm: 64_385 - apmOss: 18_996 - beatsManagement: 188_135 - bfetch: 41_874 - canvas: 1_065_624 - charts: 159_211 - cloud: 21_076 - console: 46_235 - core: 692_646 - crossClusterReplication: 65_408 - dashboard: 374_267 - dashboardEnhanced: 65_646 - dashboardMode: 22_716 - data: 1_174_083 - dataEnhanced: 50_420 - devTools: 38_781 - discover: 105_147 - discoverEnhanced: 42_730 - embeddable: 242_671 - embeddableEnhanced: 41_145 - enterpriseSearch: 35_741 - esUiShared: 326_798 - expressions: 224_120 - features: 31_211 - fileUpload: 24_717 - globalSearch: 43_548 - globalSearchBar: 62_888 - globalSearchProviders: 25_554 - graph: 31_504 - grokdebugger: 26_779 - home: 41_661 - indexLifecycleManagement: 107_090 - indexManagement: 662_506 - indexPatternManagement: 154_366 - infra: 197_873 - ingestManager: 415_829 - ingestPipelines: 58_003 - inputControlVis: 172_819 - inspector: 148_999 - kibanaLegacy: 107_855 - kibanaOverview: 56_426 - kibanaReact: 162_353 - kibanaUtils: 198_829 - lens: 96_624 - licenseManagement: 41_961 - licensing: 39_008 - lists: 183_665 - logstash: 53_548 - management: 46_112 - maps: 183_754 - mapsLegacy: 116_961 - mapsLegacyLicensing: 20_214 - ml: 82_187 - monitoring: 268_758 - navigation: 37_413 - newsfeed: 42_228 - observability: 89_709 - painlessLab: 179_892 - regionMap: 66_098 - remoteClusters: 51_327 - reporting: 183_418 - rollup: 97_204 - savedObjects: 108_662 - savedObjectsManagement: 100_503 - searchprofiler: 67_224 - security: 189_428 - securityOss: 30_806 - securitySolution: 622_387 - share: 99_205 - snapshotRestore: 79_176 - spaces: 389_643 - telemetry: 91_832 - telemetryManagementSection: 52_443 - tileMap: 65_337 - timelion: 29_920 - transform: 41_151 - triggersActionsUi: 170_145 - uiActions: 95_074 - uiActionsEnhanced: 349_799 - upgradeAssistant: 80_967 - uptime: 40_825 - urlDrilldown: 34_174 - urlForwarding: 32_579 - usageCollection: 39_762 - visDefaultEditor: 50_178 - visTypeMarkdown: 30_896 - visTypeMetric: 42_790 - visTypeTable: 95_078 - visTypeTagcloud: 37_575 - visTypeTimelion: 51_933 - visTypeTimeseries: 155_347 - visTypeVega: 153_861 - visTypeVislib: 242_982 - visTypeXy: 20_255 - visualizations: 295_169 - visualize: 57_433 - watcher: 43_742 + advancedSettings: 27596 + alerts: 106936 + apm: 64385 + apmOss: 18996 + beatsManagement: 188135 + bfetch: 41874 + canvas: 1065624 + charts: 159211 + cloud: 21076 + console: 46235 + core: 692646 + crossClusterReplication: 65408 + dashboard: 374267 + dashboardEnhanced: 65646 + dashboardMode: 22716 + data: 1174083 + dataEnhanced: 50420 + devTools: 38781 + discover: 105147 + discoverEnhanced: 42730 + embeddable: 242671 + embeddableEnhanced: 41145 + enterpriseSearch: 35741 + esUiShared: 326798 + expressions: 224120 + features: 31211 + fileUpload: 24717 + globalSearch: 43548 + globalSearchBar: 62888 + globalSearchProviders: 25554 + graph: 31504 + grokdebugger: 26779 + home: 41661 + indexLifecycleManagement: 107090 + indexManagement: 662506 + indexPatternManagement: 154366 + infra: 197873 + ingestManager: 415829 + ingestPipelines: 58003 + inputControlVis: 172819 + inspector: 148999 + kibanaLegacy: 107855 + kibanaOverview: 56426 + kibanaReact: 162353 + kibanaUtils: 198829 + lens: 96624 + licenseManagement: 41961 + licensing: 39008 + lists: 183665 + logstash: 53548 + management: 46112 + maps: 183754 + mapsLegacy: 116961 + mapsLegacyLicensing: 20214 + ml: 82187 + monitoring: 268758 + navigation: 37413 + newsfeed: 42228 + observability: 89709 + painlessLab: 179892 + regionMap: 66098 + remoteClusters: 51327 + reporting: 183418 + rollup: 97204 + savedObjects: 108662 + savedObjectsManagement: 100503 + searchprofiler: 67224 + security: 189428 + securityOss: 30806 + securitySolution: 622387 + share: 99205 + snapshotRestore: 79176 + spaces: 389643 + telemetry: 91832 + telemetryManagementSection: 52443 + tileMap: 65337 + timelion: 29920 + transform: 41151 + triggersActionsUi: 170145 + uiActions: 95074 + uiActionsEnhanced: 349799 + upgradeAssistant: 80967 + uptime: 40825 + urlDrilldown: 34174 + urlForwarding: 32579 + usageCollection: 39762 + visDefaultEditor: 50178 + visTypeMarkdown: 30896 + visTypeMetric: 42790 + visTypeTable: 95078 + visTypeTagcloud: 37575 + visTypeTimelion: 51933 + visTypeTimeseries: 155347 + visTypeVega: 153861 + visTypeVislib: 242982 + visTypeXy: 20255 + visualizations: 295169 + visualize: 57433 + watcher: 43742 diff --git a/packages/kbn-optimizer/src/limits.ts b/packages/kbn-optimizer/src/limits.ts index 4040a0c37d3b60..b0fae0901251d4 100644 --- a/packages/kbn-optimizer/src/limits.ts +++ b/packages/kbn-optimizer/src/limits.ts @@ -23,19 +23,28 @@ import dedent from 'dedent'; import Yaml from 'js-yaml'; import { createFailError, ToolingLog } from '@kbn/dev-utils'; -import { OptimizerConfig, getMetrics } from './optimizer'; +import { OptimizerConfig, getMetrics, Limits } from './optimizer'; const LIMITS_PATH = require.resolve('../limits.yml'); const DEFAULT_BUDGET = 15000; const diff = (a: T[], b: T[]): T[] => a.filter((item) => !b.includes(item)); -export function readLimits() { - return Yaml.safeLoad(Fs.readFileSync(LIMITS_PATH, 'utf8')); +export function readLimits(): Limits { + let yaml; + try { + yaml = Fs.readFileSync(LIMITS_PATH, 'utf8'); + } catch (error) { + if (error.code !== 'ENOENT') { + throw error; + } + } + + return yaml ? Yaml.safeLoad(yaml) : {}; } export function validateLimitsForAllBundles(log: ToolingLog, config: OptimizerConfig) { - const limitBundleIds = Object.keys(config.limits.pageLoadAssetSize); + const limitBundleIds = Object.keys(config.limits.pageLoadAssetSize || {}); const configBundleIds = config.bundles.map((b) => b.id); const missingBundleIds = diff(configBundleIds, limitBundleIds); @@ -56,7 +65,11 @@ export function validateLimitsForAllBundles(log: ToolingLog, config: OptimizerCo ${issues.join('\n ')} - To validate your changes locally, run: + To automatically update the limits file locally run: + + node scripts/build_kibana_platform_plugins.js --update-limits + + To validate your changes locally run: node scripts/build_kibana_platform_plugins.js --validate-limits ` + '\n' @@ -69,15 +82,22 @@ export function validateLimitsForAllBundles(log: ToolingLog, config: OptimizerCo export function updateBundleLimits(log: ToolingLog, config: OptimizerConfig) { const metrics = getMetrics(log, config); - const number = (input: number) => input.toLocaleString('en').split(',').join('_'); + const pageLoadAssetSize: NonNullable = {}; - let yaml = `pageLoadAssetSize:\n`; for (const metric of metrics.sort((a, b) => a.id.localeCompare(b.id))) { if (metric.group === 'page load bundle size') { - yaml += ` ${metric.id}: ${number(metric.value + DEFAULT_BUDGET)}\n`; + const existingLimit = config.limits.pageLoadAssetSize?.[metric.id]; + pageLoadAssetSize[metric.id] = + existingLimit != null && existingLimit >= metric.value + ? existingLimit + : metric.value + DEFAULT_BUDGET; } } - Fs.writeFileSync(LIMITS_PATH, yaml); + const newLimits: Limits = { + pageLoadAssetSize, + }; + + Fs.writeFileSync(LIMITS_PATH, Yaml.safeDump(newLimits)); log.success(`wrote updated limits to ${LIMITS_PATH}`); } diff --git a/packages/kbn-optimizer/src/optimizer/get_output_stats.ts b/packages/kbn-optimizer/src/optimizer/get_output_stats.ts index 24847a03edb522..cc4cd05f42c3f5 100644 --- a/packages/kbn-optimizer/src/optimizer/get_output_stats.ts +++ b/packages/kbn-optimizer/src/optimizer/get_output_stats.ts @@ -101,7 +101,7 @@ export function getMetrics(log: ToolingLog, config: OptimizerConfig) { group: `page load bundle size`, id: bundle.id, value: entry.stats!.size, - limit: config.limits.pageLoadAssetSize[bundle.id], + limit: config.limits.pageLoadAssetSize?.[bundle.id], limitConfigPath: `packages/kbn-optimizer/limits.yml`, }, { diff --git a/packages/kbn-optimizer/src/optimizer/optimizer_config.ts b/packages/kbn-optimizer/src/optimizer/optimizer_config.ts index 01a20bec52a042..b685d6ea015913 100644 --- a/packages/kbn-optimizer/src/optimizer/optimizer_config.ts +++ b/packages/kbn-optimizer/src/optimizer/optimizer_config.ts @@ -35,7 +35,7 @@ import { filterById } from './filter_by_id'; import { readLimits } from '../limits'; export interface Limits { - pageLoadAssetSize: { + pageLoadAssetSize?: { [id: string]: number | undefined; }; }