# OpenIM CTL 模块


## 为什么设计这个模块

OpenIM 后期功能扩展，不能总依赖一些单独的模块，而是整合到 Imctl 中。

测试同学做自动化测试或者是 e2e 测试，接口测试等等，每一次调用 API 很麻烦，用 imctl 的方式为 api 的调用提供了方便

和 scripts 深度交互，同样减少了 IM 本身的耦合度，提高了 IM 的可扩展性。


## 功能设计

+ 用户管理：例如，添加、删除或禁用用户账户。

+ 系统监控：查看在线用户数量、消息传送速率等关键性能指标。

+ 调试：如查看日志、调整日志级别、查看系统状态等。

+ 配置管理：更新系统设置、管理插件或模块等。

+ 数据管理：备份和恢复数据、导入和导出数据等。

+ 系统维护：例如，执行更新、重启服务、进行维护模式等。


## 设计思路

参考 kubectl, 方便 开发、运维、测试同学使用系统功能，并且实现自动化功能。

**自动化设计思路：**
1. 为后面的扩展子模块或者子命令提供自动化的功能，提供子命令  `imctl new` 自动创建新的子命令
2. 以通过 imctl 对用户、密钥和策略进行CURD操作
3. 设置 imctl 自动补全脚本
4. 版本管理，问题：https://github.com/OpenIMSDK/Open-IM-Server/issues/574，做 IM 自动化的版本管理，查看 IM 系统版本

一些简单的 IM 解决方案可能不需要这样的工具，而复杂、高度定制的系统可能会从中受益。

所以暂时将这个模块放在 tools/imctl 中，后面迁移到 cmd/imctl 中


## 目录结构设计

为了方便迁移，将 imctl 工程化设计，命令工具放入到 tools/imctl/cmd 中，其他的模块放入到 tools/imctl/pkg 中

```