统计

统计(Statistic)

目录

Statistic 资源是一个只读端点,返回扁平的数字计数器。它专为仪表盘以及监控/告警系统(例如 Zabbix)设计:每个值都有稳定的 JSONPath,因此可以直接映射到监控项或触发器上。

  • 基础路径: /api/v2/statistic
  • 作用域: statistic:read
  • 起始版本: 3.1.0

注意

请先阅读 API v2 概览,了解认证、响应封装与错误码。

端点

动词 路径 作用域 用途 起始版本
GET /api/v2/statistic statistic:read 返回一个或多个统计主题 3.1.0

查询参数:

参数 默认值 取值
profile qso qso、confirmations、system、full

每个主题都嵌套在自己的键下,因此无论你单独请求该主题,还是把它作为 full 的一部分请求,某个值的 JSONPath 都完全相同(例如 $.data.qso.total)。响应的 meta 会报告所请求的 profile,以及令牌所有者是否为 admin。

注意(集体台令牌报告全台数据)

与 QSO 资源不同,这些计数器不会收窄到当前操作的成员:每个集体台令牌在任何权限级别下都能看到整个集体台的数字。这些值是聚合数据,而不是 QSO 数据。

有一点后果值得了解:对于低于干事级别的成员,$.data.qso.total 会大于 GET /api/v2/qso 的 meta.total。

主题

qso(默认)

QSO 统计分析,范围限定在令牌所有者的台站位置——这些是你自己的数字,而不是整个实例的。

curl "https://<WAVELOG_URL>/index.php/api/v2/statistic?profile=qso" \
     -H "Authorization: Bearer wl2_your_token_here"
{
  "data": {
    "qso": {
      "total": 28,
      "activity": { "today": 2, "month": 5, "year": 7 },
      "breakdown": {
        "by_band": [ { "band": "20m", "count": 12 } ],
        "by_mode": [ { "mode": "CW", "count": 7 } ]
      },
      "dxcc": {
        "worked": 15,
        "confirmed": 9,
        "confirmed_paper": 6,
        "confirmed_lotw": 7,
        "available": 340,
        "deleted": { "worked": 1, "confirmed": 1, "confirmed_paper": 1, "confirmed_lotw": 0 }
      }
    }
  },
  "meta": { "profile": "qso", "admin": false }
}

注意(Wavelog 3.1.1 新增)

dxcc 块新增了纸质/LoTW 确认的拆分以及一个 deleted 子对象,与仪表盘的 DXCC 卡片一致(PR #3663,对应 #3656 / #3615)。

  • confirmed_paper、confirmed_lotw:confirmed 按纸质 QSL 与按 LoTW 的拆分(允许重叠,因此各自 <= confirmed)。
  • deleted:对已通联但此后从有效列表中移除的 DXCC 实体,给出同样三个键——即卡片上带括号显示的数字。
  • available 现在只统计当前有效的 DXCC 实体(不含已删除的),从而与仪表盘「Needed」的分母保持一致。

dxcc 对应仪表盘的 DXCC 卡片。confirmed 统计通过纸质 QSL 或 LoTW 确认的实体(两者合并并去重——也就是卡片上「Needed」的分子);confirmed_paper 与 confirmed_lotw 是卡片在 Confirmed 行展示的拆分,因此各自 <= confirmed,而它们的和可能超过它。available 是当前有效 DXCC 实体的数量(不含已删除的)。deleted 对已通联但此后从有效列表中移除的实体提供同样的结构——即卡片上带括号的数字。eQSL 被有意排除在 dxcc.confirmed 之外,尽管它会出现在下文的确认主题中。

by_band 与 by_mode 返回按数量排序的靠前条目。

confirmations

按确认类型统计的 QSL 确认数量,并连同总计一起按波段和按模式细分。与 qso 一样,其范围限定在令牌所有者的台站位置。

与其他主题不同,confirmations 接受筛选条件。它们全部可选,并且可以组合使用:

参数 默认值 取值
type 全部 以逗号分隔的 lotw、eqsl、qsl、qrz、clublog 列表
since 无 YYYY-MM-DD — 仅限该日期当天或之后收到的确认
qso_since 无 YYYY-MM-DD — 仅限该日期当天或之后完成的 QSO
qso_until 无 YYYY-MM-DD — 仅限该日期当天或之前完成的 QSO
band 全部 波段,例如 20m;卫星 QSO 用 SAT
mode 全部 模式或子模式,例如 CW 或 FT8

since 与 qso_since 回答的是不同的问题。since 按确认到达的日期筛选——「这一周来了多少条确认」——并且按类型分别套用该类型自己的收件日期列。qso_since/qso_until 按 QSO 本身的日期筛选——「我从一月以来有多少 QSO 被确认了」,或者成对使用,「去年的比赛 QSO 最后确认情况如何」。两端都是包含式的,也可以单独使用。它们与 QSO 列表 上的筛选条件相同。

非法的 type 取值或格式错误的日期会返回 400 validation_error。请注意 HRDLog 不是确认类型:Wavelog 只向它上传,没有任何接收状态可统计。

每一行都在各类型计数旁边带有两个框定用的数字:

字段 含义
qsos 经过全部筛选后,这些计数器所依据的 QSO 数
confirmed 被所请求类型中至少一种确认的 QSO 数

注意(关于 confirmed 的说明)

confirmed 刻意不是各类型计数之和:一个同时通过 LoTW 和 eQSL 确认的 QSO 是一个已确认 QSO,而不是两个。因此 confirmed <= lotw + eqsl + …,而 confirmed <= qsos 始终成立。把一行读作「17m 上有 68 个 QSO,其中 50 个已确认,这 50 个中有 36 个通过 LoTW」才是本意。

完全没有一条确认的分组仍会列出——有 QSO 却没有任何确认的波段,往往才是你关注的那个。filters 对象会回显解析后的筛选条件,因此轮询程序无需记住自己发送过的查询,也能解读这些数字。

curl "https://<WAVELOG_URL>/index.php/api/v2/statistic?profile=confirmations&type=lotw,eqsl&since=2026-07-01" \
     -H "Authorization: Bearer wl2_your_token_here"
{
  "data": {
    "confirmations": {
      "counts": { "qsos": 2480, "lotw": 812, "eqsl": 430, "confirmed": 1024 },
      "by_band": [
        { "band": "20m", "qsos": 1120, "lotw": 402, "eqsl": 210, "confirmed": 501 },
        { "band": "40m", "qsos": 780, "lotw": 236, "eqsl": 118, "confirmed": 297 }
      ],
      "by_mode": [
        { "mode": "FT8", "qsos": 1503, "lotw": 610, "eqsl": 300, "confirmed": 700 },
        { "mode": "CW", "qsos": 640, "lotw": 202, "eqsl": 130, "confirmed": 324 }
      ],
      "filters": {
        "type": ["lotw", "eqsl"],
        "since": "2026-07-01",
        "qso_since": null,
        "qso_until": null,
        "band": null,
        "mode": null
      }
    }
  },
  "meta": { "profile": "confirmations", "admin": false }
}

只有所请求的类型会出现在 counts 以及各细分行中。把细分结果的某一列相加,总能得到 counts 中对应的值。

卫星 QSO 也被包含在内,并以其所属波段出现在 by_band 中;使用 band=SAT 可以单独查看它们。

system(仅管理员)

版本、构建与实例内部信息——用户数、数据库与 PHP 版本、Worker 状态、缓存与进程统计。

警告

system 主题仅限 Wavelog 管理员所拥有的令牌。对于非管理员令牌,该主题会被完全隐藏:它不会出现在 full 中,而请求 profile=system 会返回 400 validation_error(未知 profile),因此它的存在永远不会被透露。

{
  "data": {
    "system": {
      "wavelog": "2.0",
      "adif": "3.1.4",
      "migration_db": 287,
      "migration_config": 287,
      "database": "8.0.36",
      "php": "8.3.0",
      "environment": "production",
      "time": "2026-06-16 17:06:00",
      "wavelog_stats": { "users": 3, "stations": 5, "logbooks": 4, "radios": 2 },
      "system_stats": { "memory_usage": 8388608, "memory_peak": 10485760, "cpu_time": 0 },
      "cache": {},
      "worker": {
        "enabled": true,
        "client_url": "wss://log.example.org/ws",
        "nodes": [
          { "name": "worker-1", "url": null, "alive": true,  "version": "0.3.0", "active_topics": 2, "connected_clients": 5, "uptime": "3h22m0s" },
          { "name": "worker-2", "url": null, "alive": false, "version": "0.3.0", "active_topics": 1, "connected_clients": 3, "uptime": "1h02m11s" }
        ],
        "nodes_alive": 1,
        "nodes_total": 2,
        "active_topics": 2,
        "connected_clients": 5
      }
    }
  },
  "meta": { "profile": "system", "admin": true }
}

当 Worker 集成关闭时,worker 为 { "enabled": false }。否则:

字段 含义
nodes[] 每个 Worker 节点一条记录。使用 Worker 0.3.0+ 时,该列表是 Worker 自身报告的集群名册(name = 主机名,url = null)。使用更旧的 Worker,或在 Redis 不可达期间,Wavelog 改为轮询每个已配置的 URL(name = url = 被轮询的 URL)。
nodes[].alive 名册模式:心跳在 15 秒以内。轮询模式:/internal/status 返回 HTTP 200。已崩溃的节点会在 15 分钟内继续以 alive: false 列出。
nodes_total / nodes_alive nodes[] 的条目数,以及其中存活的节点数。nodes_alive < nodes_total 就是调试页面显示为「Degraded」的情形。
active_topics / connected_clients 存活节点上的合计值;如果没有节点响应,则为 null。

full

返回该令牌有权查看的每个主题。对普通令牌来说就是 qso 和 confirmations;对管理员令牌还会包含 system。confirmations 的筛选条件在这里同样适用。

curl "https://<WAVELOG_URL>/index.php/api/v2/statistic?profile=full" \
     -H "Authorization: Bearer wl2_your_token_here"

监控建议

  • 只需要少数几个数值时,轮询单个开销较小的主题(profile=qso),而不是 full。
  • 由于 JSONPath 是稳定的,你可以把 Zabbix(或类似系统)的监控项直接指向例如 $.data.qso.total 或 $.data.qso.activity.today。确认计数器同样如此,例如 $.data.confirmations.counts.lotw。
  • 要对新到的确认告警,轮询 profile=confirmations&since=<yesterday>,并在 $.data.confirmations.counts.confirmed 上触发。
  • 遵守实例所有者设置的任何速率限制。
Wavelog 手册(中文版) / 统计 0 字 0 行 bg8lng
2026-10-21T12:42:36.348009482Z 2026-10-21T12:44:01.209083810Z