package skroutesvr;

import "comm2/tlvpickle/skbuiltintype.proto";

enum ConfigType {
    NONE = 0;
    LOGICSVR = 1;
    BY_CONSISTENHASH = 2;
    BY_SECT = 3;
    BY_SETMODEL = 4;
    BY_SCALE = 5;
    LOGICSVR_BYSET = 6;
    HASH_BYSET = 7;
}

message ModuleInfo {
    optional string module_name = 1;
    optional ConfigType conf_type = 2 [default = NONE];
    optional string idc_name = 3;
    optional string sys_name = 4;
    optional string real_module_name = 5;
    optional string idc_path = 6;
	optional bool is_route_enable = 7 [default = false];
	optional bool is_auto_setmodel = 8 [default = false];
}

message CpuInfo {
    optional int32 processor = 1;
    optional int32 core = 2;
    optional int32 physical = 3;
    optional int32 mhz = 4;
}

message DiskInfo {
    optional string type = 1;
    optional int64  total_size = 2;
    optional int64 free_size = 3;
}

message SectInfo {
    optional uint32 begin_sect = 1;
    optional uint32 end_sect = 2;
}

message VerInfo {
    optional uint32 min_ver = 1;
    optional uint32 max_ver = 2;
}

message CliTimeoutInfo {
	optional uint32 conn_retry_time = 1;
	optional uint32 conn_timeout_ms = 2;
	optional uint32 sock_timeout = 3;
	optional uint32 sock_timeout_usec = 4;
}

message SpecialInfo{
	optional CliTimeoutInfo cli_timeout_info = 1;
	repeated string sect_key_value = 2;
	optional bool is_tmp_info = 3 [default = false];
	repeated string destcli_ip_list = 4;
	optional int64 seq = 5; 
}

message SpecConfPair{
	optional string section = 1;
	optional string key = 2;
	optional string value = 3;
}

message SpecConfPairList{
	repeated SpecConfPair info = 1;
}

message SectAndVerInfo {
    optional uint32 begin_sect = 1;
    optional uint32 end_sect = 2;
    optional uint32 min_ver = 3;
    optional uint32 max_ver = 4;
}

enum PrioritStatus {
    RESET_PRIO = 1;
    IDC = 1000;
    TOOLS = 2000;
	RDM_GROUP = 2010;
    TEST = 3000;
}

message Server {
    optional string ip = 1;
    optional uint32 port = 2;
    optional int32 scale = 3 [default = 1000];
    optional uint32 begin_sect = 4 [default = 0];
    optional uint32 end_sect = 5 [default = 0];
    optional uint32 min_ver = 6 [default = 0];
    optional uint32 max_ver = 7 [default = 0];
    //optional string min_ver = 6;
    //optional string max_ver = 7;
    optional string alias = 8;
    optional bool is_in_use = 9 [default = false];
    optional int32 idx = 10;
    optional CpuInfo cpu_info = 11;
    optional int32 mem_size = 12;
    repeated DiskInfo disk_info = 13;
    repeated SectAndVerInfo sect_and_ver = 14;
    optional PrioritStatus priority_status = 15;
    optional uint32 svr_index = 16;
	optional ConfigType conf_type = 17;
	optional bool is_bak_svr = 18 [default = false];
}

message CmdbServerInfo {
	optional string city = 1;
	optional int32 zone_id = 2;
	optional int32 city_id = 3;
	optional string zone_en_name = 4;
	optional string hostname = 5;
	optional int32 position_id = 6;
	optional string inner_ip = 7;
	optional string position_name = 8;
}

message CmdbSvrinfoRsp {
	optional string msg = 1;
	optional int32 rtn = 2;	
	repeated CmdbServerInfo data = 3;
}

message MultiServer {
    repeated Server svr = 1;
}

message SvrInfo {
    optional ModuleInfo module_info = 1;
    optional Server svr = 2;
	repeated Server svr_list = 3;
}

enum SpecRouteType {
    ALIAS = 0;
    SECT = 1;
    VERSION = 2;
    SECT_AND_VER = 3;
}

enum SpecOpType {
    ADD = 0;
    DEL = 1;
    REPLACE = 2;
}

message SpecRouteInfo {
    optional ModuleInfo module_info = 1;
    optional SpecRouteType type = 2;
    repeated Server svr_info = 3;
    optional string seq = 4;
    optional SpecOpType op_type = 5;
}


message LogicSvrSpecRouteInfo {
    repeated SpecRouteInfo route_info = 1; 
}

enum ModuleGrayState{
    NORMAL = 0;
    GRAY = 1;
	CONTINOUSALL = 2;
	ROLLBACK_GRAY = 3;
}

enum GrayType {
    GRAY_IDC = 1;
    GRAY_ZONE  = 2;
    GRAY_POSITION = 3;
}                       

message GrayTypeInfo{
    optional uint32 gray_type = 1 [default = 0];
    repeated string gray_type_value = 2;
}   

message SingleGray {
	required int32 gray_total_step = 1;
	required int32 gray_cur_step = 2;
	required int64 gray_seq = 3;
	repeated string destgray_ip_list = 4;
	repeated GrayTypeInfo graytype = 5;
	optional int64 new_gray_seq = 6;
	repeated int64 new_zone_gray_seq = 7;
}

message SingleAll {
    required int32 all_total_step = 1;
    required int32 all_cur_step = 2;
    required int64 all_seq = 3;
	optional int64 new_all_seq = 4;
	repeated int64 new_zone_all_seq = 5;
}

message GrayInfo {
	required bool is_ingray = 1[default = false];
	optional int64 last_maxgray_seq = 2[default = 0];	
	repeated SingleGray single_gray_info = 3;
	optional ModuleGrayState module_gray_state = 4[default = NORMAL];
	optional int64 last_all_seq = 5[default = 0];
	repeated SingleAll single_all_info = 6;
	optional int64 rollback_gray_seq = 7;
	optional int64 rollback_new_gray_seq = 8;
	repeated int64 rollback_new_zone_gray_seq = 9;
}

enum NotifyType {
    UPDATE = 0;
    SPECIAL = 1;
    REMOVE = 2;
    ENABLE = 3;
    DISABLE = 4;
    RESETPRIO = 5;
	SET_SPECIAL_INFO= 6;
	SET_MODULE_INFO= 7;
	BATCH_SVR_UPDATE = 8;
}


message Notify {
    optional NotifyType type = 1;
    optional SvrInfo svr_info = 2;
    optional SpecRouteInfo spec_info = 3;
    optional int64 seq = 4;
	optional SpecialInfo special_info= 5;
	repeated string destcli_ip_list = 6;
	optional string check_seq = 7;
	optional GrayInfo gray_info = 8;
	optional string new_check_seq = 9;
}

message MultiNotify {
    repeated Notify notify = 1;
}

message CheckNotify {
	required int32 toolcmd = 1;
	optional Notify notify = 2;
}

message GrayApplyseqNotifyInfo {
	optional SvrInfo rollback_svr_info = 1;
    optional SpecRouteInfo rollback_spec_info = 2;
	optional SpecialInfo rollback_special_info= 3;
	optional Notify notify = 4;
	optional NotifyType rollback_type = 5;
}

enum QueryType {
	GROUPNAME = 0;
}

message QueryData {
	optional QueryType type = 1;
	optional int64 ret = 2;
	optional string group_name = 3;
}

message GrayApplyseqConfNotifyInfo {
	optional string rollback_config = 1;
	optional ConfigNotify conf_notify = 2;
}

message ConfigInfo {
	optional ModuleInfo module_info = 1;
	optional string config = 2;
	optional int64 max_seq = 3;
	optional uint64 task_id = 4;
	repeated string destcli_ip_list = 5;
	repeated GrayTypeInfo graytype = 6;
}

message ZKClientConfigPath {
	repeated string path = 1;
}

message ConfigNotify {
	optional ConfigInfo conf_info = 1;
	optional string disk_path = 2;
	repeated string ip = 3;
	required string type = 4;
	optional GrayInfo gray_info = 5;
}

service sKRouteSvr{
	option( tlvpickle.Magic ) = 12834;

	rpc Report(Notify) returns(tlvpickle.SKBuiltinInt32_PB) {
		option( tlvpickle.CmdID ) = 1;
		option( tlvpickle.OptString ) = "i:p:s:l:b:e:m:c:o:d:a";
		option( tlvpickle.Usage ) = "-i <ip>";
	}

	rpc DispatchConfig(ConfigNotify) returns(tlvpickle.SKBuiltinInt32_PB) {
		option( tlvpickle.CmdID ) = 2;
		option( tlvpickle.OptString ) = "i:p:s:l:b:e:m:c:o:d:a";
		option( tlvpickle.Usage ) = "-i <ip>";
	}

	rpc Query(QueryData) returns(QueryData) {
		option( tlvpickle.CmdID ) = 3;
		option( tlvpickle.OptString ) = "i:p:s:l:b:e:m:c:o:d:a";
		option( tlvpickle.Usage ) = "-i <ip>";
	}

}





