sensu-plugins-netscaler 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +13 -2
- data/README.md +2 -1
- data/bin/metrics-netscaler.py +175 -0
- data/lib/sensu-plugins-netscaler/version.rb +2 -2
- metadata +6 -5
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 144a8f8b312273a6a9bafc38f172f68e6e5881fa
|
4
|
+
data.tar.gz: 25a837bf4becd193a2e4bf1edf1360f6140eb605
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3097ff1c25523d595dbf8a3fd8a20d740f28d10e73eb5fa40630f5938bb780eb5fbb2ea3e9ee2bd1fbc89c8fee5dd697158fc156962df1982487cac061ac00a2
|
7
|
+
data.tar.gz: df0f79930414ad35715c3ac9bc49ac348e186bdd9e3d15a7949c8374b3a2f6eb27ca3232fd4796720698a165e2f817a49f2cfcf0925a7135068011bc05340fd9
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -3,12 +3,23 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
3
3
|
|
4
4
|
This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachangelog.com/)
|
5
5
|
|
6
|
-
## Unreleased][unreleased]
|
6
|
+
## [Unreleased][unreleased]
|
7
|
+
|
8
|
+
## [0.1.0] - 2015-08-11
|
9
|
+
### Added
|
10
|
+
- Add metrics-netscaler.py plugin
|
11
|
+
|
12
|
+
### Changed
|
13
|
+
- bump rubocop
|
7
14
|
|
8
15
|
## [0.0.2] - 2015-07-14
|
9
16
|
### Changed
|
10
17
|
- updated sensu-plugin gem to 1.2.0
|
11
18
|
|
12
|
-
##
|
19
|
+
## 0.0.1 - 2015-06-04
|
13
20
|
### Added
|
14
21
|
- initial release
|
22
|
+
|
23
|
+
[unreleased]: https://github.com/sensu-plugins/sensu-plugins-netscaler/compare/0.1.0...HEAD
|
24
|
+
[0.0.3]: https://github.com/sensu-plugins/sensu-plugins-netscaler/compare/0.0.2...0.1.0
|
25
|
+
[0.0.2]: https://github.com/sensu-plugins/sensu-plugins-netscaler/compare/0.0.1...0.0.2
|
data/README.md
CHANGED
@@ -10,11 +10,12 @@
|
|
10
10
|
## Functionality
|
11
11
|
|
12
12
|
## Files
|
13
|
+
- metrics-netscaler.py
|
13
14
|
|
14
15
|
## Usage
|
15
16
|
|
16
17
|
## Installation
|
17
18
|
|
18
|
-
[Installation and Setup](
|
19
|
+
[Installation and Setup](http://sensu-plugins.io/docs/installation_instructions.html)
|
19
20
|
|
20
21
|
## Notes
|
@@ -0,0 +1,175 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
#
|
3
|
+
# DESCRIPTION:
|
4
|
+
# Grabs stats from a netscaler appliance via the Nitro REST API.
|
5
|
+
# Prints to STDOUT in graphite format thus meant for a TCP handler
|
6
|
+
# To find out what each stat means download the Nitro SDK
|
7
|
+
# http://support.citrix.com/proddocs/topic/netscaler-main-api-10-map/ns-nitro-rest-feat-stat-api-ref.html
|
8
|
+
# You should also be able to get the stats docs in a PDF that can be downloaded
|
9
|
+
# from your netscaler web UI.
|
10
|
+
#
|
11
|
+
# OUTPUT:
|
12
|
+
# Graphite plain-text format (name value timestamp\n)
|
13
|
+
#
|
14
|
+
# DEPENDENCIES:
|
15
|
+
# Python 2.7 (untested on python 3 but should work fine)
|
16
|
+
# Python Requests (http://docs.python-requests.org)
|
17
|
+
#
|
18
|
+
# LICENSE:
|
19
|
+
# Jaime Gago contact@jaimegago.com
|
20
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
21
|
+
# for details.
|
22
|
+
import logging
|
23
|
+
import logging.handlers
|
24
|
+
import optparse
|
25
|
+
import requests
|
26
|
+
import sys
|
27
|
+
import time
|
28
|
+
|
29
|
+
FLAT_STATS_ENDPOINTS = [
|
30
|
+
'ns',
|
31
|
+
'cmp',
|
32
|
+
'ssl',
|
33
|
+
'system'
|
34
|
+
]
|
35
|
+
|
36
|
+
STATS_WITH_IDS = [
|
37
|
+
{
|
38
|
+
'endpoint' : 'lbvserver',
|
39
|
+
'identifier' : 'name'
|
40
|
+
},
|
41
|
+
{
|
42
|
+
'endpoint' : 'Interface',
|
43
|
+
'identifier' : 'id'
|
44
|
+
}
|
45
|
+
]
|
46
|
+
|
47
|
+
|
48
|
+
FAILURE_CONSTANT = 1
|
49
|
+
|
50
|
+
def set_syslog():
|
51
|
+
'''Set a syslog logger'''
|
52
|
+
try:
|
53
|
+
logger = logging.getLogger(__name__)
|
54
|
+
logger.setLevel(logging.DEBUG)
|
55
|
+
|
56
|
+
formatter = logging.Formatter("%(pathname)s: %(message)s")
|
57
|
+
|
58
|
+
handler = logging.handlers.SysLogHandler(address = '/dev/log')
|
59
|
+
handler.setFormatter(formatter)
|
60
|
+
logger.addHandler(handler)
|
61
|
+
except Exception:
|
62
|
+
logging.critical("Failed to configure syslog handler")
|
63
|
+
sys.exit(1)
|
64
|
+
return logger
|
65
|
+
|
66
|
+
def isfloat(value):
|
67
|
+
try:
|
68
|
+
float(value)
|
69
|
+
return True
|
70
|
+
except ValueError:
|
71
|
+
return False
|
72
|
+
|
73
|
+
def graphite_printer(stats, graphite_scheme):
|
74
|
+
now = time.time()
|
75
|
+
for stat in stats:
|
76
|
+
print "%s.%s %s %d" % (graphite_scheme, stat, stats[stat], now)
|
77
|
+
|
78
|
+
def get_flat_stats(flat_stats_end_points, nitro_version, netscaler, user,
|
79
|
+
password, logger):
|
80
|
+
nitro_rest_api = 'http://%s/nitro/%s/stat/' % (netscaler, nitro_version)
|
81
|
+
flat_stats = {}
|
82
|
+
for flat_stat_end_point in flat_stats_end_points:
|
83
|
+
url = nitro_rest_api + flat_stat_end_point
|
84
|
+
try:
|
85
|
+
response = requests.get(url, auth=(user, password))
|
86
|
+
except Exception as e:
|
87
|
+
logger.critical('Could not get JSON from %s' % url)
|
88
|
+
logger.critical(e)
|
89
|
+
sys.exit(FAILURE_CONSTANT)
|
90
|
+
data = response.json()
|
91
|
+
for flat_stat in data[flat_stat_end_point]:
|
92
|
+
value = data[flat_stat_end_point][flat_stat]
|
93
|
+
if isfloat(value):
|
94
|
+
flat_stats[flat_stat_end_point+ '.' + flat_stat] = value
|
95
|
+
return flat_stats
|
96
|
+
|
97
|
+
def get_stats_with_ids(stat_with_ids_end_point, stat_identifier, nitro_version,
|
98
|
+
netscaler, user, password, logger):
|
99
|
+
nitro_rest_api = 'http://%s/nitro/%s/stat/' % (netscaler, nitro_version)
|
100
|
+
url = nitro_rest_api + stat_with_ids_end_point
|
101
|
+
stats_with_ids = {}
|
102
|
+
try:
|
103
|
+
response = requests.get(url, auth=(user, password))
|
104
|
+
except Exception as e:
|
105
|
+
logger.critical('Could not get JSON from %s' % url)
|
106
|
+
logger.critical(e)
|
107
|
+
sys.exit(FAILURE_CONSTANT)
|
108
|
+
data = response.json()
|
109
|
+
for stats in data[stat_with_ids_end_point]:
|
110
|
+
stat_id = stats[stat_identifier]
|
111
|
+
stat_id_alnum = ''.join(e for e in stat_id if e.isalnum())
|
112
|
+
for stat in stats:
|
113
|
+
value = stats[stat]
|
114
|
+
if isfloat(value):
|
115
|
+
stat_name = stat_with_ids_end_point + '.' + stat_id_alnum + '.' + stat
|
116
|
+
stats_with_ids[stat_name] = value
|
117
|
+
return stats_with_ids
|
118
|
+
|
119
|
+
|
120
|
+
def main():
|
121
|
+
parser = optparse.OptionParser()
|
122
|
+
|
123
|
+
parser.add_option('-n', '--netscaler',
|
124
|
+
help = 'netscaler (IP or FQDN) to collect stats from',
|
125
|
+
dest = 'netscaler',
|
126
|
+
metavar = 'netscaler')
|
127
|
+
|
128
|
+
parser.add_option('-u', '--user',
|
129
|
+
help = 'netscaler user with access to nitro rest',
|
130
|
+
dest = 'user',
|
131
|
+
metavar = 'USER')
|
132
|
+
|
133
|
+
parser.add_option('-p', '--password',
|
134
|
+
help = 'netscaler user password',
|
135
|
+
dest = 'password',
|
136
|
+
metavar = 'PASSWORD')
|
137
|
+
|
138
|
+
parser.add_option('-s', '--graphite_scheme',
|
139
|
+
help = 'graphite scheme to prepend, default to <netscaler>',
|
140
|
+
default = 'netscaler',
|
141
|
+
dest = 'graphite_scheme',
|
142
|
+
metavar = 'GRAPHITE_SCHEME')
|
143
|
+
|
144
|
+
parser.add_option('-v', '--nitro-version',
|
145
|
+
help = 'nitro REST API version, defaults to v1',
|
146
|
+
default = 'v1',
|
147
|
+
dest = 'nitro_version',
|
148
|
+
metavar = 'NITRO_VERSION')
|
149
|
+
|
150
|
+
(options, args) = parser.parse_args()
|
151
|
+
|
152
|
+
if not options.netscaler or not options.user or not options.password:
|
153
|
+
print 'A netscaler, user and password are required'
|
154
|
+
sys.exit(FAILURE_CONSTANT)
|
155
|
+
|
156
|
+
nitro_version = options.nitro_version
|
157
|
+
netscaler = options.netscaler
|
158
|
+
user = options.user
|
159
|
+
password = options.password
|
160
|
+
|
161
|
+
logger = set_syslog()
|
162
|
+
|
163
|
+
flat_stats = get_flat_stats(FLAT_STATS_ENDPOINTS, nitro_version, netscaler, user,
|
164
|
+
password, logger)
|
165
|
+
graphite_printer(flat_stats, options.graphite_scheme)
|
166
|
+
|
167
|
+
for stat_with_ids in STATS_WITH_IDS:
|
168
|
+
stats_with_ids = get_stats_with_ids(stat_with_ids['endpoint'],
|
169
|
+
stat_with_ids['identifier'], nitro_version, netscaler, user, password,
|
170
|
+
logger)
|
171
|
+
graphite_printer(stats_with_ids, options.graphite_scheme)
|
172
|
+
|
173
|
+
|
174
|
+
if __name__ == '__main__':
|
175
|
+
main()
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-plugins-netscaler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sensu-Plugins and contributors
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
8sHuVruarogxxKPBzlL2is4EUb6oN/RdpGx2l4254+nyR+abg//Ed27Ym0PkB4lk
|
31
31
|
HP0m8WSjZmFr109pE/sVsM5jtOCvogyujQOjNVGN4gz1wwPr
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2015-
|
33
|
+
date: 2015-08-12 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: sensu-plugin
|
@@ -108,14 +108,14 @@ dependencies:
|
|
108
108
|
requirements:
|
109
109
|
- - '='
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version:
|
111
|
+
version: 0.32.1
|
112
112
|
type: :development
|
113
113
|
prerelease: false
|
114
114
|
version_requirements: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
116
|
- - '='
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version:
|
118
|
+
version: 0.32.1
|
119
119
|
- !ruby/object:Gem::Dependency
|
120
120
|
name: rspec
|
121
121
|
requirement: !ruby/object:Gem::Requirement
|
@@ -181,6 +181,7 @@ files:
|
|
181
181
|
- CHANGELOG.md
|
182
182
|
- LICENSE
|
183
183
|
- README.md
|
184
|
+
- bin/metrics-netscaler.py
|
184
185
|
- lib/sensu-plugins-netscaler.rb
|
185
186
|
- lib/sensu-plugins-netscaler/version.rb
|
186
187
|
homepage: https://github.com/sensu-plugins/sensu-plugins-netscaler
|
@@ -209,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
209
210
|
version: '0'
|
210
211
|
requirements: []
|
211
212
|
rubyforge_project:
|
212
|
-
rubygems_version: 2.4.
|
213
|
+
rubygems_version: 2.4.8
|
213
214
|
signing_key:
|
214
215
|
specification_version: 4
|
215
216
|
summary: Sensu plugins for netscaler
|
metadata.gz.sig
CHANGED
Binary file
|