diff --git a/x-pack/plugins/ml/.gitignore b/x-pack/plugins/ml/.gitignore index 8307d0840ef73..37660af74eb93 100644 --- a/x-pack/plugins/ml/.gitignore +++ b/x-pack/plugins/ml/.gitignore @@ -1,3 +1,4 @@ scripts/apidoc_scripts/ML_API.mdx +scripts/apidoc_scripts/ml_kibana_api.mdx scripts/apidoc_scripts/header.md apidoc_config.json diff --git a/x-pack/plugins/ml/package.json b/x-pack/plugins/ml/package.json index d45cf57a0302c..df3b357a415ee 100644 --- a/x-pack/plugins/ml/package.json +++ b/x-pack/plugins/ml/package.json @@ -7,6 +7,7 @@ "scripts": { "generateHeader": "node scripts/apidoc_scripts/header_generator/index.js", "generateApidocConfig": "node scripts/apidoc_scripts/apidoc_config/index.js", - "apiDocs": "yarn generateHeader && yarn generateApidocConfig && cd ./scripts/apidoc_scripts/ && ../../../../../node_modules/.bin/apidoc-markdown -i ../../server/routes -c ./apidoc_config.json -o ./ML_API.mdx --parse-workers apischema=./schema_worker/index.js --parse-parsers apischema=./schema_parser/index.js --parse-filters apiversion=./version_filter/index.js --header ./header.md --template ./template.md" + "generateContentPage": "node scripts/apidoc_scripts/content_page/index.js", + "apiDocs": "yarn generateContentPage && yarn generateHeader && yarn generateApidocConfig && cd ./scripts/apidoc_scripts/ && ../../../../../node_modules/.bin/apidoc-markdown -i ../../server/routes -c ./apidoc_config.json -o ./ML_API.mdx --parse-workers apischema=./schema_worker/index.js --parse-parsers apischema=./schema_parser/index.js --parse-filters apiversion=./version_filter/index.js --header ./header.md --template ./template.md" } -} \ No newline at end of file +} diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/content_page/content_page.ts b/x-pack/plugins/ml/scripts/apidoc_scripts/content_page/content_page.ts new file mode 100644 index 0000000000000..402a68c07e2d5 --- /dev/null +++ b/x-pack/plugins/ml/scripts/apidoc_scripts/content_page/content_page.ts @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as fs from 'fs'; +import * as path from 'path'; +// @ts-ignore can only be default-imported using the 'esModuleInterop' flag +import moment from 'moment'; +import { kibanaPackageJson } from '@kbn/repo-info'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { createDoc } from 'apidoc-light'; + +interface Group { + anchor: string; + text: string; +} + +const getContent = (groups: Group[]) => { + const groupsStr = groups + .map(({ anchor, text }) => `- `) + .join('\n'); + + return `--- + id: uiMlKibanaRestApi + slug: /ml-team/docs/ui/rest-api/ml-kibana-rest-api + title: Machine Learning Kibana REST API + image: https://source.unsplash.com/400x175/?Nature + description: This page contains documentation for the ML Kibana REST API. + date: ${moment().format('YYYY-MM-DD')} + tags: ['machine learning','internal docs', 'UI'] + --- + + _Updated for ${kibanaPackageJson.version}_ + + Some of the features of the Machine Learning (ML) Kibana plugin are provided via a REST API, which is ideal for creating an integration with the ML plugin. + + Each API is experimental and can include breaking changes in any version of the ML plugin, or might have been entirely removed from the plugin. + + - + + The following APIs are available: + +${groupsStr} + `; +}; + +export const generateContentPage = () => { + const doc = createDoc({ + src: path.resolve(__dirname, '..', '..', '..', 'server', 'routes'), + config: path.resolve(__dirname, '..', 'apidoc_config', 'apidoc.json'), + // if you don't want to generate the output files: + dryRun: true, + // if you don't want to see any log output: + silent: true, + }); + + const groups = [...new Set(doc.data.map((v) => v.group))].map((group) => { + return { + anchor: `-${group.toLowerCase()}`, + text: group.replace(/([a-z])([A-Z])/g, '$1 $2'), + }; + }); + + fs.writeFileSync(path.resolve(__dirname, '..', 'ml_kibana_api.mdx'), getContent(groups)); +}; diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/content_page/index.js b/x-pack/plugins/ml/scripts/apidoc_scripts/content_page/index.js new file mode 100644 index 0000000000000..5b0aced7aed1b --- /dev/null +++ b/x-pack/plugins/ml/scripts/apidoc_scripts/content_page/index.js @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +require('../../../../../../src/setup_node_env'); +require('./content_page').generateContentPage();