在过去的工作中,经常会有一些艰巨的任务需要很长时间才能完成的情况,但是最好在最后迅速做出反应,我该怎么办? 当然,写一个程序...
第一个版本只使用了通知发送,但是时间显示给该过程带来一些不便。 由于对机器的操作要求很高,因此机器当时变得不稳定,我想搬走喝咖啡。 但请在过程完成后再回来。 因此,出现了程序的想法,该想法被链接到控制台管道或包装为sudo程序,最后它向您发送了聊天通知。 因此,您将在台式机和电话上看到一条通知。
对于那些不想阅读但想尝试的人。 (仅Linux)
- 我们在机器人上注册并通过命令/ config获取令牌
- 下载客户端
- 发射!
wget https://ice2heart.com/snitch chmod +x snitch SNITCH_USER_ID=<here_is_your_uuid> ./snitch sleep 10
伺服器
这个想法很简单,我们需要一个简单的服务器来接收消息并将其转发给用户。
而且由于我不想麻烦注册,存储和管理帐户,因此我决定使它对我来说看起来很简单(现在看来,但是我不确定这是否很好)。
使用机器人,一个人会收到一个唯一的uuid v4,然后他会使用该v4进入服务器。 授权是在客户的聊天端,但我只存储了几个uuid内部ID。
因此,以node.js作为服务器并添加一些koa,nedb,node-telegram-bot-api,我将服务器部分放在一起,该架构最初在聊天中隐含了更多的网关,但是没有案例,因此只有一个电报。
另外,我不想将js应用程序直接放在Internet上,因此使用docker的魔力,我添加了一个caddy代理服务器。 为什么呢 因为我喜欢配置文件的格式。
服务器看上去很简单,但是足以进行操作。
因此,我们得到了一个如此简单的docker-compose文件,我们还需要一个bot密钥,将其放入.env文件中,以免将密钥保存在github中,这不好。
因此,要启动我们需要docker,docker-compose和bot cart的密钥,要获取您的密钥,您必须转向botfather 。
之后,docker-compose up,我们的服务器就可以工作了。
顾客
对于客户端,我决定采用go的原因很简单,因为它将转到1个二进制文件,然后可以轻松分发该文件。
关于客户有两个主要想法。
- 我们集成到管道中,收集日志(未实现),发送消息以关闭管道。
- 我们包装应用程序,例如sudo,最后我们发送日志和带有返回码的消息。
在实现过程中,没有简单的方法来查找管道中先前程序的返回代码,不幸的是,这降低了在管道中使用该程序的乐趣。
对于配置,我选择了环境变量,因为它们可以轻松地在机器之间复制设置,并且可以轻松替换它们。
结果,安装变得尽可能简单。
- 下载二进制文件
- 我们在PATH中注册
- 我们使用您的uuid在外壳配置中写入SNITCH_USER_ID变量
- 做完了,你太棒了!
现在,您可以以snitch make
的形式运行长命令,并且在完成后,我们将收到一条消息,指示应用程序已完成,甚至可以知道该应用程序是否成功。
为了构建,我编写了一个小脚本,简称为r。 它将收集go应用程序并将其通过upx。 在输出处,我们得到一个漂亮的静态链接二进制文件。
您可以在此处找到源代码。
当一切准备就绪后,您可以使用命令/ config转到机器人
他将创建一个有关我们用户的记录并返回uuid。
您也可以始终从数据库中删除,为此有一个命令/删除
因此,我们得到了一个相当简单但有效的应用程序,即使我们喝咖啡,它也可以轻松自然地通知我们已完成的任务。