using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.Serialization;
using System.Web.Script.Serialization;
using System.Xml.Serialization;
using NewLife;
using NewLife.Data;
using XCode;
using XCode.Cache;
using XCode.Configuration;
using XCode.DataAccessLayer;
namespace Rainbow.Entity;
/// <summary>网口小时统计。从InterfaceStat按小时汇总,含速率峰值和掉线次数。用于日报和小时级趋势分析</summary>
[Serializable]
[DataObject]
[Description("网口小时统计。从InterfaceStat按小时汇总,含速率峰值和掉线次数。用于日报和小时级趋势分析")]
[BindIndex("IU_InterfaceHourStat_InterfaceName_StatHour", true, "InterfaceName,StatHour")]
[BindTable("InterfaceHourStat", Description = "网口小时统计。从InterfaceStat按小时汇总,含速率峰值和掉线次数。用于日报和小时级趋势分析", ConnName = "RainbowStat", DbType = DatabaseType.None)]
public partial class InterfaceHourStat
{
#region 属性
private Int32 _Id;
/// <summary>编号</summary>
[DisplayName("编号")]
[Description("编号")]
[DataObjectField(true, true, false, 0)]
[BindColumn("Id", "编号", "")]
public Int32 Id { get => _Id; set { if (OnPropertyChanging("Id", value)) { _Id = value; OnPropertyChanged("Id"); } } }
private String? _InterfaceName;
/// <summary>网口名</summary>
[DisplayName("网口名")]
[Description("网口名")]
[DataObjectField(false, false, true, 20)]
[BindColumn("InterfaceName", "网口名", "")]
public String? InterfaceName { get => _InterfaceName; set { if (OnPropertyChanging("InterfaceName", value)) { _InterfaceName = value; OnPropertyChanged("InterfaceName"); } } }
private DateTime _StatHour;
/// <summary>统计小时。如2026-07-02 14:00:00</summary>
[DisplayName("统计小时")]
[Description("统计小时。如2026-07-02 14:00:00")]
[DataObjectField(false, false, true, 0)]
[BindColumn("StatHour", "统计小时。如2026-07-02 14:00:00", "")]
public DateTime StatHour { get => _StatHour; set { if (OnPropertyChanging("StatHour", value)) { _StatHour = value; OnPropertyChanged("StatHour"); } } }
private Int64 _RxBytes;
/// <summary>小时接收字节合计。SUM(InterfaceStat.RxBytes)</summary>
[DisplayName("小时接收字节合计")]
[Description("小时接收字节合计。SUM(InterfaceStat.RxBytes)")]
[DataObjectField(false, false, false, 0)]
[BindColumn("RxBytes", "小时接收字节合计。SUM(InterfaceStat.RxBytes)", "")]
public Int64 RxBytes { get => _RxBytes; set { if (OnPropertyChanging("RxBytes", value)) { _RxBytes = value; OnPropertyChanged("RxBytes"); } } }
private Int64 _RxPackets;
/// <summary>小时接收包合计</summary>
[DisplayName("小时接收包合计")]
[Description("小时接收包合计")]
[DataObjectField(false, false, false, 0)]
[BindColumn("RxPackets", "小时接收包合计", "")]
public Int64 RxPackets { get => _RxPackets; set { if (OnPropertyChanging("RxPackets", value)) { _RxPackets = value; OnPropertyChanged("RxPackets"); } } }
private Int64 _RxBytesMax;
/// <summary>分钟接收峰值。字节/秒。定位带宽瓶颈精确发生的分钟。峰值接近线路带宽→需扩容或QoS限速</summary>
[DisplayName("分钟接收峰值")]
[Description("分钟接收峰值。字节/秒。定位带宽瓶颈精确发生的分钟。峰值接近线路带宽→需扩容或QoS限速")]
[DataObjectField(false, false, false, 0)]
[BindColumn("RxBytesMax", "分钟接收峰值。字节/秒。定位带宽瓶颈精确发生的分钟。峰值接近线路带宽→需扩容或QoS限速", "")]
public Int64 RxBytesMax { get => _RxBytesMax; set { if (OnPropertyChanging("RxBytesMax", value)) { _RxBytesMax = value; OnPropertyChanged("RxBytesMax"); } } }
private Int64 _RxPacketsMax;
/// <summary>分钟接收包峰值。小包PPS过高→可能DDoS攻击</summary>
[DisplayName("分钟接收包峰值")]
[Description("分钟接收包峰值。小包PPS过高→可能DDoS攻击")]
[DataObjectField(false, false, false, 0)]
[BindColumn("RxPacketsMax", "分钟接收包峰值。小包PPS过高→可能DDoS攻击", "")]
public Int64 RxPacketsMax { get => _RxPacketsMax; set { if (OnPropertyChanging("RxPacketsMax", value)) { _RxPacketsMax = value; OnPropertyChanged("RxPacketsMax"); } } }
private Int64 _RxErrors;
/// <summary>接收错误合计。>0→该小时内有硬件异常</summary>
[DisplayName("接收错误合计")]
[Description("接收错误合计。>0→该小时内有硬件异常")]
[DataObjectField(false, false, false, 0)]
[BindColumn("RxErrors", "接收错误合计。>0→该小时内有硬件异常", "")]
public Int64 RxErrors { get => _RxErrors; set { if (OnPropertyChanging("RxErrors", value)) { _RxErrors = value; OnPropertyChanged("RxErrors"); } } }
private Int64 _RxDropped;
/// <summary>接收丢包合计。>0→该小时内有拥塞</summary>
[DisplayName("接收丢包合计")]
[Description("接收丢包合计。>0→该小时内有拥塞")]
[DataObjectField(false, false, false, 0)]
[BindColumn("RxDropped", "接收丢包合计。>0→该小时内有拥塞", "")]
public Int64 RxDropped { get => _RxDropped; set { if (OnPropertyChanging("RxDropped", value)) { _RxDropped = value; OnPropertyChanged("RxDropped"); } } }
private Int64 _TxBytes;
/// <summary>小时发送字节合计</summary>
[DisplayName("小时发送字节合计")]
[Description("小时发送字节合计")]
[DataObjectField(false, false, false, 0)]
[BindColumn("TxBytes", "小时发送字节合计", "")]
public Int64 TxBytes { get => _TxBytes; set { if (OnPropertyChanging("TxBytes", value)) { _TxBytes = value; OnPropertyChanged("TxBytes"); } } }
private Int64 _TxPackets;
/// <summary>小时发送包合计</summary>
[DisplayName("小时发送包合计")]
[Description("小时发送包合计")]
[DataObjectField(false, false, false, 0)]
[BindColumn("TxPackets", "小时发送包合计", "")]
public Int64 TxPackets { get => _TxPackets; set { if (OnPropertyChanging("TxPackets", value)) { _TxPackets = value; OnPropertyChanged("TxPackets"); } } }
private Int64 _TxBytesMax;
/// <summary>分钟发送峰值。字节/秒</summary>
[DisplayName("分钟发送峰值")]
[Description("分钟发送峰值。字节/秒")]
[DataObjectField(false, false, false, 0)]
[BindColumn("TxBytesMax", "分钟发送峰值。字节/秒", "")]
public Int64 TxBytesMax { get => _TxBytesMax; set { if (OnPropertyChanging("TxBytesMax", value)) { _TxBytesMax = value; OnPropertyChanged("TxBytesMax"); } } }
private Int64 _TxPacketsMax;
/// <summary>分钟发送包峰值</summary>
[DisplayName("分钟发送包峰值")]
[Description("分钟发送包峰值")]
[DataObjectField(false, false, false, 0)]
[BindColumn("TxPacketsMax", "分钟发送包峰值", "")]
public Int64 TxPacketsMax { get => _TxPacketsMax; set { if (OnPropertyChanging("TxPacketsMax", value)) { _TxPacketsMax = value; OnPropertyChanged("TxPacketsMax"); } } }
private Int64 _TxErrors;
/// <summary>发送错误合计</summary>
[DisplayName("发送错误合计")]
[Description("发送错误合计")]
[DataObjectField(false, false, false, 0)]
[BindColumn("TxErrors", "发送错误合计", "")]
public Int64 TxErrors { get => _TxErrors; set { if (OnPropertyChanging("TxErrors", value)) { _TxErrors = value; OnPropertyChanged("TxErrors"); } } }
private Int64 _TxDropped;
/// <summary>发送丢包合计</summary>
[DisplayName("发送丢包合计")]
[Description("发送丢包合计")]
[DataObjectField(false, false, false, 0)]
[BindColumn("TxDropped", "发送丢包合计", "")]
public Int64 TxDropped { get => _TxDropped; set { if (OnPropertyChanging("TxDropped", value)) { _TxDropped = value; OnPropertyChanged("TxDropped"); } } }
private Int64 _TxCarrier;
/// <summary>载波丢失次数。>0→该小时内有物理断网</summary>
[DisplayName("载波丢失次数")]
[Description("载波丢失次数。>0→该小时内有物理断网")]
[DataObjectField(false, false, false, 0)]
[BindColumn("TxCarrier", "载波丢失次数。>0→该小时内有物理断网", "")]
public Int64 TxCarrier { get => _TxCarrier; set { if (OnPropertyChanging("TxCarrier", value)) { _TxCarrier = value; OnPropertyChanged("TxCarrier"); } } }
private Int64 _RxMulticast;
/// <summary>组播包合计</summary>
[DisplayName("组播包合计")]
[Description("组播包合计")]
[DataObjectField(false, false, false, 0)]
[BindColumn("RxMulticast", "组播包合计", "")]
public Int64 RxMulticast { get => _RxMulticast; set { if (OnPropertyChanging("RxMulticast", value)) { _RxMulticast = value; OnPropertyChanged("RxMulticast"); } } }
private Int32 _OfflineCount;
/// <summary>掉线次数。该小时内网口down/up次数。>3次→链路不稳定,需检查网线/光模块/对端交换机</summary>
[DisplayName("掉线次数")]
[Description("掉线次数。该小时内网口down/up次数。>3次→链路不稳定,需检查网线/光模块/对端交换机")]
[DataObjectField(false, false, false, 0)]
[BindColumn("OfflineCount", "掉线次数。该小时内网口down/up次数。>3次→链路不稳定,需检查网线/光模块/对端交换机", "")]
public Int32 OfflineCount { get => _OfflineCount; set { if (OnPropertyChanging("OfflineCount", value)) { _OfflineCount = value; OnPropertyChanged("OfflineCount"); } } }
private DateTime _CreateTime;
/// <summary>创建时间</summary>
[Category("扩展")]
[DisplayName("创建时间")]
[Description("创建时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("CreateTime", "创建时间", "")]
public DateTime CreateTime { get => _CreateTime; set { if (OnPropertyChanging("CreateTime", value)) { _CreateTime = value; OnPropertyChanged("CreateTime"); } } }
#endregion
#region 获取/设置 字段值
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
public override Object? this[String name]
{
get => name switch
{
"Id" => _Id,
"InterfaceName" => _InterfaceName,
"StatHour" => _StatHour,
"RxBytes" => _RxBytes,
"RxPackets" => _RxPackets,
"RxBytesMax" => _RxBytesMax,
"RxPacketsMax" => _RxPacketsMax,
"RxErrors" => _RxErrors,
"RxDropped" => _RxDropped,
"TxBytes" => _TxBytes,
"TxPackets" => _TxPackets,
"TxBytesMax" => _TxBytesMax,
"TxPacketsMax" => _TxPacketsMax,
"TxErrors" => _TxErrors,
"TxDropped" => _TxDropped,
"TxCarrier" => _TxCarrier,
"RxMulticast" => _RxMulticast,
"OfflineCount" => _OfflineCount,
"CreateTime" => _CreateTime,
_ => base[name]
};
set
{
switch (name)
{
case "Id": _Id = value.ToInt(); break;
case "InterfaceName": _InterfaceName = Convert.ToString(value); break;
case "StatHour": _StatHour = value.ToDateTime(); break;
case "RxBytes": _RxBytes = value.ToLong(); break;
case "RxPackets": _RxPackets = value.ToLong(); break;
case "RxBytesMax": _RxBytesMax = value.ToLong(); break;
case "RxPacketsMax": _RxPacketsMax = value.ToLong(); break;
case "RxErrors": _RxErrors = value.ToLong(); break;
case "RxDropped": _RxDropped = value.ToLong(); break;
case "TxBytes": _TxBytes = value.ToLong(); break;
case "TxPackets": _TxPackets = value.ToLong(); break;
case "TxBytesMax": _TxBytesMax = value.ToLong(); break;
case "TxPacketsMax": _TxPacketsMax = value.ToLong(); break;
case "TxErrors": _TxErrors = value.ToLong(); break;
case "TxDropped": _TxDropped = value.ToLong(); break;
case "TxCarrier": _TxCarrier = value.ToLong(); break;
case "RxMulticast": _RxMulticast = value.ToLong(); break;
case "OfflineCount": _OfflineCount = value.ToInt(); break;
case "CreateTime": _CreateTime = value.ToDateTime(); break;
default: base[name] = value; break;
}
}
}
#endregion
#region 关联映射
#endregion
#region 扩展查询
/// <summary>根据编号查找</summary>
/// <param name="id">编号</param>
/// <returns>实体对象</returns>
public static InterfaceHourStat? FindById(Int32 id)
{
if (id < 0) return null;
// 实体缓存
if (Meta.Session.Count < MaxCacheCount) return Meta.Cache.Find(e => e.Id == id);
// 单对象缓存
return Meta.SingleCache[id];
//return Find(_.Id == id);
}
#endregion
#region 高级查询
/// <summary>高级查询</summary>
/// <param name="interfaceName">网口名</param>
/// <param name="start">统计小时开始</param>
/// <param name="end">统计小时结束</param>
/// <param name="key">关键字</param>
/// <param name="page">分页参数信息。可携带统计和数据权限扩展查询等信息</param>
/// <returns>实体列表</returns>
public static IList<InterfaceHourStat> Search(String? interfaceName, DateTime start, DateTime end, String key, PageParameter page)
{
var exp = new WhereExpression();
if (!interfaceName.IsNullOrEmpty()) exp &= _.InterfaceName == interfaceName;
exp &= _.StatHour.Between(start, end);
if (!key.IsNullOrEmpty()) exp &= SearchWhereByKeys(key);
return FindAll(exp, page);
}
#endregion
#region 字段名
/// <summary>取得网口小时统计字段信息的快捷方式</summary>
public partial class _
{
/// <summary>编号</summary>
public static readonly Field Id = FindByName("Id");
/// <summary>网口名</summary>
public static readonly Field InterfaceName = FindByName("InterfaceName");
/// <summary>统计小时。如2026-07-02 14:00:00</summary>
public static readonly Field StatHour = FindByName("StatHour");
/// <summary>小时接收字节合计。SUM(InterfaceStat.RxBytes)</summary>
public static readonly Field RxBytes = FindByName("RxBytes");
/// <summary>小时接收包合计</summary>
public static readonly Field RxPackets = FindByName("RxPackets");
/// <summary>分钟接收峰值。字节/秒。定位带宽瓶颈精确发生的分钟。峰值接近线路带宽→需扩容或QoS限速</summary>
public static readonly Field RxBytesMax = FindByName("RxBytesMax");
/// <summary>分钟接收包峰值。小包PPS过高→可能DDoS攻击</summary>
public static readonly Field RxPacketsMax = FindByName("RxPacketsMax");
/// <summary>接收错误合计。>0→该小时内有硬件异常</summary>
public static readonly Field RxErrors = FindByName("RxErrors");
/// <summary>接收丢包合计。>0→该小时内有拥塞</summary>
public static readonly Field RxDropped = FindByName("RxDropped");
/// <summary>小时发送字节合计</summary>
public static readonly Field TxBytes = FindByName("TxBytes");
/// <summary>小时发送包合计</summary>
public static readonly Field TxPackets = FindByName("TxPackets");
/// <summary>分钟发送峰值。字节/秒</summary>
public static readonly Field TxBytesMax = FindByName("TxBytesMax");
/// <summary>分钟发送包峰值</summary>
public static readonly Field TxPacketsMax = FindByName("TxPacketsMax");
/// <summary>发送错误合计</summary>
public static readonly Field TxErrors = FindByName("TxErrors");
/// <summary>发送丢包合计</summary>
public static readonly Field TxDropped = FindByName("TxDropped");
/// <summary>载波丢失次数。>0→该小时内有物理断网</summary>
public static readonly Field TxCarrier = FindByName("TxCarrier");
/// <summary>组播包合计</summary>
public static readonly Field RxMulticast = FindByName("RxMulticast");
/// <summary>掉线次数。该小时内网口down/up次数。>3次→链路不稳定,需检查网线/光模块/对端交换机</summary>
public static readonly Field OfflineCount = FindByName("OfflineCount");
/// <summary>创建时间</summary>
public static readonly Field CreateTime = FindByName("CreateTime");
static Field FindByName(String name) => Meta.Table.FindByName(name)!;
}
/// <summary>取得网口小时统计字段名称的快捷方式</summary>
public partial class __
{
/// <summary>编号</summary>
public const String Id = "Id";
/// <summary>网口名</summary>
public const String InterfaceName = "InterfaceName";
/// <summary>统计小时。如2026-07-02 14:00:00</summary>
public const String StatHour = "StatHour";
/// <summary>小时接收字节合计。SUM(InterfaceStat.RxBytes)</summary>
public const String RxBytes = "RxBytes";
/// <summary>小时接收包合计</summary>
public const String RxPackets = "RxPackets";
/// <summary>分钟接收峰值。字节/秒。定位带宽瓶颈精确发生的分钟。峰值接近线路带宽→需扩容或QoS限速</summary>
public const String RxBytesMax = "RxBytesMax";
/// <summary>分钟接收包峰值。小包PPS过高→可能DDoS攻击</summary>
public const String RxPacketsMax = "RxPacketsMax";
/// <summary>接收错误合计。>0→该小时内有硬件异常</summary>
public const String RxErrors = "RxErrors";
/// <summary>接收丢包合计。>0→该小时内有拥塞</summary>
public const String RxDropped = "RxDropped";
/// <summary>小时发送字节合计</summary>
public const String TxBytes = "TxBytes";
/// <summary>小时发送包合计</summary>
public const String TxPackets = "TxPackets";
/// <summary>分钟发送峰值。字节/秒</summary>
public const String TxBytesMax = "TxBytesMax";
/// <summary>分钟发送包峰值</summary>
public const String TxPacketsMax = "TxPacketsMax";
/// <summary>发送错误合计</summary>
public const String TxErrors = "TxErrors";
/// <summary>发送丢包合计</summary>
public const String TxDropped = "TxDropped";
/// <summary>载波丢失次数。>0→该小时内有物理断网</summary>
public const String TxCarrier = "TxCarrier";
/// <summary>组播包合计</summary>
public const String RxMulticast = "RxMulticast";
/// <summary>掉线次数。该小时内网口down/up次数。>3次→链路不稳定,需检查网线/光模块/对端交换机</summary>
public const String OfflineCount = "OfflineCount";
/// <summary>创建时间</summary>
public const String CreateTime = "CreateTime";
}
#endregion
}
|