Skip to content
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

Add metrics of gophercloud (POST,UPDATE and DELETE) actions #863

Merged
merged 1 commit into from
May 25, 2021
Merged
Show file tree
Hide file tree
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
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ require (
github.com/onsi/ginkgo v1.16.1
github.com/onsi/gomega v1.11.0
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.9.0
github.com/spf13/pflag v1.0.5
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83
gopkg.in/ini.v1 v1.62.0
Expand Down
3 changes: 3 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import (

infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha4"
"sigs.k8s.io/cluster-api-provider-openstack/controllers"
"sigs.k8s.io/cluster-api-provider-openstack/pkg/metrics"
"sigs.k8s.io/cluster-api-provider-openstack/pkg/record"
"sigs.k8s.io/cluster-api-provider-openstack/version"
)
Expand Down Expand Up @@ -72,6 +73,8 @@ func init() {
_ = clusterv1.AddToScheme(scheme)
_ = infrav1.AddToScheme(scheme)
// +kubebuilder:scaffold:scheme

metrics.RegisterAPIPrometheusMetrics()
}

// InitFlags initializes the flags.
Expand Down
31 changes: 22 additions & 9 deletions pkg/cloud/services/compute/instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import (
"sigs.k8s.io/cluster-api/util"

infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha4"
"sigs.k8s.io/cluster-api-provider-openstack/pkg/metrics"
"sigs.k8s.io/cluster-api-provider-openstack/pkg/record"
capoerrors "sigs.k8s.io/cluster-api-provider-openstack/pkg/utils/errors"
)
Expand Down Expand Up @@ -217,11 +218,14 @@ func (s *Service) createInstance(eventObject runtime.Object, clusterName string,

jichenjc marked this conversation as resolved.
Show resolved Hide resolved
serverCreateOpts = applyServerGroupID(serverCreateOpts, i.ServerGroupID)

mc := metrics.NewMetricPrometheusContext("server", "create")

jichenjc marked this conversation as resolved.
Show resolved Hide resolved
server, err := servers.Create(s.computeClient, keypairs.CreateOptsExt{
CreateOptsBuilder: serverCreateOpts,
KeyName: i.SSHKeyName,
}).Extract()
if err != nil {

if mc.ObserveRequest(err) != nil {
if err = s.deletePorts(eventObject, portList); err != nil {
return nil, err
}
Expand Down Expand Up @@ -400,8 +404,10 @@ func (s *Service) getOrCreatePort(eventObject runtime.Object, clusterName string
if net.Subnet.ID != "" {
portCreateOpts.FixedIPs = []ports.IP{{SubnetID: net.Subnet.ID}}
}
mc := metrics.NewMetricPrometheusContext("port", "create")

port, err := ports.Create(s.networkClient, portCreateOpts).Extract()
if err != nil {
if mc.ObserveRequest(err) != nil {
record.Warnf(eventObject, "FailedCreatePort", "Failed to create port %s: %v", portName, err)
return nil, err
}
Expand Down Expand Up @@ -431,8 +437,10 @@ func (s *Service) getOrCreateTrunk(eventObject runtime.Object, trunkName, portID
Name: trunkName,
PortID: portID,
}
mc := metrics.NewMetricPrometheusContext("trunk", "create")

trunk, err := trunks.Create(s.networkClient, trunkCreateOpts).Extract()
if err != nil {
if mc.ObserveRequest(err) != nil {
record.Warnf(eventObject, "FailedCreateTrunk", "Failed to create trunk %s: %v", trunkName, err)
return nil, err
}
Expand All @@ -442,10 +450,11 @@ func (s *Service) getOrCreateTrunk(eventObject runtime.Object, trunkName, portID
}

func (s *Service) replaceAllAttributesTags(eventObject runtime.Object, trunkID string, tags []string) error {
mc := metrics.NewMetricPrometheusContext("trunk", "update")
_, err := attributestags.ReplaceAll(s.networkClient, "trunks", trunkID, attributestags.ReplaceAllOpts{
Tags: tags,
}).Extract()
if err != nil {
if mc.ObserveRequest(err) != nil {
record.Warnf(eventObject, "FailedReplaceAllAttributesTags", "Failed to replace all attributestags, trunk %s: %v", trunkID, err)
return err
}
Expand Down Expand Up @@ -488,8 +497,9 @@ func (s *Service) AssociateFloatingIP(instanceID, floatingIP string) error {
opts := floatingips.AssociateOpts{
FloatingIP: floatingIP,
}
mc := metrics.NewMetricPrometheusContext("floating_ip", "update")
err := floatingips.AssociateInstance(s.computeClient, instanceID, opts).ExtractErr()
if err != nil {
if mc.ObserveRequest(err) != nil {
return err
}
return nil
Expand Down Expand Up @@ -551,8 +561,9 @@ func (s *Service) deletePort(eventObject runtime.Object, portID string) error {
}

err = util.PollImmediate(RetryIntervalPortDelete, TimeoutPortDelete, func() (bool, error) {
mc := metrics.NewMetricPrometheusContext("port", "delete")
err := ports.Delete(s.networkClient, port.ID).ExtractErr()
if err != nil {
if mc.ObserveRequest(err) != nil {
if capoerrors.IsRetryable(err) {
return false, nil
}
Expand Down Expand Up @@ -595,8 +606,9 @@ func (s *Service) deleteAttachInterface(eventObject runtime.Object, instanceID,
return nil
}

mc := metrics.NewMetricPrometheusContext("router_interface", "delete")
err = attachinterfaces.Delete(s.computeClient, instanceID, portID).ExtractErr()
if err != nil {
if mc.ObserveRequest(err) != nil {
if capoerrors.IsNotFound(err) {
return nil
}
Expand Down Expand Up @@ -673,8 +685,9 @@ func (s *Service) deleteInstance(eventObject runtime.Object, instanceID string)
if instance == nil || instance.ID == "" {
return nil
}

if err = servers.Delete(s.computeClient, instance.ID).ExtractErr(); err != nil {
mc := metrics.NewMetricPrometheusContext("server", "delete")
err = servers.Delete(s.computeClient, instance.ID).ExtractErr()
if mc.ObserveRequest(err) != nil {
record.Warnf(eventObject, "FailedDeleteServer", "Failed to deleted server %s with id %s: %v", instance.Name, instance.ID, err)
return err
}
Expand Down
27 changes: 19 additions & 8 deletions pkg/cloud/services/loadbalancer/loadbalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
"sigs.k8s.io/cluster-api/util"

infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha4"
"sigs.k8s.io/cluster-api-provider-openstack/pkg/metrics"
"sigs.k8s.io/cluster-api-provider-openstack/pkg/record"
)

Expand All @@ -54,8 +55,10 @@ func (s *Service) ReconcileLoadBalancer(openStackCluster *infrav1.OpenStackClust
VipSubnetID: openStackCluster.Status.Network.Subnet.ID,
}

mc := metrics.NewMetricPrometheusContext("loadbalancer", "create")
lb, err = loadbalancers.Create(s.loadbalancerClient, lbCreateOpts).Extract()
if err != nil {

sbueringer marked this conversation as resolved.
Show resolved Hide resolved
if mc.ObserveRequest(err) != nil {
record.Warnf(openStackCluster, "FailedCreateLoadBalancer", "Failed to create load balancer %s: %v", loadBalancerName, err)
return err
jichenjc marked this conversation as resolved.
Show resolved Hide resolved
}
Expand Down Expand Up @@ -95,8 +98,9 @@ func (s *Service) ReconcileLoadBalancer(openStackCluster *infrav1.OpenStackClust
ProtocolPort: port,
LoadbalancerID: lb.ID,
}
mc := metrics.NewMetricPrometheusContext("loadbalancer_listener", "create")
listener, err = listeners.Create(s.loadbalancerClient, listenerCreateOpts).Extract()
if err != nil {
if mc.ObserveRequest(err) != nil {
return fmt.Errorf("error creating listener: %s", err)
}
}
Expand All @@ -121,8 +125,9 @@ func (s *Service) ReconcileLoadBalancer(openStackCluster *infrav1.OpenStackClust
LBMethod: pools.LBMethodRoundRobin,
ListenerID: listener.ID,
}
mc := metrics.NewMetricPrometheusContext("loadbalancer_pool", "create")
pool, err = pools.Create(s.loadbalancerClient, poolCreateOpts).Extract()
if err != nil {
if mc.ObserveRequest(err) != nil {
return fmt.Errorf("error creating pool: %s", err)
}
}
Expand All @@ -145,8 +150,9 @@ func (s *Service) ReconcileLoadBalancer(openStackCluster *infrav1.OpenStackClust
Timeout: 5,
MaxRetries: 3,
}
mc := metrics.NewMetricPrometheusContext("loadbalancer_healthmonitor", "create")
_, err = monitors.Create(s.loadbalancerClient, monitorCreateOpts).Extract()
if err != nil {
if mc.ObserveRequest(err) != nil {
return fmt.Errorf("error creating monitor: %s", err)
}
}
Expand Down Expand Up @@ -216,8 +222,9 @@ func (s *Service) ReconcileLoadBalancerMember(openStackCluster *infrav1.OpenStac
if err != nil {
return err
}
mc := metrics.NewMetricPrometheusContext("loadbalancer_member", "delete")
err = pools.DeleteMember(s.loadbalancerClient, pool.ID, lbMember.ID).ExtractErr()
if err != nil {
if mc.ObserveRequest(err) != nil {
return fmt.Errorf("error deleting lbmember: %s", err)
}
err = s.waitForLoadBalancerActive(lbID)
Expand All @@ -238,7 +245,9 @@ func (s *Service) ReconcileLoadBalancerMember(openStackCluster *infrav1.OpenStac
if err := s.waitForLoadBalancerActive(lbID); err != nil {
return err
}
if _, err := pools.CreateMember(s.loadbalancerClient, pool.ID, lbMemberOpts).Extract(); err != nil {
mc := metrics.NewMetricPrometheusContext("loadbalancer_member", "create")
_, err = pools.CreateMember(s.loadbalancerClient, pool.ID, lbMemberOpts).Extract()
if mc.ObserveRequest(err) != nil {
return fmt.Errorf("error create lbmember: %s", err)
}
if err := s.waitForLoadBalancerActive(lbID); err != nil {
Expand Down Expand Up @@ -279,8 +288,9 @@ func (s *Service) DeleteLoadBalancer(openStackCluster *infrav1.OpenStackCluster,
Cascade: true,
}
s.logger.Info("Deleting load balancer", "name", loadBalancerName, "cascade", deleteOpts.Cascade)
mc := metrics.NewMetricPrometheusContext("loadbalancer", "delete")
err = loadbalancers.Delete(s.loadbalancerClient, lb.ID, deleteOpts).ExtractErr()
if err != nil {
if mc.ObserveRequest(err) != nil {
record.Warnf(openStackCluster, "FailedDeleteLoadBalancer", "Failed to delete load balancer %s with id %s: %v", lb.Name, lb.ID, err)
return err
}
Expand Down Expand Up @@ -333,8 +343,9 @@ func (s *Service) DeleteLoadBalancerMember(openStackCluster *infrav1.OpenStackCl
if err != nil {
return err
}
mc := metrics.NewMetricPrometheusContext("loadbalancer_member", "delete")
err = pools.DeleteMember(s.loadbalancerClient, pool.ID, lbMember.ID).ExtractErr()
if err != nil {
if mc.ObserveRequest(err) != nil {
return fmt.Errorf("error deleting load balancer member: %s", err)
}
err = s.waitForLoadBalancerActive(lbID)
Expand Down
14 changes: 10 additions & 4 deletions pkg/cloud/services/networking/floatingip.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"k8s.io/apimachinery/pkg/util/wait"

infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha4"
"sigs.k8s.io/cluster-api-provider-openstack/pkg/metrics"
"sigs.k8s.io/cluster-api-provider-openstack/pkg/record"
)

Expand All @@ -45,8 +46,9 @@ func (s *Service) GetOrCreateFloatingIP(openStackCluster *infrav1.OpenStackClust

fpCreateOpts.FloatingNetworkID = openStackCluster.Status.ExternalNetwork.ID

mc := metrics.NewMetricPrometheusContext("floating_ip", "create")
fp, err = floatingips.Create(s.client, fpCreateOpts).Extract()
if err != nil {
if mc.ObserveRequest(err) != nil {
record.Warnf(openStackCluster, "FailedCreateFloatingIP", "Failed to create floating IP %s: %v", ip, err)
return nil, err
}
Expand Down Expand Up @@ -95,7 +97,9 @@ func (s *Service) DeleteFloatingIP(openStackCluster *infrav1.OpenStackCluster, i
return nil
}

if err = floatingips.Delete(s.client, fip.ID).ExtractErr(); err != nil {
mc := metrics.NewMetricPrometheusContext("floating_ip", "delete")
err = floatingips.Delete(s.client, fip.ID).ExtractErr()
if mc.ObserveRequest(err) != nil {
record.Warnf(openStackCluster, "FailedDeleteFloatingIP", "Failed to delete floating IP %s: %v", ip, err)
return err
}
Expand All @@ -116,8 +120,9 @@ func (s *Service) AssociateFloatingIP(openStackCluster *infrav1.OpenStackCluster
fpUpdateOpts := &floatingips.UpdateOpts{
PortID: &portID,
}
mc := metrics.NewMetricPrometheusContext("floating_ip", "update")
_, err := floatingips.Update(s.client, fp.ID, fpUpdateOpts).Extract()
if err != nil {
if mc.ObserveRequest(err) != nil {
record.Warnf(openStackCluster, "FailedAssociateFloatingIP", "Failed to associate floating IP %s with port %s: %v", fp.FloatingIP, portID, err)
return err
}
Expand Down Expand Up @@ -149,8 +154,9 @@ func (s *Service) DisassociateFloatingIP(openStackCluster *infrav1.OpenStackClus
fpUpdateOpts := &floatingips.UpdateOpts{
PortID: nil,
}
mc := metrics.NewMetricPrometheusContext("floating_ip", "update")
_, err = floatingips.Update(s.client, fip.ID, fpUpdateOpts).Extract()
if err != nil {
if mc.ObserveRequest(err) != nil {
record.Warnf(openStackCluster, "FailedDisassociateFloatingIP", "Failed to disassociate floating IP %s: %v", fip.FloatingIP, err)
return err
}
Expand Down
17 changes: 13 additions & 4 deletions pkg/cloud/services/networking/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"github.com/gophercloud/gophercloud/pagination"

infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha4"
"sigs.k8s.io/cluster-api-provider-openstack/pkg/metrics"
"sigs.k8s.io/cluster-api-provider-openstack/pkg/record"
)

Expand Down Expand Up @@ -122,8 +123,10 @@ func (s *Service) ReconcileNetwork(openStackCluster *infrav1.OpenStackCluster, c
Name: networkName,
}
}

mc := metrics.NewMetricPrometheusContext("network", "create")
network, err := networks.Create(s.client, opts).Extract()
if err != nil {
if mc.ObserveRequest(err) != nil {
record.Warnf(openStackCluster, "FailedCreateNetwork", "Failed to create network %s: %v", networkName, err)
return err
}
Expand Down Expand Up @@ -156,7 +159,9 @@ func (s *Service) DeleteNetwork(openStackCluster *infrav1.OpenStackCluster, clus
return nil
}

if err = networks.Delete(s.client, network.ID).ExtractErr(); err != nil {
mc := metrics.NewMetricPrometheusContext("network", "delete")
err = networks.Delete(s.client, network.ID).ExtractErr()
if mc.ObserveRequest(err) != nil {
record.Warnf(openStackCluster, "FailedDeleteNetwork", "Failed to delete network %s with id %s: %v", network.Name, network.ID, err)
return err
}
Expand Down Expand Up @@ -220,18 +225,22 @@ func (s *Service) createSubnet(openStackCluster *infrav1.OpenStackCluster, name
CIDR: openStackCluster.Spec.NodeCIDR,
DNSNameservers: openStackCluster.Spec.DNSNameservers,
}
mc := metrics.NewMetricPrometheusContext("subnet", "create")

subnet, err := subnets.Create(s.client, opts).Extract()
if err != nil {

if mc.ObserveRequest(err) != nil {
record.Warnf(openStackCluster, "FailedCreateSubnet", "Failed to create subnet %s: %v", name, err)
return nil, err
}
record.Eventf(openStackCluster, "SuccessfulCreateSubnet", "Created subnet %s with id %s", name, subnet.ID)

if len(openStackCluster.Spec.Tags) > 0 {
mc := metrics.NewMetricPrometheusContext("subnet", "update")
_, err = attributestags.ReplaceAll(s.client, "subnets", subnet.ID, attributestags.ReplaceAllOpts{
Tags: openStackCluster.Spec.Tags,
}).Extract()
if err != nil {
if mc.ObserveRequest(err) != nil {
return nil, err
}
}
Expand Down
Loading