CVOICE语音质检系统:一个看板掌控全局,管理看板深度解析

行云流水
2026-02-26 / 0 评论 / 6 阅读 / 正在检测是否收录...

总体介绍

在语音质检系统中,运营管理者面临的最大痛点之一就是信息分散:用户数据、录音状态、敏感词告警、财务消费……分布在不同页面,想要全面了解系统运行状况,需要反复切换、手动汇总。CVOICE语音质检系统的管理看板(Dashboard)正是为解决这一问题而生。
它将系统中最核心的运营指标——用户数量、节点状态、录音处理进度、告警消息、财务概览、质检规则排行——全部汇聚在一个页面上,配合可视化图表和实时统计,让管理者打开浏览器就能"一眼看穿"系统全貌。无论是日常巡检还是异常排查,看板都能成为你的"数字驾驶舱"。

技术要点

1. 后端架构:自定义 Django AdminSite

CVOICE的管理看板并非使用第三方BI工具,而是基于Django Admin框架进行了深度定制。通过继承 AdminSite 类,注册自定义URL,将看板页面无缝嵌入到后台管理系统中:

class CustomAdminSite(AdminSite):
    site_header = '语音质检平台'
    
    def get_urls(self):
        urls = super().get_urls()
        custom_urls = [
            path('dashboard/', self.admin_view(self.dashboard_view), name='dashboard'),
            path('realtime-stats/', self.admin_view(self.realtime_stats_view), name='realtime_stats'),
        ]
        return custom_urls + urls

这种方式的好处是:看板天然继承了Django Admin的认证和权限体系,只有经过身份验证的管理员才能访问,无需额外实现鉴权逻辑。

2. 多维度数据聚合

看板页面在一次请求中完成了超过30项指标的实时计算,覆盖6大维度:

维度核心指标数据来源
用户管理总用户数、活跃/禁用/欠费分布CUser模型
节点状态在线/离线、审核状态分布CUserAgent模型
录音处理总量、今日新增、检测状态分布PhoneRecording模型
语音转写转写总量、审核状态、质检结果SpeechToText模型
告警消息总量、待处理数AlertMessage模型
财务统计总余额、累计消费、今日消费ConsumptionRecord模型

所有查询均使用Django ORM的 count()aggregate(Sum())filter() 链式调用,保持了代码的简洁性和可维护性。

3. 可视化图表:Chart.js驱动

看板中集成了两类动态图表,均由 Chart.js 4.x 渲染:

  • 近7天录音趋势折线图:展示系统整体的录音采集量走势,帮助发现异常波动。
  • 节点维度录音趋势:取录音量TOP5的节点,按天展示各自的录音增长曲线,便于定位"高产"或"沉默"节点。

图表数据在后端通过循环计算7天内每天的录音数量,序列化为JSON后传递给前端模板:

for i in range(6, -1, -1):
    day = today - timedelta(days=i)
    day_start = timezone.make_aware(timezone.datetime.combine(day, timezone.datetime.min.time()))
    day_end = day_start + timedelta(days=1)
    count = PhoneRecording.objects.filter(
        created_at__gte=day_start, created_at__lt=day_end
    ).count()
    daily_recordings.append(count)

首页面板

4. 质检规则排行榜

看板底部设计了质检规则排行榜,从两个角度排名:

  • 按录音条数排序:哪条规则命中的录音最多?
  • 按总音频时长排序:哪条规则覆盖的通话总时长最长?

这为规则优化和资源分配提供了直观的数据支撑。

核心代码/配置片段

看板的前端采用 Bootstrap 5 构建响应式布局,使用CSS渐变变量统一视觉风格:

:root {
    --primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    --success-gradient: linear-gradient(135deg, #11998e 0%, #38ef7d 100%);
    --warning-gradient: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
}

每个指标卡片通过统一的 stat-card 组件展示,支持趋势标识(如"今日+N"):

<div class="stat-card info">
    <div class="d-flex align-items-center">
        <div class="stat-icon info"><i class="bi bi-mic-fill"></i></div>
        <div class="ms-3">
            <div class="stat-value">{{ total_recordings }}</div>
            <div class="stat-label">电话录音</div>
        </div>
    </div>
    <div class="stat-trend up">
        <i class="bi bi-plus-circle"></i> 今日 +{{ today_recordings }}
    </div>
</div>

生产环境使用 Gunicorn 作为WSGI服务器,配合 systemd 实现进程管理和自动重启:

ExecStart=/opt/miniconda3/envs/cvoice/bin/gunicorn \
          --workers 2 \
          --bind 0.0.0.0:3008 \
          --worker-class sync \
          --max-requests 1000 \
          cvoice.wsgi:application

消费记录

总结

CVOICE管理看板通过Django Admin深度定制 + Chart.js可视化 + Bootstrap响应式布局,在一个页面内实现了30+核心指标的实时聚合展示。它不仅是运维人员的"第一屏",更是整个语音质检系统运行状态的晴雨表。

下一篇,我们将深入探讨看板中"实时数据统计"页面的48小时逐时分析功能——它如何按节点、按规则维度呈现细粒度的录音分布,帮你精准把控每一个时段的系统脉搏。敬请期待!

评论 (0)

取消
只有登录/注册用户才可评论