Turnilo插件开发指南扩展平台功能的实用教程【免费下载链接】turniloBusiness intelligence, data exploration and visualization web application for Druid, formerly known as Swiv and Pivot项目地址: https://gitcode.com/gh_mirrors/tu/turniloTurnilo是一款强大的商业智能与数据可视化平台专为Druid设计。本教程将带您了解如何通过插件开发扩展Turnilo的核心功能包括请求装饰器、查询装饰器和后端插件三种实用扩展方式帮助您打造个性化的数据探索工具。 Turnilo扩展能力概览Turnilo提供三种主要扩展机制满足不同场景的定制需求请求装饰器为所有发送到Druid集群的查询添加自定义HTTP头查询装饰器修改Plywood查询逻辑实现数据权限控制等高级功能后端插件通过Express中间件扩展应用功能添加新路由或全局逻辑Turnilo直观的数据可视化界面插件可扩展其功能以满足特定业务需求️ 开发准备工作环境搭建克隆官方仓库git clone https://gitcode.com/gh_mirrors/tu/turnilo cd turnilo安装依赖npm install开发工具推荐Node.js (v14)TypeScript支持的IDE如VS Code熟悉Express.js框架 请求装饰器开发请求装饰器允许您为所有Druid查询添加自定义HTTP头适用于认证、追踪等场景。配置方式在集群配置文件中添加druidRequestDecorator: path: ./druid-request-decorator.js options: base: Pancakes extras: [maple-syrup, blueberries]实现示例创建druid-request-decorator.jsexports.version 1; exports.druidRequestDecoratorFactory function (logger, params) { const options params.options; const extras options.extras.join(, ); const like ${options.base} with ${extras}; return function () { return { headers: { X-I-Like: like }, }; }; };完整示例可参考项目中的example/request-decoration目录。 查询装饰器开发查询装饰器用于修改Plywood查询逻辑常见用途包括行级权限控制、数据过滤等。配置方式在数据立方体配置中添加dataCubes: - name: cube queryDecorator: path: ./decorator.js options: userColumnName: user_id实现示例创建decorator.js实现用户数据隔离exports.decorator function (expression, request, options, plywood) { const userId request.headers[x-user-id]; const userColumnName options.userColumnName; const filterClause plywood.$(userColumnName).in([userId]); return expression.substitute(e { if (e instanceof plywood.RefExpression e.name main) { return e.filter(filterClause); } return null; }); } 后端插件开发插件是最强大的扩展方式可通过Express中间件添加新功能、路由和全局逻辑。配置方式在主配置文件中添加plugins: - name: example_plugin path: ./plugin.js settings: favourite_number: 42实现示例创建plugin.js添加自定义日志功能exports.plugin function(app, pluginSettings, serverSettings, appSettings, logger) { app.use(function(req, res, next) { req.turniloMetadata.loggerContext.userAgent req.get(User-Agent); logger.info(Request from: ${req.turniloMetadata.loggerContext.userAgent}); next(); }); // 添加自定义路由 app.get(/api/custom-endpoint, (req, res) { res.json({ message: Hello from custom plugin!, favouriteNumber: pluginSettings.favourite_number }); }); } 插件开发最佳实践使用turniloMetadata在请求对象上安全存储数据避免污染请求头req.turniloMetadata.loggerContext.requestId generateUUID();日志记录使用提供的logger对象而非consolelogger.error(Plugin error, { error: err, requestId: req.turniloMetadata.loggerContext.requestId });配置验证始终验证插件设置if (!pluginSettings.apiKey) { throw new Error(API key is required for my-plugin); }文档化为您的插件创建详细README说明配置选项和使用场景 参考资源官方扩展文档docs/extending-turnilo.md配置示例config-examples.yaml服务器插件APIsrc/server/utils/plugin-loader/通过这些扩展机制您可以轻松定制Turnilo以满足特定业务需求从简单的请求头添加到复杂的数据权限控制Turnilo插件系统为您提供了无限可能。开始探索并构建属于您的Turnilo扩展吧【免费下载链接】turniloBusiness intelligence, data exploration and visualization web application for Druid, formerly known as Swiv and Pivot项目地址: https://gitcode.com/gh_mirrors/tu/turnilo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考