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

package pb;

import "models/model_server_stat_board.proto";
import "models/model_node_value.proto";
import "models/model_metric_chart.proto";
import "models/model_metric_stat.proto";

// 统计看板
service ServerStatBoardService {
	// 读取所有看板
	rpc findAllEnabledServerStatBoards (FindAllEnabledServerStatBoardsRequest) returns (FindAllEnabledServerStatBoardsResponse);

	// 组合集群看板数据
	rpc composeServerStatNodeClusterBoard (ComposeServerStatNodeClusterBoardRequest) returns (ComposeServerStatNodeClusterBoardResponse);

	// 组合节点看板数据
	rpc composeServerStatNodeBoard (ComposeServerStatNodeBoardRequest) returns (ComposeServerStatNodeBoardResponse);

	// 组合服务看板数据
	rpc composeServerStatBoard (ComposeServerStatBoardRequest) returns (ComposeServerStatBoardResponse);
}

// 读取所有看板
message FindAllEnabledServerStatBoardsRequest {
	int64 nodeClusterId = 1;
}

message FindAllEnabledServerStatBoardsResponse {
	repeated ServerStatBoard serverStatBoards = 1;
}

// 组合集群看板数据
message ComposeServerStatNodeClusterBoardRequest {
	int64 nodeClusterId = 1;
}

message ComposeServerStatNodeClusterBoardResponse {
	int64 countActiveNodes = 1;
	int64 countInactiveNodes = 2;
	int64 countServers = 3;
	int64 countUsers = 4;

	repeated DailyTrafficStat dailyTrafficStats = 30;
	repeated HourlyTrafficStat hourlyTrafficStats = 31;
	repeated NodeStat topNodeStats = 32;
	repeated DomainStat topDomainStats = 33;

	repeated NodeValue cpuNodeValues = 34;
	repeated NodeValue memoryNodeValues = 35;
	repeated NodeValue loadNodeValues = 36;

	repeated MetricDataChart metricDataCharts = 37;

	message DailyTrafficStat {
		string day = 1;
		int64 bytes = 2;
		int64 cachedBytes = 3;
		int64 countRequests = 4;
		int64 countCachedRequests = 5;
		int64 countAttackRequests = 6;
		int64 attackBytes = 7;
	}

	message HourlyTrafficStat {
		string hour = 1;
		int64 bytes = 2;
		int64 cachedBytes = 3;
		int64 countRequests = 4;
		int64 countCachedRequests = 5;
		int64 countAttackRequests = 6;
		int64 attackBytes = 7;
	}

	message NodeStat {
		int64 nodeId = 1;
		string nodeName = 2;
		int64 countRequests = 3;
		int64 bytes = 4;
		int64 countAttackRequests = 6;
		int64 attackBytes = 7;
	}

	message DomainStat {
		int64 serverId = 1;
		string domain = 2;
		int64 countRequests = 3;
		int64 bytes = 4;
		int64 countAttackRequests = 6;
		int64 attackBytes = 7;
	}
}

// 组合节点看板数据
message ComposeServerStatNodeBoardRequest {
	int64 nodeId = 1;
}

message ComposeServerStatNodeBoardResponse {
	bool isActive = 1;
	int64 trafficInBytes = 2;
	int64 trafficOutBytes = 3;
	int64 countRequests = 4;
	int64 countAttackRequests = 5;
	int64 countConnections = 6;
	int64 cacheDiskSize = 7;
	int64 cacheMemorySize = 8;
	float cpuUsage = 9;
	float memoryUsage = 10;
	int64 memoryTotalSize = 11;
	float load = 12;

	repeated DailyTrafficStat dailyTrafficStats = 31;
	repeated HourlyTrafficStat hourlyTrafficStats = 32;
	repeated DomainStat topDomainStats = 33;

	repeated NodeValue cpuNodeValues = 34;
	repeated NodeValue memoryNodeValues = 35;
	repeated NodeValue loadNodeValues = 36;
	repeated NodeValue cacheDirsValues = 38;

	repeated MetricDataChart metricDataCharts = 37;

	message DailyTrafficStat {
		string day = 1;
		int64 bytes = 2;
		int64 cachedBytes = 3;
		int64 countRequests = 4;
		int64 countCachedRequests = 5;
		int64 countAttackRequests = 6;
		int64 attackBytes = 7;
	}

	message HourlyTrafficStat {
		string hour = 1;
		int64 bytes = 2;
		int64 cachedBytes = 3;
		int64 countRequests = 4;
		int64 countCachedRequests = 5;
		int64 countAttackRequests = 6;
		int64 attackBytes = 7;
	}

	message DomainStat {
		int64 serverId = 1;
		string domain = 2;
		int64 countRequests = 3;
		int64 bytes = 4;
		int64 countAttackRequests = 6;
		int64 attackBytes = 7;
	}
}

// 组合服务看板数据
message ComposeServerStatBoardRequest {
	int64 serverId = 1;
}

message ComposeServerStatBoardResponse {
	repeated DailyTrafficStat dailyTrafficStats = 30;
	repeated HourlyTrafficStat hourlyTrafficStats = 31;
	repeated NodeStat topNodeStats = 32;
	repeated DomainStat topDomainStats = 33;

	repeated MetricDataChart metricDataCharts = 34;

	message DailyTrafficStat {
		string day = 1;
		int64 bytes = 2;
		int64 cachedBytes = 3;
		int64 countRequests = 4;
		int64 countCachedRequests = 5;
		int64 countAttackRequests = 6;
		int64 attackBytes = 7;
	}

	message HourlyTrafficStat {
		string hour = 1;
		int64 bytes = 2;
		int64 cachedBytes = 3;
		int64 countRequests = 4;
		int64 countCachedRequests = 5;
		int64 countAttackRequests = 6;
		int64 attackBytes = 7;
	}

	message NodeStat {
		int64 nodeId = 1;
		string nodeName = 2;
		int64 countRequests = 3;
		int64 bytes = 4;
		int64 countAttackRequests = 6;
		int64 attackBytes = 7;
	}

	message DomainStat {
		int64 serverId = 1;
		string domain = 2;
		int64 countRequests = 3;
		int64 bytes = 4;
		int64 countAttackRequests = 6;
		int64 attackBytes = 7;
	}
}

// 矩阵数据
message MetricDataChart {
	MetricChart metricChart = 1;
	repeated MetricStat metricStats = 2;
}