我是在瞎说
最近遇到一个问题,就是jenkins job上传日志到es的时候,需要针对关键字前后各100行进行上传,其余的全部丢弃,(别问我为什么丢弃,es不至于这点儿日志里都撑不住),但是日志是实时的流式生成,logstash似乎不直接支持这类处理,所以需要自己想点儿法子
我爱说实话
那么维护一个滑动窗口就很有必要了,
- 初始化一个滑动窗口,这个窗口容量为201,内容是空的
- 初始化一个flag = false,表明窗口内有没有包含关键字的一行日志
- 每当生成一行日志,
- 如果这行日志不包括关键字,那么把这行日志入栈滑动窗口
- 如果包括关键字,那么把这行日志入栈滑动窗口,并记录关键字位置/坐标1,并记录此时已经找到关键字了flag = true,准备100行后上传日志,即把窗口的剩余容量调整为100
- 如果接下来又遇到了一行包括关键字的日志,但是窗口还没填满,那么再次将窗口的剩余容量调整为100
- 一旦窗口满了,如果flag == true,将窗口内的所有日志上传,然后清空重置窗口和flag,当然,flag == false,保留窗口内最新的100个内容,将剩余容量调整为101
- 循环以上1-4即可
时间为O(n),空间大概也是O(n)吧,不是很确定