00:00
我们现在已经了解了cep它的底层原理和模式的具体的一些定义的规则,那回过头来我们再看之前的连续登录失败的这个代码的话,大家其实就会发现,呃,之前我们稍微的把它做了一些改进,就是说本来是连续两次登录失败,那大家想到如果连续三次登录失败怎么办呢?我是不是在后面直接在next,然后third费,呃,然后这个也是一样去做提取就可以了,哎,这个其实非常好理解,但是有同学可能就想到了,那假如说十次登录失败呢?100次登录失败呢?难道后面我真的是一个一个next的写上十次100次吗?就看起来比我们那个if else判断是简单多了,但是好像这个也有点儿笨,对吧,直接一个一个往后写,这个是不是太麻烦了,那前面学过这个所有的模式的定义之后,大家现在有什么新的想法吗?对,这里边我是不是直接可以定义一个循环模式啊,直接定义一个times是不是也可以啊,哎,所以接下来啊,我们直接另外啊。
01:01
重新定义一个pattern,我直接把这个就copy一下啊。把这个copy一下啊,那前面我把这个pattern,比方说我定义成logging feel pattern0对吧,那现在我是这个重新定义这个pattern,首先还是pattern.begin first啊,那那大家想这里边我就不用first few了啊,大家想这里边就是这个few events对吧,就是我们当前所有的失败的这个事件,后边也不用next什么了,大家想是不是我直接一个few events where,这里边它不是定义了要这个F的这个数据吗?那后边我直接可以来一个,是不是直接来一个times就完事了呀?所以比方说我要连续三次登录失败的话,我直接来一个TIMES3,然后下边是不是还应该有一个。当前的时间限制啊,时间限制是within,哎,当前给一个time多长时间对吧,比方说我给一个,呃,我可以时间稍微长一点,给一个五秒钟吧,那大家现在想一下,如果说我给了一个这样的定义的话,它涉及到一个问题,就是我们这里边的这个times循环模式啊,它是连续三次对吧?但是这连续三次它内部的这三次之间到底是我们之前讲的严格净零还是宽松净零呢?
02:22
它是一定是严格的一个接一个next next这样出来的呢,还是说follow by一样,就是后面只要跟着就行了呢。诶,那我们得来测一下了,对吧,首先我们看一下当前的这个数据。Logging的这个数据啊,呃,这里边我们测的时候是424344,这里边是连续的三个feel对吧?诶那大家想现在如果我直接要去做一个运行的话,这个应该不会有任何问题。应该肯定能检测到,对不对,呃,这里边应该是五秒之内的连续三次登陆失败。看一下运行结果。大家看这里边报错了,报错报了一个什么呢?空指针异常,为什么会空指人异常,我们是光改了之前的pattern,大家想这个pattern改变会带来什么改变。
03:12
但是这里边儿的这个名称我们都没变,对吧,下一步这个应用到流上,这个肯定也不变,但是大家想接下来提取的时候。我们的这个map里边还是之前的first few third film吗?诶,你Python都变了对吧?这里边当然不是用这种方式去提取了,首先这个名就不一样嘛,我们当前叫的是few events对吧?哎,所以这里啊,我先把当前的这个先先注掉吧。直接把这几行全部注掉,呃,那大家其实会想到就是现在我们要去做的这个处理提取出来的这个事件啊,Logging event,比方说我现在提取这个first fill event,大家想应该怎么去提取当前的拍里边要get的其实只有一个key了,是不是只有这个few events啊,然后接下来怎么办呢?
04:06
是不是在这个events里边就应该有好多个数据啊,所以大家知道现在我是连续三次登录失败嘛,TIMES3嘛,所以里边是不是应该有三个数啊,所以我要提取第一个,哎,当然最简单的方式是不是直接GET0拿出来就完事了,然后下边如果我要定义logging event这个last feel event的话,这应该是哪个?对,大家想当前是不是应该是get,同样啊,还是few events,接下来是GET2就可以了呀,啊或者当然你也可以是就是拿我们呃,当前这个list的所有的那个长度再减一对吧,也可以用这个,那是标准的那个last的一个定义啊啊就是这里边我们可以直接。呃,就是拿到当前的这个pattern点。Get few,呃,Events对吧?然后我们直接拿它的这个size,然后再减一,这是不是就是我们标准的最后一个的那个写法啊,对吧?呃,这是last的这个写法,最后return一个new,一个logging fair warning,然后里边我们就是直接用当前的user ID,然后两次登录失败的时间戳time stamp和last few event的time step,最后再来一个,再来一个这个文字说明对吧?呃,这里边logging feel,我们这里边其实是loging费有多少次,三次对吧?哎,当然大家如果要是完整的去写的话,也可以比方说我这儿加上当前的。
05:47
对,它的这个size。呃,所以这个就是看大家怎么样去定义啊,如果要是定义的更加完完整一些,就是这样的一个写法。
06:00
所以这样再去取的话,当然就正常来讲,不会去控制人异常了,对吧,因为你之前根本就没这个东西嘛,当然就控制人异常了,好我们再来运行一下。看一下现在能不能正常得到一个输出结果,好大家看到现在得到了输出结果,四二第一次失败,四四最后一次失败logging feel3次对吧?哎,这个是非常容易,呃检测到的这样的一个效果,然后接下来我们要做一个测试,就是比方说呃这样啊,我既然是五秒钟之内,那其实大家想我这里边给一个四五是不是也没什么问题啊。这个肯定没问题啊,那中间我再来一个success,然后这里给一个四四,大家想当前这个我应该能检测到吗。按照我们的标准,这其实已经不叫这个五秒钟之内连续三次登录失败了,对吧?诶按照我们的要求是不想得到这样一个输一个输出报警了,那我们直接运行一下,看看它会不会得到报警。
07:06
看一下运行结果。大家看是不是还是正常输出了一个报警啊,所以第一次842,最后一次845对吧?所以大家会发现这里边我们的这个这样去设定,设定的话,它其实是只要后边跟着这个费是不是就能检测出来,他并不管当前呃是不是连续对吧?诶那所以大家想这个这个怎么办呢?对呃呃,大家想这个当前我们这个模式序列定义的这个过程就相当于是有问题了,对吧?那这里边难道说只有我们定义成之前我们那个模式序列next next不停往后走的那种过程吗?也不是啊,这里边可以加一个,大家看这个方法叫consecut。Consecutive大家知道是类似于连续对吧?啊,就是连续的这样的一个形容啊,那所以如果加上这样一个设定的话,Consecutive指定的就是前面我们这个TIME33次事件必须是严格连在一起的,也就是next严格精灵的模式,对吧?哎,所以这里边我可以把这个定义出来,然后我再运行一下,大家看一下现在的效果,还能不能检测到之前的这个数据了。
08:19
就会不会报警了,对吧,现在正常来讲的话,我们这里面不应该报警。大家看到现在是不是就没有输出了,这是符合预期的对吧?啊,那当然了,为了让大家看的更清晰一些,就是我这里面还可以改一下,大家想我这里可以有乱序数据对吧,我给一个847,那大家说现在应该报警吗?现在是不是就应该报警了,因为我这尽管这个顺序在前面,但是乱序数据啊,我正常来讲是不是还是424345这三个数是连续五秒钟之内按照顺序来的,连续三次登录失败啊,大家现在是不是就报警了,诶,所以这就完全完全符合我们的要求,对吧,严格禁0NEXTX的关系,而且这个乱序数据还能够正确处理。
09:08
啊,所以这就是我们用这个不同的用了一个循环模式啊,啊解决了我们之前这个模式序列里边重复的这个条件,然后不停的往后next的这个过程就可以简洁一点,如果这里边我们设计连续十次登录失败,是不是直接改一个数改成十就完事了,对吧?100次的话直接改成100对吧?啊非非常简洁,这就是CP使用的一个好处。
我来说两句