创建一个自己的服务监控页面

创建一个自己的服务监控页面

用了很久的 UptimeRobot 的自定义页面居然收费了,不能忍,于是在 GitHub 上找到了 uptime-status 这个项目,但是发现会暴露自己的 API 密钥 和域名,于是对 Cloudflare Workers 代码进行了一些修改,可以隐藏域名和 API 密钥

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
const handleRequest = async ({
    request
}) => {
    let url = new URL(request.url);
    let body = await request.text();
    try {
        body = JSON.parse(body);
        body.api_key = '你的 UptimeRobot key'
        body = JSON.stringify(body);
    } catch (error) {
        console.log(error)
    }
    let response = await fetch('https://api.uptimerobot.com' + url.pathname, {
        body: body,
        headers: {
            'user-agent': 'Mozilla/4.0 MDN Example',
            'content-type': 'application/json'
        },
        method: 'POST', // *GET, POST, PUT, DELETE, etc.
        redirect: 'follow', // manual, *follow, error
    });

    response = new Response(response.body, response);
    response.headers.set('Access-Control-Allow-Origin', '*');
    response.headers.set('Access-Control-Allow-Methods', '*');
    response.headers.set('Access-Control-Allow-Credentials', 'true');
    response.headers.set('Access-Control-Allow-Headers', 'Content-Type,Access-Token');
    response.headers.set('Access-Control-Expose-Headers', '*');
    let json = await response.text()
    try {
        json = JSON.parse(json)
        // 隐藏域名
        json.monitors = json.monitors.map(site => {
            site.url = undefined
            return site
        });
        json = JSON.stringify(json)
    } catch (error) {}
    return new Response(json, response)
}

addEventListener('fetch', (event) => {
    event.respondWith(handleRequest(event));
});

顺便对原项目增加了一个 gh-pages 脚本,build 完以后运行 npm run gh-pages 可以快速发布到 GitHub Pages 上

可以直接 fork https://github.com/Ice-Hazymoon/status ,修改配置文件后直接使用

预览我的服务监控页面:https://status.imiku.me/

替代品

如果你不喜欢用 UptimeRobot 的服务,可以尝试一下 https://github.com/louislam/uptime-kuma ,但是需要有一台自己的服务器,而且不能自己监控自己,万一监控服务器炸了咋办 XD

署名 - 非商业性使用 - 禁止演绎 4.0