[toc]
@qn-pandora/app-sdk
提供了引用 Pandora 平台的基础能力的 Manager、工具包等。
1 Manager
1.1 SearchManager
对 Pandora 平台搜索相关 API 进行封装
使用方式
import { SearchManager } from '@qn-pandora/app-sdk'
const searchCondition = {
queryString: 'repo="testjwzfr"',
time: {
start: 0,
end: 1589770122581
}
}
const option = {
task: {
event: true,
summary: true,
timeline: true,
result: true
}
}
const searchManager = new SearchManager({
searchCondition,
option
})
searchManager.on('done', data => {
console.log('data', data)
})
searchManager.search()
import { SearchManager } from '@qn-pandora/app-sdk'
const searchCondition = {
queryString: 'repo="testjwzfr"',
time: {
start: 0,
end: 1589770122581
}
}
const option = {
task: {
event: true,
summary: true,
timeline: true,
result: true
}
}
const searchManager = new SearchManager({
option
})
searchManager.on('done', data => {
console.log('data', data)
})
searchManager.search(searchCondition)
import { SearchManager } from '@qn-pandora/app-sdk'
const searchCondition = {
queryString: 'repo="testjwzfr"',
time: {
start: 0,
end: 1589770122581
}
}
const option = {
task: {
event: true,
summary: true,
timeline: true,
result: true
}
}
const searchManager = new SearchManager({
option
})
const jobId = await searchManager.search(searchCondition)
searchManager.on('done', data => {
const event = searchMangeer.getEvent(jobId)
console.log('event', event)
})
参数介绍
-
searchCondition
- queryString: 搜索条件
- time: 搜索时间范围
- start 搜索开始时间,时间戳
- end 搜索结束时间,时间戳
- preview: 可选,是否预览数据,默认值为 true
- mode: 可选,搜索模式 "fast" | "smart" | "detailed", 默认值为"smart"
-
option
- task,任务选项,根据需要开启特定任务进行计算
- event: 事件信息
- timeline: 时间柱
- summary: 字段汇总统计
- result: 聚合计算结果
方法
- search()
开启搜索任务,参数为 searchCondition,是可选项,不填则使用创建 searchManager 时的 searchCondition。该函数是个 Promise 函数,返回创建好任务的 jobId。
- getEvent(jobId) 获取事件信息结果
- getTimeline(jobId) 获取时间柱结果
- getSummary(jobId) 获取字段汇总统计结果
- getResult(jobID) 获取聚合计算结果
- stop() 停止当前任务
事件
可通过 on 函数注册监听事件回调函数
- data
每一次轮训数据结束触发,当开启 preview 时,可获取到中间结果
- done
轮训结束后触发,当搜索结果全部返回后触发回调,可直接在回调函数中获取完整搜索结果
- error
轮训发生错误时触发,可获取到错误信息
1.2 LoginManager
对 Pandora 平台登录相关 API 进行封装
使用方式
import { LoginManager, ELoginType } from '@qn-pandora/app-sdk'
const loginManager = new LoginManager(ELoginType.PANDORA)
loginManager.login({
username: 'admin',
password: 'admin'
})
import { LoginManager, ELoginType } from '@qn-pandora/app-sdk'
const loginManager = new LoginManager(ELoginType.SSO)
loginManager.login({
token:
'MjNGNDEweHdnQ2pOWVpuNFpINkkzUVJQZ0I0MnBab2RNTGt6UGcya0h0aUFpVVNGOjcxNzdmNjRhN2RmZDdjN2UxMGQ1MmRiNmQxYmZkNGU0NjJlNzU3NDdhNjU1NGMyNzJlMzMwODgyNzFiY2IzODMyZGJiZTA1YTM4OWI3NDIyOTgxODkwZGYzYjMxYWI2NTk2OTY0MmI1NDZjMjMxZDRiZjNlZGE3YWMyYjc4MzFj'
})
支持方法
方法返回都为 Promise
- login 登录
- logout 登出
- getUserInfo 获取用户信息
1.3 ReportManager
对 Pandora 平台报表管理相关 API 进行封装
使用方式
import { ReportManager } from '@qn-pandora/app-sdk'
const fetchAll = true
const pageSize = 20
const reportManager = new ReportManager(fetchAll, pageSize)
const lists = await reportManager.listReports()
const reportId = '0'
const info = await reportManager.getReport(reportId)
const report = {
name: 'testReport',
time: {
global: false,
preset: 'AllTime'
},
spl: 'repo="tracing" | stats count() by host | where count > 10',
description: 'description'
}
const res = await reportManager.createReport(report)
const report = {
name: 'testReport',
time: {
global: false,
preset: 'AllTime'
},
spl: 'repo="tracing" | stats count() by host | where count > 10',
description: 'updated description'
}
const res = await reportManager.updateReport(report)
const reportId = '0'
const res = await reportManager.deleteReport(reportId)
参数介绍
-
创建 reportManager 时的参数
- fetchAll: 是否拉取所有报表,默认值为 false,默认拉取 500 条,可通过设置 pageSize 改变拉取所有的数目
- pageSize: 每页拉取数目,默认为 10
-
创建及更新 report 的参数
- name: 报表名称
- time: 报表时间范围
- spl: 搜索条件
- descrption: 描述
1.4 DatasetManager
对 Pandora 平台数据集管理相关 API 进行封装
使用方式
import { DatasetManager } from '@qn-pandora/app-sdk'
const fetchAll = true
const pageSize = 20
const datasetManager = new DatasetManager(fetchAll, pageSize)
const list = await datasetManager.listDatasets()
const datasetId = '0'
const info = await getDataset(datasetId)
const baseDataset = {
name: 'ds1',
description: 'description',
category: 'c1',
transforms: [{ type: 'fields', fields: ['field1'] }],
schemas: [{ name: 'name', type: 'long' }],
dataSource: {
query: 'query_string',
time: {
relative: 'relative',
preset: 'preset',
timeShift: 'timeShift',
global: true
}
}
}
const res = await datasetManager.createDataset(baseDataset)
const baseDataset = {
name: 'ds1',
description: 'description',
category: 'c1',
transforms: [{ type: 'fields', fields: ['field1'] }],
schemas: [{ name: 'name', type: 'long' }],
dataSource: {
query: 'query_string',
time: {
relative: 'relative',
preset: 'preset',
timeShift: 'timeShift',
global: true
}
}
}
const res = await datasetManager.updateDataset(baseDataset)
const datasetId = '0'
const res = await deleteDataset(datasetId)
const categories = ['c1', 'c2']
const res = await datasetManager.setCategories(categories)
const list = await datasetManager.listCategory()
const datasetId = '0'
const datasetSpl = await datasetManager.getDatasetSpl(datasetId)
const transforms = {
type: 'fields',
fields: ['f1', 'f2']
}
const transformSpl = await datasetManager.getTransformSpl(transforms)
参数介绍
-
创建 datasetManager 时的参数
- fetchAll: 是否拉取所有报表,默认值为 false,默认拉取 500 条,可通过设置 pageSize 改变拉取所有的数目
- pageSize: 每页拉取数目,默认为 10
-
baseDataset
- name: 数据集名字
- description: 数据集描述
- category: 数据集类型
- transforms: 数据集中操作
- schemas: 数据集字段
- dataSource: 数据集数据源
1.5 RepoManager
对 Pandora 平台仓库管理相关 API 进行封装
使用方式
import { RepoManager } from '@qn-pandora/app-sdk'
const fetchAll = true
const pageSize = 20
const repoManager = new RepoManager(fetchAll, pageSize)
const list = await repoManager.listRepos()
const repoName = 'repo'
const info = await repoManager.getRepo(repoName)
const repo = {
name: 'repo',
description: 'desciption',
retention: -1
}
const res = await repoManager.createRepo(repo)
const repo = {
name: 'repo',
description: 'updated desciption',
retention: -1
}
const res = await reportManager.updateReport(report)
const repoName = 'repo'
const res = await reportManager.deleteRepo(repoName)
参数介绍
-
创建 repoManager 时的参数
- fetchAll: 是否拉取所有报表,默认值为 false,默认拉取 500 条,可通过设置 pageSize 改变拉取所有的数目
- pageSize: 每页拉取数目,默认为 10
-
repo
- name: 仓库名称
- description: 仓库描述
- retention: 存储时限
1.6 SourceTypeManager
对 Pandora 平台来源管理相关 API 进行封装
使用方式
- 创建 SourceTypeManager 传递参数
import { SourceTypeManager } from '@qn-pandora/app-sdk'
const fetchAll = true
const pageSize = 20
const sourceTypeManager = new SourceTypeManager(fetchAll, pageSize)
const list = await sourceTypeManager.listSourceType()
const sourceTypeName = 'sourceType'
const info = await sourceTypeManager.getSourceTypeByName(sourceTypeName)
const sourceType = {
name: 'sourceType',
description: 'desciption',
category: 'c1',
line: {
type: 'auto'
},
datetime: {
type: 'now'
}
advance: {
charset: 'utf-8',
fieldDiscovery: false
}
}
const res = await sourceTypeManager.createSourceType(sourceType)
const sourceTypeName = 'sourceType'
const res = await sourceTypeManager.deleteSourceType(sourceTypeName)
参数介绍
1.7 PermissionManager
对 Pandora 平台应用权限管理相关 API 进行封装
使用方式
import { PermissionManager } from '@qn-pandora/app-sdk'
const appName = 'appName'
const permissionManager = new PermissionManager(appName)
const operations = await permissionManager.getFuncOperations('func1')
const rolePerms = await permissionManager.getKnowledgePerm('func1', '1')
const rolePerms = [
{
role: 'role0',
operation: 'list'
},
{
role: 'role1',
operation: 'edit'
}
]
const res = await permissionManager.updateKnowledgePerm('func1', '1', rolePerms)
const rolePerms = [
{
role: 'role0',
operation: 'list'
},
{
role: 'role1',
operation: 'edit'
}
]
const res = await permissionManager.bulkUpdateKnowledgePerm(
'func1',
['0', '1'],
rolePerms
)
2 Utils
2.1 bind
bind 装饰器用于为装饰的函数绑定 this 指针
使用方式
在类中装饰类的方法:
import { utils } from '@qn-pandora/app-sdk'
const { bind } = utils
export class SomeClass extends UpperClass {
@bind
someFunction() {
this.setData(someData)
}
}
注意事项
bind 装饰过的函数在被重载时,不可在重载函数中调用父集的当前函数,会导致父集的当前函数 this 指针异常。
3 Components
自定义 Pandora 应用平台视图页面的组件。开发自定义组件不受前端开发框架限制,可以是 react, vue, Angular, jquery 等任意框架开发。唯一的限制在于:最终开发的自定义组件的 js bundle 需要被打包成 umd 模块。
Pandora 平台的视图页面引用自定义组件示例如下:
<custom-component src="<js_bundle_name>.js" />
3.1 BaseComponent
自定义 Pandora 应用平台的展示组件的基类,自定义的展示组件必须继承子该组件。
展示组件与输入组件的区别:
展示组件: 一般为接受属性,只做相应的展示,组件内部不做数据录入,即使做数据录入,也不会向组件外部传递。例如:Table, List, Tooltip, Avatar 等...
输入组件: 一般接受数据录入,且会把响应的信息传递到组件外部。例如:Input, Checkbox, DatePicker 等...
属性与方法说明
interface IComponentContext {
appName: string
}
abstract class BaseComponent {
element: Element
get staticPath(): string
context: IComponentContext
initialize(): void
resize(): void
abstract render(params: any): void
dispose(): void
constructor(element: Element, context: IComponentContext)
}
示例(React)
import React from 'react'
import ReactDOM from 'react-dom'
import { BaseComponent } from '@qn-pandora/app-sdk'
import List from './List'
export default class extends BaseComponent {
render() {
ReactDOM.render(<List />, this.element)
}
}
3.2 BaseInput
自定义 Pandora 应用平台的输入组件的基类,自定义的输入组件必须继承子该组件。
BaseInput 是一种特殊的 BaseComponent,BaseInput 继承自 BaseComponent。
属性与方法说明
interface IBaseInputParams<T> {
value: T
onChange: (value: T) => void
[key: string]: any
}
export default abstract class BaseInput<T> extends BaseComponent {
abstract render(params: IBaseInputParams<T>): void
}
示例(React)
import React from 'react'
import ReactDOM from 'react-dom'
import { BaseInput } from '@qn-pandora/app-sdk'
import Search from './Search'
interface IParams {
value: string
onChange: (value: string) => void
}
export default class extends BaseInput<string> {
render(params: IParams) {
ReactDOM.render(
<Search value={params.value} onChange={params.onChange} />,
this.element
)
}
}
4 Module
4.1 renderPandoraModule
渲染潘多拉平台的模块(/页面)
使用方式
将潘多拉平台的数据集页面渲染进 id 为 moduleContainer 的 div 内
import { renderPandoraModule, EModuleType } from '@qn-pandora/app-sdk'
export default class extends BasicComponent {
datasetContainerRef = React.createRef()
componentDidMount() {
renderPandoraModule(
EModuleType.DatasetModule,
this.datasetContainerRef.current,
{
basePath: 'http://pandora-express-rc.qiniu.io/apps/application/demoapp'
}
)
}
render() {
return <div ref={this.datasetContainerRef} id="moduleContainer" />
}
}
参数介绍
renderPandoraModule(<module name>, <dom> [, options])
- module name (类型:string)
要渲染的模块(/页面)的名称。
import { EModuleType } from '@qn-pandora/app-sdk'
中的EModuleType
包含了所有模块(/页面)的名称
模块名 | 说明 |
---|
EModuleType.DatasetModule | 渲染 Pandora 平台上面的数据集页面 |
EModuleType.SearchModule | 渲染 Pandora 平台上面的搜索分析页面 |
EModuleType.DashboardModule | 渲染 Pandora 平台上面的仪表盘管理页面 |
EModuleType.TaskExportModule | 渲染 Pandora 平台上面的仪表盘定时任务页面 |
EModuleType.MonitorManageModule | 渲染 Pandora 平台上面的监听采集页面 |
EModuleType.RepoModule | 渲染 Pandora 平台上面的仓库管理页面 |
EModuleType.SourceTypeModule | 渲染 Pandora 平台上面的来源管理页面 |
EModuleType.FieldModule | 渲染 Pandora 平台上面的解析管理页面 |
EModuleType.ReportModule | 渲染 Pandora 平台上面的报表管理页面 |
EModuleType.AlertRulesModule | 渲染 Pandora 平台上面的告警规则页面 |
EModuleType.AlertEventsModule | 渲染 Pandora 平台上面的告警事件页面 |
- dom (类型:Element)
将模块(/页面)渲染到该 dom 里面
- options (类型:Object)
参数 | 类型 | 说明 |
---|
options.basePath | string | 在 Pandora 平台上基于该 url 切换路由 |