Skip to content

Update monitoring samples to use version 0.29.0 of the client library. #1495

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

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
39 changes: 20 additions & 19 deletions monitoring/api/v3/cloud-client/quickstart.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,26 @@

def run_quickstart():
# [START monitoring_quickstart]
from google.cloud import monitoring

client = monitoring.Client()

resource = client.resource(
type_='gce_instance',
labels={
'instance_id': '1234567890123456789',
'zone': 'us-central1-f',
}
)

metric = client.metric(
type_='custom.googleapis.com/my_metric',
labels={}
)

# Default arguments use endtime datetime.utcnow()
client.write_point(metric, resource, 3.14)
from google.cloud import monitoring_v3

import time

client = monitoring_v3.MetricServiceClient()
project = 'my-project' # TODO: Update to your project ID.
project_name = client.project_path(project)

series = monitoring_v3.types.TimeSeries()
series.metric.type = 'custom.googleapis.com/my_metric'
series.resource.type = 'gce_instance'
series.resource.labels['instance_id'] = '1234567890123456789'
series.resource.labels['zone'] = 'us-central1-f'
point = series.points.add()
point.value.double_value = 3.14
now = time.time()
point.interval.end_time.seconds = int(now)
point.interval.end_time.nanos = int(
(now - point.interval.end_time.seconds) * 10**9)
client.create_time_series(project_name, [series])
print('Successfully wrote time series.')
# [END monitoring_quickstart]

Expand Down
22 changes: 21 additions & 1 deletion monitoring/api/v3/cloud-client/quickstart_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,30 @@
# See the License for the specific language governing permissions and
# limitations under the License.

import os

import mock
import pytest

import quickstart


def test_quickstart(capsys):
PROJECT = os.environ['GCLOUD_PROJECT']


@pytest.fixture
def mock_project_path():
"""Mock out project and replace with project from environment."""
project_patch = mock.patch(
'google.cloud.monitoring_v3.MetricServiceClient.'
'project_path')

with project_patch as project_mock:
project_mock.return_value = 'projects/{}'.format(PROJECT)
yield project_mock


def test_quickstart(capsys, mock_project_path):
quickstart.run_quickstart()
out, _ = capsys.readouterr()
assert 'wrote' in out
2 changes: 1 addition & 1 deletion monitoring/api/v3/cloud-client/requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
google-cloud-monitoring==0.28.1
google-cloud-monitoring==0.29.0
239 changes: 165 additions & 74 deletions monitoring/api/v3/cloud-client/snippets.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,126 +13,216 @@
# limitations under the License.

import argparse
import os
import pprint
import time

from google.cloud import monitoring
from google.cloud import monitoring_v3


def create_metric_descriptor():
def create_metric_descriptor(project_id):
# [START monitoring_create_metric]
client = monitoring.Client()
descriptor = client.metric_descriptor(
'custom.googleapis.com/my_metric',
metric_kind=monitoring.MetricKind.GAUGE,
value_type=monitoring.ValueType.DOUBLE,
description='This is a simple example of a custom metric.')
descriptor.create()
client = monitoring_v3.MetricServiceClient()
project_name = client.project_path(project_id)
descriptor = monitoring_v3.types.MetricDescriptor()
descriptor.type = 'custom.googleapis.com/my_metric'
descriptor.metric_kind = (
monitoring_v3.enums.MetricDescriptor.MetricKind.GAUGE)
descriptor.value_type = (
monitoring_v3.enums.MetricDescriptor.ValueType.DOUBLE)
descriptor.description = 'This is a simple example of a custom metric.'
descriptor = client.create_metric_descriptor(project_name, descriptor)
print('Created {}.'.format(descriptor.name))
# [END monitoring_create_metric]


def delete_metric_descriptor(descriptor_name):
# [START monitoring_delete_metric]
client = monitoring.Client()

descriptor = client.metric_descriptor(descriptor_name)
descriptor.delete()

client = monitoring_v3.MetricServiceClient()
client.delete_metric_descriptor(descriptor_name)
print('Deleted metric descriptor {}.'.format(descriptor_name))
# [END monitoring_delete_metric]


def write_time_series():
def write_time_series(project_id):
# [START monitoring_write_timeseries]
client = monitoring.Client()
resource = client.resource(
'gce_instance',
labels={
'instance_id': '1234567890123456789',
'zone': 'us-central1-f',
}
)

metric = client.metric(
type_='custom.googleapis.com/my_metric',
labels={
}
)
client.write_point(metric, resource, 3.14)
client = monitoring_v3.MetricServiceClient()
project_name = client.project_path(project_id)

series = monitoring_v3.types.TimeSeries()
series.metric.type = 'custom.googleapis.com/my_metric'
series.resource.type = 'gce_instance'
series.resource.labels['instance_id'] = '1234567890123456789'
series.resource.labels['zone'] = 'us-central1-f'
point = series.points.add()
point.value.double_value = 3.14
now = time.time()
point.interval.end_time.seconds = int(now)
point.interval.end_time.nanos = int(
(now - point.interval.end_time.seconds) * 10**9)
client.create_time_series(project_name, [series])
# [END monitoring_write_timeseries]


def list_time_series():
def list_time_series(project_id):
# [START monitoring_read_timeseries_simple]
client = monitoring.Client()
metric = 'compute.googleapis.com/instance/cpu/utilization'
query_results = client.query(metric, minutes=5)
for result in query_results:
client = monitoring_v3.MetricServiceClient()
project_name = client.project_path(project_id)
interval = monitoring_v3.types.TimeInterval()
now = time.time()
interval.end_time.seconds = int(now)
interval.end_time.nanos = int(
(now - interval.end_time.seconds) * 10**9)
interval.start_time.seconds = int(now - 300)
interval.start_time.nanos = interval.end_time.nanos
results = client.list_time_series(
project_name,
'metric.type = "compute.googleapis.com/instance/cpu/utilization"',
interval,
monitoring_v3.enums.ListTimeSeriesRequest.TimeSeriesView.FULL)
for result in results:
print(result)
# [END monitoring_read_timeseries_simple]


def list_time_series_header():
def list_time_series_header(project_id):
# [START monitoring_read_timeseries_fields]
client = monitoring.Client()
metric = 'compute.googleapis.com/instance/cpu/utilization'
query_results = client.query(metric, minutes=5).iter(headers_only=True)
for result in query_results:
client = monitoring_v3.MetricServiceClient()
project_name = client.project_path(project_id)
interval = monitoring_v3.types.TimeInterval()
now = time.time()
interval.end_time.seconds = int(now)
interval.end_time.nanos = int(
(now - interval.end_time.seconds) * 10**9)
interval.start_time.seconds = int(now - 300)
interval.start_time.nanos = interval.end_time.nanos
results = client.list_time_series(
project_name,
'metric.type = "compute.googleapis.com/instance/cpu/utilization"',
interval,
monitoring_v3.enums.ListTimeSeriesRequest.TimeSeriesView.HEADERS)
for result in results:
print(result)
# [END monitoring_read_timeseries_fields]


def list_time_series_aggregate():
def list_time_series_aggregate(project_id):
# [START monitoring_read_timeseries_align]
client = monitoring.Client()
metric = 'compute.googleapis.com/instance/cpu/utilization'
query_results = client.query(metric, hours=1).align(
monitoring.Aligner.ALIGN_MEAN, minutes=5)
for result in query_results:
client = monitoring_v3.MetricServiceClient()
project_name = client.project_path(project_id)
interval = monitoring_v3.types.TimeInterval()
now = time.time()
interval.end_time.seconds = int(now)
interval.end_time.nanos = int(
(now - interval.end_time.seconds) * 10**9)
interval.start_time.seconds = int(now - 3600)
interval.start_time.nanos = interval.end_time.nanos
aggregation = monitoring_v3.types.Aggregation()
aggregation.alignment_period.seconds = 300 # 5 minutes
aggregation.per_series_aligner = (
monitoring_v3.enums.Aggregation.Aligner.ALIGN_MEAN)

results = client.list_time_series(
project_name,
'metric.type = "compute.googleapis.com/instance/cpu/utilization"',
interval,
monitoring_v3.enums.ListTimeSeriesRequest.TimeSeriesView.FULL,
aggregation)
for result in results:
print(result)
# [END monitoring_read_timeseries_align]


def list_time_series_reduce():
def list_time_series_reduce(project_id):
# [START monitoring_read_timeseries_reduce]
client = monitoring.Client()
metric = 'compute.googleapis.com/instance/cpu/utilization'
query_results = client.query(metric, hours=1).align(
monitoring.Aligner.ALIGN_MEAN, minutes=5).reduce(
monitoring.Reducer.REDUCE_MEAN, 'resource.zone')
for result in query_results:
client = monitoring_v3.MetricServiceClient()
project_name = client.project_path(project_id)
interval = monitoring_v3.types.TimeInterval()
now = time.time()
interval.end_time.seconds = int(now)
interval.end_time.nanos = int(
(now - interval.end_time.seconds) * 10**9)
interval.start_time.seconds = int(now - 3600)
interval.start_time.nanos = interval.end_time.nanos
aggregation = monitoring_v3.types.Aggregation()
aggregation.alignment_period.seconds = 300 # 5 minutes
aggregation.per_series_aligner = (
monitoring_v3.enums.Aggregation.Aligner.ALIGN_MEAN)
aggregation.cross_series_reducer = (
monitoring_v3.enums.Aggregation.Reducer.REDUCE_MEAN)
aggregation.group_by_fields.append('resource.zone')

results = client.list_time_series(
project_name,
'metric.type = "compute.googleapis.com/instance/cpu/utilization"',
interval,
monitoring_v3.enums.ListTimeSeriesRequest.TimeSeriesView.FULL,
aggregation)
for result in results:
print(result)
# [END monitoring_read_timeseries_reduce]


def list_metric_descriptors():
def list_metric_descriptors(project_id):
# [START monitoring_list_descriptors]
client = monitoring.Client()
for descriptor in client.list_metric_descriptors():
client = monitoring_v3.MetricServiceClient()
project_name = client.project_path(project_id)
for descriptor in client.list_metric_descriptors(project_name):
print(descriptor.type)
# [END monitoring_list_descriptors]


def list_monitored_resources():
def list_monitored_resources(project_id):
# [START monitoring_list_resources]
client = monitoring.Client()
for descriptor in client.list_resource_descriptors():
client = monitoring_v3.MetricServiceClient()
project_name = client.project_path(project_id)
resource_descriptors = (
client.list_monitored_resource_descriptors(project_name))
for descriptor in resource_descriptors:
print(descriptor.type)
# [END monitoring_list_resources]


def get_monitored_resource_descriptor(resource_type_name):
def get_monitored_resource_descriptor(project_id, resource_type_name):
# [START monitoring_get_resource]
client = monitoring.Client()
print(client.fetch_resource_descriptor(resource_type_name))
client = monitoring_v3.MetricServiceClient()
resource_path = client.monitored_resource_descriptor_path(
project_id, resource_type_name)
pprint.pprint(client.get_monitored_resource_descriptor(resource_path))
# [END monitoring_get_resource]


def get_metric_descriptor(metric_type_name):
def get_metric_descriptor(metric_name):
# [START monitoring_get_descriptor]
client = monitoring.Client()
print(client.fetch_metric_descriptor(metric_type_name))
client = monitoring_v3.MetricServiceClient()
descriptor = client.get_metric_descriptor(metric_name)
pprint.pprint(descriptor)
# [END monitoring_get_descriptor]


class MissingProjectIdError(Exception):
pass


def project_id():
"""Retreives the project id from the environment variable.

Raises:
MissingProjectIdError -- When not set.

Returns:
str -- the project name
"""
project_id = (os.environ['GOOGLE_CLOUD_PROJECT'] or
os.environ['GCLOUD_PROJECT'])

if not project_id:
raise MissingProjectIdError(
'Set the environment variable ' +
'GCLOUD_PROJECT to your Google Cloud Project Id.')
return project_id


if __name__ == '__main__':
parser = argparse.ArgumentParser(
description='Demonstrates Monitoring API operations.')
Expand Down Expand Up @@ -215,24 +305,25 @@ def get_metric_descriptor(metric_type_name):
args = parser.parse_args()

if args.command == 'create-metric-descriptor':
create_metric_descriptor()
create_metric_descriptor(project_id())
if args.command == 'list-metric-descriptors':
list_metric_descriptors()
list_metric_descriptors(project_id())
if args.command == 'get-metric-descriptor':
get_metric_descriptor(args.metric_type_name)
if args.command == 'delete-metric-descriptor':
delete_metric_descriptor(args.metric_descriptor_name)
if args.command == 'list-resources':
list_monitored_resources()
list_monitored_resources(project_id())
if args.command == 'get-resource':
get_monitored_resource_descriptor(args.resource_type_name)
get_monitored_resource_descriptor(
project_id(), args.resource_type_name)
if args.command == 'write-time-series':
write_time_series()
write_time_series(project_id())
if args.command == 'list-time-series':
list_time_series()
list_time_series(project_id())
if args.command == 'list-time-series-header':
list_time_series_header()
list_time_series_header(project_id())
if args.command == 'list-time-series-reduce':
list_time_series_reduce()
list_time_series_reduce(project_id())
if args.command == 'list-time-series-aggregate':
list_time_series_aggregate()
list_time_series_aggregate(project_id())
Loading