Screeps 制作统计图表

screeps 系列教程

作为一款 24 小时运行的在线游戏,我们没办法时刻坐在电脑前查看我们殖民地的状态,并且在房间数量过多后,对所有房间的情况一览也变成了比较麻烦的事情。那么这篇教程,我们就来讲一下如何使用 screepsPlus 创建一个在线统计图表,方便我们对殖民地的情况进行全局性的浏览。

本文将要实现的迷你图表

特别鸣谢:感谢 @yuandiaodiaodiao 大佬的分享。

制作流程

使用 screepsPlus 制作图表需要如下三个步骤:收集信息并存入内存、创建用户代理、Grafana 制作图表,并且由于 screepsPlus 是自托管服务,所以我们不需要额外设置服务器(当然访问速度可能会慢一点 ),我们分别简单介绍一下制作步骤:

  • 收集信息并存入内存: 由于图表并不知道你要展示哪些信息,所以你需要写一些代码来收集要展示的信息,并且把他们存到你的内存里。别担心,这并不会消耗多少内存。
  • 创建用户代理:这一步的目的是使用 screeps 的 token 来让 screepsPlus 可以访问你的内存,从而将内存信息转换成图表可以展示的数据集。
  • Grafana 制作图表:在数据准备好了之后,我们就可以使用 Grafana 来一个个的创建我们的图表,这一步比较复杂,但是也很有乐趣。

什么是 ScreepsPlus?

ScreepsPlus 是一个社区服务器,由 ags131 管理维护。它还包含了许多有用的工具,比如我们这次要用到的图表,screeps 头像下载器,bodys 部件计算器等,更多内容请访问 screepspl.us

什么是 Grafana?

Grafana 是一个国外的开源图表模组,你可以把它部署到你的服务器上,并为其提供数据源来进行自定义的图表展示,我们这次的创建图表就是使用了部署在 ScreepsPlus 服务器上的 Grafana 服务。

收集信息

接下来就让我们正式开始准备工作,首先我们要收集要展示的数据,本文中我们会以 GCL、GPL、CPU 使用情况和 bucket 使用情况为例,来制作一个迷你图表,首先我们创建如下函数并在 loop 函数的末尾调用它:

/**
 * 全局统计信息扫描器
 * 负责搜集关于 cpu、memory、GCL、GPL 的相关信息
 */
const stateScanner = function () {
    // 每 20 tick 运行一次
    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
}

/**
 * 将 stateScanner  加入到你的主函数调用中
 */
module.exports.loop = function () {
    // 之前的代码 ...

    // 统计全局资源使用
    stateScanner()
}

注意函数开头处我们设置了 20 tick 运行一次,因为 screepsPlus 默认是一分钟收集一次信息,所以我们没必要设置太高的运行频率。

在保存并提交代码后,我们就可以在 Memory.stats 下看到我们收集好的数据了:

现在数据已经存到内存里了,接下来我们来创建用户代理:

创建代理

现在我们来创建用户代理,来把保存在游戏内存中的数据提取出来,处理成 Grafana 可以使用的数据集。为了使 Screeps 可以访问到游戏内存,我们需要为其生成一个 token。

点击 此处 打开 token 生成页面,由于我们只需要让 ScreepsPlus 访问我们的内存,所以我们可以根据下图所示创建一个有限 token,点击右下角的 Generate token 即可生成:

生成有限 token

生成完 token 后我们访问 screepspl.us hosted-agent 来配置我们的代理,你可能需要先注册一个用户,注册并登陆后点击下图中的 NEW 即可创建新的用户代理,如果你没有看到这个页面的话,点击左侧的 Hosted Agent 也可以来到这个页面:

创建用户代理

然后我们需要填写下图红框中的内容:

  • Screeps Token:把你刚才创建的 token 复制到这里。
  • Shard:修改为你想要展示的镜面。
  • Path:这个是你内存中要展示的字段,由于我们把数据保存到 Memory.stats 中,所以这里直接默认即可,当然你也可以不填,这样他会默认读取整个 Memory 中的字段信息。

填写完成后点击右下角 TEST 按钮即可进行测试,如果弹出黄框中的信息即为配置成功。之后点击 SAVE 按钮即可完成配置。注意,点完 SAVE 之后不会有提示,请耐心等待窗口关闭。

至此我们的数据就已经准备完成了,接下来就开始制作我们的图表吧~

制作图表

访问 screepspl.us grafana 或者点击 ScreepsPlus 侧边栏中的 Grafana 来打开我们的图表,首次访问的时候会比较慢,根据网络状态会加载30秒 ~ 2分钟左右。加载完成后你应该就可以看到 Grafana 的首页了,首先我们来配置默认的数据源。点击左侧列表中的 Configuration 找到 Data Sources

配置默认数据源

然后点击 ScreepsPlus-Graphite,将 Default 启用后点击 Save & Test 即可。

打开 ScreepsPlus-Graphite
设为默认并保存

———————— 注意,如果你没有找到上面的默认数据源的话,说明 ScreepsPlus 可能暂时无法使用,你可以过一段时间再来看看,如果你确实想实现自己图表的话,请访问 本文档 来尝试其他图表,或者使用 本项目 搭建自己的图表 ————————

默认数据源配置好了之后我们就可以开始制作图表了,返回首页,点击中央的 Create you first dashboard 来开始图表制作(由于我之前已经创建过图表,所以这里被划掉了,你的按钮应该是亮起状态 )。

之后你应该能看到如下画面,由于我们的展示页面中包含多个图表,所以可以点击右上角的红框按钮来新增图表。现在,我们点击 Add Query 来为我们的第一个图表指定查询:

点击按钮后打开的就是默认的图表编辑器,分为 效果展示图表配置 两部分:

然后你需要确认一下你现在选择的数据源是不是 ScreepsPlus-Graphite,点击 Query 下拉框。如果你看到了如下选项的话就说明现在正在使用正确的数据源:

正在使用默认的 ScreepsPlus-Graphite 数据源

然后你就可以在下面看到图中的字段,点击 select metric 按钮,经过短暂的延迟后,他就会弹出所有可选的字段,经过不断的选择后,你应该能得到和我类似的 Series:

这时候,你就可以在图表上看到数据了:

NICE

但是你可能会发现一个问题,这玩意不是折线图啊。是的,产生这个的原因是因为我们的数据是一分钟获取一次,并不是连续的,所以我们需要指定一下图表的空值处理方式,选中左侧第二个图表,并将右侧的 Null value 修改为 connected 即可:

这样就修改好了图表的显示效果,接下来我们在这个图里添加上 bucket 的容量,点回第一个选项卡,在右侧点击 Add Query 按钮,然后按照刚才的办法炮制出 bucket 的值。

添加之后我们会发现,由于 bucket 的值很大(极值 10,000),它和 cpu 共用一个 y 轴的话会把 cpu 挤成趴在地上的一条横线,这样可不行,现在我们给 bucket 单独配置一条 y 轴:

在第二个面版中点击 Add series override 按钮,选择我们的 bucket,然后点击右侧的 + 号,选择 Y-axis > 2。这样我们就可以在图表中看到 bucket 和 cpu 都正常显示了出来。

接下来我们再优化一点显示细节:

更简洁的图例:在 query 的 function 中选中 aliasByNode 并将值设置为对应的节点(Series 中每一个字段称为一个节点 ),即可把图例名从 screeps.玩家名.cpu 优化成 cpu。注意:由于名称发生了变化,所以你可能需要重新给 bucket 指定 y 轴。

添加最大、最小及平均值:在第二个面板中的 Legend 里勾选 Min、Max、Avg 即可:

填写图表名:最后,我们点击第三个面板,在 Title 中输入名称即可为我们的图表命名:

然后,点击左上角的返回按钮,我们就可以看到第一个图表的完整模样啦:

接下来,我们讲一下其他图表的配置:

展示当前 GCL 及 GPL 进度

如果我们只需要查看信息的当前状态的话,折线图肯定就不合适了,我们接下来就用仪表盘图表来展示 GCL、GPL 进度,首先点击右上角新增图表,然后按照上文中的步骤完成基本的配置,如果你找不到新增图表按钮的话,多点几次 Esc 试试

新增图表
完成基本配置

然后点击第二个面板,选择上面的 Graph 就可以看到所有的可选类型了,这里我们选择 Gauge 来将图表修改为仪表盘类型

选择仪表盘

然后我们按照如下步骤完善仪表盘的配置,由于我们在统计信息时已经将数据处理成百分比形式了,所以这里的最大值和最小值直接默认即可:

  • Field > Decimals: 设置显示小数点后多少位的信息。
  • Thresholds: 配置颜色显示,点击颜色点可选择颜色。

然后我们就完成了第二个图表的配置,按照相同方式即可配置出 GPL 的图表。同时在这个页面可以按住图表右下角并拖动来调整图表大小,按住标题来拖动图表位置。

然后重复上面的过程,我们就可以得到 GPL 的进度显示,最后调整一下样式,我们就完成了我们迷你图表的制作,图中的 GCL / GPL 等级是用了 Singlestat 图表制作,非常简单,你可以自己尝试完成。

总结

本文简单介绍了如何给 screeps 创建一个在线统计图表。接下来你可以继续深入,完成类似房间能量统计、Nuker 填充统计等图表,如果有更多配置心得欢迎留言交流~

欢迎点击 Screeps 中文目录 来查看更多关于 screeps 的教程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,042评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,996评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,674评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,340评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,404评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,749评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,902评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,662评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,110评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,577评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,258评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,848评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,726评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,952评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,271评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,452评论 2 348

推荐阅读更多精彩内容

  • Grafana是一套开源的监控图表显示框架,可以很方便地和监控框架结合来显示精美的监控图,比如常见的基于Zabbi...
    Cloudox_阅读 20,096评论 10 15
  • 可视化是监控的目标之一,没有一个好的展示,再多的数据我们也很难分析。这里主要对Grafana进行介绍,前面我们虽然...
    super_pcm阅读 1,741评论 0 1
  • 一、准备搭建环境 1.系统:CentOS 7.3 2.软件:Zabbix 3.2 二、安装前的准备 最小化安装Ce...
    尘世不扰阅读 4,133评论 8 31
  • 人的思想内核是很容易换掉的。 很多说《香蜜沉沉烬如霜》这种剧是传统文化,它只不过是穿着中国服装的希腊神话。 中国的...
    伯言z阅读 208评论 0 0
  • 朋友问:“和我一起养多肉吧?网上才50元,就发70几棵,我一个人养不了那么多。” 回复到:“不养,身上已经很多肉…...
    a_amy阅读 160评论 0 1