# -*- Mode: Python -*-
# vim: filetype=python
#
# Copyright (c) 2022 Oracle and/or its affiliates.
#
# This work is licensed under the terms of the GNU GPL, version 2 or later.
# See the COPYING file in the top-level directory.
#
# SPDX-License-Identifier: GPL-2.0-or-later

##
# = Statistics
##

##
# @StatsType:
#
# Enumeration of statistics types
#
# @cumulative: stat is cumulative; value can only increase.
#
# @instant: stat is instantaneous; value can increase or decrease.
#
# @peak: stat is the peak value; value can only increase.
#
# @linear-histogram: stat is a linear histogram.
#
# @log2-histogram: stat is a logarithmic histogram, with one bucket
#     for each power of two.
#
# Since: 7.1
##
{ 'enum' : 'StatsType',
  'data' : [ 'cumulative', 'instant', 'peak', 'linear-histogram',
             'log2-histogram' ] }

##
# @StatsUnit:
#
# Enumeration of unit of measurement for statistics
#
# @bytes: stat reported in bytes.
#
# @seconds: stat reported in seconds.
#
# @cycles: stat reported in clock cycles.
#
# @boolean: stat is a boolean value.
#
# Since: 7.1
##
{ 'enum' : 'StatsUnit',
  'data' : [ 'bytes', 'seconds', 'cycles', 'boolean' ] }

##
# @StatsProvider:
#
# Enumeration of statistics providers.
#
# @kvm: since 7.1
#
# @cryptodev: since 8.0
#
# Since: 7.1
##
{ 'enum': 'StatsProvider',
  'data': [ 'kvm', 'cryptodev' ] }

##
# @StatsTarget:
#
# The kinds of objects on which one can request statistics.
#
# @vm: statistics that apply to the entire virtual machine or the
#     entire QEMU process.
#
# @vcpu: statistics that apply to a single virtual CPU.
#
# @cryptodev: statistics that apply to a crypto device (since 8.0)
#
# Since: 7.1
##
{ 'enum': 'StatsTarget',
  'data': [ 'vm', 'vcpu', 'cryptodev' ] }

##
# @StatsRequest:
#
# Indicates a set of statistics that should be returned by
# query-stats.
#
# @provider: provider for which to return statistics.
#
# @names: statistics to be returned (all if omitted).
#
# Since: 7.1
##
{ 'struct': 'StatsRequest',
  'data': { 'provider': 'StatsProvider',
            '*names': [ 'str' ] } }

##
# @StatsVCPUFilter:
#
# @vcpus: list of QOM paths for the desired vCPU objects.
#
# Since: 7.1
##
{ 'struct': 'StatsVCPUFilter',
  'data': { '*vcpus': [ 'str' ] } }

##
# @StatsFilter:
#
# The arguments to the query-stats command; specifies a target for
# which to request statistics and optionally the required subset of
# information for that target.
#
# @target: the kind of objects to query.  Note that each possible
#     target may enable additional filtering options
#
# @providers: which providers to request statistics from, and
#     optionally which named values to return within each provider
#
# Since: 7.1
##
{ 'union': 'StatsFilter',
  'base': {
      'target': 'StatsTarget',
      '*providers': [ 'StatsRequest' ] },
  'discriminator': 'target',
  'data': { 'vcpu': 'StatsVCPUFilter' } }

##
# @StatsValue:
#
# @scalar: single unsigned 64-bit integers.
#
# @boolean: single boolean value.
#
# @list: list of unsigned 64-bit integers (used for histograms).
#
# Since: 7.1
##
{ 'alternate': 'StatsValue',
  'data': { 'scalar': 'uint64',
            'boolean': 'bool',
            'list': [ 'uint64' ] } }

##
# @Stats:
#
# @name: name of stat.
#
# @value: stat value.
#
# Since: 7.1
##
{ 'struct': 'Stats',
  'data': { 'name': 'str',
            'value' : 'StatsValue' } }

##
# @StatsResult:
#
# @provider: provider for this set of statistics.
#
# @qom-path: Path to the object for which the statistics are returned,
#     if the object is exposed in the QOM tree
#
# @stats: list of statistics.
#
# Since: 7.1
##
{ 'struct': 'StatsResult',
  'data': { 'provider': 'StatsProvider',
            '*qom-path': 'str',
            'stats': [ 'Stats' ] } }

##
# @query-stats:
#
# Return runtime-collected statistics for objects such as the VM or
# its vCPUs.
#
# The arguments are a StatsFilter and specify the provider and objects
# to return statistics about.
#
# Returns: a list of StatsResult, one for each provider and object
#     (e.g., for each vCPU).
#
# Since: 7.1
##
{ 'command': 'query-stats',
  'data': 'StatsFilter',
  'boxed': true,
  'returns': [ 'StatsResult' ] }

##
# @StatsSchemaValue:
#
# Schema for a single statistic.
#
# @name: name of the statistic; each element of the schema is uniquely
#     identified by a target, a provider (both available in
#     @StatsSchema) and the name.
#
# @type: kind of statistic.
#
# @unit: basic unit of measure for the statistic; if missing, the
#     statistic is a simple number or counter.
#
# @base: base for the multiple of @unit in which the statistic is
#     measured.  Only present if @exponent is non-zero; @base and
#     @exponent together form a SI prefix (e.g., _nano-_ for
#     ``base=10`` and ``exponent=-9``) or IEC binary prefix (e.g.
#     _kibi-_ for ``base=2`` and ``exponent=10``)
#
# @exponent: exponent for the multiple of @unit in which the statistic
#     is expressed, or 0 for the basic unit
#
# @bucket-size: Present when @type is "linear-histogram", contains the
#     width of each bucket of the histogram.
#
# Since: 7.1
##
{ 'struct': 'StatsSchemaValue',
  'data': { 'name': 'str',
            'type': 'StatsType',
            '*unit': 'StatsUnit',
            '*base': 'int8',
            'exponent': 'int16',
            '*bucket-size': 'uint32' } }

##
# @StatsSchema:
#
# Schema for all available statistics for a provider and target.
#
# @provider: provider for this set of statistics.
#
# @target: the kind of object that can be queried through the
#     provider.
#
# @stats: list of statistics.
#
# Since: 7.1
##
{ 'struct': 'StatsSchema',
  'data': { 'provider': 'StatsProvider',
            'target': 'StatsTarget',
            'stats': [ 'StatsSchemaValue' ] } }

##
# @query-stats-schemas:
#
# Return the schema for all available runtime-collected statistics.
#
# @provider: a provider to restrict the query to.
#
# .. note:: Runtime-collected statistics and their names fall outside
#    QEMU's usual deprecation policies.  QEMU will try to keep the set
#    of available data stable, together with their names, but will not
#    guarantee stability at all costs; the same is true of providers
#    that source statistics externally, e.g. from Linux.  For example,
#    if the same value is being tracked with different names on
#    different architectures or by different providers, one of them
#    might be renamed.  A statistic might go away if an algorithm is
#    changed or some code is removed; changing a default might cause
#    previously useful statistics to always report 0.  Such changes,
#    however, are expected to be rare.
#
# Since: 7.1
##
{ 'command': 'query-stats-schemas',
  'data': { '*provider': 'StatsProvider' },
  'returns': [ 'StatsSchema' ] }
