From 913b76d7eaa19da9fb6f9b57e2894edcd7924935 Mon Sep 17 00:00:00 2001 From: ParthaI <47887552+ParthaI@users.noreply.github.com> Date: Wed, 30 Jun 2021 21:41:19 +0530 Subject: [PATCH] Add table gcp_compute_instance_metric_cpu_utilization_daily closes #225 (#256) --- ...e_instance_metric_cpu_utilization_daily.md | 40 ++++++++++++++++++ gcp/plugin.go | 1 + ...e_instance_metric_cpu_utilization_daily.go | 41 +++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 docs/tables/gcp_compute_instance_metric_cpu_utilization_daily.md create mode 100644 gcp/table_gcp_compute_instance_metric_cpu_utilization_daily.go diff --git a/docs/tables/gcp_compute_instance_metric_cpu_utilization_daily.md b/docs/tables/gcp_compute_instance_metric_cpu_utilization_daily.md new file mode 100644 index 00000000..2c570c12 --- /dev/null +++ b/docs/tables/gcp_compute_instance_metric_cpu_utilization_daily.md @@ -0,0 +1,40 @@ +# Table: gcp_compute_instance_metric_cpu_utilization_daily + +GCP Monitoring Metrics provide data about the performance of your systems. The `gcp_compute_instance_metric_cpu_utilization_daily` table provides metric statistics at 24 hour intervals for the most recent 5 days. + +## Examples + +### Basic info + +```sql +select + name, + timestamp, + minimum, + maximum, + average, + sample_count +from + gcp_compute_instance_metric_cpu_utilization_daily +order by + name, + timestamp; +``` + +### CPU Over 80% average + +```sql +select + name, + timestamp, + round(minimum::numeric,2) as min_cpu, + round(maximum::numeric,2) as max_cpu, + round(average::numeric,2) as avg_cpu, + sample_count +from + gcp_compute_instance_metric_cpu_utilization_daily +where average > 80 +order by + name, + timestamp; +``` diff --git a/gcp/plugin.go b/gcp/plugin.go index 90f70aa9..3748a866 100644 --- a/gcp/plugin.go +++ b/gcp/plugin.go @@ -44,6 +44,7 @@ func Plugin(ctx context.Context) *plugin.Plugin { "gcp_compute_image": tableGcpComputeImage(ctx), "gcp_compute_instance": tableGcpComputeInstance(ctx), "gcp_compute_instance_metric_cpu_utilization": tableComputeInstanceCpuUtilizationMetric(ctx), + "gcp_compute_instance_metric_cpu_utilization_daily": tableComputeInstanceCpuUtilizationMetricDaily(ctx), "gcp_compute_instance_metric_cpu_utilization_hourly": tableComputeInstanceCpuUtilizationMetricHourly(ctx), "gcp_compute_instance_template": tableGcpComputeInstanceTemplate(ctx), "gcp_compute_machine_type": tableGcpComputeMachineType(ctx), diff --git a/gcp/table_gcp_compute_instance_metric_cpu_utilization_daily.go b/gcp/table_gcp_compute_instance_metric_cpu_utilization_daily.go new file mode 100644 index 00000000..4d95a47e --- /dev/null +++ b/gcp/table_gcp_compute_instance_metric_cpu_utilization_daily.go @@ -0,0 +1,41 @@ +package gcp + +import ( + "context" + + "github.com/turbot/steampipe-plugin-sdk/grpc/proto" + "github.com/turbot/steampipe-plugin-sdk/plugin" + "github.com/turbot/steampipe-plugin-sdk/plugin/transform" + "google.golang.org/api/compute/v1" +) + +//// TABLE DEFINITION + +func tableComputeInstanceCpuUtilizationMetricDaily(_ context.Context) *plugin.Table { + return &plugin.Table{ + Name: "gcp_compute_instance_metric_cpu_utilization_daily", + Description: "GCP Compute Instance Metrics - CPU Utilization (Daily)", + List: &plugin.ListConfig{ + ParentHydrate: listComputeInstances, + Hydrate: listComputeInstanceMetricCpuUtilizationDaily, + }, + Columns: monitoringMetricColumns([]*plugin.Column{ + { + Name: "name", + Description: "The name of the instance.", + Type: proto.ColumnType_STRING, + Transform: transform.FromField("DimensionValue"), + }, + }), + } +} + +//// LIST FUNCTION + +func listComputeInstanceMetricCpuUtilizationDaily(ctx context.Context, d *plugin.QueryData, h *plugin.HydrateData) (interface{}, error) { + instanceInfo := h.Item.(*compute.Instance) + + dimensionValue := "\"" + instanceInfo.Name + "\"" + + return listMonitorMetricStatistics(ctx, d, "DAILY", "\"compute.googleapis.com/instance/cpu/utilization\"", "metric.labels.instance_name = ", dimensionValue, instanceInfo.Name) +}