在Fission的基础上,自定义开发
Fission 官网开发介绍,其中详细介绍了源码结构和各个组件的功能以及编译方法,大大减少了自己摸索的成本。(只可惜我是折腾了一段时间才想起来看官网文档的。
完善Fission Cli 的日志模块
需求分析
在使用Fission查看日志消息的时候,发现日志会全部输出,并且存在冗余的时间信息,日志中也会携带很多\
,影响直观的阅读。因此有了一个精简Cli输出的小需求,具体如下:
- 可以选择从当前时间开始打印日志,而不是从头开始打印。
- 可以选择是否输出日志时间戳,简化展示,并且展示时间戳的时候,使用对国人友好的北京时区时间。
- 规范日志中的信息,尽量少的携带转义符
分析上述三点需求,其中前两点,可以不操作原始日志的情况下进行操作,因此适合将功能完善在Fission CLI中,而更加友好的日志格式输出,会随着日志的输出方式不同的而差异巨大,因此适合在env的镜像中制定统一的方便阅读的格式。
CLI 参数管理
从需求分析中,我们需要给Fission fn log
子命令添加两个参数:
- FnLogFromNow:只输出从当前时间之后的日志
- FnLogWithTime:输出信息中是否携带日志的时间戳信息
那么Fission Cli是如何管理参数的呢?
1 | // 在cmd/fission-cli/app/app.go:40 App 中将fission子命令组合起来了 |
需求开发
这里我们只关心前两个需求的开发,根据CLI管理命令的逻辑,首先创建需要的那两个布尔类型的flag,并在Log函数中,读取我们需要的参数,更改读取日志的开始时间和是否需要输出时间戳,这就比较简单了。
1 | go func(ctx context.Context, requestChan, responseChan chan struct{}) { |
测试无误之后,编译新的CLI。
1 | # 根据官网的教程操作 |
测试结果
1 | ~/repos/fission/cmd/fission-cli$ $GOPATH/bin/fission fn log -h |
已经可以看到新添加的两个参数fromnow
和withtime
,实际测试功能正常。完工!
总结
通过在Fission的CLI模块中补充开发的过程中,学的有两点:
- 折腾之前,先看官网文档,官网文档才是学习一门技术应该看的东西。他人的博客,速成还行,深入很难,并且容易被带偏。(实际上也没有搜到有帮助的相关的博客
- 看懂了CLI模块的组织方式之后,十分佩服作者的工程组织能力,让我一个小白也十分轻松的在框架上完成了我需要的功能,并且没有破坏框架的原有结构。
此外在开发完成之后,发现一个小细节,添加的withtime
参数对之前的fission命令产生了影响,这个实际上不推荐的,更友好的方法是添加notwithtime
的参数,只有添加参数的时候再忽略掉时间戳,如此可以兼容之前的使用。emmm,有点懒,偷偷改下代码,就不更新博客了。(太懒了,最后代码也没改。