// Copyright (c) 2009 DMTF.  All rights reserved.
   [Version ( "2.22.0" ), 
    UMLPackagePath ( "CIM::Metrics::BaseMetric" ), 
    Description ( 
       "CIM_BaseMetricDefinition represents the definitional aspects "
       "of a metric, i.e., a definition template containing meta data "
       "about a new metric. Since CIM_BaseMetricDefinition does not "
       "capture metric instance information, it does not contain the "
       "value of the metric. The associated class CIM_BaseMetricValue "
       "holds the metric value and encapsulates its runtime behavior. "
       "The purpose of CIM_BaseMetricDefinition is to provide a "
       "convenient mechanism for introducing a new metric definition "
       "at runtime and capturing its instance values in a separate "
       "class. This mechanism is targeted specifically at CIM users "
       "who would like to enhance existing CIM schemas by introducing "
       "domain-specific metrics that are not captured in the existing "
       "CIM schemas. In addition, vendors of managed resources may "
       "make use of this mechanism if a small subset of a potentially "
       "large and heterogeneous amount of performance-related data "
       "needs to be exposed, based on the context in which the data is "
       "captured. Additional meta data for a metric can be provided by "
       "subclassing from CIM_BaseMetricDefinition. The "
       "CIM_BaseMetricDefinition should be associated with the "
       "CIM_ManagedElement(s) to which it applies." )]
class CIM_BaseMetricDefinition : CIM_ManagedElement {

      [Key, Description ( 
          "A string that uniquely identifies the metric definition. "
          "The use of OSF UUID/GUIDs is recommended." )]
   string Id;

      [Description ( 
          "The name of the metric. This name does not have to be "
          "unique, but should be descriptive and may contain "
          "blanks." )]
   string Name;

      [Description ( 
          "The data type of the metric. For example, \"boolean\" "
          "(value=1) or \"datetime\" (=3) may be specified. These "
          "types represent the datatypes defined for CIM." ), 
       ValueMap { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", 
          "11", "12", "13", "14" }, 
       Values { "boolean", "char16", "datetime", "real32", "real64", 
          "sint16", "sint32", "sint64", "sint8", "string", "uint16", 
          "uint32", "uint64", "uint8" }]
   uint16 DataType;

      [Description ( 
          "An enumerated value that describes the characteristics "
          "of the metric, for purposes of performing calculations. "
          "The property can take one of the following values: \n"
          "1=\"Non-calculable\" -> a string. Arithmetic makes no "
          "sense. \n"
          "2=\"Summable\" -> It is reasonable to sum this value "
          "over many instances of e.g., UnitOfWork, such as the "
          "number of files processed in a backup job. For example, "
          "if each backup job is a UnitOfWork, and each job backs "
          "up 27,000 files on average, then it makes sense to say "
          "that 100 backup jobs processed 2,700,000 files. \n"
          "3=\"Non-summable\" -> It does not make sense to sum this "
          "value over many instances of UnitOfWork. An example "
          "would be a metric that measures the queue length when a "
          "job arrives at a server. If each job is a UnitOfWork, "
          "and the average queue length when each job arrives is "
          "33, it does not make sense to say that the queue length "
          "for 100 jobs is 3300. It does make sense to say that the "
          "mean is 33." ), 
       ValueMap { "1", "2", "3" }, 
       Values { "Non-calculable", "Summable", "Non-summable" }]
   uint16 Calculable;

      [Description ( 
          "Identifies the specific units of a value. Examples are "
          "Bytes, Packets, Jobs, Files, Milliseconds, and Amps." )]
   string Units;

      [Description ( 
          "Defines one or more strings that can be used to refine "
          "(break down) queries against the BaseMetricValues along "
          "a certain dimension. An example is a transaction name, "
          "allowing the break down of the total value for all "
          "transactions into a set of values, one for each "
          "transaction name. Other examples might be application "
          "system or user group name. The strings are free format "
          "and should be meaningful to the end users of the metric "
          "data. The strings indicate which break down dimensions "
          "are supported for this metric definition, by the "
          "underlying instrumentation." )]
   string BreakdownDimensions[];

      [Description ( 
          "IsContinuous indicates whether or not the metric value "
          "is continuous or scalar. Performance metrics are an "
          "example of a linear metric. Examples of non-linear "
          "metrics include error codes or operational states. "
          "Continuous metrics can be compared using the \"greater "
          "than\" relation." )]
   boolean IsContinuous;

      [Description ( 
          "ChangeType indicates how the metric value changes, in "
          "the form of typical combinations of finer grain "
          "attributes such as direction change, minimum and maximum "
          "values, and wrapping semantics. \n"
          "0=\"Unknown\": The metric designer did not qualify the "
          "ChangeType. \n"
          "2=\"N/A\": If the \"IsContinuous\" property is \"false\", "
          "ChangeType does not make sense and MUST be is set to "
          "\"N/A\". \n"
          "3=\"Counter\": The metric is a counter metric. These "
          "have non-negative integer values which increase "
          "monotonically until reaching the maximum representable "
          "number and then wrap around and start increasing from 0. "
          "Such counters, also known as rollover counters, can be "
          "used for instance to count the number of network errors "
          "or the number of transactions processed. The only way "
          "for a client application to keep track of wrap arounds "
          "is to retrieve the value of the counter in appropriately "
          "short intervals. \n"
          "4=\"Gauge\": The metric is a gauge metric. These have "
          "integer or float values that can increase and decrease "
          "arbitrarily. A gauge MUST NOT wrap when reaching the "
          "minimum or maximum representable number, instead, the "
          "value \"sticks\" at that number. Minimum or maximum "
          "values inside of the representable value range at which "
          "the metric value \"sticks\", may or may not be defined. \n"
          "Vendors may extend this property in the vendor reserved "
          "range." ), 
       ValueMap { "0", "2", "3", "4", "5..32767", "32768..65535" }, 
       Values { "Unknown", "N/A", "Counter", "Gauge", 
          "DMTF Reserved", "Vendor Reserved" }, 
       ModelCorrespondence { "CIM_BaseMetricDefinition.IsContinuous" }]
   uint16 ChangeType;

      [Description ( 
          "TimeScope indicates the time scope to which the metric "
          "value applies. \n"
          "0=\"Unknown\" indicates the time scope was not qualified "
          "by the metric designer, or is unknown to the provider. \n"
          "2=\"Point\" indicates that the metric applies to a point "
          "in time. On the corresponding BaseMetricValue instances, "
          "TimeStamp specifies the point in time and Duration is "
          "always 0. \n"
          "3=\"Interval\" indicates that the metric applies to a "
          "time interval. On the corresponding BaseMetricValue "
          "instances, TimeStamp specifies the end of the time "
          "interval and Duration specifies its duration. \n"
          "4=\"StartupInterval\" indicates that the metric applies "
          "to a time interval that began at the startup of the "
          "measured resource (i.e. the ManagedElement associated by "
          "MetricDefForMe). On the corresponding BaseMetricValue "
          "instances, TimeStamp specifies the end of the time "
          "interval. If Duration is 0, this indicates that the "
          "startup time of the measured resource is unknown. Else, "
          "Duration specifies the duration between startup of the "
          "resource and TimeStamp." ), 
       ValueMap { "0", "2", "3", "4", "5..32767", "32768..65535" }, 
       Values { "Unknown", "Point", "Interval", "StartupInterval", 
          "DMTF Reserved", "Vendor Reserved" }, 
       ModelCorrespondence { "CIM_BaseMetricValue.TimeStamp", 
          "CIM_BaseMetricValue.Duration" }]
   uint16 TimeScope;

      [Description ( 
          "GatheringType indicates how the metric values are "
          "gathered by the underlying instrumentation. This allows "
          "the client application to choose the right metric for "
          "the purpose. \n"
          "0=\"Unknown\": Indicates that the GatheringType is not "
          "known. \n"
          "2=\"OnChange\": Indicates that the CIM metric values get "
          "updated immediately when the values inside of the "
          "measured resource change. The values of OnChange metrics "
          "truly reflect the current situation within the resource "
          "at any time. An example is the number of logged on users "
          "that gets updated immediately as users log on and off. \n"
          "3=\"Periodic\": Indicates that the CIM metric values get "
          "updated periodically. For instance, to a client "
          "application, a metric value applying to the current time "
          "will appear constant during each gathering interval, and "
          "then jumps to the new value at the end of each gathering "
          "interval. \n"
          "4=\"OnRequest\": Indicates that the CIM metric value is "
          "determined each time a client application reads it. The "
          "values of OnRequest metrics truly return the current "
          "situation within the resource if somebody asks for it. "
          "However, they do not change \"unobserved\", and "
          "therefore subscribing for value changes of OnRequest "
          "metrics is NOT RECOMMENDED." ), 
       ValueMap { "0", "2", "3", "4", "5..32767", "32768..65535" }, 
       Values { "Unknown", "OnChange", "Periodic", "OnRequest", 
          "DMTF Reserved", "Vendor Reserved" }]
   uint16 GatheringType;

      [Description ( 
          "Identifies the specific units of a value. The value of "
          "this property shall be a legal value of the Programmatic "
          "Units qualifier as defined in Appendix C.1 of DSP0004 "
          "V2.4 or later." )]
   string ProgrammaticUnits;


};
