IRIS 配置管理器 —— 一款开源浏览器插件,轻松比对异构但等效的 IRIS/Cache 实例!
痛点所在
我们在将 IRIS 实例迁移到另一台机器(甚至可能是升级版本)后,有多少次是在几天之后才猛然惊觉:我们忘了迁移那个对于业务操作(Business Operations)至关重要的 SSL 配置?或者是漏掉了某个凭据(Credential),又或是某个包里孤零零的一个类?
解决方案
最简单的法子就是列一张清单¹。把我们必须迁移的实体项都罗列出来。但是,Word 文档里的简易清单往往会被人抛诸脑后,甚至干脆被无视。
管理学的基本原理告诉我们:如果你希望人们遵循流程,你可以采取以下手段:
- 通过监控行为来强制他们执行;
- 将某项活动系统地锁定在某个流程之后(例如使用流水线部署代码,并要求自动化测试通过才能合并 PR);
- 让流程比人工操作更便捷、更省力。 这样人们才会心甘情愿地去用。(这正是我的目标所在)
Python 脚本固然可行,但人们可能会忘记脚本放在哪儿,或者去哪儿下载。一旦有了新版本,所有使用者都得重新下载。
IRIS 类或任务似乎也是理想选择,直到你意识到有时你是迁移到另一个网络的服务器,一个实例根本无法访问另一个。
这就是为什么我选择了浏览器插件。一旦安装,它便触手可及(哪怕你几个月不用它);更新会自动完成。即便你换了浏览器或出于某种原因弄丢了插件,从应用商店重新安装也只是点击一下的事。而且假设你总是需要访问两台服务器的管理门户(也许你不需要同时访问,比如切换 VPN 的情况),该插件也始终能够访问这两台服务器。
¹更复杂的(也是更好的)解决方案是自动化迁移过程本身。但考虑到不同的 IRIS/Cache 版本,那简直是让人头秃的大工程。
它具体比对什么?
截至本文撰写之时,它会比对 8 项 %SYS配置和每个命名空间下的 5 项配置。但由于实现方式极其简洁,每当我们有新的导出配置构想时,添加它们易如反掌。
比对范围
| 作用域 (Scope) | 实体 (Entity) |
|---|---|
| %SYS | Tasks (任务) |
| %SYS | WebApplications (Web 应用) |
| %SYS | SqlConnections (SQL 连接) |
| %SYS | Users (用户) |
| %SYS | Roles (角色) |
| %SYS | Resources (资源) |
| %SYS | Ssl (SSL 配置) |
| Namespaces | Classes (类) |
| Namespaces | Globals (全局) |
| Namespaces | Credentials (凭据) |
| Namespaces | ProductionItems (生产项) |
| Namespaces | Lookups (查找表) |
如何使用?
我已经将其简化到了极致:
1.为您的浏览器安装该插件。(目前支持 Chrome 和 Firefox)
2.打开源实例的管理门户(Administration Portal)。
3.点击“Save Server Data”(保存服务器数据)。

4.输入凭据,然后点击“Install and Continue”(安装并继续)。(仅在首次设置实例时需要)



此处我仅出于演示目的使用了 _SYSTEM用户,您应使用登录门户所用的同一用户。
5.打开目标实例的管理门户。
6.点击“Compare to saved server”(与已保存服务器比对)。

7.输入凭据,然后点击“Install and Continue”。
8.查看结果。

工作原理
切记,您可以在 GitHub 仓库中查看所有细节!
核心功能封装在一个 ObjectScript 类中。它包含一个供 Web 应用程序调用的主方法(返回完整的 JSON),一个用于检索每种配置并将其作为动态对象返回给主方法的子方法,以及一个通过 /api/atelier/query端点以存储过程形式创建 Web 应用程序的设置方法。
以下是我目前针对各实体使用的查询语句:
| 实体 (Entity) | SQL 查询 (Query) |
|---|---|
| Namespaces | SELECT * FROM Config.Namespaces_List() |
| Tasks | SELECT * FROM %SYS.Task WHERE Type = 2 |
| WebApplications | SELECT * FROM Security.Applications WHERE Type = 2 |
| SqlConnections | SELECT * FROM %Library.sys_SQLConnection |
| Users | SELECT * FROM Security.Users |
| Roles | SELECT * FROM Security.Roles |
| Resources | SELECT * FROM Security.Resources |
| Ssl | SELECT * FROM Security.SSLConfigs |
| Classes | SELECT * FROM %Library.RoutineMgr_StudioOpenDialog('*.cls',1,1,0,1,0,0) WHERE ...(过滤了 Ens, HS 等系统包) |
| Globals | SELECT * FROM %SYS.GlobalQuery_NameSpaceList() |
| Credentials | SELECT * FROM Ens_Config.Credentials |
| ProductionItems | SELECT * FROM Ens_Config.Item WHERE Production = ? |
| Lookups | SELECT * FROM Ens_Util.LookupTable |
结语
这是一个正在进行中的工作(WIP),我非常欢迎所有的反馈。所以,如果您有任何建议或发现任何问题,请在下方留言或在我的 GitHub 仓库提交 Issue。
如果您想亲自上手贡献代码,请 fork 该项目并通过 Pull Request 参与,或者如果您想成为核心贡献者,请联系我。
TL;DR (太长不看版)
我开发了一款开源浏览器插件,用于导出并比对不同 IRIS/HealthShare 实例之间的配置。您可以在这里查看代码,并在 Chrome和 Firefox上安装它。