信息、图表代理网站:http://screeps.mofengfeng.com/

前言

展示一下去年的全栈学习成果(误

前端使用react(没学过jquery,vue),后端使用python flask(本来想用node,但是轮子少。。),服务端使用nginx和uwsgi部署前后端,使用docker部署grafana和influxdb,

如果网站凉了,我会写在这里。截至 2022/7/19 还没有凉

使用过程中若出现其他问题,可以联系我,我还有心思的话就会修好。。

如何使用

参考hoho对于ScreepsPlus网站上的图表教程https://www.jianshu.com/p/de74baf6fb48

在screeps中向memory加入统计数据

见hoho教程。

例:将如下代码加入到你的主循环的任意部分。不过最好是末尾,方便统计cpu

    if (Game.time % 20) return 
  
    if (!Memory.stats) Memory.stats = {}
    
    // 统计 GCL / GPL 的升级百分比和等级
    Memory.stats.gcl = (Game.gcl.progress / Game.gcl.progressTotal) * 100
    Memory.stats.gclLevel = Game.gcl.level
    Memory.stats.gpl = (Game.gpl.progress / Game.gpl.progressTotal) * 100
    Memory.stats.gplLevel = Game.gpl.level
    // CPU 的当前使用量
    Memory.stats.cpu = Game.cpu.getUsed()
    // bucket 当前剩余量
    Memory.stats.bucket = Game.cpu.bucket

如此,你的Memory对象中便有了stats字段,其中储存了你所需的统计信息,以方便外部获取。

*** 注意 *** 由于所用数据库InfluxDB的特点,无法直接储存字典类型的数据。所以对于path中的对象,第二层的对象嵌套会转为json字符串:

(此外,不支持数组)

例:path为stats

Memory:{
    ...xxx,
    stats:{
        a:123,
        b:123,
        c:{
            d:123,
            e:{
                f:123
            }
        }
    }
}

则可视化界面最多可读取到a、b的数据,c中的数据需要对json进行解析后获取。

详情见本文末尾。

注册并登录

首先填写用户名和密码,进行注册并登录。

登录后,填写token,path,shard信息。
(格式样例:token:xxxxxxxx,path:stats,shard:shard3)

点击提交按钮,会向screeps官方服务器发送一次获取数据的请求。若请求通过,则视为测试成功。

提交成功后,会在下方显示已提交的代理列表。
(注:懒得写删除和修改按钮了,如果有需要联系我手动删除,或者我补上按钮)

信息默认两分钟收集一次,保留90天。如果有特殊需要请联系我。

此时这个网站的任务已经完成了。下一步到grafana图标网站。

Grafana

点击登录网页的上方或此地址http://grafana.mofengfeng.com/进入grafana数据可视化网站。

来到网站的首页,可以随便看看。

在左下角Sign in进行登录。

使用你在刚才网站(提交信息的网站)注册的用户名和密码登录即可。

数据源我已经在后端导入好了,无需手动配置。

在左侧菜单选择新建仪表面板。

新建一个数据面板Panel

可以看到下方是这样的数据查询面板

default可以不用管。点击select measurement,选择自己的用户名

(如果没有,请等待两分钟再回来查看)

WHERE 后面的加号可以通过path和shard筛选数据。当然你不选也可以,会显示所有shard和path的数据。

点击SELECT行中的field(value)中的value,可以对你的数据进行选择。

可以看到已经有一些数据。

这意味着我们的数据收集已经正常运行了。

*** 注意 ***

若选择的字段储存前为 js对象 ,则会被转为json后存入。

如何查询?以下是举例

假设你的path stats是这样。

rcl之上的数据都可以直接查询。但rcl这种嵌套对象,需要进行额外处理。

如此

在Transform中,新建Extract fields,并选择你的对象字段,启用Replace all fields
即可获得第一层数据。

若存在更深层次的嵌套,可以如法炮制,但操作较为繁琐。可以尝试自己编写InfluxQL进行查询,或者我更换为可以直接储存并查询多层嵌套json的数据库。

具体的图表制作操作请自行探索!

(可一定程度上参考hoho的教程https://www.jianshu.com/p/de74baf6fb48,然而grafana的版本不同,许多操作已经发生了变化。。)

后记

暂无


I am a noob