- Listener.traffic_multiplier (default 1): billable = raw × multiplier - user_node_traffics: raw per user per node; user quota uses billable totals - Collector attributes deltas by inbound name; resets clear node rows - API GET /users/:id/node-traffic - UI: node multiplier on Listeners; Users node-traffic modal (desktop+mobile) feat(traffic): per-node usage + traffic multiplier billing - Listener.traffic_multiplier (default 1): billable = raw × multiplier - user_node_traffics: raw per user per node; user quota uses billable totals - Collector attributes deltas by inbound name; resets clear node rows - API GET /users/:id/node-traffic - UI: node multiplier on Listeners; Users node-traffic modal (desktop+mobile) feat(traffic): per-node usage + traffic multiplier billing - Listener.traffic_multiplier (default 1): billable = raw × multiplier - user_node_traffics: raw per user per node; user quota uses billable totals - Collector attributes deltas by inbound name; resets clear node rows - API GET /users/:id/node-traffic - UI: node multiplier on Listeners; Users node-traffic modal (desktop+mobile) feat(traffic): per-node usage + traffic multiplier billing - Listener.traffic_multiplier (default 1): billable = raw × multiplier - user_node_traffics: raw per user per node; user quota uses billable totals - Collector attributes deltas by inbound name; resets clear node rows - API GET /users/:id/node-traffic - UI: node multiplier on Listeners; Users node-traffic modal (desktop+mobile) feat(traffic): per-node usage + traffic multiplier billing - Listener.traffic_multiplier (default 1): billable = raw × multiplier - user_node_traffics: raw per user per node; user quota uses billable totals - Collector attributes deltas by inbound name; resets clear node rows - API GET /users/:id/node-traffic - UI: node multiplier on Listeners; Users node-traffic modal (desktop+mobile) feat(traffic): per-node usage + traffic multiplier billing - Listener.traffic_multiplier (default 1): billable = raw × multiplier - user_node_traffics: raw per user per node; user quota uses billable totals - Collector attributes deltas by inbound name; resets clear node rows - API GET /users/:id/node-traffic - UI: node multiplier on Listeners; Users node-traffic modal (desktop+mobile) feat(traffic): per-node usage + traffic multiplier billing - Listener.traffic_multiplier (default 1): billable = raw × multiplier - user_node_traffics: raw per user per node; user quota uses billable totals - Collector attributes deltas by inbound name; resets clear node rows - API GET /users/:id/node-traffic - UI: node multiplier on Listeners; Users node-traffic modal (desktop+mobile) feat(traffic): per-node usage + traffic multiplier billing - Listener.traffic_multiplier (default 1): billable = raw × multiplier - user_node_traffics: raw per user per node; user quota uses billable totals - Collector attributes deltas by inbound name; resets clear node rows - API GET /users/:id/node-traffic - UI: node multiplier on Listeners; Users node-traffic modal (desktop+mobile) feat(traffic): per-node usage + traffic multiplier billing - Listener.traffic_multiplier (default 1): billable = raw × multiplier - user_node_traffics: raw per user per node; user quota uses billable totals - Collector attributes deltas by inbound name; resets clear node rows - API GET /users/:id/node-traffic - UI: node multiplier on Listeners; Users node-traffic modal (desktop+mobile) feat(traffic): per-node usage + traffic multiplier billing - Listener.traffic_multiplier (default 1): billable = raw × multiplier - user_node_traffics: raw per user per node; user quota uses billable totals - Collector attributes deltas by inbound name; resets clear node rows - API GET /users/:id/node-traffic - UI: node multiplier on Listeners; Users node-traffic modal (desktop+mobile) feat(traffic): per-node usage + traffic multiplier billing - Listener.traffic_multiplier (default 1): billable = raw × multiplier - user_node_traffics: raw per user per node; user quota uses billable totals - Collector attributes deltas by inbound name; resets clear node rows - API GET /users/:id/node-traffic - UI: node multiplier on Listeners; Users node-traffic modal (desktop+mobile) feat(traffic): per-node usage + traffic multiplier billing - Listener.traffic_multiplier (default 1): billable = raw × multiplier - user_node_traffics: raw per user per node; user quota uses billable totals - Collector attributes deltas by inbound name; resets clear node rows - API GET /users/:id/node-traffic - UI: node multiplier on Listeners; Users node-traffic modal (desktop+mobile)
16 lines
823 B
Go
16 lines
823 B
Go
package models
|
||
|
||
// UserNodeTraffic stores per-listener raw traffic for a proxy user.
|
||
// ProxyUser.TrafficUsed accumulates billable bytes (raw × node multiplier).
|
||
type UserNodeTraffic struct {
|
||
BaseModel
|
||
|
||
ProxyUserID uint `gorm:"column:proxy_user_id;not null;uniqueIndex:uidx_user_listener_traffic,priority:1;index" json:"proxy_user_id"`
|
||
ListenerID uint `gorm:"column:listener_id;not null;uniqueIndex:uidx_user_listener_traffic,priority:2;index" json:"listener_id"`
|
||
UploadBytes int64 `gorm:"column:upload_bytes;not null;default:0" json:"upload_bytes"`
|
||
DownloadBytes int64 `gorm:"column:download_bytes;not null;default:0" json:"download_bytes"`
|
||
TrafficUsed int64 `gorm:"column:traffic_used;not null;default:0" json:"traffic_used"`
|
||
}
|
||
|
||
func (UserNodeTraffic) TableName() string { return "user_node_traffics" }
|