admin: Add ServerInfo API() (#3743)
parent
fb39c7c26b
commit
7f86a21317
@ -0,0 +1,119 @@ |
||||
/* |
||||
* Minio Cloud Storage, (C) 2017 Minio, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* |
||||
*/ |
||||
|
||||
package madmin |
||||
|
||||
import ( |
||||
"encoding/json" |
||||
"io/ioutil" |
||||
"net/http" |
||||
"net/url" |
||||
"time" |
||||
) |
||||
|
||||
// BackendType - represents different backend types.
|
||||
type BackendType int |
||||
|
||||
// Enum for different backend types.
|
||||
const ( |
||||
Unknown BackendType = iota |
||||
// Filesystem backend.
|
||||
FS |
||||
// Multi disk Erasure (single, distributed) backend.
|
||||
Erasure |
||||
|
||||
// Add your own backend.
|
||||
) |
||||
|
||||
// StorageInfo - represents total capacity of underlying storage.
|
||||
type StorageInfo struct { |
||||
// Total disk space.
|
||||
Total int64 |
||||
// Free available disk space.
|
||||
Free int64 |
||||
// Backend type.
|
||||
Backend struct { |
||||
// Represents various backend types, currently on FS and Erasure.
|
||||
Type BackendType |
||||
|
||||
// Following fields are only meaningful if BackendType is Erasure.
|
||||
OnlineDisks int // Online disks during server startup.
|
||||
OfflineDisks int // Offline disks during server startup.
|
||||
ReadQuorum int // Minimum disks required for successful read operations.
|
||||
WriteQuorum int // Minimum disks required for successful write operations.
|
||||
} |
||||
} |
||||
|
||||
// ServerProperties holds some of the server's information such as uptime,
|
||||
// version, region, ..
|
||||
type ServerProperties struct { |
||||
Uptime time.Duration `json:"uptime"` |
||||
Version string `json:"version"` |
||||
CommitID string `json:"commitID"` |
||||
Region string `json:"region"` |
||||
SQSARN []string `json:"sqsARN"` |
||||
} |
||||
|
||||
// ServerConnStats holds network information
|
||||
type ServerConnStats struct { |
||||
TotalInputBytes uint64 `json:"transferred"` |
||||
TotalOutputBytes uint64 `json:"received"` |
||||
} |
||||
|
||||
// ServerInfo holds the whole server information that will be
|
||||
// returned by ServerInfo API.
|
||||
type ServerInfo struct { |
||||
StorageInfo StorageInfo `json:"storage"` |
||||
ConnStats ServerConnStats `json:"network"` |
||||
Properties ServerProperties `json:"server"` |
||||
} |
||||
|
||||
// ServerInfo - Connect to a minio server and call Server Info Management API
|
||||
// to fetch server's information represented by ServerInfo structure
|
||||
func (adm *AdminClient) ServerInfo() (ServerInfo, error) { |
||||
// Prepare web service request
|
||||
reqData := requestData{} |
||||
reqData.queryValues = make(url.Values) |
||||
reqData.queryValues.Set("info", "") |
||||
reqData.customHeaders = make(http.Header) |
||||
|
||||
resp, err := adm.executeMethod("GET", reqData) |
||||
defer closeResponse(resp) |
||||
if err != nil { |
||||
return ServerInfo{}, err |
||||
} |
||||
|
||||
// Check response http status code
|
||||
if resp.StatusCode != http.StatusOK { |
||||
return ServerInfo{}, httpRespToErrorResponse(resp) |
||||
} |
||||
|
||||
// Unmarshal the server's json response
|
||||
var info ServerInfo |
||||
|
||||
respBytes, err := ioutil.ReadAll(resp.Body) |
||||
if err != nil { |
||||
return ServerInfo{}, err |
||||
} |
||||
|
||||
err = json.Unmarshal(respBytes, &info) |
||||
if err != nil { |
||||
return ServerInfo{}, err |
||||
} |
||||
|
||||
return info, nil |
||||
} |
Loading…
Reference in new issue