用Arduino监测MSSQL数据库中进程阻塞情况



有天开了个脑洞然后又把它填上了,做了一个监测公司在用的MSSQL数据库的进程阻塞情况,用一两杯星爸爸的价格干一台PC的活老板你总开心了吧。

这个脑洞是这样的:Arduino连着网络模块接入局域网,定时(暂定8秒)访问一个网页,这个网页就用来检测并返回MSSQL当时进程阻塞数。Arduino接收并解析网页的返回结果,如果零阻塞,亮绿色LED;如果有1-5个阻塞,同时亮绿色和黄色LED;如果有大于5个的阻塞,同时亮黄灯和红灯;如果只亮红灯则说明这套小系统本身存在错误。

当然由于是定时刷新,会有一定时间的滞后。总的来说先当个概念玩具尝试下。

所以核心问题是如何访问网页,当然基础的基础是如何访问网络。

某宝上搞了一块ENC28J60网络模块,试着学习了一把。首先当然是接线,这个还是比较清晰的,按SPI定义来即可。
模块 -- Arduino
SCK -- D13
SO -- D12
SI -- D11
CS -- D10*
RST -- RESET
GND -- GND
VCC -- 3.3V**

说明:
*:D10可以改其它的,因为具体需要体现在初始化的代码中。
**:3.3V有可能导致网络模块供电不足而不能工作。我的就是这样,如果VCC接我的山寨Arduino Nano的3.3V,实测在模块的VCC和GND之间电压只有2.8V。可以用那个山寨nano的5V供电,但时间稍长28J60便严重发热。我现在是剪了一根杜邦线,中间串了一个1N4007利用它的正向压降稍微降点再接到VCC上。

驱动找卖家要的,好使。但我实际情况比例子稍微复杂点:网络不是标准的C类网,而且有网关和DNS,所以查了下资料,设置IP地址时用到了以下的代码:
static uint8_t mac[] = {0xF4, 0x8E, 0x38, 0xA4, 0x30, 0x31}; // 保证6个字节就行,随便写。但是第一个字节必须是偶数。
const static uint8_t ip[] = {10, 16, 39, 40};
const static uint8_t gwip [] = {10, 16, 36, 1};
const static uint8_t dns[] = {172.16.10.12};
const static uint8_t subnet[] = {255, 255, 252, 0};

调用次序是:ether.staticSetup(ip, gwip, dns, subnet)

访问网页的代码参考自http://www.rogerclark.net/aurduino-ethercard-multiple-browser-request-example/。有点小复杂,但是考虑较全面并且支持一次访问多个网页。考虑到将来也许有这个需求所以先收了这篇。

为了简单方便,以及配合单位现有的ASP.NET架构,网页采用ashx,无非就要它查询下当前阻塞数并返回这个数字而已。原理上讲用php也没问题,反正能返回个text/plain流就行。取到ashx返回的内容之后的下一个难点就是如何解析出真正想要的结果。因为HTTP头还总是存在的,所以需要扔掉。我的做法是用String类的lastIndexOf函数,找出所获得的全部字符里最后面的“\r”的位置,从这里开始+2的位置截取到最后。

LED显示没啥花头,消耗3个IO口并根据业务逻辑digitalWrite高低电平而已。

效果就是这样的:

这要是正儿八经的包装下,再做它十七八个排成一堵墙应该也很壮观吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ki1381

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值