dashboard解析
plugins/dashboard/index.js 结构跟 visualize 类似,注册到 registry;设置两个调用 savedDashboards.get() 方法的 routes,提供一个叫 dashboard-app 的 directive。
savedDashboards 由 plugins/dashboard/services/saved_dashboard.js 提供,调用 es.search 获取数据,生成 savedDashboard 对象,这个对象同样也是继承 savedObject,主要内容是 panelsJSON 数组字段。实现如下:
module.factory('SavedDashboard', function (courier) {
_.class(SavedDashboard).inherits(courier.SavedObject);
function SavedDashboard(id) {
courier.SavedObject.call(this, {
type: SavedDashboard.type,
mapping: SavedDashboard.mapping,
searchSource: SavedDashboard.searchsource,
id: id,
defaults: {
title: 'New Dashboard',
hits: 0,
description: '',
panelsJSON: '[]',
version: 1,
timeRestore: false,
timeTo: undefined,
timeFrom: undefined
},
clearSavedIndexPattern: true
});
}可以注意到,这个 panelsJSON 是一个字符串,这跟之前 kibana_index 提到的是一致的。
dashboard-app 中,最重要的功能,是监听搜索框和过滤条件的变更,我们可以看到 init 函数中有下面这段:
在 index.html 里,实际承载面板的,是下面这行:
这也是一个 angular directive,通过加载 plugins/dashboard/directives/grid.js 引入的。其中添加面板相关的代码有两部分:
这段用来监听 $state.panels 数组,一旦有新增面板,调用 addPanel 函数。同理也有删除面板的,这里就不重复贴了。
而 addPanel 函数的实现大致如下:
这里即验证了之前 kibana_inex 小节中讲的 gridster 默认大小,又引入了一个新的 directive,叫 dashboard-panel。
dashboard-panel 在 plugins/dashboard/components/panel/panel.js 中实现,其中使用了 plugins/dashboard/components/panel/panel.html 页面。页面最后是这么一段:
这里使用的 savedObj 对象,来自 plugins/dashboard/components/panel/lib/load_panel.js 获取的 savedSearch 或者 savedVisualization。获得的对象,以 savedVisualization 为例:
而 visualize 和 doc-table 两个 directive。这两个正是之前在 visualize 和 discover 插件解析里提到过的,在 components/ 底下实现。
Last updated
Was this helpful?