-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #34 from rokett/gateway_metrics
Added NetScaler Gateway metrics
- Loading branch information
Showing
9 changed files
with
216 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
package collector | ||
|
||
import ( | ||
"strconv" | ||
|
||
"github.com/prometheus/client_golang/prometheus" | ||
"github.com/rokett/citrix-netscaler-exporter/netscaler" | ||
) | ||
|
||
var ( | ||
vpnVirtualServersTotalRequests = prometheus.NewCounterVec( | ||
prometheus.CounterOpts{ | ||
Name: "vpn_virtual_servers_total_requests", | ||
Help: "Total VPN virtual server requests", | ||
}, | ||
[]string{ | ||
"ns_instance", | ||
"vpn_virtual_server", | ||
}, | ||
) | ||
|
||
vpnVirtualServersTotalResponses = prometheus.NewCounterVec( | ||
prometheus.CounterOpts{ | ||
Name: "vpn_virtual_servers_total_responses", | ||
Help: "Total VPN virtual server responses", | ||
}, | ||
[]string{ | ||
"ns_instance", | ||
"vpn_virtual_server", | ||
}, | ||
) | ||
|
||
vpnVirtualServersTotalRequestBytes = prometheus.NewCounterVec( | ||
prometheus.CounterOpts{ | ||
Name: "vpn_virtual_servers_total_request_bytes", | ||
Help: "Total VPN virtual server request bytes", | ||
}, | ||
[]string{ | ||
"ns_instance", | ||
"vpn_virtual_server", | ||
}, | ||
) | ||
vpnVirtualServersTotalResponseBytes = prometheus.NewCounterVec( | ||
prometheus.CounterOpts{ | ||
Name: "vpn_virtual_servers_total_response_bytes", | ||
Help: "Total VPN virtual server response bytes", | ||
}, | ||
[]string{ | ||
"ns_instance", | ||
"vpn_virtual_server", | ||
}, | ||
) | ||
|
||
vpnVirtualServersState = prometheus.NewGaugeVec( | ||
prometheus.GaugeOpts{ | ||
Name: "vpn_virtual_servers_state", | ||
Help: "Current state of the VPN virtual server", | ||
}, | ||
[]string{ | ||
"ns_instance", | ||
"vpn_virtual_server", | ||
}, | ||
) | ||
) | ||
|
||
func (e *Exporter) collectVPNVirtualServerTotalRequests(ns netscaler.NSAPIResponse) { | ||
e.vpnVirtualServersTotalRequests.Reset() | ||
|
||
for _, vs := range ns.VPNVirtualServerStats { | ||
totalRequests, _ := strconv.ParseFloat(vs.TotalRequests, 64) | ||
e.vpnVirtualServersTotalRequests.WithLabelValues(e.nsInstance, vs.Name).Set(totalRequests) | ||
} | ||
} | ||
|
||
func (e *Exporter) collectVPNVirtualServerTotalResponses(ns netscaler.NSAPIResponse) { | ||
e.vpnVirtualServersTotalResponses.Reset() | ||
|
||
for _, vs := range ns.VPNVirtualServerStats { | ||
totalResponses, _ := strconv.ParseFloat(vs.TotalResponses, 64) | ||
e.vpnVirtualServersTotalResponses.WithLabelValues(e.nsInstance, vs.Name).Set(totalResponses) | ||
} | ||
} | ||
|
||
func (e *Exporter) collectVPNVirtualServerTotalRequestBytes(ns netscaler.NSAPIResponse) { | ||
e.vpnVirtualServersTotalRequestBytes.Reset() | ||
|
||
for _, vs := range ns.VPNVirtualServerStats { | ||
totalRequestBytes, _ := strconv.ParseFloat(vs.TotalRequestBytes, 64) | ||
e.vpnVirtualServersTotalRequestBytes.WithLabelValues(e.nsInstance, vs.Name).Set(totalRequestBytes) | ||
} | ||
} | ||
|
||
func (e *Exporter) collectVPNVirtualServerTotalResponseBytes(ns netscaler.NSAPIResponse) { | ||
e.vpnVirtualServersTotalResponseBytes.Reset() | ||
|
||
for _, vs := range ns.VPNVirtualServerStats { | ||
totalResponseBytes, _ := strconv.ParseFloat(vs.TotalResponseBytes, 64) | ||
e.vpnVirtualServersTotalResponseBytes.WithLabelValues(e.nsInstance, vs.Name).Set(totalResponseBytes) | ||
} | ||
} | ||
|
||
func (e *Exporter) collectVPNVirtualServerState(ns netscaler.NSAPIResponse) { | ||
e.vpnVirtualServersState.Reset() | ||
|
||
for _, vs := range ns.VPNVirtualServerStats { | ||
state := 0.0 | ||
|
||
if vs.State == "UP" { | ||
state = 1.0 | ||
} | ||
|
||
e.vpnVirtualServersState.WithLabelValues(e.nsInstance, vs.Name).Set(state) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package netscaler | ||
|
||
import ( | ||
"encoding/json" | ||
|
||
"github.com/pkg/errors" | ||
) | ||
|
||
// VPNVirtualServerStats represents the data returned from the /stat/vpnvserver Nitro API endpoint | ||
type VPNVirtualServerStats struct { | ||
Name string `json:"name"` | ||
TotalRequests string `json:"totalrequests"` | ||
TotalResponses string `json:"totalresponses"` | ||
TotalRequestBytes string `json:"totalrequestbytes"` | ||
TotalResponseBytes string `json:"totalresponsebytes"` | ||
State string `json:"state"` | ||
} | ||
|
||
// GetVPNVirtualServerStats queries the Nitro API for VPN virtual server stats | ||
func GetVPNVirtualServerStats(c *NitroClient, querystring string) (NSAPIResponse, error) { | ||
stats, err := c.GetStats("vpnvserver", querystring) | ||
if err != nil { | ||
return NSAPIResponse{}, err | ||
} | ||
|
||
var response = new(NSAPIResponse) | ||
|
||
err = json.Unmarshal(stats, &response) | ||
if err != nil { | ||
return NSAPIResponse{}, errors.Wrap(err, "error unmarshalling response body") | ||
} | ||
|
||
return *response, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters