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
”(权限)字段中的 R
或 W
,以标准方式查看和编辑 global。
通常,在调试项目时,对 global 的写操作用于记录变量和对象的状态。 为此,我使用特殊宏:
set $$$AppL("MSW","anyText")=$$$AppObJs(%request)
在此示例中,$$$AppL
为一个带 ^log
前缀的 glob 以及索引值中的日期和时间形成链接。
$$$AppObJs
是对象序列化宏。
您可以在面板中查看协议 global,对象可以在窗口中以完全格式化的形式显示。
查询
与 global 的使用几乎一样多的功能是查询。 通过输入命令形式的语句来运行此功能。
例如,可以执行一个 SQL 语句。
还可以将结果保存在 global ^mtempSQLGN
中。
将报告转换为 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)。
总结
我们在本文中讨论的应用程序旨在帮助我执行日常任务。 它包括一组模块,您可以将它们用作自定义管理员工具的构建块。 如果您觉得它对您的工作有用,我会非常高兴。 欢迎将愿望和建议作为任务添加到项目仓库。