diff --git a/docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.md b/docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.md new file mode 100644 index 00000000..6131bf51 --- /dev/null +++ b/docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.md @@ -0,0 +1,40 @@ +# Table: gcp_compute_instance_metric_cpu_utilization_hourly + +GCP Monitoring Metrics provide data about the performance of your systems. The `gcp_compute_instance_metric_cpu_utilization_hourly` table provides metric statistics at 60 minute 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_hourly +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_hourly +where average > 80 +order by + name, + timestamp; +``` diff --git a/gcp/plugin.go b/gcp/plugin.go index 7bcbbe56..90f70aa9 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_hourly": tableComputeInstanceCpuUtilizationMetricHourly(ctx), "gcp_compute_instance_template": tableGcpComputeInstanceTemplate(ctx), "gcp_compute_machine_type": tableGcpComputeMachineType(ctx), "gcp_compute_network": tableGcpComputeNetwork(ctx), diff --git a/gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go b/gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go new file mode 100644 index 00000000..380811e2 --- /dev/null +++ b/gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.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 tableComputeInstanceCpuUtilizationMetricHourly(_ context.Context) *plugin.Table { + return &plugin.Table{ + Name: "gcp_compute_instance_metric_cpu_utilization_hourly", + Description: "GCP Compute Instance Metrics - CPU Utilization (Hourly)", + List: &plugin.ListConfig{ + ParentHydrate: listComputeInstances, + Hydrate: listComputeInstanceMetricCpuUtilizationHourly, + }, + Columns: monitoringMetricColumns([]*plugin.Column{ + { + Name: "name", + Description: "The name of the instance.", + Type: proto.ColumnType_STRING, + Transform: transform.FromField("DimensionValue"), + }, + }), + } +} + +//// LIST FUNCTION + +func listComputeInstanceMetricCpuUtilizationHourly(ctx context.Context, d *plugin.QueryData, h *plugin.HydrateData) (interface{}, error) { + instanceInfo := h.Item.(*compute.Instance) + + dimensionValue := "\"" + instanceInfo.Name + "\"" + + return listMonitorMetricStatistics(ctx, d, "HOURLY", "\"compute.googleapis.com/instance/cpu/utilization\"", "metric.labels.instance_name = ", dimensionValue, instanceInfo.Name) +}