文章
Peng Qiao · 二月 6, 2021 阅读大约需 10 分钟

InterSystems:技术支持和 DBMS 互操作性管理解决方案

在本文中,我们将讨论一个我每天都会使用的应用程序,当监控 InterSystems IRIS 平台上的应用程序和集成解决方案并查找所发生的错误时,我就会用到它。

在查找用来记录 InterSystems IRIS、Ensemble 和 Caché DBMS 中对象变化的解决方案时,我发现了一篇关于使用宏进行日志记录的好文章。 受到该文章的启发,我对其介绍的项目进行了分叉,并做了相应调整以满足一些特定需求。 生成的解决方案以面板子类 %CSP.Util.Pane 的形式实现,它具有主命令窗口、“Run”(运行)按钮和已启用的命令配置。

该应用程序允许查看和编辑 global 数组、执行查询(包括 JDBC 和 ODBC)、通过电子邮件发送搜索结果(压缩的 XLS 文件)、查看和编辑对象,以及用几个简单图表来表示系统协议。

该 apptools-admin 应用程序基于 jQuery-UI、UiKit、chart.js 和 jsgrid.js。 欢迎查看源代码

安装

仓库中详细介绍了所有安装方法。 但是,最简单的方法是使用包管理器命令:

zpm "install apptools-admin"

[apptools-admin]        Reload START
[apptools-admin]        Reload SUCCESS
[apptools-admin]        Module object refreshed.
[apptools-admin]        Validate START
[apptools-admin]        Validate SUCCESS
[apptools-admin]        Compile START
[apptools-admin]        Compile SUCCESS
[apptools-admin]        Activate START
[apptools-admin]        Configure START

http://hp-msw:52773/apptools/apptools.core.LogInfo.cls
http://hp-msw:52773/apptools/apptools.Tabs.PanelUikitPermissMatrx.cls?autoload=Matrix
[apptools-admin]        Configure SUCCESS
[apptools-admin]        Activate SUCCESS

第一个建议链接必须在浏览器的地址字段中打开。 在加载的面板中输入 ? ,然后按“Execute”(执行)按钮。 应用程序随后会显示命令示例。

命令

在面板中,您可以运行实用工具,查看和编辑 global,以及执行查询。 每次启动都保存在命名空间上下文的历史记录中,因此可以找到并重复。 在此上下文中,“启动”表示开始执行命令,命令表示我们在面板中输入的所有内容。 下面的屏幕截图显示了 global 数组 ^%apptools.History 查看命令的示例

如您所知,自动错误检测和通知可以由流行的解决方案(例如 Prometheus)处理。 但通常可以通过视觉评估错误的严重性。

我经常需要快速获取所有命名空间中的生产错误信息。 为此,我实现了一个实用工具:

##class(apptools.core.Production).FindAndDrawAllErr

这会启动一个每日搜索请求,用于查找每个包含工作产品的命名空间中的错误,并允许通过快速转换到可视化跟踪来查看这些错误。 您可以在 apptools 面板中像运行其他任何程序一样运行此实用工具,只需加上 xec 前缀。

所有有用命令都可以保存在作用域上下文的 global 扩展中,以便随时查找和重复。

Global

apptools-admin 应用程序的很大一部分专门用于处理 global。 可以按倒序查看 global,还可以对链接和数据应用筛选。 显示的注释可以进行编辑或删除。

您可以在 global 名称后输入 * 通配符,以获得具有附加特征的 global 列表。

第二个 * 将添加一个新字段“Allocated MB”(已分配 MB)。

第三个将添加“Used MB”(已使用 MB)字段。 此语法解析为两个报告的结合,星号将通常较长的报告分成易管理的部分。

当您获取 global 列表形式的报告时(上面的屏幕截图中),可以点击活动链接来查看 global 本身。 还可以在管理门户中点击“Permission”(权限)字段中的 RW,以标准方式查看和编辑 global。

通常,在调试项目时,对 global 的写操作用于记录变量和对象的状态。 为此,我使用特殊宏:

set $$$AppL("MSW","anyText")=$$$AppObJs(%request)

在此示例中,$$$AppL 为一个带 ^log 前缀的 glob 以及索引值中的日期和时间形成链接。

$$$AppObJs 是对象序列化宏。

您可以在面板中查看协议 global,对象可以在窗口中以完全格式化的形式显示。

查询

与 global 的使用几乎一样多的功能是查询。 通过输入命令形式的语句来运行此功能。

例如,可以执行一个 SQL 语句。

还可以将结果保存在 global ^mtempSQLGN 中。

随后,global 中保存的结果可以显示在面板中。 ![

将报告转换为 Excel 格式

标准管理门户缺少的一项功能是执行数据库 JDBC 或 ODBC 源中配置的查询,输出 XLS 格式的结果,然后将文件存档并通过电子邮件发送。

要在应用程序中实现此功能,只需在执行命令之前选中“Upload to Excel file”(上传到 Excel 文件)复选框。

这个功能为我的日常工作节省了很多时间,让我可以成功地将现成模块融入到新的应用程序和集成解决方案中。

要启用此功能,首先需要配置服务器上用于创建文件的路径、用户凭据以及邮件服务器。 为此,又需要编辑全局程序设置 ^%apptools.Setting 的节点。

全局保存报告

通常,您需要将报告执行的结果保存到 global。 为此,可以使用以下程序:

函数
对于 JDBC: ##class(apptools.core.sys).SqlToDSN
对于 ODBC: ##class(apptools.core.sys).SaveGateway
对于 SQL: ##class(apptools.core.sys).SaveSQL
对于查询: ##class(apptools.core.sys).SaveQuery

例如,使用 ##class(apptools.core.sys).SaveQuery 函数,将查询 %SYSTEM.License:Counts 的结果保存到 global ^mtempGN 中。

然后可以使用以下命令在面板中显示已保存的内容:

result ^mtempGN("%SYSTEM.License:Counts", 0)

https://lh5.googleusercontent.com/KCIekwZw3guq79GWxVdHYdAbWQc4u97-dr-hWT...

增强功能模块

还有什么简化和自动化了我的工作? 就是让我能够在形成查询字符串时执行自定义模块的更改。 我可以将新功能即时嵌入到报告中,例如用于对数据执行其他操作的活动链接。 让我们看一些示例。

我们使用以下函数在浏览器中显示查询结果:

##class(apptools.core.LogInfoPane).DrawSQL

让我们将字标记函数 ##class(apptools.core.LogInfo).MarkRed 添加到参数 5 中。 同样,可以为输出补充其他功能,例如,活动链接或工具提示。

本解决方案中的 global 编辑器根据同样的原理实现。

以下是以表格形式输出 global 和查询的函数列表:

函数
对于 global: ##class(apptools.core.LogInfoPane).DrawArray("^mtempSQLGN")
对于 SQL: ##class(apptools.core.LogInfoPane).DrawSQL("select * From %SYS.ProcessQuery")
对于查询: ##class(apptools.core.LogInfoPane).DrawSQL("query %SYSTEM.License:Counts")
对于 global 结果: ##class(apptools.core.LogInfoPane).DrawSQL("result ^mtempSQLGN")

使用 apptools.core.Parameter 类 在安装了 apptools-admin 的实例的上下文中,此链接将在浏览器中打开 CSP 应用程序。

http://localhost:52773/apptools/apptools.Form.Exp.cls?NSP=APP&SelClass=apptools.core.Parameter

或在面板中选择活动链接。 将加载 CSP 应用程序以编辑存储类的实例,在此示例中: apptools.core.Parameter

通过表导航器创建 apptools.core.Parameter

在安装了 apptools-admin 的实例的上下文中,如果在浏览器中打开此链接:

http://localhost:52773/apptools/apptools.Form.Exp.cls?panel=AccordionExp&NSP=APP

或在面板中选择活动链接。

将加载 CSP 应用程序以导航存储类,并能够编辑它们。

简单 CSP 应用程序的示例

在安装了 apptools-admin 的实例的上下文中,如果在浏览器中打开此链接:

http://localhost:52773/apptools/apptools.Tabs.PanelSample.cls

或在面板中选择活动链接。 此示例还显示了编辑类实例 apptools.core.Parameter 的能力。

图表

为了直观展示数据库的增长,应用程序提供了一个图表页面,显示每月测量的数据库大小。 该图表来源于 IRIS file.log(对于 Caché 则为 cconsole.log)中从当天向回“扩展”的记录。

程序会遍历协议,找到数据库扩展记录,并从当前数据库大小中减去增量的兆字节。 最终生成数据库增长的图表。

例如,下面的屏幕截图显示了 InterSystems IRIS 中通过协议文件形成的事件图。

下面是另一个示例:系统中的事件时间表,基于系统协议 file.log (cconsole.log)。

总结

我们在本文中讨论的应用程序旨在帮助我执行日常任务。 它包括一组模块,您可以将它们用作自定义管理员工具的构建块。 如果您觉得它对您的工作有用,我会非常高兴。 欢迎将愿望和建议作为任务添加到项目仓库

00
3 0 0 11