From 2727e679db3edc7a55559d8d57b3abe5f0a827d3 Mon Sep 17 00:00:00 2001 From: kkaraatanassov Date: Wed, 13 Jan 2021 12:21:30 +0200 Subject: [PATCH] Sample for using appliance Monitoring This sample shows how to use the appliance `Monitoring` interface. The sample calls: 1. `Monitoring.list()` API to obtain list of counters. 2. `Monitoring.query()` API to obtain CPU and Memory statistics for the last few days Signed-off-by: Kiril Karaataassov --- .../vsphere/appliances/monitoring_query.py | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 samples/vsphere/appliances/monitoring_query.py diff --git a/samples/vsphere/appliances/monitoring_query.py b/samples/vsphere/appliances/monitoring_query.py new file mode 100644 index 00000000..37006965 --- /dev/null +++ b/samples/vsphere/appliances/monitoring_query.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python +""" +* ******************************************************* +* Copyright (c) VMware, Inc. 2021. All Rights Reserved. +* SPDX-License-Identifier: MIT +* ******************************************************* +* +* DISCLAIMER. THIS PROGRAM IS PROVIDED TO YOU "AS IS" WITHOUT +* WARRANTIES OR CONDITIONS OF ANY KIND, WHETHER ORAL OR WRITTEN, +* EXPRESS OR IMPLIED. THE AUTHOR SPECIFICALLY DISCLAIMS ANY IMPLIED +* WARRANTIES OR CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, +* NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. +""" + +__author__ = 'VMware, Inc.' +__vcenter_version__ = '6.7+' + +from vmware.vapi.vsphere.client import create_vsphere_client +from datetime import datetime, timedelta + +from samples.vsphere.common import (sample_cli, sample_util) +from samples.vsphere.common.ssl_helper import get_unverified_session + +""" +Description: Demonstrates monitoring api workflow +1. List all memory and cpu counters +2. Query and print daily averages +""" + +MEMORY_CATEGORY = "com.vmware.applmgmt.mon.cat.memory" +CPU_CATEGORY = "com.vmware.applmgmt.mon.cat.cpu" +CATEGORIES = (MEMORY_CATEGORY, CPU_CATEGORY) +METRIC_TITLE = "Metric" +DAY = timedelta(days=1) +DATE_FORMAT = "%Y-%m-%d" + +parser = sample_cli.build_arg_parser() +args = sample_util.process_cli_args(parser.parse_args()) +session = get_unverified_session() if args.skipverification else None +client = create_vsphere_client(server=args.server, + username=args.username, + password=args.password, + session=session) + +# Get the Monitoring interface +monitoring = client.appliance.Monitoring + +# List the available counters +counters = monitoring.list() + +# Get the names of counters that relate to CPU and Memory categories +conterIds = [] +for counter in counters: + if counter.category in CATEGORIES: + conterIds.append(counter.id) + +# Compute interval for last few days +end = datetime.now() +start = end - timedelta(days=2) + +# Query timeseries data +query = monitoring.MonitoredItemDataRequest(names=conterIds, + interval="DAY1", + function="AVG", + start_time=start, + end_time=end) +data = monitoring.query(query) + + +print("Example: Query Monitoring for Timeseries Data:") +print("-------------------\n") + +# Create title and row format strings +# We need one labeled column for every day between start and end + +# Reserve 25 characters for the first column with metric name +title = METRIC_TITLE + (" " * (25 - len(METRIC_TITLE))) +columnFormat = "{0:25}" + +idx = 0 +timestamp = start +# Create columns for each day +while timestamp <= end: + # 24 characters per column. In the title use 10 for date and 14 padding. + title += timestamp.strftime(DATE_FORMAT) + " " * 14 + columnFormat += "{{1[{}]:24}}".format(idx) + # increment + idx = idx + 1 + timestamp = timestamp + DAY + +print(title) +for item in data: + print(columnFormat.format(item.name, item.data))