这篇文章将介绍我每天都用的一款应用程序,用于在Intersystems IRIS平台上监控应用程序和集成解决方案,并且一旦有错误发生他可以很快定位该错误。
我在寻找Intersystems IRIS、Ensemble和Caché DBMS中对象变更日志记录的解决方案时,看到了一篇关于使用宏进行日志记录的好文章。受到这个想法的启发,我下载了这篇文章提到的项目,并针对一些特定需求进行了修改。最终的解决方案实现为创建了一个面板子类,%CSP.Util.Pane,它提供一个主窗口用于显示命令、“运行”按钮和启用的命令配置。我在寻找Intersystems IRIS、Ensemble和Caché DBMS中对象变更日志记录的解决方案时,看到了一篇关于的好文章。受到这个想法的启发,我下载了这篇文章提到的项目,并针对一些特定需求进行了修改。最终的解决方案实现为创建了一个面板子类,%CSP.Util.Pane,它提供一个主窗口用于显示命令、“运行”按钮和启用的命令配置。
这款应用程序支持查看和编辑Global数组、执行查询(包括JDBC和ODBC)、将搜索结果以XLS文件压缩包的方式发送电子邮件、查看和编辑对象,以及几个用于系统协议的简单曲线图。
这款apptools-admin应用程序基于jQuery-UI、UiKit、chart.js和jsgrid.js开发。欢迎查看源代码。
安装
所有的安装方法都在repo中详细介绍了。但最简单的方法是使用zpm包管理器命令:
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
命令
在面板中,您可以运行实用程序、查看和编辑 Global 以及执行查询。每次启动都保存在命名空间右键菜单的历史记录中,方便查找并重复之前的启动。这里的“启动”指开始执行命令,而“命令”指我们在面板中输入的所有内容。这张截图显示了一个Global数组 ^%apptools.History 查看命令的示例。
我们知道,可以用Prometheus等流行的解决方案来自动进行错误检测和通知。但错误的严重程度往往可以肉眼判断。
我经常需要快速获取所有命名空间中的生产中的bug信息。
为此我实现了一个实用程序:
##class(apptools.core.Production).FindAndDrawAllErr
这样就可以每天请求搜索每个包含运行中产品的命名空间的错误,让您可以查看这些错误,快速进行肉眼检查。您可以像使用apptools面板中其他带 xec 前缀的实用程序一样运行这个程序。
所有有用的命令都可以被记录在Global扩展中,在此作用域右键菜单中,随时查找并重复。
Globals
这个apptools-admin应用程序主要用来处理Globals。可以倒序查看Globals,也可以对链接和数据添加过滤器。可以编辑或删除显示的备注。
您可以在Globals名称后输入 * 通配符来获取具有额外特征的Global列表。
第二个 * 会添加一个新字段“已分配MB”。
第三个会添加“已用MB”字段。此语法解析为两份报告的并集,报告一般都很长,星号将其分成多个方便处理的部分。
当您得到的Global列表是一份报告时(见上文截图),您可以通过活动链接查看Global本身。您还可以从管理门户以标准方式查看和编辑Global,点击“
许可”
字段中的 R 或 W。
在debug项目时最常做的写入Gloabl是用于记录变量和对象的状态。对此我使用一个特殊的宏:
set $$$AppL("MSW","anyText")=$$$AppObJs(%request)
此例中,$$$AppL 生成一个链接,指向一个带 ^log 前缀的Global,以及索引值中的日期和时间。
$$$AppObJs 是对象序列化宏。
您可以在面板中查看协议Global,且对象以完全格式化的方式在窗口中显示。
查询
和Globals一样常用的功能是查询。您可以输入一条命令语句来运行此功能。
例如,您可以执行一条SQL语句。
您还可以将结果保存在Global ^mtempSQLGN中。
将报告转成Excel格式
标准管理门户中缺失的一项功能是,通过JDBC或ODBC对数据库执行查询,输出结果为XLS格式,并打包通过电子邮件发送文件。
要在应用程序中实现这一点,只需在执行命令前勾选“上传至Excel文(Upload to Excel)”复选框。
这项功能为我的日常工作节省了大量时间,让我可以将现成的模块合并到新的应用程序和集成解决方案中。
为了启用这项功能,首先需要配置用于在服务器上创建文件的路径、用户凭证和邮件服务器。然后需要编辑Gloabl程序设置的节点,^%apptools.Setting。
保存报告到Global中
通常需要将报告执行结果保存到Global中。为此可以使用以下语句:
函数 | |
对于JDBC | ##class(apptools.core.sys).SqlToDSN |
对于ODBC | ##class(apptools.core.sys).SaveGateway |
对于SQL | ##class(apptools.core.sys).SaveSQL |
对于Query | ##class(apptools.core.sys).SaveQuery |
例如,使用 ##class(apptools.core.sys).SaveQuery 函数将查询结果 %SYSTEM.License:Counts 保存到Global ^mtempGN 中。
然后您可以用以下命令在面板中显示保存的内容:
result ^mtempGN("%SYSTEM.License:Counts", 0)
增强功能模块
还有哪些功能简化和自动化了我的工作呢?这些功能让我可以在生成查询字符串时执行自定义模块。我可以快速向报告中嵌入新功能——如:用于对数据进行额外操作的链接。让我们看几个例子。
我们使用以下函数在浏览器中显示查询结果:
##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") |
对于Query | ##class(apptools.core.LogInfoPane).DrawSQL("query %SYSTEM.License:Counts") |
对于 global result | ##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应用程序将被载入,用于浏览和编辑已存储的类。
如果您安装了apptools-admin的实例,则可在右键菜单中点选在浏览器中打开这个链接:
http://localhost:52773/apptools/apptools.Tabs.PanelSample.cls
或在面板中选择这个活动链接:
这个例子还展示了编辑类实例的功能 apptools.core.Parameter。
为了将数据库的增长可视化,这个应用程序提供了一个页面,显示每月测量的数据库大小的曲线图。这个曲线图是根据IRIS file.log(对于Caché是cconsole.log)中从当天往之前“扩展”的记录生成的。
这个程序遍历协议,查找数据库扩展记录,并从当前数据库大小中减去增量MB。这样就生成了数据库增长曲线图。
例如,下面这张截图显示了根据协议文件生成的InterSystems IRIS 中的事件曲线图。
本文讨论的这个应用程序的设计初衷是帮我执行我的日常任务。它包含的一些模块,您可以像搭积木一样,自定义您自己的管理员工具。如果能对您的工作有所帮助,我会很高兴。欢迎您将愿望和建议作为任务添加到项目中repo。本文讨论的这个应用程序的设计初衷是帮我执行我的日常任务。它包含的一些模块,您可以像搭积木一样,自定义您自己的管理员工具。如果能对您的工作有所帮助,我会很高兴。欢迎您将愿望和建议作为任务添加到项目中。
查看原帖 由 @Sergey Mikhailenko 撰写Sergey Mikhailenko 撰写