Skip to content

Sample for using appliance Monitoring #257

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
Merged
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
93 changes: 93 additions & 0 deletions samples/vsphere/appliances/monitoring_query.py
Original file line number Diff line number Diff line change
@@ -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))