/spark activity

基本信息

属性 值
命令名 activity
别名 activitylog、log
来源 ActivityLogModule(ActivityLogModule.java:105)
参数 --page <page no>
Tab 补全 TabCompleter.completeForOpts(arguments, "--page")

查询 spark 自身的历史活动记录(谁在什么时候跑了什么诊断)。这是排查「这条性能报告是谁生成的」以及回顾历史卡顿事件的入口。

功能

  1. 取 platform.getActivityLog().getLog() 并先剔除过期条目:log.removeIf(Activity::shouldExpire)
  2. 若清理后为空,回复「There are no entries present in the log.」并返回
  3. 页码 int page = Math.max(1, arguments.intFlag("page")) —— 页码下限被强制为 1,传 0 或负数会回到第 1 页
  4. 用 Pagination<Activity> 渲染,标题为「Recent spark activity」(金色)

分页提示的翻页命令由 lambda 动态生成:"/" + platform.getPlugin().getCommandName() + " activity --page " + value。由于服务端命令名是 spark、客户端是 sparkc,翻页提示会自动使用当前平台的命令名,无需硬编码。

记录什么

活动日志由以下操作写入(均通过 platform.getActivityLog().addToLog(...)):

来源操作 记录类型 内容
profiler stop/upload 上传成功 Activity.urlActivity 「Profiler」+ 查看器 URL
profiler --save-to-file Activity.fileActivity 「Profiler」+ 本地文件路径
heapdump Activity.fileActivity 「Heap dump」+ 文件路径
heapsummary 同上 摘要文件路径

fileActivity / urlActivity 的首参均为 sender(命令发送者),因此日志能追溯到发起人而非仅是服务器。

数值

数值名 值 来源
条目过期时间 60 天 Activity.java:80 —— (System.currentTimeMillis() - this.time) > TimeUnit.DAYS.toMillis(60)
页码下限 1 Math.max(1, arguments.intFlag("page"))
活动日志文件名 activity.json SparkPlatform 构造:plugin.getPluginDirectory().resolve("activity.json")

过期判定用的是每条记录自己的时间戳与当前时间的差,因此日志文件中的历史条目在读取时逐条过滤,而不是整体按文件修改时间清理。

交互

触发 行为
日志为空(或全部超过 60 天) 回复「There are no entries present in the log.」
不带 --page 显示第 1 页(intFlag 未命中时返回 -1,被 Math.max(1, -1) 归一为 1)
--page 0 或负数 同样显示第 1 页
服务端停止 SparkPlatform.disable() 遍历 CommandModule.close();日志文件在构造时已 load(),随平台生命周期持久化

相关条目