// ===================================================================
// Title:       Software Resources
// $State: Exp $
// $Date: 2004/08/15 05:55:36 $
// $Source: /cvsroot/wbemservices/open/mof/dmtf/2.9/Application_SWResources.mof,v $
// $Revision: 1.1 $
// ===================================================================
//#pragma inLine ("Includes/copyright.inc")
// Copyright 1998-2004 Distributed Management Task Force, Inc. (DMTF).
// All rights reserved.
// DMTF is a not-for-profit association of industry members dedicated
// to promoting enterprise and systems management and interoperability.
// DMTF specifications and documents may be reproduced for uses
// consistent with this purpose by members and non-members,
// provided that correct attribution is given.
// As DMTF specifications may be revised from time to time,
// the particular version and release date should always be noted.
// 
// Implementation of certain elements of this standard or proposed
// standard may be subject to third party patent rights, including
// provisional patent rights (herein "patent rights"). DMTF makes
// no representations to users of the standard as to the existence
// of such rights, and is not responsible to recognize, disclose, or
// identify any or all such third party patent right, owners or
// claimants, nor for any incomplete or inaccurate identification or
// disclosure of such rights, owners or claimants. DMTF shall have no
// liability to any party, in any manner or circumstance, under any
// legal theory whatsoever, for failure to recognize, disclose, or
// identify any such third party patent rights, or for such party's
// reliance on the standard or incorporation thereof in its product,
// protocols or testing procedures. DMTF shall have no liability to
// any party implementing such standard, whether such implementation
// is foreseeable or not, nor to any patent owner or claimant, and shall
// have no liability or responsibility for costs or losses incurred if
// a standard is withdrawn or modified after publication, and shall be
// indemnified and held harmless by any party implementing the
// standard from any and all claims of infringement by a patent owner
// for such implementations.
// 
// For information about patents held by third-parties which have
// notified the DMTF that, in their opinion, such patent may relate to
// or impact implementations of DMTF standards, visit
// http://www.dmtf.org/about/policies/disclosures.php.
//#pragma inLine
// ===================================================================
// Description: The classes represent the characterization of
//      software resources (SW resource). A SW resource is an
//      abstraction of the utilization of other entities in the
//      environment (communications, memory, files, etc.) within
//      the context of the software entity being managed. This version
//      version of software resources concentrates on
//      entities to transfer data over space and time from the
//      internal view of running software. Processor/CPU-like resources
//      are not considered for now.
//      Software for which resources exist can be vary from operating
//      system to application systems. An application system is
//      an entity that supports a particular business
//      function and that can be managed as an independent unit.
//      The behavior a software resource is that items bundled
//      in transfers are input to or output from the resource.
//      What happens to the items inside the resource depends on
//      type of resource (transferring data over time or space) and
//      the implementation.
//      The following types of software resources are considered:
//      Buffer, Queue, Protocol Endpoint, Remote Interface, Pool,
//      Cache, File and Database.
//      The software resources consist of statistics that
//      describe their input, output and allocation (size).
//      An associated settings class allows for setting
//      the limits (I/O, allocation) of the software
//      resource. The limits are designed as one of the levers
//      to manipulate and control the operation of the software
//      through managing software resources. The statistics
//      provide the operational parameters of the limits, performance
//      metrics and error information for performance and fault
//      management functions as well as management tasks like
//      monitoring, reporting or root cause analysis.
//      Some of the software resources (file, protocol endpoint
//      and database) are linked to existing classes since they
//      cannot share the same base class due to existing,
//      incompatible inheritance hierarchies and the fact that they
//      are concurrently viewed and controlled outside the software
//      by the OS. Thus, software resources are aspects of these
//      existing objects.
// 
//      They are maintained as a separate MOF file in the
//      Application Model.
// 
//      The object classes below are listed in an order that
//      avoids forward references. Required objects, defined
//      by other working groups, are omitted.
// ==================================================================
// Change Log for v2.9 Preliminary
//      14 May 2004
//         - CR 1312 - Original Software Resource Model
// ===================================================================

#pragma locale ("en_US")

// ==================================================================
// SoftwareResource
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "A Software Resource (SWR) is an abstraction of the utilization "
       "of other entities in the environment (communications, memory, "
       "files, etc.) within the context of the software entity being "
       "managed. SWR have a component-like implementation that is "
       "independently manageable from the real entity outside the "
       "software. These implementations are often used for storage and "
       "transmission. Thus, a Software Resource (SWR) is: \n"
       "a) any entity that is used by a system (e.g. an application "
       "system) to transfer data over space and time (i.e., no data "
       "processing in terms of creation/deletion or modification of "
       "data). In contrast to normal (application) services (i.e., the "
       "abstraction of data processing in terms of its "
       "creation/deletion etc.), the SWR has limits (bounds) that are "
       "not to be exceeded. This version does not consider resources "
       "like CPU. \n"
       "b) the system's view of such a transfer entity. Note that the "
       "software resource is ultimately contained by or related to a "
       "limited (physical or logical) resource of the encompassing "
       "(operating) system such as memory, storage or a communication "
       "links. \n"
       "Anything transferred by an SWR is called an 'item'. Items may "
       "be data, code, connections, packets, etc.. Items are atomic in "
       "the model, thus there is no partial items. \n"
       "An instance only exists if a running system exists since it is "
       "an internal component of the system implemented by its "
       "software. Software resources are potentially external entities "
       "like files viewed internally and (at least partially) "
       "controlled by the software of the system. \n"
       "SoftwareResource is contained by System via SystemComponent. "
       "At least one system (e.g., one application system or a system "
       "in general) contains 0 or more software resources. If more "
       "than one system claims to contain the software resource, it is "
       "a shared resource. \n"
       "SoftwareResource is associated to SWRLimitSetting via "
       "ElementSettingData. One software resource can have multiple "
       "limit settings. Only one of the settings is the default and "
       "one (potentially another one) is operational (current). "
       "Settings can be shared by software resources. \n"
       "SoftwareResource is associated to SWRStatistics via "
       "ElementStatisticalData. In general, one software resource is "
       "expected to have three statistics. The statistics type covers "
       "each behavior characteristics at most once. I.e., the software "
       "resource has at most one allocation statistcs, one input "
       "statistics and one output statistics. Nevertheless, the "
       "implementation of the software resource may exhibit more "
       "statistics SWRStatistics instances that cover more "
       "context-specific behavior characteristics.")]
class CIM_SoftwareResource : CIM_EnabledLogicalElement {

      [Key, Description (
          "Within the scope of the instantiating Namespace, InstanceID "
          "opaquely and uniquely identifies an instance of this class. "
          "In order to ensure uniqueness within the NameSpace, the "
          "value of InstanceID SHOULD be constructed using the "
          "following 'preferred' algorithm: \n"
          "<OrgID>:<LocalID> \n"
          "Where <OrgID> and <LocalID> are separated by a colon ':', "
          "and where <OrgID> MUST include a copyrighted, trademarked "
          "or otherwise unique name that is owned by the business "
          "entity creating/defining the InstanceID, or is a registered "
          "ID that is assigned to the business entity by a recognized "
          "global authority. (This is similar to the <Schema "
          "Name>_<Class Name> structure of Schema class names.) In "
          "addition, to ensure uniqueness <OrgID> MUST NOT contain a "
          "colon (':'). When using this algorithm, the first colon to "
          "appear in InstanceID MUST appear between <OrgID> and "
          "<LocalID>. \n"
          "<LocalID> is chosen by the business entity and SHOULD not "
          "be re-used to identify different underlying (real-world) "
          "elements. If the above 'preferred' algorithm is not used, "
          "the defining entity MUST assure that the resultant "
          "InstanceID is not re-used across any InstanceIDs produced "
          "by this or other providers for this instance's NameSpace. \n"
          "For DMTF defined instances, the 'preferred' algorithm MUST "
          "be used with the <OrgID> set to 'CIM'.")]
   string InstanceID;

      [Description (
          "IsAspect indicates whether the instance of this software "
          "resource refers to another entity residing outside the - "
          "software that implements the resource. This knowledge "
          "should kept into account in order to solve control "
          "conflicts. The property value is 'IsAspect' if the "
          "instrumentation knows that there is a corresponding outside "
          "managed entity, e.g., a file that corresponds to this "
          "software resource. Values: \n"
          "Is Aspect: The instance of the software resource is an "
          "aspect. The logically identical entity external to the "
          "software (e.g., a file) is known to exist. Is not Aspect: "
          "The instance of the software resource is not an aspect. No "
          "logically identical entity external to the software (e.g., "
          "likely in the case of a buffer) is known to exist."), 
       ValueMap { "0", "2" , "3", "4..32767", "32768..65535" }, 
       Values { "Unknown", "Is Aspect", "Is not Aspect",
          "DMTF Reserved","Vendor Reserved" }]
   uint16 IsAspect;


      [Description (
          "The property value is 'Aspect Is in Use' if the software "
          "resource is currently control of the software. E.g., it "
          "still has a file handle of file. Any operations on the "
          "corresponding outside entity (e.g., the file) can now "
          "result in errors. E.g., the deletion of file from the "
          "outside could be refused since it still opened by the "
          "software. Note that currently no conflict resolution is "
          "designed into software resource classes. \n"
          "Values: \n"
          "Aspect Is in Use: The software resource is in use by the "
          "software (i.e., at least a reference to the resource is "
          "held by the software). Access to the resource may result in "
          "conflicting usage of any logically identical entity "
          "external to this software. \n"
          "Aspect Is not in Use: In special cases it may be the case "
          "that the software resource is currently not controlled by "
          "the software (i.e., a file is currently not accessed by the "
          "software and the file handle is returned. The software "
          "resource object exists without having the file in use."), 
       ValueMap { "0", "2", "3", "4..32767", "32768..65535" }, 
       Values { "Unknown", "Aspect Is in Use", "Aspect Is not in Use",
          "DMTF Reserved","Vendor Reserved" }]
   uint16 AspectInUse = 2;

      [Description (
          "ByReference indicates whether the software resource handles "
          "only references to items, but not the items itself. This "
          "can be the case for buffers or pools, where the items "
          "reside in the memory that was originally allocated for them "
          "and only the reference is kept in the buffer. Other "
          "implementations or software resource types, especially "
          "distributed resources that require data transfer over space "
          "(i.e., communication) may deal with the entire item. \n"
          "Values: \n"
          "Items Are References: The software resource holds only "
          "pointers to the items (e.g., connections in a connection "
          "pool. \n"
          "Items Are Copies: The software resources transfers entire "
          "items, i.e., the items are copied from one place to another "
          "(e.g., packets in a communication)."), 
       ValueMap { "0", "2", "3", "4..32767", "32768..65535" }, 
       Values { "Unknown", "Items Are References", "Items Are Copies",
          "DMTF Reserved","Vendor Reserved" }]
   uint16 ByReference;

      [Description (
          "The type of the software resource. Although the behavior of "
          "the different software resource types is modeled similarly, "
          "different names for resources transferring data over time "
          "or/and space have been established. SoftwareResourceType "
          "conveys their original, most common name. \n"
          "Values: \n"
          "Buffer: volatile storage (transfer over time). \n"
          "Queue: transfer over time (the internal FIFO) and often "
          "over space (as entry point to a communication link. Both, "
          "volatile and persistent versions exit. \n"
          "Protocol Endpoint: transfer over space, entry point to a "
          "communication link \n"
          "Remote Interface: A generalized protocol endpoint without a "
          "specific protocol. Is a proxy. \n"
          "Pool: A special buffer. Clearly the lower allocation limit "
          "is the important limit, i.e., depletion of the pool is a "
          "problem. \n"
          "Cache: Another special buffer with an aging algorithm for "
          "dropping items held in the cache. \n"
          "File: the simplest form of persistent storage. \n"
          "Database: a more sophisticated form of persistent storage "
          "that may consist of several files."), 
       ValueMap { "0", "2", "3", "4", "5", "6", "7", "8", "9",
          "10..32767", "32768..65535" }, 
       Values { "Unknown", "Buffer", "Queue", "Protocol Endpoint",
          "Remote Interface", "Pool", "Cache", "File", "Database",
          "DMTF Reserved","Vendor Reserved" }]
   uint16 SoftwareResourceType;

      [Description (
          "Error situations may sometimes require drastic measures. "
          "One of them being the complete re-initialization of an "
          "software resource. Re-initialization includes that the "
          "resource is emptied entirely and the limit settings are "
          "newly applied. \n"
          "Reintialize Already in Progress: software resource still "
          "being reinitialized."), 
       ValueMap { "0", "1", "2", "3", "4", "6", "7", "8", "9..32767",
          "32768..65535" }, 
       Values { "Success", "Not Supported", "Unknown", "Timeout",
          "Failed", "Access Denied", "Not Found",
          "Reinitialize already in Progress", "DMTF Reserved",
          "Vendor Specific" }]
   uint32 Reinitialize(); 
};


// ==================================================================
// SWRLimitSetting
// ==================================================================

   [Experimental, Version ( "2.8.1000" ), Description (
       "SWRLimitSetting describes the limits of the software resource. "
       "In essence it is possible to define 6 different types of "
       "limits in groups of three. Each group consists of allocation, "
       "input and output limits. One group is always expressed by "
       "technical units (the default) and the other group in "
       "domain-specific units (e.g., items per second as the input "
       "limit). Thus, they are of different types. In order to avoid "
       "inconsistencies, only one group of settings is writable. The "
       "other one is derived from the writable limits. I.e., if "
       "technical limits are specifiable by the user (the type of the "
       "settings is technical) then the other set of limits (the "
       "non-writeable and derived settings) are domain-specific. \n"
       "SWRLimitSetting is associated to SoftwareResource via "
       "ElementSettingData. One software resource can have multiple "
       "limit settings. Only one of the settings is the default and "
       "one (potentially another one) is operational (current). "
       "Settings can be shared by software resources.")]
class CIM_SWRLimitSetting : CIM_SettingData {

      [Write, Description (
          "This is the lower limit of the input of the software "
          "resource. In general, the limit is a rate (i.e., items per "
          "second or Bytes per second). The corresponding unit is "
          "found at the property InputUnit. A null value indicates "
          "that no lower limit exists. The property value can be "
          "modified and is persisted on saving the modification."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.InputUnit" }]
   uint32 LowerInputLimit;

      [Write, Description (
          "This is the upper limit of the input of the software "
          "resource. In general, the limit is a rate (i.e., items per "
          "second or Bytes per second). The corresponding unit is "
          "found at the property InputUnit. A null value indicates "
          "that no upper limit exists. The property value can be "
          "modified and is persisted on saving the modification."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.InputUnit" }]
   uint32 UpperInputLimit;

      [Description (
          "This is the unit of the input limits of the software "
          "resource. In general, the unit describes a rate (i.e., "
          "items per second or Bytes per second). A null value is only "
          "allowed if neither upper nor lower limit exist. Otherwise, "
          "the property value is read-only and assumed to be "
          "correspond to the implementation of the software resource "
          "to which the settings have to apply."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.OtherInputUnit",
          "CIM_SWRLimitSetting.LimitSettingType" }]
   string InputUnit;

      [Write, Description (
          "This is the lower limit of the output of the software "
          "resource. In general, the limit is a rate (i.e., items per "
          "second or Bytes per second). The corresponding unit is "
          "found at the property OutputUnit. A null value indicates "
          "that no lower limit exists. The property value can be "
          "modified and is persisted on saving the modification."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.OutputUnit" }]
   uint32 LowerOutputLimit;

      [Write, Description (
          "This is the upper limit of the output of the software "
          "resource. In general, the limit is a rate (i.e., items per "
          "second or Bytes per second). The corresponding unit is "
          "found at the property OutputUnit. A null value indicates "
          "that no upper limit exists. The property value can be "
          "modified and is persisted on saving the modification."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.OutputUnit" }]
   uint32 UpperOutputLimit;

      [Description (
          "This is the unit of the output limits of the software "
          "resource. In general, the unit describes a rate (i.e., "
          "items per second or Bytes per second). A null value is only "
          "allowed if neither upper nor lower limit exist. Otherwise, "
          "the property value is read-only and assumed to be "
          "correspond to the implementation of the software resource "
          "to which the settings have to apply."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.OtherOutputUnit",
          "CIM_SWRLimitSetting.LimitSettingType" }]
   string OutputUnit;

      [Write, Description (
          "This is the lower limit of the allocation (i.e., size) of "
          "the software resource. In general, the limit is a quantity "
          "(i.e., items or Megabytes). The corresponding unit is found "
          "at the property AllocationUnit. A null value indicates that "
          "no allocation limit exists. The property value can be "
          "modified and is persisted on saving the modification."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.AllocationUnit" }]
   uint32 LowerAllocationLimit;

      [Write, Description (
          "This is the upper limit of the allocation (i.e., size) of "
          "the software resource. In general, the limit is a quantity "
          "(i.e., items or Megabytes). The corresponding unit is found "
          "at the property AllocationUnit. A null value indicates that "
          "no allocation limit exists. The property value can be "
          "modified and is persisted on saving the modification."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.AllocationUnit" }]
   uint32 UpperAllocationLimit;

      [Description (
          "This is the unit of the allocation limits of the software "
          "resource. In general, the unit describes a quantity (i.e., "
          "items MegyBytes). A null value is only allowed if neither "
          "upper nor lower limit exist. Otherwise, the property value "
          "is read-only and assumed to correspond to the "
          "implementation of the software resource to which the "
          "settings have to apply. The default value is of the "
          "technical domain (kB per second)."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.OtherAllocationUnit",
          "CIM_SWRLimitSetting.LimitSettingType" }]
   string AllocationUnit ="MB";

      [Description (
          "This property is not null, if the lower input limit of the "
          "software resource can be calculated from the property "
          "LowerInputLimit. If LowerInputLimit is described by "
          "technical units (i.e., InputUnit applies to the technical "
          "domain), OtherLowerInputLimit is described by "
          "domain-specific units."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.OtherInputUnit" }]
   uint32 OtherLowerInputLimit;

      [Description (
          "This property is not null, if the upper input limit of the "
          "software resource can be calculated from the property "
          "UpperInputLimit. If UpperInputLimit is described by "
          "technical units (i.e., InputUnit applies to the technical "
          "domain), OtherUpperInputLimit is described by "
          "domain-specific units."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.OtherInputUnit" }]
   uint32 OtherUpperInputLimit;

      [Description (
          "This is the complementary unit of the input limits. If "
          "InputUnit is a unit of the technical domain, OtherInputUnit "
          "is a domain-specific unit."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.InputUnit" }]
   string OtherInputUnit;

      [Description (
          "This property is not null, if the lower output limit of the "
          "software resource can be calculated from the property "
          "LowerOutputLimit. If LowerOutputLimit is described by "
          "technical units (i.e., OutputUnit applies to the technical "
          "domain), OtherLowerOutputLimit is described by "
          "domain-specific units."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.OtherOutputUnit" }]
   uint32 OtherLowerOutputLimit;

      [Description (
          "This property is not null, if the upper output limit of the "
          "software resource can be calculated from the property "
          "UpperOutputLimit. If UpperOutputLimit is described by "
          "technical units (i.e., OutputUnit applies to the technical "
          "domain), OtherUpperOutputLimit is described by "
          "domain-specific units."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.OtherOutputUnit" }]
   uint32 OtherUpperOutputLimit;

      [Description (
          "This is the complementary unit of the output limits. If "
          "OutputUnit is a unit of the technical domain, "
          "OtherOutputUnit is a domain-specific unit."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.OutputUnit" }]
   string OtherOutputUnit;

      [Description (
          "This property is not null, if the lower allocation limit of "
          "the software resource can be calculated from the property "
          "LowerAllocationLimit. If LowerAllocationLimit is described "
          "by technical units (i.e., AllocationUnit applies to the "
          "technical domain), OtherLowerAllocationLimit is described "
          "by domain-specific units."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.OtherAllocationUnit" 
          }]
   uint32 OtherLowerAllocationLimit;

      [Description (
          "This property is not null, if the upper allocation limit of "
          "the software resource can be calculated from the property "
          "UpperAllocationLimit. If UpperAllocationLimit is described "
          "by technical units (i.e., AllocationUnit applies to the "
          "technical domain), OtherUpperAllocationLimit is described "
          "by domain-specific units."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.OtherAllocationUnit" 
          }]
   uint32 OtherUpperAllocationLimit;

      [Description (
          "This is the complementary unit of the output limits. If "
          "OutputUnit is a unit of the technical domain, "
          "OtherOutputUnit is a domain-specific unit."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.AllocationUnit" }]
   string OtherAllocationUnit;

      [Description (
          "LimitSettingType describes whether the limits are specified "
          "in terms of technical units or domain-specific units. "
          "Domain-specific is meant to be the items unit or 'business' "
          "unit of the usage the software resource. It may range from "
          "objects or tables (in a buffer) to orders in a queue. It "
          "depends on the implementation and usage context of the "
          "software resource. The default is the technical domain. \n"
          "Values: \n"
          "Technical: The writable setting properties are assigned a "
          "technical unit e.g Kilobytes. \n"
          "Domain-Specific: The writable setting properties are "
          "assigned a business-like, item-oriented unit e.g messages, "
          "objects, orders, etc.."), 
       ValueMap { "0", "2", "3", "4..32767", "32768..65535" }, 
       Values { "Unknown", "Technical", "Domain-Specific",
          "DMTF Reserved","Vendor Reserved" }]
   uint16 LimitSettingType = 2;
};


// ==================================================================
// SWRStatistics
// ==================================================================

   [Experimental, Version ( "2.8.1000" ), Description (
       "This is base class for the software resource statistics. "
       "Depending on the implementation it can be of six types that "
       "identify the unit type (technical or domain-specific) and the "
       "behavioral characteristic of the software resource "
       "(allocation, input or output). The statistics is also the "
       "place at which the corresponding operational settings of the "
       "software resource appear. These parameters are changeable "
       "on-the-fly (i.e., they are writable). They bear the same "
       "constraints regarding their interdependencies between "
       "technical and domain-specific units as SWRLimitSettings. \n"
       "Point metrics apply to the point in time of end of the sample, "
       "interval metrics apply to the sample interval. It is up to the "
       "implementation of the statistcs whether the sample interval "
       "ends at the point in time of the request of the instance of "
       "this class (working with internal ring buffers) or whether the "
       "underlying instrumentation autonomously determines the "
       "beginning and the end of the sample interval. \n"
       "SWRStatistics is associated to SoftwareResource via "
       "ElementStatisticalData. In general, one software resource is "
       "expected to have three statistics. The statistics type covers "
       "each behavior characteristics at most once. I.e., the software "
       "resource has at most one allocation statistcs, one input "
       "statistics and one output statistics. Nevertheless, the "
       "implementation of the software resource may exhibit more "
       "statistics SWRStatistics instances that cover more "
       "context-specific behavior characteristics.")]
class CIM_SWRStatistics : CIM_StatisticalData {

      [Write, Description (
          "This is an operational lower limit parameter of the "
          "software resource. The limit applies to input, output or "
          "allocation according to the statistics type. The "
          "corresponding unit is found at the property Unit. A null "
          "value indicates that no lower limit exists. The property "
          "value can be modified. Whether changes are persisted on "
          "saving the modification depends on the implementation of "
          "the software resource. The default behavior is no "
          "persistence."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.LowerInputLimit",
          "CIM_SWRLimitSetting.LowerOutputLimit",
          "CIM_SWRLimitSetting.LowerAllocationLimit" }]
   uint32 LowerLimit;

      [Write, Description (
          "This is an operational upper limit parameter of the "
          "software resource. The limit applies to input, output or "
          "allocation according to the statistics type. The "
          "corresponding unit is found at the property Unit. A null "
          "value indicates that no upper limit exists. The property "
          "value can be modified. Whether changes are persisted on "
          "saving the modification depends on the implementation of "
          "the software resource. The default behavior is no "
          "persistence."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.UpperInputLimit",
          "CIM_SWRLimitSetting.UpperOutputLimit",
          "CIM_SWRLimitSetting.UpperAllocationLimit" }]
   uint32 UpperLimit;

      [Description (
          "This is the unit of the numeric metrics and the set of "
          "upper and lower limits of the software resource. The "
          "property should always have a value, null should not "
          "appear.The property value is read-only and assumed to "
          "correspond to the implementation of the software resource "
          "to which the operational parameters and metrics apply. The "
          "default value is of the technical domain (Kilobytes)."), 
       ModelCorrespondence { "CIM_SWRLimitSetting.InputUnit",
          "CIM_SWRLimitSetting.OutputUnit",
          "CIM_SWRLimitSetting.AllocationUnit" }]
   string Unit = "kB";

      [Description (
          "This property is not null, if the operational lower limit "
          "parameter of the software resource can be calculated from "
          "the property LowerLimit. If LowerLimit is described by "
          "technical units (i.e., InputUnit applies to the technical "
          "domain), OtherLowerLimit is described by domain-specific "
          "units.")]
   uint32 OtherLowerLimit;

      [Description (
          "This property is not null, if the operational upper limit "
          "parameter of the software resource can be calculated from "
          "the property UpperLimit. If UpperLimit is described by "
          "technical units (i.e., InputUnit applies to the technical "
          "domain), OtherUpperLimit is described by domain-specific "
          "units.")]
   uint32 OtherUpperLimit;

      [Description (
          "This is the complementary unit of the operational limit "
          "parameters. If Unit is a unit of the technical domain, "
          "OtherUnit is a domain-specific unit.")]
   string OtherUnit;

      [Description (
          "Characteristic allows for the distinction of the software "
          "resource behavior characteristics. This is either the "
          "allocation, input and output. \n"
          "Values: \n"
          "Allocation: Statistics about the size of the software "
          "resource. \n"
          "Input: Statistics about the data transfer into the software "
          "resource. \n"
          "Output: Statistics about the data transfer from the "
          "software resource."), 
       ValueMap { "0", "2", "3", "4", "5..32767", "32768..65535" }, 
       Values { "Unknown", "Allocation", "Input", "Output",
          "DMTF Reserved","Vendor Reserved" }]
   uint16 Characteristic;

      [Description (
          "StatisticsType describes whether the statistics is "
          "specified in terms of technical units or domain-specific "
          "units. Domain-specific is meant to be the items unit or "
          "'business' unit of the usage the software resource. It may "
          "range from objects or tables (in a buffer) to orders in a "
          "queue. It depends on the implementation and usage context "
          "of the software resource. The default is the technical "
          "domain. \n"
          "Values: \n"
          "Technical: The writable operational parameters and the "
          "affected metrics are assigned a technical unit e.g "
          "Kilobytes. \n"
          "Domain-Specific: The writable operational parameters and "
          "the affected metrics are assigned a business-like, "
          "item-oriented unit e.g messages, objects, orders, etc.."), 
       ValueMap { "0", "2", "3", "4..32767", "32768..65535" }, 
       Values { "Unknown", "Technical", "Domain-Specific",
          "DMTF Reserved","Vendor Reserved" }]
   uint16 StatisticsType = 2;


      [Description (
          "This is the error code of the first error that occurs "
          "during the sample interval. It is assumed that the first "
          "error, detected throughout the sample interval, is the "
          "first symptom of the root cause and therefore closer than "
          "the last error. Unrelated, subsequent errors during the "
          "sample interval of the statistics do not show up. Such a "
          "behavior is tolerable compared to the relatively short "
          "length of the sample interval. \n"
          "Values: \n"
          "Unspecified Error: No error code can be determined. \n"
          "Violate Upper Limit: The upper limit of the behavior "
          "characteristic (allocation, input, output) was exceeded. \n"
          "Violate Lower Limit: The lower limit was underrun. \n"
          "Erroneous Transfer: The transfer had to be aborted. This "
          "message does not overlap with 'Erroneous Item'. \n"
          "Erroneous Item: The handling of at least one item was "
          "problematic and the item had to be dropped, suspended or "
          "rejected. \n"
          "Access to Software Resource Denied: The access control of "
          "software resource refused the use of the it."), 
       ValueMap { "0", "2", "3", "4", "5", "6", "7..32767",
          "32768..65535" }, 
       Values { "Unspecified Error", "Violate Upper Limit",
          "Violate Lower Limit",
          "Erroneous Transfer" , "Erroneous Item",
          "Access to Software Resource Denied", "DMTF Reserved",
          "Vendor Reserved" }]
   uint16 FirstError;

      [Description (
          "FirstErrorTimeStamp is the point in time at which "
          "FirstError was detected.")]
   datetime FirstErrorTimeStamp;

      [Description (
          "This is the error code of the last error that occured. The "
          "value of LastError remains from one sample interval to the "
          "next even if a sample interval is error-free. \n"
          "Values: \n"
          "Unspecified Error: No error code can be determined. \n"
          "Violate Upper Limit: The upper limit of the behavior "
          "characteristic (allocation, input, output) was exceeded. \n"
          "Violate Lower Limit: The lower limit was underrun. \n"
          "Erroneous Transfer: The transfer had to be aborted. This "
          "message does not overlap with 'Erroneous Item'. \n"
          "Erroneous Item: The handling of at least one item was "
          "problematic and the item had to be dropped, suspended or "
          "rejected. \n"
          "Access to Software Resource Denied: The access control of "
          "software resource refused the use of the it."), 
       ValueMap { "0", "2", "3", "4", "5", "6", "7..32767",
          "32768..65535" }, 
       Values { "Unspecified Error", "Violate Upper Limit",
          "Violate Lower Limit",
          "Erroneous Transfer" , "Erroneous Item",
          "Access to Software Resource Denied", "DMTF Reserved",
          "Vendor Reserved" }]
   uint16 LastError;

      [Description (
          "LastErrorTimeStamp is the point in time at which FirstError "
          "was detected.")]
   datetime LastErrorTimeStamp;

      [Description (
          "ErrorCount is the count of errors that have been detected "
          "throughout the sample interval.")]
   uint32 ErrorCount;
};


// ==================================================================
// SWRAllocationStatistics
// ==================================================================

   [Experimental, Version ( "2.8.1000" ), Description (
       "The metrics of SWRAllocationStatistics describe the allocation "
       "of the software resource. The allocation is basically the size "
       "of the software resource in terms of technical units (e.g., "
       "kB) or domain-specific units (e.g., the number of items (e.g., "
       "the number of messages if the software resource is of the type "
       "'queue'). \n"
       "The operational parameters regarding the allocation limits are "
       "surfaced also. Further details can be found in the description "
       "of the base class SWRStatistics. \n"
       "The metrics found in this statistics are raw values that "
       "describe the allocation behavior of the software resource as "
       "simple as possible. Thus, the metric values can be used most "
       "flexibly (e.g., cumulative, averaged, etc.). The drawback of "
       "the flexibility is that the likelyhood of required "
       "calculations - subsequent to retrieval of the values - "
       "increases in order to result in rates or statistical data "
       "needed for monitoring and reporting.")]
class CIM_SWRAllocationStatistics : CIM_SWRStatistics {

      [Description (
          "AllocationLevel describes the current size of the software "
          "resource in units corresponding to the type of the "
          "statistics (e.g., technical based on Kilobytes). The unit "
          "can be found at the CIM_SWRStatistics.Unit. \n"
          "The metric is a point metric and applies to the point in "
          "time of the end of the sample interval. \n"
          "A value of null indicates that no allocation level is "
          "available. \n"
          "The initial value is 0."), 
       ModelCorrespondence { "CIM_SWRStatistics.Unit" }]
   uint32 AllocationLevel;

      [Description (
          "OtherAllocationLevel describes the current size of the "
          "software resource in complementary units compared to "
          "AllocationLevel (e.g., domain-specific units like the "
          "number of items: buffered objects or pooled connections). "
          "The unit can be found at CIM_SWRStatistics.OtherUnit. \n"
          "The metric is a point metric and applies to the point in "
          "time of the end of the sample interval. A value of null "
          "indicates that no allocation level is available. \n"
          "The initial value is 0."), 
       ModelCorrespondence { "CIM_SWRStatistics.OtherUnit",
          "CIM_SWRAllocationStatistics.AllocationLevel" }]
   uint32 OtherAllocationLevel;

      [Description (
          "AverageItemResidenceTime describes the average period of "
          "time that items reside in the software resource. This is "
          "particular interesting for blocked or (volatile) storage "
          "software resources. The average takes all items into "
          "account that are output from the software resource (i.e., "
          "the items' residence time ends). \n"
          "A value of null indicates that no average is available. \n"
          "The initial value is 0.")]
   datetime AverageItemResidenceTime;

      [Description (
          "AllocationHighWaterMark describes allocation peak (highest "
          "allocation level) reached throughout the sample interval. "
          "The unit depends on the type of the statistics. The "
          "timestamp that corresponds to the high water mark is not "
          "presented since the sample interval is small enough that "
          "the exact point in time is not significant. The metric is "
          "targeted to quantify errors like the violation of the upper "
          "limit or any capacity problems. A value of null indicates "
          "that no allocation level is available. \n"
          "The initial value is 0."), 
       ModelCorrespondence { "CIM_SWRStatistics.Unit",
          "CIM_SWRAllocationStatistics.AllocationHighWaterMark" }]
   uint32 AllocationHighWaterMark;

      [Description (
          "HighWaterMarkTimeStamp is the point in time at which the "
          "high water mark was detected. \n"
          "The initial value is 0."), 
       ModelCorrespondence { 
          "CIM_SWRAllocationStatistics.AllocationHighWaterMark" }]
   datetime HighWaterMarkTimeStamp;

      [Description (
          "DroppedAllocationQuantity allows to further quantify the "
          "error of the software resource is over-used and upper "
          "limits are reached. In such a case, aging algorithms or "
          "other priorization algorithms implemented by the software "
          "resource may enforce the deletion of items. "
          "DroppedAllocationQuantity counts the items dropped due the "
          "resolution of such an overload. The metric's unit depends "
          "on the type of the statistics. If no items have been "
          "dropped, the value is 0. The property value is null if no "
          "numeric value can be provided. \n"
          "The initial value is 0.")]
   uint32 DroppedAllocationQuantity;
};


// ==================================================================
// SWRIOStatistics
// ==================================================================

   [Experimental, Version ( "2.8.1000" ), Description (
       "The metrics of SWRIOStatistics describe the transfer behavior "
       "of the software resource in one particular direction (input or "
       "the output). The transfer is basically the amount of data "
       "input to or output from the software resource during a sample "
       "interval in terms of technical units (e.g., kB) or "
       "domain-specific units (e.g., the number of items (e.g., the "
       "number of messages if the software resource is of the type "
       "'queue'). \n"
       "The operational parameters regarding the allocation limits are "
       "surfaced also. Further details can be found in the description "
       "of the base class SWRStatistics. \n"
       "The metrics found in this statistics are raw values that "
       "describe the allocation behavior of the software resource as "
       "simple as possible. Thus, the metric values can be used most "
       "flexibly (e.g., cumulative, averaged, etc.). The drawback of "
       "the flexibility is that the likelyhood of required "
       "calculations - subsequent to retrieval of the values - "
       "increases in order to result in rates or statistical data "
       "needed for monitoring and reporting.")]
class CIM_SWRIOStatistics : CIM_SWRStatistics {

      [Description (
          "TransferredQuantity describes the quantity transferred "
          "to/from the software resource in units corresponding to the "
          "type of the statistics (e.g., technical based on "
          "Kilobytes). The unit can be found at the "
          "CIM_SWRStatistics.Unit. The direction of the transfer can "
          "be found at the type of the statistics. \n"
          "The metric accumulates the transfer quantity over the "
          "sample interval and is the gross amount of data transferred "
          "to/from the software resource. \n"
          "A value of null indicates that no quantity is available. "
          "The value is 0 if no transfer happened or all transfers "
          "where empty. (Note that this must be true for both the "
          "request and the response). \n"
          "The corresponding limits are expected to be a rate. One "
          "method to detect limit violations require the division of "
          "TransferredQuantity by the sample interval in order to "
          "result in rate that then can be compared to the "
          "corresponding limit. \n"
          "The initial value is 0."), 
       ModelCorrespondence { "CIM_SWRStatistics.Unit",
          "CIM_SWRStatistics.StatisticsType" }]
   uint32 TransferredQuantity;

      [Description (
          "OtherTransferredQuantity describes the transfer size of the "
          "software resource in complementary units compared to "
          "AllocationLevel (e.g., domain-specific units like the "
          "number of items: buffered objects or pooled connections). "
          "The unit can be found at CIM_SWRStatistics.OtherUnit. \n"
          "The metric accumulates the transfer quantity over the "
          "sample interval. \n"
          "A value of null indicates that no quantity is available. \n"
          "The initial value is 0."), 
       ModelCorrespondence { "CIM_SWRStatistics.OtherUnit",
          "CIM_SWRIOStatistics.TransferredQuantity" }]
   uint32 OtherTransferredQuantity;

      [Description (
          "Transfers is the count of all transfers (sucessful or not) "
          "that happened during the sample interval. If the value is "
          "null no number can be provided. \n"
          "The initial value is 0.")]
   uint32 Transfers;

      [Description (
          "AverageTransferTime is the average time all counted "
          "transfers took during the sample interval. If the value is "
          "null no average can be provided. \n"
          "The initial value is 0.")]
   datetime AverageTransferTime;

      [Description (
          "SuccessfulTransfers is the count of all transfers that "
          "could be executing fully (i.e., transfer all items "
          "requested) during the sample interval. If the value is null "
          "no number can be provided. In case of errors, the property "
          "can be used to quantify the quality with which the software "
          "resource works. \n"
          "The initial value is 0.")]
   uint32 SuccessfulTransfers;

      [Description (
          "SuccessfulQuantity specifies the successfully transferred "
          "amount of data to/from the software resource. It is the net "
          "amount in contrast to TransferredQuantity. \n"
          "The unit can be found at the CIM_SWRStatistics.Unit. The "
          "direction of the transfer can be found at the type of the "
          "statistics. \n"
          "If the value is null no number can be provided. \n"
          "The initial value is 0."), 
       ModelCorrespondence { "CIM_SWRStatistics.Unit" }]
   uint32 SuccessfulQuantity;

      [Description (
          "CountOfActiveTransfers is a point metric and applies to the "
          "point in time of the end of the sample interval. It "
          "describes the number of in-progress transfers. This also "
          "includes pending, suspended, open and asynchronous requests "
          "that obviously have not been acknowledged to the requestor "
          "of the transfer. If the implementation of the resource is "
          "single process, single thread and synchronous (i.e., no "
          "internal queue), the number cannot be greater than 1 since "
          "no parallel requests can occur. \n"
          "A value of null indicates that no count is available. A "
          "value of 0 indicates no active requests. An increasing "
          "number indicates that the software resource hangs and a "
          "reinitialize() can solve the problem. \n"
          "The initial value is 0.")]
   uint32 CountOfActiveTransfers;

      [Description (
          "LastActivity is the point in time at which the last "
          "transfer ended. The timestamp is 0 if "
          "CountOfActiveTransfers is greater than 0, i.e., at least "
          "one transfer is still in progress and, thus, the software "
          "resource is still active. Even if a transfer is still in "
          "progress, LastActivity can be a valid point in time, if the "
          "software resource is currently idle due to internal wait "
          "states or deadlocks. Thus, activity is defined as the "
          "software resource is actively carrying out inputs and "
          "outputs. LastActivity may refer to a point in time that is "
          "outside the sample interval. This is, the instrumentation "
          "internally keeps the timestamp during the lifetime of the "
          "software resource. The metric can be used to better "
          "quantify what happens at the interfaces of the software "
          "resource. \n"
          "The initial value is 0.")]
   datetime LastActivity;
};


// ==================================================================
// SWRPEP
// ==================================================================

   [Experimental, Version ( "2.8.1000" ), Description (
       "This protocol endpoint is an software resource of software "
       "(e.g., an application system). It may be the internal view of "
       "an external ProtocolEndpoint which is controlled entirely or "
       "partially by the software.")]
class CIM_SWRPEP : CIM_SoftwareResource {

      [Override ( "IsAspect" ), Description (
          "The default is that it is an aspect (value 2).")]
   uint16 IsAspect = 2;

      [Override ( "ByReference" ), Description (
          "The default is that item references are in the PEP (value "
          "2).")]
   uint16 ByReference = 2;

      [Override ( "SoftwareResourceType" ), Description (
          "The default is of course 'Protocol Endpoint' (value 3).")]
   uint16 SoftwareResourceType = 3;
};


// ==================================================================
// SWRFile
// ==================================================================

   [Experimental, Version ( "2.8.1000" ), Description (
       "This file is an software resource of software. It may be the "
       "internal view of an external LogicalFile which is controlled "
       "entirely or partially by the software.")]
class CIM_SWRFile : CIM_SoftwareResource {

      [Override ( "IsAspect" ), Description (
          "The default is that it is an aspect (value 2).")]
   uint16 IsAspect = 2;

      [Override ( "ByReference" ), Description (
          "The default is that item copies are in the file (value 2).")]
   uint16 ByReference = 2;

      [Override ( "SoftwareResourceType" ), Description (
          "The default is of course 'File' (value 7).")]
   uint16 SoftwareResourceType = 7;
};


// ==================================================================
// SWRDatabase
// ==================================================================

   [Experimental, Version ( "2.8.1000" ), Description (
       "This database is an software resource of software. It may be "
       "the internal view of an external CommonDatabase which is "
       "controlled entirely or partially by the software. \n"
       "SWRDatabase should not be confused with databases commonly "
       "provided by database systems and used by software (e.g., "
       "application systems). It describes databases that are "
       "implemented by the software.")]
class CIM_SWRDatabase : CIM_SoftwareResource {

      [Override ( "IsAspect" ), Description (
          "The default is that it is an aspect (value 2).")]
   uint16 IsAspect = 2;

      [Override ( "ByReference" ), Description (
          "The default is that item copies are in the database (value "
          "2).")]
   uint16 ByReference = 2;

      [Override ( "SoftwareResourceType" ), Description (
          "The default is of course 'Database' (value 8).")]
   uint16 SoftwareResourceType = 8;
};


// ==================================================================
// SWRManageableAspect
// ==================================================================

   [Association, Experimental, Version ( "2.8.1000" ), Description (
       "SWRManageableAspect is the association that allows to express "
       "the shared control between an software resource (as being the "
       "interval view of the software) and its corresponding external "
       "entity, e.g., a LogicalFile. It is possible to express that "
       "several systems (that run software) and one external, "
       "incompassing system (in general the OS) exercise control.")]
class CIM_SWRManageableAspect : CIM_LogicalIdentity {

      [Override ( "SameElement" ), Description (
          "This reference points to the software resource that is "
          "aspect in the relationship.")]
   CIM_SoftwareResource REF SameElement;

      [Override ( "SystemElement" ), Max ( 1 ), Description (
          "This reference points to the entity viewed and controlled "
          "by the external, encompassing system like the OS. It is not "
          "the aspect.")]
   CIM_ManagedElement REF SystemElement;
};


// ==================================================================
// SWRPEPAspect
// ==================================================================

   [Association, Experimental, Version ( "2.8.1000" ), Description (
       "SWRPEPAspect is the association between multiple communication "
       "endpoint software resources (i.e., the aspects) and the one "
       "endpoint controlled by the operating system or middleware "
       "outside the software.")]
class CIM_SWRPEPAspect : CIM_SWRManageableAspect {

      [Override ( "SystemElement" ), Description (
          "The protocol endpoint which is viewed as software resource.")]
   CIM_ProtocolEndpoint REF SystemElement;

      [Override ( "SameElement" ), Description (
          "SameElement is the aspect: the software resource 'Protocol "
          "Endpoint'.")]
   CIM_SWRPEP REF SameElement;
};


// ==================================================================
// SWRFileAspect
// ==================================================================

   [Association, Experimental, Version ( "2.8.1000" ), Description (
       "SWRFileAspect is the association between multiple file "
       "software resources (i.e., the aspects) and the one file "
       "controlled by the operating system.")]
class CIM_SWRFileAspect : CIM_SWRManageableAspect {

      [Override ( "SystemElement" ), Description (
          "The logical file which is viewed as software resource.")]
   CIM_LogicalFile REF SystemElement;

      [Override ( "SameElement" ), Description (
          "SameElement is the aspect: the software resource 'File'.")]
   CIM_SWRFile REF SameElement;
};


// ===================================================================
// end of file
// ===================================================================
