From 683ff8a698657c6a7677a64aa25bb9781176a760 Mon Sep 17 00:00:00 2001 From: ParthaI Date: Mon, 28 Jun 2021 13:30:04 +0530 Subject: [PATCH 1/6] Add table gcp_compute_instance_metric_cpu_utilization_hourly. closes #253 --- ..._instance_metric_cpu_utilization_hourly.md | 41 ++++++ gcp/plugin.go | 121 +++++++++--------- ...e_instance_metric_cpu_utilization_daily.go | 41 ++++++ 3 files changed, 143 insertions(+), 60 deletions(-) create mode 100644 docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.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_hourly.md b/docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.md new file mode 100644 index 00000000..054b76a7 --- /dev/null +++ b/docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.md @@ -0,0 +1,41 @@ +# Table: gcp_compute_instance_metric_cpu_utilization_hourly + +Google 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 + instance_id, + timestamp, + minimum, + maximum, + average, + sample_count +from + gcp_compute_instance_metric_cpu_utilization_hourly +order by + instance_id, + timestamp; +``` + +### CPU Over 80% average + +```sql +select + instance_id, + 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 + instance_id, + timestamp; +``` \ No newline at end of file diff --git a/gcp/plugin.go b/gcp/plugin.go index 55add749..7f0c254e 100644 --- a/gcp/plugin.go +++ b/gcp/plugin.go @@ -28,66 +28,67 @@ func Plugin(ctx context.Context) *plugin.Plugin { Schema: ConfigSchema, }, TableMap: map[string]*plugin.Table{ - "gcp_audit_policy": tableGcpAuditPolicy(ctx), - "gcp_bigquery_dataset": tableGcpBigQueryDataset(ctx), - "gcp_bigquery_table": tableGcpBigqueryTable(ctx), - "gcp_bigtable_instance": tableGcpBigtableInstance(ctx), - "gcp_cloudfunctions_function": tableGcpCloudfunctionFunction(ctx), - "gcp_compute_address": tableGcpComputeAddress(ctx), - "gcp_compute_backend_bucket": tableGcpComputeBackendBucket(ctx), - "gcp_compute_backend_service": tableGcpComputeBackendService(ctx), - "gcp_compute_disk": tableGcpComputeDisk(ctx), - "gcp_compute_firewall": tableGcpComputeFirewall(ctx), - "gcp_compute_forwarding_rule": tableGcpComputeForwardingRule(ctx), - "gcp_compute_global_address": tableGcpComputeGlobalAddress(ctx), - "gcp_compute_global_forwarding_rule": tableGcpComputeGlobalForwardingRule(ctx), - "gcp_compute_image": tableGcpComputeImage(ctx), - "gcp_compute_instance": tableGcpComputeInstance(ctx), - "gcp_compute_instance_template": tableGcpComputeInstanceTemplate(ctx), - "gcp_compute_network": tableGcpComputeNetwork(ctx), - "gcp_compute_node_group": tableGcpComputeNodeGroup(ctx), - "gcp_compute_node_template": tableGcpComputeNodeTemplate(ctx), - "gcp_compute_project_metadata": tableGcpComputeProjectMetadata(ctx), - "gcp_compute_region": tableGcpComputeRegion(ctx), - "gcp_compute_resource_policy": tableGcpComputeResourcePolicy(ctx), - "gcp_compute_router": tableGcpComputeRouter(ctx), - "gcp_compute_snapshot": tableGcpComputeSnapshot(ctx), - "gcp_compute_ssl_policy": tableGcpComputeSslPolicy(ctx), - "gcp_compute_subnetwork": tableGcpComputeSubnetwork(ctx), - "gcp_compute_target_https_proxy": tableGcpComputeTargetHttpsProxy(ctx), - "gcp_compute_target_pool": tableGcpComputeTargetPool(ctx), - "gcp_compute_target_ssl_proxy": tableGcpComputeTargetSslProxy(ctx), - "gcp_compute_target_vpn_gateway": tableGcpComputeTargetVpnGateway(ctx), - "gcp_compute_url_map": tableGcpComputeURLMap(ctx), - "gcp_compute_vpn_tunnel": tableGcpComputeVpnTunnel(ctx), - "gcp_compute_zone": tableGcpComputeZone(ctx), - "gcp_dns_managed_zone": tableGcpDnsManagedZone(ctx), - "gcp_dns_policy": tableDnsPolicy(ctx), - "gcp_dns_record_set": tableDnsRecordSet(ctx), - "gcp_iam_policy": tableGcpIAMPolicy(ctx), - "gcp_iam_role": tableGcpIamRole(ctx), - "gcp_kms_key": tableGcpKmsKey(ctx), - "gcp_kms_key_ring": tableGcpKmsKeyRing(ctx), - "gcp_logging_bucket": tableGcpLoggingBucket(ctx), - "gcp_logging_exclusion": tableGcpLoggingExclusion(ctx), - "gcp_logging_metric": tableGcpLoggingMetric(ctx), - "gcp_logging_sink": tableGcpLoggingSink(ctx), - "gcp_monitoring_alert_policy": tableGcpMonitoringAlert(ctx), - "gcp_monitoring_group": tableGcpMonitoringGroup(ctx), - "gcp_monitoring_notification_channel": tableGcpMonitoringNotificationChannel(ctx), - "gcp_project_organization_policy": tableGcpProjectOrganizationPolicy(ctx), - "gcp_project": tableGcpProject(ctx), - "gcp_project_service": tableGcpProjectService(ctx), - "gcp_pubsub_snapshot": tableGcpPubSubSnapshot(ctx), - "gcp_pubsub_subscription": tableGcpPubSubSubscription(ctx), - "gcp_pubsub_topic": tableGcpPubSubTopic(ctx), - "gcp_service_account": tableGcpServiceAccount(ctx), - "gcp_service_account_key": tableGcpServiceAccountKey(ctx), - "gcp_sql_backup": tableGcpSQLBackup(ctx), - "gcp_sql_database": tableGcpSQLDatabase(ctx), - "gcp_sql_database_connections_daily": tableGcpSQLDatabaseConnectionsMetricDaily(ctx), - "gcp_sql_database_instance": tableGcpSQLDatabaseInstance(ctx), - "gcp_storage_bucket": tableGcpStorageBucket(ctx), + "gcp_audit_policy": tableGcpAuditPolicy(ctx), + "gcp_bigquery_dataset": tableGcpBigQueryDataset(ctx), + "gcp_bigquery_table": tableGcpBigqueryTable(ctx), + "gcp_bigtable_instance": tableGcpBigtableInstance(ctx), + "gcp_cloudfunctions_function": tableGcpCloudfunctionFunction(ctx), + "gcp_compute_address": tableGcpComputeAddress(ctx), + "gcp_compute_backend_bucket": tableGcpComputeBackendBucket(ctx), + "gcp_compute_backend_service": tableGcpComputeBackendService(ctx), + "gcp_compute_disk": tableGcpComputeDisk(ctx), + "gcp_compute_firewall": tableGcpComputeFirewall(ctx), + "gcp_compute_forwarding_rule": tableGcpComputeForwardingRule(ctx), + "gcp_compute_global_address": tableGcpComputeGlobalAddress(ctx), + "gcp_compute_global_forwarding_rule": tableGcpComputeGlobalForwardingRule(ctx), + "gcp_compute_image": tableGcpComputeImage(ctx), + "gcp_compute_instance": tableGcpComputeInstance(ctx), + "gcp_compute_instance_metric_cpu_utilization_hourly": tableComputeInstanceCpuUtilizationMetricHourly(ctx), + "gcp_compute_instance_template": tableGcpComputeInstanceTemplate(ctx), + "gcp_compute_network": tableGcpComputeNetwork(ctx), + "gcp_compute_node_group": tableGcpComputeNodeGroup(ctx), + "gcp_compute_node_template": tableGcpComputeNodeTemplate(ctx), + "gcp_compute_project_metadata": tableGcpComputeProjectMetadata(ctx), + "gcp_compute_region": tableGcpComputeRegion(ctx), + "gcp_compute_resource_policy": tableGcpComputeResourcePolicy(ctx), + "gcp_compute_router": tableGcpComputeRouter(ctx), + "gcp_compute_snapshot": tableGcpComputeSnapshot(ctx), + "gcp_compute_ssl_policy": tableGcpComputeSslPolicy(ctx), + "gcp_compute_subnetwork": tableGcpComputeSubnetwork(ctx), + "gcp_compute_target_https_proxy": tableGcpComputeTargetHttpsProxy(ctx), + "gcp_compute_target_pool": tableGcpComputeTargetPool(ctx), + "gcp_compute_target_ssl_proxy": tableGcpComputeTargetSslProxy(ctx), + "gcp_compute_target_vpn_gateway": tableGcpComputeTargetVpnGateway(ctx), + "gcp_compute_url_map": tableGcpComputeURLMap(ctx), + "gcp_compute_vpn_tunnel": tableGcpComputeVpnTunnel(ctx), + "gcp_compute_zone": tableGcpComputeZone(ctx), + "gcp_dns_managed_zone": tableGcpDnsManagedZone(ctx), + "gcp_dns_policy": tableDnsPolicy(ctx), + "gcp_dns_record_set": tableDnsRecordSet(ctx), + "gcp_iam_policy": tableGcpIAMPolicy(ctx), + "gcp_iam_role": tableGcpIamRole(ctx), + "gcp_kms_key": tableGcpKmsKey(ctx), + "gcp_kms_key_ring": tableGcpKmsKeyRing(ctx), + "gcp_logging_bucket": tableGcpLoggingBucket(ctx), + "gcp_logging_exclusion": tableGcpLoggingExclusion(ctx), + "gcp_logging_metric": tableGcpLoggingMetric(ctx), + "gcp_logging_sink": tableGcpLoggingSink(ctx), + "gcp_monitoring_alert_policy": tableGcpMonitoringAlert(ctx), + "gcp_monitoring_group": tableGcpMonitoringGroup(ctx), + "gcp_monitoring_notification_channel": tableGcpMonitoringNotificationChannel(ctx), + "gcp_project_organization_policy": tableGcpProjectOrganizationPolicy(ctx), + "gcp_project": tableGcpProject(ctx), + "gcp_project_service": tableGcpProjectService(ctx), + "gcp_pubsub_snapshot": tableGcpPubSubSnapshot(ctx), + "gcp_pubsub_subscription": tableGcpPubSubSubscription(ctx), + "gcp_pubsub_topic": tableGcpPubSubTopic(ctx), + "gcp_service_account": tableGcpServiceAccount(ctx), + "gcp_service_account_key": tableGcpServiceAccountKey(ctx), + "gcp_sql_backup": tableGcpSQLBackup(ctx), + "gcp_sql_database": tableGcpSQLDatabase(ctx), + "gcp_sql_database_connections_daily": tableGcpSQLDatabaseConnectionsMetricDaily(ctx), + "gcp_sql_database_instance": tableGcpSQLDatabaseInstance(ctx), + "gcp_storage_bucket": tableGcpStorageBucket(ctx), /* https://github.com/turbot/steampipe/issues/108 "gcp_compute_route": tableGcpComputeRoute(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..5a39e0d5 --- /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 Daily CPU Utilization", + List: &plugin.ListConfig{ + ParentHydrate: listComputeInstances, + Hydrate: listComputeInstanceMetricCpuUtilizationDaily, + }, + Columns: monitoringMetricColumns([]*plugin.Column{ + { + Name: "instance_id", + Description: "The Compute Instance name.", + 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) +} From 8ef70fad5539aec4b7a174a6e09c3c61f7cebc6b Mon Sep 17 00:00:00 2001 From: ParthaI Date: Mon, 28 Jun 2021 13:31:25 +0530 Subject: [PATCH 2/6] Update the description in doc --- .../gcp_compute_instance_metric_cpu_utilization_hourly.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.md b/docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.md index 054b76a7..f61decdb 100644 --- a/docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.md +++ b/docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.md @@ -1,6 +1,6 @@ # Table: gcp_compute_instance_metric_cpu_utilization_hourly -Google 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. +GCloud 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 From 272ba163d904c59189cba2b1419cd1cec6fda7a3 Mon Sep 17 00:00:00 2001 From: ParthaI Date: Mon, 28 Jun 2021 13:38:20 +0530 Subject: [PATCH 3/6] Update the go file name --- ...ompute_instance_metric_cpu_utilization_hourly.go} | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) rename gcp/{table_gcp_compute_instance_metric_cpu_utilization_daily.go => table_gcp_compute_instance_metric_cpu_utilization_hourly.go} (54%) diff --git a/gcp/table_gcp_compute_instance_metric_cpu_utilization_daily.go b/gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go similarity index 54% rename from gcp/table_gcp_compute_instance_metric_cpu_utilization_daily.go rename to gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go index 5a39e0d5..45b711e6 100644 --- a/gcp/table_gcp_compute_instance_metric_cpu_utilization_daily.go +++ b/gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go @@ -11,13 +11,13 @@ import ( //// TABLE DEFINITION -func tableComputeInstanceCpuUtilizationMetricDaily(_ context.Context) *plugin.Table { +func tableComputeInstanceCpuUtilizationMetricHourly(_ context.Context) *plugin.Table { return &plugin.Table{ - Name: "gcp_compute_instance_metric_cpu_utilization_daily", - Description: "GCP Compute Instance Daily CPU Utilization", + Name: "gcp_compute_instance_metric_cpu_utilization_hourly", + Description: "GCP Compute Instance Hourly CPU Utilization", List: &plugin.ListConfig{ ParentHydrate: listComputeInstances, - Hydrate: listComputeInstanceMetricCpuUtilizationDaily, + Hydrate: listComputeInstanceMetricCpuUtilizationHourly, }, Columns: monitoringMetricColumns([]*plugin.Column{ { @@ -32,10 +32,10 @@ func tableComputeInstanceCpuUtilizationMetricDaily(_ context.Context) *plugin.Ta //// LIST FUNCTION -func listComputeInstanceMetricCpuUtilizationDaily(ctx context.Context, d *plugin.QueryData, h *plugin.HydrateData) (interface{}, error) { +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, "DAILY", "\"compute.googleapis.com/instance/cpu/utilization\"", "metric.labels.instance_name = ", dimensionValue, instanceInfo.Name) + return listMonitorMetricStatistics(ctx, d, "HOURLY", "\"compute.googleapis.com/instance/cpu/utilization\"", "metric.labels.instance_name = ", dimensionValue, instanceInfo.Name) } From aa156f820915c60d7894686dca3f96d509c9f6bf Mon Sep 17 00:00:00 2001 From: Subhajit Kumar Mondal Date: Tue, 29 Jun 2021 17:37:54 +0530 Subject: [PATCH 4/6] Renamed column instance_id -> name --- ...compute_instance_metric_cpu_utilization_hourly.md | 12 ++++++------ ...compute_instance_metric_cpu_utilization_hourly.go | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.md b/docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.md index e5a0b50a..6131bf51 100644 --- a/docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.md +++ b/docs/tables/gcp_compute_instance_metric_cpu_utilization_hourly.md @@ -1,6 +1,6 @@ # Table: gcp_compute_instance_metric_cpu_utilization_hourly -GCloud 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. +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 @@ -8,7 +8,7 @@ GCloud Monitoring Metrics provide data about the performance of your systems. Th ```sql select - instance_id, + name, timestamp, minimum, maximum, @@ -17,7 +17,7 @@ select from gcp_compute_instance_metric_cpu_utilization_hourly order by - instance_id, + name, timestamp; ``` @@ -25,7 +25,7 @@ order by ```sql select - instance_id, + name, timestamp, round(minimum::numeric,2) as min_cpu, round(maximum::numeric,2) as max_cpu, @@ -35,6 +35,6 @@ from gcp_compute_instance_metric_cpu_utilization_hourly where average > 80 order by - instance_id, + name, timestamp; -``` \ No newline at end of file +``` diff --git a/gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go b/gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go index 45b711e6..2ec68374 100644 --- a/gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go +++ b/gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go @@ -14,14 +14,14 @@ import ( func tableComputeInstanceCpuUtilizationMetricHourly(_ context.Context) *plugin.Table { return &plugin.Table{ Name: "gcp_compute_instance_metric_cpu_utilization_hourly", - Description: "GCP Compute Instance Hourly CPU Utilization", + Description: "GCP Compute Instance Metrics - CPU Utilization (Hourly)", List: &plugin.ListConfig{ ParentHydrate: listComputeInstances, Hydrate: listComputeInstanceMetricCpuUtilizationHourly, }, Columns: monitoringMetricColumns([]*plugin.Column{ { - Name: "instance_id", + Name: "name", Description: "The Compute Instance name.", Type: proto.ColumnType_STRING, Transform: transform.FromField("DimensionValue"), From e2d36791e9388e84f22dde5b8ea2a4e2f7917c87 Mon Sep 17 00:00:00 2001 From: Subhajit Mondal <38218418+Subhajit97@users.noreply.github.com> Date: Tue, 29 Jun 2021 17:41:54 +0530 Subject: [PATCH 5/6] Updated column description --- gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go b/gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go index 2ec68374..380811e2 100644 --- a/gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go +++ b/gcp/table_gcp_compute_instance_metric_cpu_utilization_hourly.go @@ -22,7 +22,7 @@ func tableComputeInstanceCpuUtilizationMetricHourly(_ context.Context) *plugin.T Columns: monitoringMetricColumns([]*plugin.Column{ { Name: "name", - Description: "The Compute Instance name.", + Description: "The name of the instance.", Type: proto.ColumnType_STRING, Transform: transform.FromField("DimensionValue"), }, From 43494e52837377ed66a3589512c9cf83bd2bd8e9 Mon Sep 17 00:00:00 2001 From: Subhajit Kumar Mondal Date: Wed, 30 Jun 2021 16:22:02 +0530 Subject: [PATCH 6/6] Fixed spacing in plugin.go --- gcp/plugin.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcp/plugin.go b/gcp/plugin.go index 93e96908..7cdf1020 100644 --- a/gcp/plugin.go +++ b/gcp/plugin.go @@ -43,7 +43,7 @@ func Plugin(ctx context.Context) *plugin.Plugin { "gcp_compute_global_forwarding_rule": tableGcpComputeGlobalForwardingRule(ctx), "gcp_compute_image": tableGcpComputeImage(ctx), "gcp_compute_instance": tableGcpComputeInstance(ctx), - "gcp_compute_instance_metric_cpu_utilization_hourly": tableComputeInstanceCpuUtilizationMetricHourly(ctx), + "gcp_compute_instance_metric_cpu_utilization_hourly": tableComputeInstanceCpuUtilizationMetricHourly(ctx), "gcp_compute_instance_template": tableGcpComputeInstanceTemplate(ctx), "gcp_compute_network": tableGcpComputeNetwork(ctx), "gcp_compute_node_group": tableGcpComputeNodeGroup(ctx),