00:00
好,那么我们写现在写我们的这个第一个插件,也就是用Python写一个查看文件数目的input插件。啊,那么这里面呢,有个后缀叫exec版,什么意思啊,我现在给他大家可以提前说一下,就是呃,Telegraph它是如何集成外部插件的。嗯,是telegraph呢,你去写一个配置文件,那么在配置文件里面呢,有一类的这个,呃,组件呢叫input。点exec。然后这个配置文件呢,会要求你去写一个可以执行的一段程序,可以是shell或者说是什么Python什么的,呃,那么你通过这个呃,Exec呢,它在启动的时候呢,就是你t gray在启动的时候呢,发现有这个eec的插件,它就会去执行这个命令,然后执行这个命令之后呢,它会把这个呃命令执行的程序的输出啊,把它的输出当做自己的一个啊数据的输入来这样集成外部的环境,所以说呢,我在这个eec里面,我可以写一个PYTHON3。
01:09
然后叉叉叉叉点python.p然后我又去执行一个pthon脚本,然后这个Python脚本呢,帮我去完成一系列网络请求啊,啊数据清洗啊或者各类操作,最后呢,来给我返回出来一串数据啊,那么这个时候呢,我的这个telegraph就可以拿这个数据啊当做我的输入去穿越我后面的什么processor或者aggregator,或者说是output组件了啊,那么这呢,就是它集成外部组件的一个逻辑,那么EXECD呢,到后面的时候呢,我们会给大家讲啊,Exec CD和exec的区别是什么。呃,那么作为我们的第一个插件呢,就是啊,我会带着大家就把这个脚本完全手敲下来啊,告诉大家这里面为什么这么写,然后有什么用,呃,那么这样的话呢,就是需要告诉大家我们的这个Python开发环境,我个人的话呢,是喜欢在这个Windows上去写Python脚本,然后东西写完之后呢,我会放到这个Linux,它自去跑啊,当然了,这个我们现在用的这个stos的环境呢,它自带自带一个PYTHON3和PYTHON2,那么你在这个啊Linux上呢,直接写这个Python脚本也是完全没有问题的啊,不过呢,我们现在呢,就是呃,为了录课方便嘛,我们用这个呃Vs code,然后来写一个这个在Windows上用Vs code呢,给大家来写一段这个Python脚本,让大家体验一下这个插件的开发过程。
02:33
好,那么现在开始我们的需求非常简单,就是我们这个Python脚本呢,他其实要去啊,有一个输入,也就是说他要去我们的这个,呃,命令行里面呢,拿到一个文件的路径,那拿到一个目录啊,然后拿到这个目录之后呢,去查看这个目录底下的这个所有文件,再把统计后的文件数呢,以这个以Fla TB行协议的方式呢,啊给打印到控制台就可以了。
03:00
那么接下来呢,我们就去写下这个程序。好,那么我们现在呢,来看一下啊,这个程序的一个写法。我们可以把这个我已经写好的这一段呢,给截图粘到屏幕上来啊,给钉到屏幕上来。好,我们接下来呢,就开始写这条程序,呃,Import包呢,一般来说是你用到什么呢,在导什么,不过这里呢,我们已经啊写好了,那就直接先倒过来。后面给大家解释一下这些包是干什么用的,这个time这个包呢,我就不倒了。呃,首先呢,就是在我们的这个,呃,刚才说了,就是我们这个程序的标准输出呢,它会作为这个telegraph的标准输入,所以说呢,我们需要上来呢,先去弄一个模板啊,等着后面传值进来,那么这个模板呢,它其实就可以是in Fla DB行协议的数据格式还是手敲。
04:00
也就是说我们这个,呃,测量的名称呢,叫pass file name,然后name呢,我们可以加一个建筑,对这个地方呢,就表示我们的一个tag是吧,一个标签集,然后呢,啊给一个数字,就是它的它的这个这是我们的字段了。然后就是那这样的话呢,就是我们有了一个最基本的模式,呃,这个模式这个等着这个模板,然后等着后面呢,我们这个传值进来,然后把这个字符串给填掉,我们现在可以看一下啊,可能我们这个有些同学呢,他还是没有Python开发的这个经验,比如说我现在可以设一个,设一个什么呢?就是na等于一,现在把这个模板呢,再打印一下。打印上面这个。就是这个form的这个,呃,方法呢,它其实会有一个返回值,就是返回的就是已经填充好的字符串。啊,我们可以看到呢,现在这个叫本一执行的,就打印了我们现在的这个数据,呃,Pass fair name,你们可以,你可以看到这是一个符合in Fla DB行协议的,只不过是没有时间戳啊,它是啊,这个一呢,成功的替换掉了我们刚才声明这个变量的位置啊,所以说呢,这个东西的就是这么用的,那么接下来呢,我们就去获取,想办法去获取这个命令行的参数,在Python里面呢,获取命令行参数是这样啊,通过S2V这个方法。
05:29
去通过下标呢啊去获取这个,呃,输入这个命令行调用时的这个参数,那么现在可以也给大家试一下,比如说我PYTHON3,我还是把这个pass打印一下。好,那么我现在呢,就就这样吧,Python。我看我这个烟是可以用的是吧,然后我现在要退一下。然后接接下来呢,我用Python,然后点杠点来跑这个,然后呢,我说hello world。
06:05
就hello吧,你可以看到就是呃,我现在这个脚本呢,其实已经成功的把它把hello给拿到而打印出来了,那么二个零是什么呢?二个零其实是我们现在这个脚本的名称,它这个其实是从哪里算的呢?它从这里算的啊,Python后面的这些都算是一个参数了。然后你可以看到我如果这里写零的话呢,就是我们这个脚本的一个角斗路径,那么如果是一的话呢,呃,就是我们的海,那么通过这个方式呢,我们去命令行里面啊,获取我们啊,待会用户会传进来的一个啊文件的一个路径啊,那么现在呢,就是我们还要去干一个什么事呢,我们拿到这个路径之后呢,自然要去啊,看这个路径底下的这个所有内容,那我们现在呢,可以通过啊global这个库格,Global这个之前给大家讲过,它其实是一个shell里面用的,呃,可以说是一个简化版的正能表达式。
07:01
那么现在呢,我们就向这个glo里面传pass,传pass之后呢,呃。我们可以打印一下,先看看什么效果。然后这个地方呢,我就不再去命令行里获取了,先把它注掉,然后我pass呢,我现在给写死啊,作为一个测试,我们去打印D盘下面的所有。文件看看这里面是什么情况,但是你记住啊,我们现在打印的是格global是吧,Global呢,你想找所有文件,你需要打个星号,我们现在看一下是个什么情况,你可以看到啊,就是我现在这个格global,这格global这个方法呢,他把这个呃D盘,D盘跟目录下的这个所有的呃目录和文件呢,全部打印出来了,那么这就是它的一个啊格外的一个用法,但是我们现在呢,说要是说是要返回啊,这个目录底下所有文件的数量,那么我们呢,就不能使用这个列表的方式,我们要把这个列表的长度呢,给它提取出来,所以在外面呢,套一层这个另方法。
08:04
那这样呢,就可以得到这个列表的长度,你现在可以看到我现在的这个,呃,底下的这个文件数是吧,是27个,那么现在呢,就直接。啊,让我们的啊起个名字吧,叫那等于他。然后呢,把我们这个数据呢,直接打印,因为我们说了就是呃,待会真的跑起来时候,大家会更有感觉,就是telegraph呢,这个插件,它其实是需要把它的这个数据呢,输出到标准输出的就是s TD out,那么这个对于很多大多数编程语言来说呢,当你普的时候呢,实际上就是在往这个标准输出上写东西啊啊,所以说呢,我们这里直接用print函数,然后呢把这个template。这个模板直接进行一个解析对吧,进行一个相当于渲染了这个小操作,相当于把这个name传进去。啊,那么这样呢,我们就可以直接获取到这个D盘下面的啊27个文件啊二这个这个文件数目,然后是27,并且呢,把它啊渲染到我们的这个模板里面去,呃,打印出来之后呢,就是这个效果。
09:13
没有时间戳,呃,那么现在呢,打印完之后啊,先把这个把这个注释放开,因为我们这个测试也通过了,再把这个注回去,呃,接下来呢,就是我们啊先先这样,那么这个脚本的先先写成这样,然后把这个它把它呢复制。啊,到我们的这个。Co底下呢,我们再去做一个目录,叫script,专门放我的脚本。然后CD进来。好,那么这里面呢,就专门放我们的脚本,现在我们去创建一个文件啊,叫Di name input,一个EXE。A点派,然后把这个我们的脚本呢,直接粘进来。
10:04
那么现在大家呢,如果不放心的话呢,还可以出去跑一下,看能不能正常的运行。我们用PYTHON3。啊,PYTHON3,然后DRR,然后我们再传一个路径进去,这个地方呢,要加一个双引号啊,然后我们传OPT module。我好了,杠星,记住杠星。Eight。哦,写错了,Du。可以看到呢,现在就是我们这个呃脚本呢,它成功的发现我们这个OPT modu底下呢,有12个呃目录或文件,呃,那么我们的这个功能呢,就算是实现了,那么接下来呢,我们去编写telegraph的配置文件,让他使用这个脚本呢来作为一个输入。好,那么接下来呢,我们来干这个事情啊,我们去,我看这里面应该有一个写好的配置文件啊,有一个写好的,那把这个复制出来吧。
11:07
呃,这个地方呢,我们直接去创建一个新的配置文件,就叫叫EXEC01吧。名字太长了也不好。好,那么这里呢,就直接粘进来。呃,粘的时候呢,就是这个地方,我们的这个呃目录不大一样,对吧,我们刚在底下创建了一个新的script。然后这一次呢,呃,我给大家讲解一下什么意思啊,呃,就是comments呢,就是我们这个,你可以看到我们现在有一个新的。新的这个。呃,输入组件,那么输入组件的名字呢,叫EXE,翻译过来呢,就要执行,那么它执行一个什么呢?它执行一个叫它执行一个命令啊,这个命令呢,就是我们刚才在外面那个shell里面敲的,也就是PYTHON3,然后呢,指定我们这个pthon脚本的路径,也就是说我用用Python啊运行这个脚本,然后这个脚本呢,它接收一个参数是home at硅谷星。
12:04
啊,那么这样的话呢,就是我们要去看我们home艾特硅谷啊星下面有多少文件,好,那么这样的话呢,我们这个程序呢,配置文件呢,也算是编写完了,我接下来呢,我们退出。保存退出。好,接下来使用telegraph命令呢,来跑一下这个。IGG,然后CE ec,对这样啊,看一下我们的这个程序的输出。啊,你可以看到我们的这个数据呢,它现在成功的啊产生的输出啊,他现在呢,我们是inter是三秒,也就是说我们刚才写的脚本呢,它会每三秒钟啊就调用一次,完了之后呢,数据的刷出时间呢,它是啊我们是设到五秒啊,也就是五秒钟呢,一网控制台一打印啊你可以看到就是我们的刚才的那个脚本里面啊,没有去设这个时间戳,但是呢,现在呃脚本,但是他的graph这个框架呢,它给我们每条数据的这个时间呢,啊都给打上了,然后现在可以看到这个home at硅谷底下呢,其实是有18个文件,呃,就是算上目录一共是有18个,那么我们现在呢,去home at硅谷下面。
13:16
尝试去创建一个啊,尝试创建一个,比如说我现在就touch一个,Touch一个文件出来,哈哈,点TXT。好,我们再去看一下这个脚本的输出。你可以看到这里面呢,现在说的还是18个,哎,但是你看呢,就突然从这个时间点开始啊,数据变成19个了,那么这样呢,也就是我们通过这个啊脚本的方式呢,去向这个呃,Telegraph来集成了一个我们Python脚本写的一个输入插件,这就是我们通过ESEC呢去呃做这件事情的方式。那么接下来呢,再给大家说一个比较重要的点,就是我们这个脚本的退出信号啊,退出信号这个其实是一个非常重要的点。
14:02
呃,我们现在呢,这个程序呢,就是打印完就完了啊,它没有任何复杂的逻辑,但是有些脚本呢,它就需要处理一些比较复杂的逻辑,比如说啊,它可能是和某些数据库啊相连,而且要判断这个数据的啊格式符不符合他的要求,那么这些时候呢,啊整个脚本的逻辑就会变得相对复杂,呃,那么呃,我们怎么样告诉telegraphph啊,我这个脚脚本的执行是成功还是失败了呢?啊假如说数据不合规啊,那么我想把它定义成失败,人为的把这个啊能顺利执行的脚本定义为失败,那我应该用什么方法呢?啊,其实是应该用这个API,那就是s.EXEX退出,那么退出这里面呢,它允许你传一个int类型的数字啊,也就是我们这个退出的信号啊,我们知道在Linux里面呢,如果说一个程序呢,它最后返回整数零,就意味着这个程序呢,是成功运行的啊,我们什么都不写,这个程序呢,如果中间不报异常,那么它的返回值呢,也是零啊。
15:02
那么我们这个时候呢?比如我现在可以写一个退出V1啊,我们现在保存,那么我们这个脚本每次被调用的时候呢,啊,退出的时候这个退出信号都是一,我们再执行一遍刚才的这个脚本,来看看他是什么情况t graph。呃,你可以看到啊,就是我们现在这个呃程序呢,在不停的往外打日志,打什么呢?说error啊,在这个插件里面呢,它是以一的这个状态来退出的,那么这个时候呢,其实在我们的telegraph,如果你配了这个呃日志的话,Telegraph其实会把这个你这个插件发生错误的消息给打到日志里面去,那么这也就是我们使用这个退出的这个信号啊,它使用这个程序的退出时的这个信号来向它的graph告诉我们是正常退出还是啊异常退出,那么通过这个方式呢,你可以在什么TRY开时或if else的时候呢,直接调用调用s.ex然后直接传零和一啊,告诉我们telegraph你是正常了还是error了。
16:04
好,那么这就是我们通过这个exec这个脚本呢,啊,这个这个插件呢啊,去集成外部程序的一个方式啊,那么到这里呢,就讲解完毕了。
我来说两句