solidfire_api 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +13 -3
- data/lib/solidfire_api.rb +1 -0
- data/lib/solidfire_api/cluster.rb +67 -12
- data/lib/solidfire_api/connection.rb +33 -0
- data/lib/solidfire_api/node.rb +81 -0
- data/lib/solidfire_api/version.rb +1 -1
- data/lib/solidfire_api/volume.rb +37 -7
- metadata +3 -3
- data/lib/.DS_Store +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 197ba47760fa5e1508dde1f6cce7cd7c50db5250
|
4
|
+
data.tar.gz: 8568fef138ef8ed357416bcbe2f4ce575336cc72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf73a214def5e614ba5e69352d9fbd8d0a3320131c3f51a832f426d0554272b7ebda99810f6c375f12cfdf3c31c74e541300ce12e2608a9f4c5f4b8d6c63ab97
|
7
|
+
data.tar.gz: 948996a996ca3e1e9e72bda4fceeb2dac98d6dceb6ae8e68ecd91910e1b9f9f3c3034459ba3325acdf38b040d24d9ab963958452d6686ae95b26ac6f1d018b31
|
data/README.md
CHANGED
@@ -1,9 +1,17 @@
|
|
1
1
|
# SolidfireApi
|
2
2
|
|
3
|
-
Ruby Gem to connect on Solidfire storage Array API to collect stats. Currently support Simple Authentication and very basic
|
3
|
+
Ruby Gem to connect on Solidfire storage Array API to collect stats. Currently support Simple Authentication and very basic functionalities.
|
4
|
+
|
5
|
+
Use gem: RestClient to interract with Solidfire API.
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
9
|
+
Gems requirements:
|
10
|
+
|
11
|
+
* rest_client
|
12
|
+
* net/http
|
13
|
+
* json
|
14
|
+
|
7
15
|
Install it:
|
8
16
|
|
9
17
|
$ gem install solidfire_api
|
@@ -20,6 +28,8 @@ Install it:
|
|
20
28
|
:username => "monitor",
|
21
29
|
:password => "patate"
|
22
30
|
})
|
31
|
+
|
32
|
+
# Some method examples:
|
23
33
|
my_sf.name
|
24
34
|
my_sf.mvip
|
25
35
|
my_sf.svip
|
@@ -27,12 +37,12 @@ Install it:
|
|
27
37
|
|
28
38
|
```
|
29
39
|
|
30
|
-
Currently supporting volumes and cluster listing and stats API call's to collect
|
40
|
+
Currently supporting volumes and cluster listing and stats API call's to collect performance metrics for monitoring usage. Nothing for managing cluster yet.
|
31
41
|
|
32
42
|
|
33
43
|
## Contributing
|
34
44
|
|
35
|
-
1. Fork it ( http://github.com
|
45
|
+
1. Fork it ( http://github.com/pdion891/solidfire_api/fork )
|
36
46
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
37
47
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
38
48
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/lib/solidfire_api.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
|
-
|
1
|
+
##
|
2
|
+
# Cluster
|
3
|
+
#
|
4
|
+
# Cluster related API calls
|
5
|
+
#
|
2
6
|
|
3
7
|
module Cluster
|
4
8
|
|
9
|
+
##
|
10
|
+
# cluster_state: require administrative account.
|
11
|
+
#
|
5
12
|
def cluster_state()
|
6
13
|
api_call = {
|
7
14
|
:method => "GetClusterState",
|
@@ -11,7 +18,10 @@ module Cluster
|
|
11
18
|
answer = query_sf(api_call)
|
12
19
|
return answer
|
13
20
|
end
|
14
|
-
|
21
|
+
|
22
|
+
##
|
23
|
+
# Cluster Information such as hostname, mvip,svip,...
|
24
|
+
#
|
15
25
|
def cluster_info()
|
16
26
|
api_call = {
|
17
27
|
:method => "GetClusterInfo",
|
@@ -22,27 +32,52 @@ module Cluster
|
|
22
32
|
return answer["clusterInfo"]
|
23
33
|
end
|
24
34
|
|
25
|
-
|
35
|
+
##
|
36
|
+
# Cluster firmware version including nodes
|
37
|
+
#
|
38
|
+
def cluster_version()
|
26
39
|
api_call = {
|
27
|
-
:method => "
|
40
|
+
:method => "GetClusterVersionInfo",
|
28
41
|
:params => {
|
29
42
|
}
|
30
43
|
}
|
31
44
|
answer = query_sf(api_call)
|
32
|
-
return answer["
|
33
|
-
end
|
34
|
-
|
35
|
-
|
45
|
+
return answer["clusterVersion"]
|
46
|
+
end
|
47
|
+
##
|
48
|
+
# Cluster performance metrics, overall IOPS,..
|
49
|
+
#
|
50
|
+
def cluster_stats()
|
36
51
|
api_call = {
|
37
|
-
:method => "
|
52
|
+
:method => "GetClusterStats",
|
38
53
|
:params => {
|
39
|
-
:driveID => drive_id
|
40
54
|
}
|
41
55
|
}
|
42
56
|
answer = query_sf(api_call)
|
43
|
-
return answer["
|
44
|
-
end
|
57
|
+
return answer["clusterStats"]
|
58
|
+
end
|
59
|
+
|
60
|
+
##
|
61
|
+
# Cluster capacity
|
62
|
+
#
|
63
|
+
def cluster_capacity()
|
64
|
+
api_call = {
|
65
|
+
:method => "GetClusterCapacity",
|
66
|
+
:params => {
|
67
|
+
}
|
68
|
+
}
|
69
|
+
answer = query_sf(api_call)
|
70
|
+
return answer["clusterCapacity"]
|
71
|
+
end
|
72
|
+
|
73
|
+
|
45
74
|
|
75
|
+
##
|
76
|
+
# List all account, return Array of Hash
|
77
|
+
#
|
78
|
+
# Arguments:
|
79
|
+
# limit: (integer, default=1000)
|
80
|
+
#
|
46
81
|
def accounts_list(limit = 1000)
|
47
82
|
api_call = {
|
48
83
|
:method => "ListAccounts",
|
@@ -55,5 +90,25 @@ module Cluster
|
|
55
90
|
return answer["accounts"]
|
56
91
|
end
|
57
92
|
|
93
|
+
##
|
94
|
+
# List Cluster Faults
|
95
|
+
#
|
96
|
+
# Arguments:
|
97
|
+
# fault_type: (node,drive,cluster,service, default=all)
|
98
|
+
# node: Fault affecting an entire node
|
99
|
+
# drive: Fault affecting an individual drive
|
100
|
+
# cluster: Fault affecting the entire cluster
|
101
|
+
# service: Fault affecting a service on the cluster
|
102
|
+
def faults_list(fault_type = "all")
|
103
|
+
api_call = {
|
104
|
+
:method => "ListClusterFaults",
|
105
|
+
:params => {
|
106
|
+
:faultTypes => fault_type
|
107
|
+
}
|
108
|
+
}
|
109
|
+
answer = query_sf(api_call)
|
110
|
+
return answer["faults"]
|
111
|
+
end
|
112
|
+
|
58
113
|
end
|
59
114
|
|
@@ -1,10 +1,24 @@
|
|
1
|
+
# Load libraries
|
1
2
|
require 'solidfire_api/volume'
|
3
|
+
require 'solidfire_api/node'
|
4
|
+
require 'solidfire_api/cluster'
|
2
5
|
|
3
6
|
module SolidfireApi
|
4
7
|
|
8
|
+
##
|
9
|
+
# Object connection
|
10
|
+
#
|
11
|
+
# Call using: SolidfireApi::Connection.new({...})
|
12
|
+
#
|
13
|
+
# Arguments:
|
14
|
+
# mvip: (String)
|
15
|
+
# username: (String)
|
16
|
+
# password: (String)
|
17
|
+
#
|
5
18
|
class Connection
|
6
19
|
include Cluster
|
7
20
|
include Volume
|
21
|
+
include Node
|
8
22
|
|
9
23
|
def self.data
|
10
24
|
@data ||= Hash.new do |hash, key|
|
@@ -16,6 +30,25 @@ module SolidfireApi
|
|
16
30
|
@data = nil
|
17
31
|
end
|
18
32
|
|
33
|
+
##
|
34
|
+
#
|
35
|
+
# Used by all other methods to connect at the SolidFire API
|
36
|
+
# require RestClient gem to handle Rest API calls.
|
37
|
+
# the input is the complete API query as Hash, the method will
|
38
|
+
# send the query as json request to the Solidfire API.
|
39
|
+
#
|
40
|
+
# Example:
|
41
|
+
# >> api_call = {
|
42
|
+
# >> :method => "GetClusterInfo",
|
43
|
+
# >> :params => {
|
44
|
+
# >> }
|
45
|
+
# >> }
|
46
|
+
# >> query_sf(api_call)
|
47
|
+
#
|
48
|
+
#
|
49
|
+
# Arguments:
|
50
|
+
# query: (Hash)
|
51
|
+
# must include the complete Solidfire API query string.
|
19
52
|
def query_sf(query)
|
20
53
|
# query is a hash that is post in json format to SolidFire API.
|
21
54
|
solidfire_rest_url = "https://#{@username}:#{@password}@#{@mvip}/json-rpc/5.0"
|
@@ -0,0 +1,81 @@
|
|
1
|
+
##
|
2
|
+
# Node
|
3
|
+
#
|
4
|
+
# API call related to cluster nodes
|
5
|
+
#
|
6
|
+
module Node
|
7
|
+
|
8
|
+
##
|
9
|
+
#
|
10
|
+
# List cluster nodes
|
11
|
+
#
|
12
|
+
# Arguments:
|
13
|
+
#
|
14
|
+
# state: (String, default = active)
|
15
|
+
# active
|
16
|
+
# all
|
17
|
+
def nodes_list(state = "active")
|
18
|
+
case state
|
19
|
+
when "all"
|
20
|
+
api_call = {
|
21
|
+
:method => "ListAllNodes",
|
22
|
+
:params => {}
|
23
|
+
}
|
24
|
+
when "active"
|
25
|
+
api_call = {
|
26
|
+
:method => "ListActiveNodes",
|
27
|
+
:params => {}
|
28
|
+
}
|
29
|
+
end
|
30
|
+
answer = query_sf(api_call)
|
31
|
+
return answer["nodes"]
|
32
|
+
end
|
33
|
+
##
|
34
|
+
# node performance metrics
|
35
|
+
#
|
36
|
+
# Arguments:
|
37
|
+
# node_id: (Integer)
|
38
|
+
#
|
39
|
+
def node_stats(node_id)
|
40
|
+
api_call = {
|
41
|
+
:method => "GetNodeStats",
|
42
|
+
:params => {
|
43
|
+
:nodeID => node_id
|
44
|
+
}
|
45
|
+
}
|
46
|
+
answer = query_sf(api_call)
|
47
|
+
return answer["nodeStats"]
|
48
|
+
end
|
49
|
+
|
50
|
+
##
|
51
|
+
# provide list of disks in a Array of hash.
|
52
|
+
#
|
53
|
+
def drives_list()
|
54
|
+
api_call = {
|
55
|
+
:method => "ListDrives",
|
56
|
+
:params => {
|
57
|
+
}
|
58
|
+
}
|
59
|
+
answer = query_sf(api_call)
|
60
|
+
return answer["drives"]
|
61
|
+
end
|
62
|
+
|
63
|
+
##
|
64
|
+
# hard drive performance metric, return in Hash.
|
65
|
+
#
|
66
|
+
# Arguments:
|
67
|
+
# drive_id: (Integer)
|
68
|
+
#
|
69
|
+
def drive_stats(drive_id)
|
70
|
+
api_call = {
|
71
|
+
:method => "GetDriveStats",
|
72
|
+
:params => {
|
73
|
+
:driveID => drive_id
|
74
|
+
}
|
75
|
+
}
|
76
|
+
answer = query_sf(api_call)
|
77
|
+
return answer["driveStats"]
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
end
|
data/lib/solidfire_api/volume.rb
CHANGED
@@ -1,17 +1,40 @@
|
|
1
1
|
module Volume
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
|
4
|
+
##
|
5
|
+
# list active volumes, return Array of Hash
|
6
|
+
#
|
7
|
+
# Arguments:
|
8
|
+
# state: (String, active or deleted, default = active)
|
9
|
+
# limit: (Integer, default = 1000)
|
10
|
+
#
|
11
|
+
def volumes_list(state = "active", limit = "1000")
|
12
|
+
case state
|
13
|
+
when "active"
|
14
|
+
api_call = {
|
15
|
+
:method => "ListActiveVolumes",
|
16
|
+
:params => {
|
17
|
+
:startVolumeID => 0,
|
18
|
+
:limit => 1000
|
19
|
+
}
|
9
20
|
}
|
10
|
-
|
21
|
+
when "deleted"
|
22
|
+
api_call = {
|
23
|
+
:method => "ListDeletedVolumes",
|
24
|
+
:params => {}
|
25
|
+
}
|
26
|
+
end
|
11
27
|
answer = query_sf(api_call)
|
12
28
|
return answer["volumes"]
|
13
29
|
end
|
14
30
|
|
31
|
+
##
|
32
|
+
# return volume performance metrics as Hash
|
33
|
+
#
|
34
|
+
# Arguments:
|
35
|
+
# vol_id: (Integer)
|
36
|
+
# Volume ID from the Solidfire Cluster.
|
37
|
+
#
|
15
38
|
def volume_stats(vol_id)
|
16
39
|
api_call = {
|
17
40
|
:method => "GetVolumeStats",
|
@@ -23,6 +46,12 @@ module Volume
|
|
23
46
|
return answer["volumeStats"]
|
24
47
|
end
|
25
48
|
|
49
|
+
##
|
50
|
+
# Return volumes list per account
|
51
|
+
#
|
52
|
+
# Arguments:
|
53
|
+
# accountid: (Integer)
|
54
|
+
#
|
26
55
|
def volumes_for_account(accountid)
|
27
56
|
api_call = {
|
28
57
|
:method => "ListVolumesForAccount",
|
@@ -34,6 +63,7 @@ module Volume
|
|
34
63
|
return answer["result"]
|
35
64
|
end
|
36
65
|
|
66
|
+
|
37
67
|
def volumes_stats_by_account()
|
38
68
|
api_call = {
|
39
69
|
:method => "ListVolumeStatsByAccount",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solidfire_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pierre-Luc Dion
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -51,10 +51,10 @@ files:
|
|
51
51
|
- LICENSE.txt
|
52
52
|
- README.md
|
53
53
|
- Rakefile
|
54
|
-
- lib/.DS_Store
|
55
54
|
- lib/solidfire_api.rb
|
56
55
|
- lib/solidfire_api/cluster.rb
|
57
56
|
- lib/solidfire_api/connection.rb
|
57
|
+
- lib/solidfire_api/node.rb
|
58
58
|
- lib/solidfire_api/version.rb
|
59
59
|
- lib/solidfire_api/volume.rb
|
60
60
|
- solidfire_api.gemspec
|
data/lib/.DS_Store
DELETED
Binary file
|