diff --git a/x-pack/plugins/ml/common/constants/file_datavisualizer.js b/x-pack/plugins/ml/common/constants/file_datavisualizer.js
new file mode 100644
index 000000000000..262e2a1a337a
--- /dev/null
+++ b/x-pack/plugins/ml/common/constants/file_datavisualizer.js
@@ -0,0 +1,8 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License;
+ * you may not use this file except in compliance with the Elastic License.
+ */
+
+
+export const MAX_BYTES = 104857600;
diff --git a/x-pack/plugins/ml/common/constants/license.js b/x-pack/plugins/ml/common/constants/license.js
new file mode 100644
index 000000000000..9f4b06bbbc95
--- /dev/null
+++ b/x-pack/plugins/ml/common/constants/license.js
@@ -0,0 +1,11 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License;
+ * you may not use this file except in compliance with the Elastic License.
+ */
+
+
+export const LICENSE_TYPE = {
+ BASIC: 0,
+ FULL: 1,
+};
diff --git a/x-pack/plugins/ml/index.js b/x-pack/plugins/ml/index.js
index cca3e97bdcd8..4a434ec515ca 100644
--- a/x-pack/plugins/ml/index.js
+++ b/x-pack/plugins/ml/index.js
@@ -24,6 +24,7 @@ import { filtersRoutes } from './server/routes/filters';
import { resultsServiceRoutes } from './server/routes/results_service';
import { jobServiceRoutes } from './server/routes/job_service';
import { jobAuditMessagesRoutes } from './server/routes/job_audit_messages';
+import { fileDataVisualizerRoutes } from './server/routes/file_data_visualizer';
export const ml = (kibana) => {
return new kibana.Plugin({
@@ -40,8 +41,9 @@ export const ml = (kibana) => {
euiIconType: 'machineLearningApp',
main: 'plugins/ml/app',
},
+ styleSheetPaths: `${__dirname}/public/index.scss`,
hacks: ['plugins/ml/hacks/toggle_app_link_in_nav'],
- home: ['plugins/ml/register_feature']
+ home: ['plugins/ml/register_feature'],
},
@@ -73,7 +75,7 @@ export const ml = (kibana) => {
const config = server.config();
return {
kbnIndex: config.get('kibana.index'),
- esServerUrl: config.get('elasticsearch.url')
+ esServerUrl: config.get('elasticsearch.url'),
};
});
@@ -91,6 +93,7 @@ export const ml = (kibana) => {
resultsServiceRoutes(server, commonRouteConfig);
jobServiceRoutes(server, commonRouteConfig);
jobAuditMessagesRoutes(server, commonRouteConfig);
+ fileDataVisualizerRoutes(server, commonRouteConfig);
}
});
diff --git a/x-pack/plugins/ml/public/app.js b/x-pack/plugins/ml/public/app.js
index ad76c56cfdf1..1af1b28286b9 100644
--- a/x-pack/plugins/ml/public/app.js
+++ b/x-pack/plugins/ml/public/app.js
@@ -32,6 +32,7 @@ import 'plugins/ml/components/confirm_modal';
import 'plugins/ml/components/nav_menu';
import 'plugins/ml/components/loading_indicator';
import 'plugins/ml/settings';
+import 'plugins/ml/file_datavisualizer';
import uiRoutes from 'ui/routes';
diff --git a/x-pack/plugins/ml/public/components/nav_menu/_index.scss b/x-pack/plugins/ml/public/components/nav_menu/_index.scss
new file mode 100644
index 000000000000..a5981e1022e1
--- /dev/null
+++ b/x-pack/plugins/ml/public/components/nav_menu/_index.scss
@@ -0,0 +1 @@
+@import 'nav_menu'
diff --git a/x-pack/plugins/ml/public/components/nav_menu/_nav_menu.scss b/x-pack/plugins/ml/public/components/nav_menu/_nav_menu.scss
new file mode 100644
index 000000000000..6b1be3c23839
--- /dev/null
+++ b/x-pack/plugins/ml/public/components/nav_menu/_nav_menu.scss
@@ -0,0 +1,4 @@
+.disabled-nav-link {
+ color: $euiColorMediumShade;
+ pointer-events: none;
+}
diff --git a/x-pack/plugins/ml/public/components/nav_menu/nav_menu.html b/x-pack/plugins/ml/public/components/nav_menu/nav_menu.html
index 837bd41b511a..345ed3bddb97 100644
--- a/x-pack/plugins/ml/public/components/nav_menu/nav_menu.html
+++ b/x-pack/plugins/ml/public/components/nav_menu/nav_menu.html
@@ -15,17 +15,25 @@
- Job Management
+ ng-class="{'kuiLocalTab-isSelected': isActiveTab('jobs'), 'disabled-nav-link': disableLinks}">
+ Job Management
+
- Anomaly Explorer
+ ng-class="{'kuiLocalTab-isSelected': isActiveTab('explorer'), 'disabled-nav-link': disableLinks}">
+ Anomaly Explorer
+
- Single Metric Viewer
+ ng-class="{'kuiLocalTab-isSelected': isActiveTab('timeseriesexplorer'), 'disabled-nav-link': disableLinks}">
+ Single Metric Viewer
+
+
+ Data Visualizer
+
- Settings
+ ng-class="{'kuiLocalTab-isSelected': isActiveTab('settings'), 'disabled-nav-link': disableLinks}">
+ Settings
+
diff --git a/x-pack/plugins/ml/public/components/nav_menu/nav_menu.js b/x-pack/plugins/ml/public/components/nav_menu/nav_menu.js
index 117a0fdc03b7..c9024fb41c3d 100644
--- a/x-pack/plugins/ml/public/components/nav_menu/nav_menu.js
+++ b/x-pack/plugins/ml/public/components/nav_menu/nav_menu.js
@@ -10,6 +10,7 @@ import _ from 'lodash';
import $ from 'jquery';
import template from './nav_menu.html';
import uiRouter from 'ui/routes';
+import { isFullLicense } from '../../license/check_license';
import { uiModules } from 'ui/modules';
const module = uiModules.get('apps/ml');
@@ -21,12 +22,16 @@ module.directive('mlNavMenu', function (breadcrumbState, config) {
template,
link: function (scope, el, attrs) {
+
+
// Tabs
scope.name = attrs.name;
scope.showTabs = false;
if (scope.name === 'jobs' ||
scope.name === 'settings' ||
+ scope.name === 'datavisualizer' ||
+ scope.name === 'filedatavisualizer' ||
scope.name === 'timeseriesexplorer' ||
scope.name === 'explorer') {
scope.showTabs = true;
@@ -35,6 +40,8 @@ module.directive('mlNavMenu', function (breadcrumbState, config) {
return scope.name === path;
};
+ scope.disableLinks = (isFullLicense() === false);
+
// Breadcrumbs
const crumbNames = {
jobs: { label: 'Job Management', url: '#/jobs' },
@@ -44,6 +51,7 @@ module.directive('mlNavMenu', function (breadcrumbState, config) {
population: { label: 'Population job', url: '' },
advanced: { label: 'Advanced Job Configuration', url: '' },
datavisualizer: { label: 'Data Visualizer', url: '' },
+ filedatavisualizer: { label: 'File Data Visualizer', url: '' },
explorer: { label: 'Anomaly Explorer', url: '#/explorer' },
timeseriesexplorer: { label: 'Single Metric Viewer', url: '#/timeseriesexplorer' },
settings: { label: 'Settings', url: '#/settings' },
diff --git a/x-pack/plugins/ml/public/datavisualizer/_index.scss b/x-pack/plugins/ml/public/datavisualizer/_index.scss
new file mode 100644
index 000000000000..af259ce363a5
--- /dev/null
+++ b/x-pack/plugins/ml/public/datavisualizer/_index.scss
@@ -0,0 +1 @@
+@import './selector/index';
diff --git a/x-pack/plugins/ml/public/datavisualizer/datavisualizer.html b/x-pack/plugins/ml/public/datavisualizer/datavisualizer.html
index 3719bafece2f..4a4b782602ad 100644
--- a/x-pack/plugins/ml/public/datavisualizer/datavisualizer.html
+++ b/x-pack/plugins/ml/public/datavisualizer/datavisualizer.html
@@ -11,7 +11,10 @@
-