Sense app duplicator

标签:模板、感觉、复制、应用
使用其他应用程序作为模板创建新 Sense 应用程序的服务。包括完整的网络用户界面。
QCS 测试:
项目状态:开放
产品:QLIK SENSE

Qlik Sense 的应用程序复制器


一种微服务,用于处理与创建新 Sense 应用程序相关的后端任务,使用现有应用程序作为模板。

什么是新的

请查看更改日志以获取完整的更改列表。

最新版本的亮点是

V3.0.0

这是一个重大更新,大部分部分都被重构以更好地工作并提供新功能。

新功能包括

  • 码头化。提供将应用复制器作为 Docker 容器运行所需的一切,包括 Docker Hub 中的图像文件。
  • 使用 Docker 运行时,应用程序复制器将启动自己的 Web 服务器(基于 nginx)。因此不再依赖外部 Web 服务器。
  • 使文件记录成为可选。用于文件记录的日志级别遵循 YAML 配置文件中配置的整体日志级别。
  • 可以在配置文件中启用/禁用应用程序复制器 REST API 的 https。虽然 https 很重要,但它并不总是相关的(例如在反向代理后面运行时)。
  • 将为使用此工具创建的应用程序设置的自定义属性的用户可配置名称。这使得以后可以轻松查看哪些应用是使用应用复制器创建的,哪些不是。
  • 用于将应用程序标识为模板的自定义属性的用户可配置名称。如果该属性不存在,它将被创建。

为什么要提供应用程序复制服务

虽然完全有可能从头开始创建每个 Sense 应用程序,但 Sense 开发人员很快意识到拥有一个代码片段库的价值,通常以包含文件的形式,可以通过 $(Must_Include=[lib: //path/to/script.qvs]) 或类似的。

这确实对重用重要的代码片段大有帮助,但它也要求开发人员记住包含正确的源代码文件。它还有助于培训新的 Sense 开发人员——他们不必了解跨应用程序共享的每一段代码的每一个细节——包含文件提供了一个很好的抽象层。

这个应用程序复制器项目是在意识到上述可以改进后开始的。

如果您对“应用程序复制”这个词感到陌生,请将其视为“应用程序向导”或“应用程序生成器”。一个简单地创建新应用程序的工具。

应用程序复制服务的好处

  • 降低新 Sense 开发人员的进入门槛
    Sense 应用程序开发对于来自其他平台和语言的人来说可能是一个挑战。
    脚本语言借鉴了其他语言,但归根结底是独一无二的。通过允许使用 Sense 平台的开发人员基于精心设计和完整的模板应用程序轻松创建骨架应用程序,这些人将比其他人更快地提高生产力。
    他们的应用程序也将比他们必须为他们创建的每个应用程序从头开始的质量更高。
  • 经验丰富的 Sense 开发人员的生产力提升 经验
    丰富的开发人员经常一遍又一遍地面临类似的挑战。
    将数据提取到 QVD 层是一个典型的例子——这些应用程序经常一遍又一遍地看起来差不多。
    从这样的应用程序中创建模板,然后每次需要 QVD 提取器应用程序时都可以使用该模板。
    每个这样的应用程序都将以相同的方式构建,以相同的方式进行错误报告,使用相同的变量名称等
    。新应用程序通常仍需要根据手头的确切任务进行定制——但总的来说,结果会更好,更多可读的代码。
  • 应用程序符合公司编码标准的几率更高
    如果公司中有多个 och Sense 开发人员,那么很有可能会有一些关于如何在 Sense 应用程序中构建加载脚本的指南。
    通过从模板应用程序(遵循编码标准)实例化新应用程序,将获得更好的代码质量。
  • 跟踪应用
    程序的创建方式 使用此工具创建应用程序时,会为新创建的应用程序设置自定义属性。这使得使用集线器(应用程序没有该客户属性集)和应用程序生成工具创建了多少应用程序的实际数字成为可能。例如,从合规性的角度来看,这可能很有用。

用户界面

在其当前版本中,该项目由两部分组成:处理与 Qlik Sense 服务的所有交互的后端 node.js 服务(也可用作 Docker 映像),以及与应用程序复制器对话的用户界面 (UI)服务。

此 repo 中包含一个基本但功能齐全的 UI:

特点包括:

  • 可用 Sense 模板应用程序列表(这些应用程序已通过设置特定自定义属性标记为模板,见下文)。
  • 可以输入新应用名称的输入框。验证此字段至少有 3 个字符长,以避免应用名称太短和晦涩难懂。
  • 可以输入新应用程序所有者的输入框。这里也有输入验证——只允许包含基本字符的用户名。
  • 左上角的反馈按钮,提供了一种简单但不引人注目的方式来提供有关应用程序的反馈、提问等。
  • 创建应用程序后,会向用户显示指向新应用程序的直接链接。无需先打开集线器,然后找到新的应用程序,最后打开它。相反 – 只需单击提供的链接,新应用程序就会打开。

相同的基本功能可以集成到公司内部的 Qlik Sense Developer 门户中,然后可以将 wiki、相关资源的链接、此应用程序创建工具、数据沿袭工具等汇集在一起​​。事实证明,这很有效 – 因此值得考虑!

要求、安装和配置

应用程序复制器工具旨在用于 Sense Enterprise 环境。根本没有测试将它与 Sense Desktop 一起使用。

该工具可以通过以下两种方式之一运行:作为 Docker 容器或作为本机 Node.js 应用程序。Docker 替代方案是最佳且强烈推荐的。

运行应用程序复制器的服务器和运行 Qlik Sense Repository Service 的服务器之间必须存在网络连接。

一般安装

  • 将该文件复制./production_template.yaml到同一目录中名为 production.yaml 的新文件中。
  • 编辑production.yaml文件以满足您的特定环境。详情见下文。
  • 从 Qlik Sense QMC导出证书,然后将它们放在 Butler SOS 主文件夹下的 ./config/certificate 文件夹中。
  • 如果您计划使用 Web UI,请查看 HTML 和 Javascript 文件。例如
    • ./www/src/index.html:更新反馈链接(第 38 行附近)。默认情况下,它指向此存储库中的问题创建对话框,这可能不是您想要的
    • ./www/src/js/duplicate-app.js):更新应用程序复制服务公开其 REST API 的服务器的 duplicatorService 变量。
    • ./www/src/js/duplicate-app.js):在第 45 行附近输入 Sense 服务器的 FQDN 或 IP(需要链接到新创建的应用程序)。

作为 DOCKER 容器运行

docker-compose.yml文件将创建两个容器:butler-app-duplicatorbutler-app-duplicator-nginx. 前者是与 Qlik Sense 对话并提供 REST API 的服务,通过该 API 可以执行应用程序复制,而后者是用于服务包含的 Web UI 的准系统 nginx 服务器。

docker-compose 文件在大多数情况下应该是开箱即用的,但如果需要也非常灵活。

开始使用 Docker 映像的一般步骤:

  • Web UI 在 Docker 主机的 89 端口上提供服务。中定义docker-compose.yml file
  • 在 Docker 主机的端口 8001 上提供应用程序复制 REST API。中定义docker-compose.yml file
  • 静态网站存储在./www/src/. 根据需要进行编辑。
  • 应用复制服务的配置文件存储在./config. 详情见下文。

创建和启动 Docker 容器可能如下所示:

应用程序复制器工具旨在用于 Sense Enterprise 环境。根本没有测试将它与 Sense Desktop 一起使用。

该工具可以通过以下两种方式之一运行:作为 Docker 容器或作为本机 Node.js 应用程序。Docker 替代方案是最佳且强烈推荐的。

运行应用程序复制器的服务器和运行 Qlik Sense Repository Service 的服务器之间必须存在网络连接。

一般安装

  • 将该文件复制./production_template.yaml到同一目录中名为 production.yaml 的新文件中。
  • 编辑production.yaml文件以满足您的特定环境。详情见下文。
  • 从 Qlik Sense QMC导出证书,然后将它们放在 Butler SOS 主文件夹下的 ./config/certificate 文件夹中。
  • 如果您计划使用 Web UI,请查看 HTML 和 Javascript 文件。例如
    • ./www/src/index.html:更新反馈链接(第 38 行附近)。默认情况下,它指向此存储库中的问题创建对话框,这可能不是您想要的
    • ./www/src/js/duplicate-app.js):更新应用程序复制服务公开其 REST API 的服务器的 duplicatorService 变量。
    • ./www/src/js/duplicate-app.js):在第 45 行附近输入 Sense 服务器的 FQDN 或 IP(需要链接到新创建的应用程序)。

作为 DOCKER 容器运行

docker-compose.yml文件将创建两个容器:butler-app-duplicatorbutler-app-duplicator-nginx. 前者是与 Qlik Sense 对话并提供 REST API 的服务,通过该 API 可以执行应用程序复制,而后者是用于服务包含的 Web UI 的准系统 nginx 服务器。

docker-compose 文件在大多数情况下应该是开箱即用的,但如果需要也非常灵活。

开始使用 Docker 映像的一般步骤:

  • Web UI 在 Docker 主机的 89 端口上提供服务。中定义docker-compose.yml file
  • 在 Docker 主机的端口 8001 上提供应用程序复制 REST API。中定义docker-compose.yml file
  • 静态网站存储在./www/src/. 根据需要进行编辑。
  • 应用复制服务的配置文件存储在./config. 详情见下文。

创建和启动 Docker 容器可能如下所示:

使用网页界面

Web UI 是基本的,但功能齐全。它可以按原样使用,也可以作为您自己定制的起点。

如果您想尝试一下,可以使用http-server来提供 Web UI。只需安装 http-server,cd 进入 www 目录并启动 http 服务器

复制到剪贴板

配置文件

复制一份./config/production-template.yaml,重命名新文件 production.yaml。根据需要进行编辑以匹配您的 Qlik Sense Enterprise 环境。配置文件中的参数说明如下。

所有参数必须在配置文件中定义 – 否则会发生运行时错误。

范围 描述
logLevel 日志中的详细信息级别。可能的值是 silly、debug、verbose、info、warn、error(按详细程度递减的顺序)。
fileLogging true/false 启用/禁用日志记录到磁盘文件
logDirectory 存储日志文件的子目录
clientCertPath 证书文件。从 QMC 导出
clientCertKeyPath 证书密钥文件。从 QMC 导出
clientCertCAPaßth 上述证书文件的根证书。从 QMC 导出
httpsEnable 为应用复制服务器启用 https (true/false)
sslCertPath SSL 证书用于保护与复制服务器的通信(如果已启用)。可以是 pem 或 pvk/cer
sslCertKeyPath SSL 证书密钥用于保护与复制服务器的通信(如果已启用)。可以是 pem 或 pvk/cer
loadScriptURL 从中检索新创建应用的加载脚本的 URL。URL 必须可以从运行复制服务的服务器直接访问 – 不进行身份验证
host 复制服务器将连接到的 Qlik Sense 的 IP 或 FQDN
customPropertyName 将用于将应用标识为模板的自定义属性的名称。如果属性尚不存在,则将创建它。使用 QMC 将此属性设置Yes为应用作模板的应用程序
customPropertyCreatedFromTemplate 用于指示应用程序是使用应用程序复制工具创建的自定义属性的名称
senseUserDirectory 新创建的应用程序将分配给特定用户。定义将在 Qlik Sense 中使用的用户目录
engineVersion 与 Enigma.js 一起使用的 Qlik Associative Engine 版本。此处可能的值
restAPIPort 应用复制器的 REST API 将侦听的端口
reloadNewApp 创建后重新加载应用程序(真/假)。此设置全局使用,即用于所有创建的应用程序

production.yaml文件可以命名为任何名称,只要它与NODE_ENV环境变量的值匹配即可。
例如,如果调用配置文件production.yaml,则 NODE_ENV 环境变量应设置为“生产”:

视窗:set NODE_ENV=production
Linux export NODE_ENV=production:.
Docker:在docker-compose.yml文件中设置

定义模板应用


在使用应用复制器服务之前,您需要指定哪些现有应用应用作模板。打开 QMC 的应用部分,然后将这些应用的自定义属性 AppIsTemplate(或在 YAML 配置文件中定义的任何内容)设置为“是”。
就是这样 – 无需其他配置即可从现有应用程序中制作模板!

关于 SSL 证书的说明


虽然最好使用适当的 https 证书来保护复制服务的 REST API,但在某些情况下 http 也可以。

例如,如果应用复制器将隐藏在反向代理(使用 https)之后,您可以考虑将 http 用于复制器服务。

应用复制器服务的 REST API


检索模板应用程序列表

您可以使用任何能够创建 REST 调用的工具来测试服务,包括简单的 Web 浏览器。
下面使用标准curl,假设命令在运行app复制器服务的同一台服务器上执行,并且服务端口配置为8001。

复制到剪贴板

返回 HTTP 200 响应,其 JSON 结构如

复制到剪贴板

基于模板应用创建新应用,替换新应用的加载脚本

创建应从配置文件的 loadScriptURL 选项中指定的文件获取其加载脚本的新应用程序时,请使用 /duplicateNewScript 端点。
新应用程序将在保存到磁盘之前重新加载(使用新的加载脚本)。

复制到剪贴板

退货

复制到剪贴板

即JSON结构是

复制到剪贴板

查询参数

复制到剪贴板

基于模板应用创建新应用,不替换新应用的加载脚本

创建应保留模板应用程序的加载脚本的新应用程序时,请使用 /duplicateKeepScript 端点。
新应用程序将在保存到磁盘之前重新加载(使用模板应用程序中的加载脚本)。

复制到剪贴板

服务的响应与 /duplicateNewScript 端点的响应完全相同(见上文)。

查询参数

复制到剪贴板

安全/披露

如果您在 Butler App Duplicator 中发现任何可能构成安全问题的重要错误,以便在被利用之前对其进行评估并希望得到修复。请不要因与安全相关的疑问或问题而提出 GitHub 问题。