usr/src/cmd/pyclient/kstat_demo.py
author David Powell <david.e.powell@oracle.com>
Tue, 23 Nov 2010 15:54:20 -0800
changeset 604 20d9acfeb7fb
child 709 6d87dfa365c0
permissions -rw-r--r--
17421 name key order preservation 17422 rad dynamic namespace support 17423 rad kstat module
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
604
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     1
#!/usr/bin/python2.6
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     2
#
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     3
# CDDL HEADER START
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     4
#
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     8
#
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    11
# See the License for the specific language governing permissions
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    12
# and limitations under the License.
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    13
#
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    19
#
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    20
# CDDL HEADER END
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    21
#
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    22
# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    23
#
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    24
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    25
import kstat.rad
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    26
import time
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    27
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    28
last = [ 0, 0, 0, 0 ]
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    29
flds = [ "cpu_nsec_idle", "cpu_nsec_user", "cpu_nsec_kernel", "cpu_nsec_intr" ]
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    30
frmt = "Idle: %.2f%%  User: %.2f%%  Kern: %.2f%%  Intr: %.2f%%"
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    31
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    32
def print_diff(prev, next):
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    33
	diffs = [ next[i] - prev[i] for i in range(4) ]
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    34
	total = sum(diffs)
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    35
	print frmt % tuple([ float(x) * 100 / total for x in diffs ])
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    36
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    37
stats = kstat.rad.Kstats()			# get kstat connection
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    38
cpu = stats.lookup("cpu", "sys", 0)		# get cpu 0's kstat object
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    39
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    40
while True:
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    41
	stats.update()				# update kstats
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    42
	s = cpu.value				# fetch new kstat
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    43
	this = [ s.get(x) for x in flds ]	# pick out interesting stats
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    44
	print_diff(last, this)			# pretty-print
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    45
	last = this				# new is now old
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    46
	time.sleep(1)				# wait