syntax = "proto3";
option go_package = "./pb";

package pb;

import "models/rpc_messages.proto";
import "models/model_server_bandwidth_stat.proto";

// 服务带宽统计服务
service ServerBandwidthStatService {
	// 上传带宽统计
	rpc uploadServerBandwidthStats(UploadServerBandwidthStatsRequest) returns (RPCSuccess);

	// 获取服务的峰值带宽
	rpc findServerBandwidthStats(FindServerBandwidthStatsRequest) returns (FindServerBandwidthStatsResponse);

	// 获取最近N小时峰值带宽
	rpc findHourlyServerBandwidthStats(FindHourlyServerBandwidthStatsRequest) returns (FindHourlyServerBandwidthStatsResponse);

	// 获取最近N天峰值带宽
	rpc findDailyServerBandwidthStats(FindDailyServerBandwidthStatsRequest) returns (FindDailyServerBandwidthStatsResponse);

	// 读取日期段内的带宽数据
	rpc findDailyServerBandwidthStatsBetweenDays (FindDailyServerBandwidthStatsBetweenDaysRequest) returns (FindDailyServerBandwidthStatsBetweenDaysResponse);
}

// 上传带宽统计
message UploadServerBandwidthStatsRequest {
	repeated ServerBandwidthStat serverBandwidthStats = 1;
}

// 获取服务的峰值带宽
message FindServerBandwidthStatsRequest {
	int64 serverId = 1; // 服务ID
	string month = 2; // YYYYMM，month和day二选一
	string day = 3; // YYYYMMDD
	string algo = 4; // 带宽算法，目前支持secondly和avg
}

message FindServerBandwidthStatsResponse {
	repeated ServerBandwidthStat serverBandwidthStats = 1;
}

// 获取最近N小时峰值带宽
message FindHourlyServerBandwidthStatsRequest {
	int64 serverId = 1;
	int32 hours = 2;
	string algo = 3; // 带宽算法，目前支持secondly和avg
}

message FindHourlyServerBandwidthStatsResponse {
	repeated Stat stats = 1;
	int32 percentile = 2; // 百分位
	Stat nthStat = 3; // 百分位统计数据

	message Stat {
		string day = 1;
		int32 hour = 2;
		int64 bytes = 3; // 峰值字节/秒
		int64 bits = 4; // 峰值比特/秒
	}
}

// 获取最近N天峰值带宽
message FindDailyServerBandwidthStatsRequest {
	int64 serverId = 1;
	int32 days = 2;
	string algo = 3; // 带宽算法，目前支持secondly和avg
}

message FindDailyServerBandwidthStatsResponse {
	repeated Stat stats = 1;
	int32 percentile = 2; // 百分位
	Stat nthStat = 3; // 百分位统计数据

	message Stat {
		string day = 1;
		int64 bytes = 3; // 峰值字节/秒
		int64 bits = 4; // 峰值比特/秒
	}
}

// 读取日期段内的带宽数据
message FindDailyServerBandwidthStatsBetweenDaysRequest {
	int64 userId = 1; // 用户ID，和服务ID二选一
	int64 serverId = 2; // 服务ID，和用户ID二选一
	string dayFrom = 3; // 开始日期 YYYYMMDD
	string dayTo = 4; // 结束日期 YYYYMMDD
	int32 percentile = 5; // 可选项，百分位（nth）带宽位置，0-100之间
	int64 nodeRegionId = 6; // 区域ID，可选项（目前只有用户整体统计支持区域ID）
	string algo = 7; // 带宽算法，目前支持secondly和avg
}

message FindDailyServerBandwidthStatsBetweenDaysResponse {
	repeated Stat stats = 1;
	Stat nthStat = 2;

	message Stat {
		string day = 1;
		string timeAt = 2;
		int64 bytes = 3; // 峰值字节/秒
		int64 bits = 4; // 峰值比特/秒
	}
}