@@ -10,9 +10,10 @@ import (
1010)
1111
1212const (
13- monitoringBasePath = "v2/monitoring"
14- alertPolicyBasePath = monitoringBasePath + "/alerts"
15- dropletMetricsBasePath = monitoringBasePath + "/metrics/droplet"
13+ monitoringBasePath = "v2/monitoring"
14+ alertPolicyBasePath = monitoringBasePath + "/alerts"
15+ dropletMetricsBasePath = monitoringBasePath + "/metrics/droplet"
16+ loadBalancerMetricsBasePath = monitoringBasePath + "/metrics/load_balancer"
1617
1718 DropletCPUUtilizationPercent = "v1/insights/droplet/cpu"
1819 DropletMemoryUtilizationPercent = "v1/insights/droplet/memory_utilization_percent"
@@ -67,6 +68,34 @@ type MonitoringService interface {
6768 GetDropletCachedMemory (context.Context , * DropletMetricsRequest ) (* MetricsResponse , * Response , error )
6869 GetDropletFreeMemory (context.Context , * DropletMetricsRequest ) (* MetricsResponse , * Response , error )
6970 GetDropletTotalMemory (context.Context , * DropletMetricsRequest ) (* MetricsResponse , * Response , error )
71+
72+ GetLoadBalancerFrontendHttpRequestsPerSecond (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
73+ GetLoadBalancerFrontendConnectionsCurrent (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
74+ GetLoadBalancerFrontendConnectionsLimit (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
75+ GetLoadBalancerFrontendCpuUtilization (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
76+ GetLoadBalancerFrontendNetworkThroughputHttp (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
77+ GetLoadBalancerFrontendNetworkThroughputUdp (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
78+ GetLoadBalancerFrontendNetworkThroughputTcp (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
79+ GetLoadBalancerFrontendNlbTcpNetworkThroughput (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
80+ GetLoadBalancerFrontendNlbUdpNetworkThroughput (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
81+ GetLoadBalancerFrontendFirewallDroppedBytes (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
82+ GetLoadBalancerFrontendFirewallDroppedPackets (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
83+ GetLoadBalancerFrontendHttpResponses (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
84+ GetLoadBalancerFrontendTlsConnectionsCurrent (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
85+ GetLoadBalancerFrontendTlsConnectionsLimit (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
86+ GetLoadBalancerFrontendTlsConnectionsExceedingRateLimit (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
87+ GetLoadBalancerDropletsHttpSessionDurationAvg (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
88+ GetLoadBalancerDropletsHttpSessionDuration50P (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
89+ GetLoadBalancerDropletsHttpSessionDuration95P (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
90+ GetLoadBalancerDropletsHttpResponseTimeAvg (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
91+ GetLoadBalancerDropletsHttpResponseTime50P (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
92+ GetLoadBalancerDropletsHttpResponseTime95P (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
93+ GetLoadBalancerDropletsHttpResponseTime99P (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
94+ GetLoadBalancerDropletsQueueSize (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
95+ GetLoadBalancerDropletsHttpResponses (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
96+ GetLoadBalancerDropletsConnections (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
97+ GetLoadBalancerDropletsHealthChecks (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
98+ GetLoadBalancerDropletsDowntime (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error )
7099}
71100
72101// MonitoringServiceOp handles communication with monitoring related methods of the
@@ -163,6 +192,13 @@ type DropletBandwidthMetricsRequest struct {
163192 Direction string
164193}
165194
195+ // LoadBalancerMetricsRequest holds the information needed to retrieve Load Balancer various metrics.
196+ type LoadBalancerMetricsRequest struct {
197+ LoadBalancerID string
198+ Start time.Time
199+ End time.Time
200+ }
201+
166202// MetricsResponse holds a Metrics query response.
167203type MetricsResponse struct {
168204 Status string `json:"status"`
@@ -372,3 +408,157 @@ func (s *MonitoringServiceOp) getDropletMetrics(ctx context.Context, path string
372408
373409 return root , resp , err
374410}
411+
412+ // GetLoadBalancerFrontendHttpRequestsPerSecond retrieves frontend HTTP requests per second for a given load balancer.
413+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendHttpRequestsPerSecond (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
414+ return s .getLoadBalancerMetrics (ctx , "/frontend_http_requests_per_second" , args )
415+ }
416+
417+ // GetLoadBalancerFrontendConnectionsCurrent retrieves frontend total current active connections for a given load balancer.
418+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendConnectionsCurrent (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
419+ return s .getLoadBalancerMetrics (ctx , "/frontend_connections_current" , args )
420+ }
421+
422+ // GetLoadBalancerFrontendConnectionsLimit retrieves frontend max connections limit for a given load balancer.
423+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendConnectionsLimit (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
424+ return s .getLoadBalancerMetrics (ctx , "/frontend_connections_limit" , args )
425+ }
426+
427+ // GetLoadBalancerFrontendCpuUtilization retrieves frontend average percentage cpu utilization for a given load balancer.
428+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendCpuUtilization (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
429+ return s .getLoadBalancerMetrics (ctx , "/frontend_cpu_utilization" , args )
430+ }
431+
432+ // GetLoadBalancerFrontendNetworkThroughputHttp retrieves frontend HTTP throughput for a given load balancer.
433+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendNetworkThroughputHttp (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
434+ return s .getLoadBalancerMetrics (ctx , "/frontend_network_throughput_http" , args )
435+ }
436+
437+ // GetLoadBalancerFrontendNetworkThroughputUdp retrieves frontend UDP throughput for a given load balancer.
438+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendNetworkThroughputUdp (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
439+ return s .getLoadBalancerMetrics (ctx , "/frontend_network_throughput_udp" , args )
440+ }
441+
442+ // GetLoadBalancerFrontendNetworkThroughputTcp retrieves frontend TCP throughput for a given load balancer.
443+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendNetworkThroughputTcp (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
444+ return s .getLoadBalancerMetrics (ctx , "/frontend_network_throughput_tcp" , args )
445+ }
446+
447+ // GetLoadBalancerFrontendNlbTcpNetworkThroughput retrieves frontend TCP throughput for a given network load balancer.
448+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendNlbTcpNetworkThroughput (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
449+ return s .getLoadBalancerMetrics (ctx , "/frontend_nlb_tcp_network_throughput" , args )
450+ }
451+
452+ // GetLoadBalancerFrontendNlbUdpNetworkThroughput retrieves frontend UDP throughput for a given network load balancer.
453+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendNlbUdpNetworkThroughput (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
454+ return s .getLoadBalancerMetrics (ctx , "/frontend_nlb_udp_network_throughput" , args )
455+ }
456+
457+ // GetLoadBalancerFrontendFirewallDroppedBytes retrieves firewall dropped bytes for a given load balancer.
458+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendFirewallDroppedBytes (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
459+ return s .getLoadBalancerMetrics (ctx , "/frontend_firewall_dropped_bytes" , args )
460+ }
461+
462+ // GetLoadBalancerFrontendFirewallDroppedPackets retrieves firewall dropped packets for a given load balancer.
463+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendFirewallDroppedPackets (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
464+ return s .getLoadBalancerMetrics (ctx , "/frontend_firewall_dropped_packets" , args )
465+ }
466+
467+ // GetLoadBalancerFrontendHttpResponses retrieves frontend HTTP rate of response code for a given load balancer.
468+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendHttpResponses (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
469+ return s .getLoadBalancerMetrics (ctx , "/frontend_http_responses" , args )
470+ }
471+
472+ // GetLoadBalancerFrontendTlsConnectionsCurrent retrieves frontend current TLS connections rate for a given load balancer.
473+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendTlsConnectionsCurrent (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
474+ return s .getLoadBalancerMetrics (ctx , "/frontend_tls_connections_current" , args )
475+ }
476+
477+ // GetLoadBalancerFrontendTlsConnectionsLimit retrieves frontend max TLS connections limit for a given load balancer.
478+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendTlsConnectionsLimit (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
479+ return s .getLoadBalancerMetrics (ctx , "/frontend_tls_connections_limit" , args )
480+ }
481+
482+ // GetLoadBalancerFrontendTlsConnectionsExceedingRateLimit retrieves frontend closed TLS connections for exceeded rate limit for a given load balancer.
483+ func (s * MonitoringServiceOp ) GetLoadBalancerFrontendTlsConnectionsExceedingRateLimit (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
484+ return s .getLoadBalancerMetrics (ctx , "/frontend_tls_connections_exceeding_rate_limit" , args )
485+ }
486+
487+ // GetLoadBalancerDropletsHttpSessionDurationAvg retrieves droplet average HTTP session duration for a given load balancer.
488+ func (s * MonitoringServiceOp ) GetLoadBalancerDropletsHttpSessionDurationAvg (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
489+ return s .getLoadBalancerMetrics (ctx , "/droplets_http_session_duration_avg" , args )
490+ }
491+
492+ // GetLoadBalancerDropletsHttpSessionDuration50P retrieves droplet 50th percentile HTTP session duration for a given load balancer.
493+ func (s * MonitoringServiceOp ) GetLoadBalancerDropletsHttpSessionDuration50P (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
494+ return s .getLoadBalancerMetrics (ctx , "/droplets_http_session_duration_50p" , args )
495+ }
496+
497+ // GetLoadBalancerDropletsHttpSessionDuration95P retrieves droplet 95th percentile HTTP session duration for a given load balancer.
498+ func (s * MonitoringServiceOp ) GetLoadBalancerDropletsHttpSessionDuration95P (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
499+ return s .getLoadBalancerMetrics (ctx , "/droplets_http_session_duration_95p" , args )
500+ }
501+
502+ // GetLoadBalancerDropletsHttpResponseTimeAvg retrieves droplet average HTTP response time for a given load balancer.
503+ func (s * MonitoringServiceOp ) GetLoadBalancerDropletsHttpResponseTimeAvg (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
504+ return s .getLoadBalancerMetrics (ctx , "/droplets_http_response_time_avg" , args )
505+ }
506+
507+ // GetLoadBalancerDropletsHttpResponseTime50P retrieves droplet 50th percentile HTTP response time for a given load balancer.
508+ func (s * MonitoringServiceOp ) GetLoadBalancerDropletsHttpResponseTime50P (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
509+ return s .getLoadBalancerMetrics (ctx , "/droplets_http_response_time_50p" , args )
510+ }
511+
512+ // GetLoadBalancerDropletsHttpResponseTime95P retrieves droplet 95th percentile HTTP response time for a given load balancer.
513+ func (s * MonitoringServiceOp ) GetLoadBalancerDropletsHttpResponseTime95P (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
514+ return s .getLoadBalancerMetrics (ctx , "/droplets_http_response_time_95p" , args )
515+ }
516+
517+ // GetLoadBalancerDropletsHttpResponseTime99P retrieves droplet 99th percentile HTTP response time for a given load balancer.
518+ func (s * MonitoringServiceOp ) GetLoadBalancerDropletsHttpResponseTime99P (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
519+ return s .getLoadBalancerMetrics (ctx , "/droplets_http_response_time_99p" , args )
520+ }
521+
522+ // GetLoadBalancerDropletsQueueSize retrieves droplet queue size for a given load balancer.
523+ func (s * MonitoringServiceOp ) GetLoadBalancerDropletsQueueSize (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
524+ return s .getLoadBalancerMetrics (ctx , "/droplets_queue_size" , args )
525+ }
526+
527+ // GetLoadBalancerDropletsHttpResponses retrieves droplet HTTP rate of response code for a given load balancer.
528+ func (s * MonitoringServiceOp ) GetLoadBalancerDropletsHttpResponses (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
529+ return s .getLoadBalancerMetrics (ctx , "/droplets_http_responses" , args )
530+ }
531+
532+ // GetLoadBalancerDropletsConnections retrieves droplet active connections for a given load balancer.
533+ func (s * MonitoringServiceOp ) GetLoadBalancerDropletsConnections (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
534+ return s .getLoadBalancerMetrics (ctx , "/droplets_connections" , args )
535+ }
536+
537+ // GetLoadBalancerDropletsHealthChecks retrieves droplet health check status for a given load balancer.
538+ func (s * MonitoringServiceOp ) GetLoadBalancerDropletsHealthChecks (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
539+ return s .getLoadBalancerMetrics (ctx , "/droplets_health_checks" , args )
540+ }
541+
542+ // GetLoadBalancerDropletsDowntime retrieves droplet downtime status for a given load balancer.
543+ func (s * MonitoringServiceOp ) GetLoadBalancerDropletsDowntime (ctx context.Context , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
544+ return s .getLoadBalancerMetrics (ctx , "/droplets_downtime" , args )
545+ }
546+
547+ func (s * MonitoringServiceOp ) getLoadBalancerMetrics (ctx context.Context , path string , args * LoadBalancerMetricsRequest ) (* MetricsResponse , * Response , error ) {
548+ fullPath := loadBalancerMetricsBasePath + path
549+ req , err := s .client .NewRequest (ctx , http .MethodGet , fullPath , nil )
550+ if err != nil {
551+ return nil , nil , err
552+ }
553+
554+ q := req .URL .Query ()
555+ q .Add ("lb_id" , args .LoadBalancerID )
556+ q .Add ("start" , fmt .Sprintf ("%d" , args .Start .Unix ()))
557+ q .Add ("end" , fmt .Sprintf ("%d" , args .End .Unix ()))
558+ req .URL .RawQuery = q .Encode ()
559+
560+ root := new (MetricsResponse )
561+ resp , err := s .client .Do (ctx , req , root )
562+
563+ return root , resp , err
564+ }
0 commit comments