Skip to content

Add support for /processes and export functions #41

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 1, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 60 additions & 25 deletions client/nginx.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ func (internalError *internalError) Wrap(err string) *internalError {
// https://nginx.org/en/docs/http/ngx_http_api_module.html
type Stats struct {
NginxInfo NginxInfo
Processes Processes
Connections Connections
Slabs Slabs
HTTPRequests HTTPRequests
Expand Down Expand Up @@ -372,6 +373,11 @@ type ResolverResponses struct {
Unknown int64
}

// Processes represents processes related stats
type Processes struct {
Respawned int64
}

// NewNginxClient creates an NginxClient.
func NewNginxClient(httpClient *http.Client, apiEndpoint string) (*NginxClient, error) {
versions, err := getAPIVersions(httpClient, apiEndpoint)
Expand Down Expand Up @@ -930,70 +936,76 @@ func determineStreamUpdates(updatedServers []StreamUpstreamServer, nginxServers
return
}

// GetStats gets connection, request, ssl, zone, stream zone, upstream and stream upstream related stats from the NGINX Plus API.
// GetStats gets process, slab, connection, request, ssl, zone, stream zone, upstream and stream upstream related stats from the NGINX Plus API.
func (client *NginxClient) GetStats() (*Stats, error) {
info, err := client.getNginxInfo()
info, err := client.GetNginxInfo()
if err != nil {
return nil, fmt.Errorf("failed to get stats: %v", err)
}

processes, err := client.GetProcesses()
if err != nil {
return nil, fmt.Errorf("failed to get stats: %v", err)
}

slabs, err := client.getSlabs()
slabs, err := client.GetSlabs()
if err != nil {
return nil, fmt.Errorf("failed to get stats: %v", err)
}

cons, err := client.getConnections()
cons, err := client.GetConnections()
if err != nil {
return nil, fmt.Errorf("failed to get stats: %v", err)
}

requests, err := client.getHTTPRequests()
requests, err := client.GetHTTPRequests()
if err != nil {
return nil, fmt.Errorf("Failed to get stats: %v", err)
}

ssl, err := client.getSSL()
ssl, err := client.GetSSL()
if err != nil {
return nil, fmt.Errorf("failed to get stats: %v", err)
}

zones, err := client.getServerZones()
zones, err := client.GetServerZones()
if err != nil {
return nil, fmt.Errorf("failed to get stats: %v", err)
}

upstreams, err := client.getUpstreams()
upstreams, err := client.GetUpstreams()
if err != nil {
return nil, fmt.Errorf("failed to get stats: %v", err)
}

streamZones, err := client.getStreamServerZones()
streamZones, err := client.GetStreamServerZones()
if err != nil {
return nil, fmt.Errorf("failed to get stats: %v", err)
}

streamUpstreams, err := client.getStreamUpstreams()
streamUpstreams, err := client.GetStreamUpstreams()
if err != nil {
return nil, fmt.Errorf("failed to get stats: %v", err)
}

streamZoneSync, err := client.getStreamZoneSync()
streamZoneSync, err := client.GetStreamZoneSync()
if err != nil {
return nil, fmt.Errorf("failed to get stats: %v", err)
}

locationZones, err := client.getLocationZones()
locationZones, err := client.GetLocationZones()
if err != nil {
return nil, fmt.Errorf("failed to get stats: %v", err)
}

resolvers, err := client.getResolvers()
resolvers, err := client.GetResolvers()
if err != nil {
return nil, fmt.Errorf("failed to get stats: %v", err)
}

return &Stats{
NginxInfo: *info,
Processes: *processes,
Slabs: *slabs,
Connections: *cons,
HTTPRequests: *requests,
Expand All @@ -1008,7 +1020,8 @@ func (client *NginxClient) GetStats() (*Stats, error) {
}, nil
}

func (client *NginxClient) getNginxInfo() (*NginxInfo, error) {
// GetNginxInfo returns Nginx stats.
func (client *NginxClient) GetNginxInfo() (*NginxInfo, error) {
var info NginxInfo
err := client.get("nginx", &info)
if err != nil {
Expand All @@ -1017,7 +1030,8 @@ func (client *NginxClient) getNginxInfo() (*NginxInfo, error) {
return &info, nil
}

func (client *NginxClient) getSlabs() (*Slabs, error) {
// GetSlabs returns Slabs stats.
func (client *NginxClient) GetSlabs() (*Slabs, error) {
var slabs Slabs
err := client.get("slabs", &slabs)
if err != nil {
Expand All @@ -1026,7 +1040,8 @@ func (client *NginxClient) getSlabs() (*Slabs, error) {
return &slabs, nil
}

func (client *NginxClient) getConnections() (*Connections, error) {
// GetConnections returns Connections stats.
func (client *NginxClient) GetConnections() (*Connections, error) {
var cons Connections
err := client.get("connections", &cons)
if err != nil {
Expand All @@ -1035,7 +1050,8 @@ func (client *NginxClient) getConnections() (*Connections, error) {
return &cons, nil
}

func (client *NginxClient) getHTTPRequests() (*HTTPRequests, error) {
// GetHTTPRequests returns http/requests stats.
func (client *NginxClient) GetHTTPRequests() (*HTTPRequests, error) {
var requests HTTPRequests
err := client.get("http/requests", &requests)
if err != nil {
Expand All @@ -1044,7 +1060,8 @@ func (client *NginxClient) getHTTPRequests() (*HTTPRequests, error) {
return &requests, nil
}

func (client *NginxClient) getSSL() (*SSL, error) {
// GetSSL returns SSL stats.
func (client *NginxClient) GetSSL() (*SSL, error) {
var ssl SSL
err := client.get("ssl", &ssl)
if err != nil {
Expand All @@ -1053,7 +1070,8 @@ func (client *NginxClient) getSSL() (*SSL, error) {
return &ssl, nil
}

func (client *NginxClient) getServerZones() (*ServerZones, error) {
// GetServerZones returns http/server_zones stats.
func (client *NginxClient) GetServerZones() (*ServerZones, error) {
var zones ServerZones
err := client.get("http/server_zones", &zones)
if err != nil {
Expand All @@ -1062,7 +1080,8 @@ func (client *NginxClient) getServerZones() (*ServerZones, error) {
return &zones, err
}

func (client *NginxClient) getStreamServerZones() (*StreamServerZones, error) {
// GetStreamServerZones returns stream/server_zones stats.
func (client *NginxClient) GetStreamServerZones() (*StreamServerZones, error) {
var zones StreamServerZones
err := client.get("stream/server_zones", &zones)
if err != nil {
Expand All @@ -1076,7 +1095,8 @@ func (client *NginxClient) getStreamServerZones() (*StreamServerZones, error) {
return &zones, err
}

func (client *NginxClient) getUpstreams() (*Upstreams, error) {
// GetUpstreams returns http/upstreams stats.
func (client *NginxClient) GetUpstreams() (*Upstreams, error) {
var upstreams Upstreams
err := client.get("http/upstreams", &upstreams)
if err != nil {
Expand All @@ -1085,7 +1105,8 @@ func (client *NginxClient) getUpstreams() (*Upstreams, error) {
return &upstreams, nil
}

func (client *NginxClient) getStreamUpstreams() (*StreamUpstreams, error) {
// GetStreamUpstreams returns stream/upstreams stats.
func (client *NginxClient) GetStreamUpstreams() (*StreamUpstreams, error) {
var upstreams StreamUpstreams
err := client.get("stream/upstreams", &upstreams)
if err != nil {
Expand All @@ -1099,7 +1120,8 @@ func (client *NginxClient) getStreamUpstreams() (*StreamUpstreams, error) {
return &upstreams, nil
}

func (client *NginxClient) getStreamZoneSync() (*StreamZoneSync, error) {
// GetStreamZoneSync returns stream/zone_sync stats.
func (client *NginxClient) GetStreamZoneSync() (*StreamZoneSync, error) {
var streamZoneSync StreamZoneSync
err := client.get("stream/zone_sync", &streamZoneSync)
if err != nil {
Expand All @@ -1114,7 +1136,8 @@ func (client *NginxClient) getStreamZoneSync() (*StreamZoneSync, error) {
return &streamZoneSync, err
}

func (client *NginxClient) getLocationZones() (*LocationZones, error) {
// GetLocationZones returns http/location_zones stats.
func (client *NginxClient) GetLocationZones() (*LocationZones, error) {
var locationZones LocationZones
err := client.get("http/location_zones", &locationZones)
if err != nil {
Expand All @@ -1124,7 +1147,8 @@ func (client *NginxClient) getLocationZones() (*LocationZones, error) {
return &locationZones, err
}

func (client *NginxClient) getResolvers() (*Resolvers, error) {
// GetResolvers returns Resolvers stats.
func (client *NginxClient) GetResolvers() (*Resolvers, error) {
var resolvers Resolvers
err := client.get("resolvers", &resolvers)
if err != nil {
Expand All @@ -1134,6 +1158,17 @@ func (client *NginxClient) getResolvers() (*Resolvers, error) {
return &resolvers, err
}

// GetProcesses returns Processes stats.
func (client *NginxClient) GetProcesses() (*Processes, error) {
var processes Processes
err := client.get("processes", &processes)
if err != nil {
return nil, fmt.Errorf("failed to get processes: %v", err)
}

return &processes, err
}

// KeyValPairs are the key-value pairs stored in a zone.
type KeyValPairs map[string]string

Expand Down