package dbapi import ( "basic.com/pubsub/protomsg.git" "encoding/json" "strconv" ) type ClusterApi struct { Ip string Port int } func (api ClusterApi) getBasicUrl() string { if api.Ip == "" { return BASIC_URL } if api.Ip == "" { api.Ip = DEFAULT_IP } if api.Port == 0 { api.Port = DEFAULT_PORT } return "http://"+api.Ip+":"+strconv.Itoa(api.Port) } func (api ClusterApi) FindCluster() (b bool,c protomsg.ClusterAndNodes) { url := api.getBasicUrl() + DATA_URL_PREFIX + "/cluster/findCluster" client := NewClient() body,err := client.DoGetRequest(url, nil,nil) if err != nil { return false,c } var res Result if err = json.Unmarshal(body, &res); err != nil { return false,c } bytes, _ := json.Marshal(res.Data) err = json.Unmarshal(bytes, &c) return res.Success,c } func (api ClusterApi) Create(clusterName string, password string, virtualIp string) (bool,interface{}) { url := api.getBasicUrl() + DATA_URL_PREFIX + "/cluster/create" client := NewClient() paramBody := map[string]interface{}{ "clusterName": clusterName, "password": password, "virtualIp": virtualIp, } body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil) if err != nil { return false,nil } var res Result if err = json.Unmarshal(body, &res); err != nil { return false,nil } return res.Success,res.Data } func (api ClusterApi) Search(searchNum string, password string) (bool,interface{}) { url := api.getBasicUrl() + DATA_URL_PREFIX + "/cluster/search" client := NewClient() paramBody := map[string]interface{}{ "searchNum": searchNum, "password": password, } body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil) if err != nil { return false,nil } var res Result if err = json.Unmarshal(body, &res); err != nil { return false,nil } return res.Success,res.Data } func (api ClusterApi) GetSearchNodes() (bool,interface{}) { url := api.getBasicUrl() + DATA_URL_PREFIX + "/cluster/getSearchNodes" client := NewClient() body,err := client.DoGetRequest(url, nil,nil) if err != nil { return false,nil } var res Result if err = json.Unmarshal(body, &res); err != nil { return false,nil } return res.Success,res.Data } func (api ClusterApi) StopSearching(searchNum string) (bool,interface{}) { url := api.getBasicUrl() + DATA_URL_PREFIX + "/cluster/stopSearching" client := NewClient() paramBody := map[string]interface{}{ "searchNum": searchNum, } body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil) if err != nil { return false,nil } var res Result if err = json.Unmarshal(body, &res); err != nil { return false,nil } return res.Success,res.Data } func (api ClusterApi) UpdateClusterName(clusterName string, virtualIp string) (bool,interface{}) { url := api.getBasicUrl() + DATA_URL_PREFIX + "/cluster/updateClusterName" client := NewClient() paramBody := map[string]interface{}{ "clusterName": clusterName, "virtualIp": virtualIp, } body,err := client.DoPostRequest(url,CONTENT_TYPE_FORM, paramBody,nil,nil) if err != nil { return false,nil } var res Result if err = json.Unmarshal(body, &res); err != nil { return false,nil } return res.Success,res.Data } func (api ClusterApi) Leave(paramBody map[string]interface{}) (bool,interface{}) { url := api.getBasicUrl() + DATA_URL_PREFIX + "/cluster/leave" client := NewClient() body,err := client.DoPostRequest(url,CONTENT_TYPE_FORM, paramBody,nil,nil) if err != nil { return false,nil } var res Result if err = json.Unmarshal(body, &res); err != nil { return false,nil } return res.Success,res.Data } func (api ClusterApi) JoinCluster(paramBody map[string]interface{}) (bool,interface{}) { url := api.getBasicUrl() + DATA_URL_PREFIX + "/cluster/joinCluster" client := NewClient() body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil) if err != nil { return false,nil } var res Result if err = json.Unmarshal(body, &res); err != nil { return false,nil } return res.Success,res.Data } func (api ClusterApi) UpdateDriftState(driftState string, nodeId string) (bool,interface{}) { url := api.getBasicUrl() + DATA_URL_PREFIX + "/cluster/updateDriftState" client := NewClient() paramBody := map[string]interface{}{ "driftState": driftState, "nodeId": nodeId, } body,err := client.DoPostRequest(url,CONTENT_TYPE_FORM, paramBody,nil,nil) if err != nil { return false,nil } var res Result if err = json.Unmarshal(body, &res); err != nil { return false,nil } return res.Success,res.Data }