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

package pb;

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

// 防火墙全局服务
service FirewallService {
	// 组合看板数据
	rpc composeFirewallGlobalBoard (ComposeFirewallGlobalBoardRequest) returns (ComposeFirewallGlobalBoardResponse);

	// 发送告警(notify)消息
	rpc notifyHTTPFirewallEvent (NotifyHTTPFirewallEventRequest) returns (RPCSuccess);

	// 读取当前Block动作次数
	rpc countFirewallDailyBlocks(CountFirewallDailyBlocksRequest) returns (CountFirewallDailyBlocksResponse);
}

// 组合看板数据
message ComposeFirewallGlobalBoardRequest {

}

message ComposeFirewallGlobalBoardResponse {
	int64 countDailyLogs = 1;
	int64 countDailyBlocks = 2;
	int64 countDailyCaptcha = 3;
	int64 countWeeklyBlocks = 4;

	repeated HTTPFirewallRuleGroupStat httpFirewallRuleGroups = 30;
	repeated DailyStat dailyStats = 31;
	repeated HourlyStat hourlyStats = 32;
	repeated NodeStat topNodeStats = 33;
	repeated DomainStat topDomainStats = 34;
	repeated CountryStat topCountryStats = 35;

	message HTTPFirewallRuleGroupStat {
		HTTPFirewallRuleGroup httpFirewallRuleGroup = 1;
		int64 count = 2;
	}

	message HourlyStat {
		string hour = 1;
		int64 countLogs = 2;
		int64 countCaptcha = 3;
		int64 countBlocks = 4;
	}

	message DailyStat {
		string day = 1;
		int64 countLogs = 2;
		int64 countCaptcha = 3;
		int64 countBlocks = 4;
	}

	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 CountryStat {
		string countryName = 1;
		int64 bytes = 2;
		int64 countRequests = 3;
		float percent = 4; // 流量占比
		int64 countAttackRequests = 6;
		int64 attackBytes = 7;
	}
}

// 发送告警(notify)消息
message NotifyHTTPFirewallEventRequest {
	int64 serverId = 1;
	int64 httpFirewallPolicyId = 2;
	int64 httpFirewallRuleGroupId = 3;
	int64 httpFirewallRuleSetId = 4;
	int64 createdAt = 5;
}

// 读取当前Block动作次数
message CountFirewallDailyBlocksRequest {

}

message CountFirewallDailyBlocksResponse {
	int64 countBlocks = 1;
}