namespace Dpz.Core.Public.ViewModel;

/// <summary>
/// 访问日志统计信息
/// </summary>
public class AccessLogStatistics
{
    /// <summary>
    /// 慢请求排行
    /// </summary>
    public List<SlowRequestSummary> SlowRequests { get; set; } = [];

    /// <summary>
    /// 热门页面排行
    /// </summary>
    public List<RequestPathSummary> PopularPages { get; set; } = [];

    /// <summary>
    /// 每小时流量统计
    /// </summary>
    public List<HourlyTrafficSummary> HourlyTraffic { get; set; } = [];

    /// <summary>
    /// 浏览器占比
    /// </summary>
    public List<BrowserUsageSummary> BrowserUsage { get; set; } = [];

    /// <summary>
    /// 来源排行
    /// </summary>
    public List<RefererSummary> Referers { get; set; } = [];
}

/// <summary>
/// 慢请求统计项
/// </summary>
public class SlowRequestSummary
{
    /// <summary>
    /// 请求发生时间
    /// </summary>
    public required string Time { get; set; }

    /// <summary>
    /// 请求方法
    /// </summary>
    public string? RequestMethod { get; set; }

    /// <summary>
    /// 请求路径
    /// </summary>
    public string? RequestPath { get; set; }

    /// <summary>
    /// HTTP 状态码
    /// </summary>
    public int StatusCode { get; set; }

    /// <summary>
    /// 请求耗时,单位毫秒
    /// </summary>
    public double Elapsed { get; set; }

    /// <summary>
    /// IP 地址
    /// </summary>
    public string? IpAddress { get; set; }

    /// <summary>
    /// 浏览器
    /// </summary>
    public string? Browser { get; set; }

    /// <summary>
    /// 设备类型
    /// </summary>
    public string? Device { get; set; }

    /// <summary>
    /// 来源
    /// </summary>
    public string? Referer { get; set; }

    /// <summary>
    /// User-Agent
    /// </summary>
    public string? UserAgent { get; set; }
}

/// <summary>
/// 请求路径访问统计项
/// </summary>
public class RequestPathSummary
{
    /// <summary>
    /// 请求路径
    /// </summary>
    public required string RequestPath { get; set; }

    /// <summary>
    /// 请求次数
    /// </summary>
    public int Count { get; set; }
}

/// <summary>
/// 每小时流量统计项
/// </summary>
public class HourlyTrafficSummary
{
    /// <summary>
    /// 日期
    /// </summary>
    public required string Date { get; set; }

    /// <summary>
    /// 小时
    /// </summary>
    public int Hour { get; set; }

    /// <summary>
    /// 请求次数
    /// </summary>
    public int Count { get; set; }
}

/// <summary>
/// 浏览器访问统计项
/// </summary>
public class BrowserUsageSummary
{
    /// <summary>
    /// 浏览器名称
    /// </summary>
    public required string Browser { get; set; }

    /// <summary>
    /// 请求次数
    /// </summary>
    public int Count { get; set; }

    /// <summary>
    /// 请求占比
    /// </summary>
    public decimal Percentage { get; set; }
}

/// <summary>
/// 来源访问统计项
/// </summary>
public class RefererSummary
{
    /// <summary>
    /// 来源
    /// </summary>
    public required string Referer { get; set; }

    /// <summary>
    /// 请求次数
    /// </summary>
    public int Count { get; set; }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

代码说明文档

概述

这是一个用于访问日志统计的视图模型(ViewModel)代码文件,定义了一组用于展示 Web 应用访问统计数据的数据传输对象(DTO)。

命名空间

namespace Dpz.Core.Public.ViewModel;

属于 Dpz.Core.Public.ViewModel 命名空间,通常用于公共视图模型层。


类结构说明

1. AccessLogStatistics (主统计类)

这是核心的统计汇总类,包含了访问日志的各个维度的统计信息。

属性列表:

属性名类型说明
SlowRequestsList<SlowRequestSummary>慢请求排行榜
PopularPagesList<RequestPathSummary>热门页面访问排行
HourlyTrafficList<HourlyTrafficSummary>按小时统计的流量数据
BrowserUsageList<BrowserUsageSummary>浏览器使用占比统计
ReferersList<RefererSummary>来源网站排行

所有集合属性都使用了 C# 11 的集合表达式语法 = [] 进行初始化。


2. SlowRequestSummary (慢请求详情)

记录耗时较长的请求详细信息,用于性能分析。

关键字段:

  • Time (required): 请求发生时间
  • Elapsed: 请求耗时(毫秒)- 核心指标
  • RequestMethod: HTTP 方法(GET/POST等)
  • RequestPath: 请求的 URL 路径
  • StatusCode: HTTP 响应状态码
  • IpAddress: 客户端 IP
  • Browser: 浏览器类型
  • Device: 设备类型(PC/Mobile等)
  • Referer: 来源页面
  • UserAgent: 完整的 User-Agent 字符串

3. RequestPathSummary (页面访问统计)

统计各个页面路径的访问次数。

字段:

  • RequestPath (required): 请求路径
  • Count: 访问次数

用途: 用于生成"热门页面排行榜"


4. HourlyTrafficSummary (时段流量统计)

按日期和小时维度统计流量分布。

字段:

  • Date (required): 日期(字符串格式)
  • Hour: 小时(0-23)
  • Count: 该时段的请求次数

用途: 可用于绘制流量趋势图、识别访问高峰期


5. BrowserUsageSummary (浏览器占比)

统计不同浏览器的使用情况及占比。

字段:

  • Browser (required): 浏览器名称(如 Chrome、Firefox)
  • Count: 使用该浏览器的请求次数
  • Percentage: 使用占比(百分比,decimal 类型保证精度)

用途: 用于兼容性分析和用户画像


6. RefererSummary (来源统计)

统计访问来源(引荐页面)的分布。

字段:

  • Referer (required): 来源 URL
  • Count: 从该来源访问的次数

用途: 分析流量来源、外链效果等


技术特点

  1. 使用 required 修饰符:确保关键字段在对象初始化时必须赋值(C# 11 特性)
  2. 可空引用类型:大量使用 string? 表示可为空的字符串
  3. 集合初始化:使用 = [] 简洁语法初始化空集合
  4. 清晰的 XML 注释:每个类和属性都有详细的中文说明

应用场景

这套模型适用于:

  • 网站访问统计仪表板
  • 性能监控系统
  • 用户行为分析
  • SEO 效果追踪
  • 系统健康监控
评论加载中...