import { GrpcTimeOut, resStatusResponse, collectionNameReq, KeyValuePair } from './Common';
type ResourceGroupConfig = {
    requests?: {
        node_num: number;
    };
    limits?: {
        node_num: number;
    };
    transfer_from?: {
        resource_group: string;
    }[];
    transfer_to?: {
        resource_group: string;
    }[];
    node_filter?: {
        node_labels: KeyValuePair[];
    };
};
type NodeInfo = {
    node_id: number;
    address: string;
    hostname: string;
};
type ResourceGroup = {
    name: string;
    capacity: number;
    num_available_node: number;
    num_loaded_replica: {
        [key: string]: number;
    };
    num_outgoing_node: {
        [key: string]: number;
    };
    num_incoming_node: {
        [key: string]: number;
    };
    config?: ResourceGroupConfig;
    nodes?: NodeInfo[];
};
interface BaseResourceGroupReq extends GrpcTimeOut {
    resource_group: string;
}
export interface CreateResourceGroupReq extends BaseResourceGroupReq {
    config?: ResourceGroupConfig;
}
export interface DescribeResourceGroupsReq extends BaseResourceGroupReq {
}
export interface UpdateRresourceGroupReq extends GrpcTimeOut {
    resource_groups: {
        [key: string]: ResourceGroupConfig;
    };
}
export interface DropResourceGroupsReq extends BaseResourceGroupReq {
}
export interface TransferNodeReq extends GrpcTimeOut {
    source_resource_group: string;
    target_resource_group: string;
    num_node: number;
}
export interface TransferReplicaReq extends collectionNameReq {
    source_resource_group: string;
    target_resource_group: string;
    num_replica: number;
}
export interface ListResourceGroupsResponse extends resStatusResponse {
    resource_groups: string[];
}
export interface DescribeResourceGroupResponse extends resStatusResponse {
    resource_group: ResourceGroup;
}
export interface ReplicateConnectionParam {
    uri: string;
    token?: string;
}
export interface ReplicateCluster {
    cluster_id: string;
    connection_param: ReplicateConnectionParam;
    pchannels?: string[];
}
export interface CrossClusterTopology {
    source_cluster_id: string;
    target_cluster_id: string;
}
export interface ReplicateConfiguration {
    clusters: ReplicateCluster[];
    cross_cluster_topology?: CrossClusterTopology[];
}
export interface UpdateReplicateConfigurationReq extends GrpcTimeOut {
    clusters: ReplicateCluster[];
    cross_cluster_topology?: CrossClusterTopology[];
    force_promote?: boolean;
}
export interface GetReplicateConfigurationReq extends GrpcTimeOut {
}
export interface GetReplicateConfigurationResponse extends resStatusResponse {
    configuration: ReplicateConfiguration;
}
export {};
