// Copyright (c) 2008 DMTF.  All rights reserved.
   [Version ( "2.22.0" ), 
    UMLPackagePath ( "CIM::System::Diagnostics" ), 
    Description ( 
       "Specific diagnostic test parameters and execution instructions "
       "are defined by this class. To provide more detailed Settings "
       "for a type of test (i.e., additional properties), subclassing "
       "is appropriate." )]
class CIM_DiagnosticSettingData : CIM_SettingData {

      [Description ( 
          "When this flag is true, the test will halt after finding "
          "the first error." )]
   boolean HaltOnError;

      [Description ( 
          "When this flag is true, the test software should attempt "
          "to run in an accelerated fashion either by reducing the "
          "coverage or number of tests performed." )]
   boolean QuickMode;

      [Description ( 
          "Requests the diagnostic software to reduce test coverage "
          "to the specified percentage. For example, a hard drive "
          "scan test could be asked to run at 50%. The most "
          "effective way to accomplish this is for the test "
          "software to scan every other track, as opposed to only "
          "scanning the first half of a drive. It is assumed that "
          "the effectiveness of the test is impacted proportional "
          "to the percentage of testing requested. Permissible "
          "values for this property range from 0 to 100." ), 
       Units ( "Percent" ), 
       MinValue ( 0 ), 
       MaxValue ( 100 ), 
       ModelCorrespondence { 
          "CIM_DiagnosticServiceCapabilities.SupportedServiceModes" }, 
       PUnit ( "percent" )]
   uint8 PercentOfTestCoverage;

      [Description ( 
          "Array entries contain parameters corresponding to "
          "entries in the LoopControl array, limiting the number of "
          "times a test should be repeated with a single invocation "
          "of a test method by a CIM client." ), 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { "CIM_DiagnosticSettingData.LoopControl" }]
   string LoopControlParameter[];

      [Description ( 
          "LoopControl, used in conjunction with "
          "LoopControlParameter, sets one or more loop control "
          "mechanisms that limits the number of times a test should "
          "be repeated with a single invocation of a test method by "
          "a CIM client. There is an array-positional "
          "correspondence between LoopControl entries & "
          "LoopControlParameter entries. The entries in these "
          "coupled arrays of loop controls can be used in a logical "
          "OR fashion to achieve the desired loop control. For "
          "example, if a client wants to loop a test 1000 times, "
          "but quit if a timer runs out, it could set both controls "
          "into the LoopControl array as two separate entries in "
          "each array. The looping test will terminate when the "
          "first of the two Ored conditions are met. \n"
          "The descriptions for each loop control are given below: \n"
          "Unknown (0) \n"
          "Other (1) : Additional detail may be found in "
          "OtherLoopControlDescriptions. \n"
          "Continuous (2) : The corresponding LoopControl Parameter "
          "is ignored and the test will execute continuously. Tests "
          "that use this control should also support "
          "DiscontinueTest. \n"
          "Count(3) : The corresponding LoopControlParameter is "
          "interpreted as a loop count (uint32), indicating the "
          "number of times the test should be repeated with a "
          "single invocation of a test method by a CIM client. \n"
          "Timer (= 4) : The corresponding LoopControlParameter is "
          "interpreted as an initial value (uint32) for a test loop "
          "timer, given in seconds. The looping is terminated when "
          "this timer has lapsed. \n"
          "ErrorCount (= 5) : The corresponding LoopControl "
          "Parameter is interpreted as an error count (uint32). The "
          "loop will continue until the number of errors that have "
          "occurred exceeds the ErrorCount. Note: the ErrorCount "
          "only refers to hard test errors; it does not include "
          "soft errors or warnings." ), 
       ValueMap { "0", "1", "2", "3", "4", "5" }, 
       Values { "Unknown", "Other", "Continuous", "Count", "Timer", 
          "ErrorCount" }, 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { 
          "CIM_DiagnosticSettingData.LoopControlParameter", 
          "CIM_DiagnosticSettingData.OtherLoopControlDescriptions", 
          "CIM_DiagnosticServiceCapabilities.SupportedLoopControl" }]
   uint16 LoopControl[];

      [Description ( 
          "This property provides additional information for "
          "LoopControl when the corresponding value is set to 1 "
          "(\'Other\')." ), 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { 
          "CIM_DiagnosticSettingData.LoopControlParameter", 
          "CIM_DiagnosticSettingData.LoopControl" }]
   string OtherLoopControlDescriptions[];

      [Description ( 
          "The ResultPersistence property is a directive from a "
          "diagnostic client to a diagnostic provider. It allows "
          "the client to specify to the diagnostic service provider "
          "how long to persist the messages that result from "
          "execution of a diagnostic service. This applies to "
          "instances of DiagnosticResult as well as the preferred "
          "use of DiagnosticServiceRecord. The timeout period "
          "starts upon completion of the diagnostic action "
          "described by the DiagnosticService. \n"
          "\n"
          "Here is a summary of the choices and behaviors for "
          "different ResultPersistence values: \n"
          "0 = \"No Persistence\": \n"
          "Setting the timer to zero tells the provider not to "
          "persist the diagnostic result. The diagnostic "
          "information is only available while the diagnostic is "
          "executing or at its conclusion. \n"
          "Value > 0 and < 0xFFFFFFFF = \"Persist With TimeOut\": \n"
          "Setting the ResultPersistenceOption to a integer will "
          "cause the DiagnosticResult to be persisted for that "
          "number of seconds. At the end of that time, the "
          "DiagnosticResult may be deleted by the diagnostic "
          "service provider. \n"
          "0xFFFFFFFF = \"Persist Forever\": \n"
          "By setting the timeout value to the very large value, "
          "0xFFFFFFFF, the provider shall persist results forever. "
          "In this case, the client MUST bear the responsibility "
          "for deleting them." ), 
       Units ( "Seconds" ), 
       PUnit ( "second" )]
   uint32 ResultPersistence;

      [Description ( 
          "The LogOptions property is used to specify the types of "
          "data that SHOULD be logged by the diagnostic service. "
          "Any number of values may be specified in the array. Note "
          "that the default behavior is for nothing to be logged. \n"
          "The AMOUNT of data to be logged can be controlled for "
          "each value selected by specifying a VerbosityLevel "
          "value. Verbosity may not apply to all LogOptions values, "
          "in which case the default VerbosityLevel of \"Standard\" "
          "SHOULD be used. \n"
          "The RecordForLog produced by running a service MUST be "
          "tagged with a RecordType that corresponds to one of "
          "these log option values. \n"
          "Following is a brief description of the available log "
          "options: \n"
          "* \"Other\" (value = 1): Details are given in the "
          "corresponding OtherLogOptionsDescriptions entry. \n"
          "* \"Results\" (value = 2): Log the results obtained by "
          "running the service. This is the most common value for "
          "reporting the service results. \n"
          "* \"Subtests\" (value= 3): Log a test summary report "
          "upon completion of each subtest and each loop iteration. "
          "The summary reports SHOULD state whether the individual "
          "subtest or iteration passed or failed and list relevant "
          "error codes and respective error counts. \n"
          "* \"Actions\" (value = 4): Log corrective action and "
          "instructional messages to guide service personnel; for "
          "example, a prioritized list of actions to perform in "
          "order to isolate a failure or correct a problem. When "
          "ordering steps or prioritizing actions, a number should "
          "proceed the text; for example, 1) Do this first, 2) Do "
          "this next, etc. \n"
          "* \"Warnings\" (value = 5): Log warning messages; for "
          "example, \'device will be taken off line\', \'test is "
          "long-running\' or \'available memory is low\'. The "
          "VerbosityLevel value specified for the Warnings option "
          "is related to the severity of the warnings logged; for "
          "instance, one would specify a high level of verbosity to "
          "get all warnings logged, regardless of severity, and a "
          "low level of verbosity to have only the most severe "
          "warnings logged. \n"
          "* \"Status\" (value = 6): Log status messages; for "
          "example, state information for the driver, device, or "
          "system. \n"
          "* \"Device Errors\" (value = 7): Log errors related to "
          "the managed element being serviced. \n"
          "* \"Service Errors\" (value = 8): Log errors related to "
          "the service itself rather than the element being "
          "serviced, such as \'Resource Allocaton Failure\'. \n"
          "* \"Setting Data\" (value=9): Log the property values of "
          "the DiagnosticSettingData object used to configure the "
          "service. \n"
          "*\"Statistics\" (value = 10): Log statistical messages; "
          "for example, packets sent per second. \n"
          "* \"Hardware Configuration\" (value = 11): Log messages "
          "that contain information about the hardware "
          "configuration as viewed by the service; for example, "
          "vendor, version, FRU identification, and location "
          "information. The format and contents of this property is "
          "element dependent. Examples are: SCSI ID, LPTx, PCI Slot "
          "Number, and Dimm#. \n"
          "* \"Software Configuration\" (value = 12): Log messages "
          "that contain information about the software environment "
          "as viewed by the service; for example, the name and "
          "version of all the critical software elements "
          "controlling the device under test. Each configuration "
          "message SHOULD have the following common format: Element "
          "name; element type; manufacturer name; version; for "
          "example, \'Miniport driver; SCSI; Intel; Version 1.2\'. \n"
          "* \"Reference\" (value = 13): Log the keys of an CIM "
          "object of of interest; for example, the element under "
          "test, or a data file. \n"
          "* \"Debug\" (value = 14): Log debug messages. These "
          "messages are vendor specific." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
          "10", "11", "12", "13", "14", "0x8000" }, 
       Values { "Unknown", "Other", "Results", "Subtests", 
          "Actions", "Warnings", "Status", "Device Errors", 
          "Service Errors", "Setting Data", "Statistics", 
          "Hardware Configuration", "Software Configuration", 
          "References", "Debug", "No Log Options" }, 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { 
          "CIM_DiagnosticSettingData.OtherLogOptionsDescriptions", 
          "CIM_DiagnosticServiceCapabilities.SupportedLogOptions", 
          "CIM_DiagnosticServiceRecord.RecordType", 
          "CIM_DiagnosticSettingData.VerbosityLevel" }]
   uint16 LogOptions[];

      [Description ( 
          "Provides additional information regarding the types of "
          "test messages that are logged when the property "
          "LogOptions includes the value 1 (Other)." ), 
       ModelCorrespondence { "CIM_DiagnosticSettingData.LogOptions" }]
   string OtherLogOptionsDescriptions[];

      [Description ( 
          "The LogStorage setting property indicates which types of "
          "supported storage should be used by the Diagnostic "
          "Service for logging of the data specified in LogOptions. \n"
          "The values are: \n"
          "\"DiagnosticLog\" (Value = 2): Use the DiagnosticLog and "
          "DiagnosticRecord classes. \n"
          "\"MessageLog\" (Value = 3): Use the MessageLog class and "
          "its methods. \n"
          "\"File\" (Value = 4): Write data to a file." ), 
       ValueMap { "0", "1", "2", "3", "4" }, 
       Values { "Unknown", "Other", "DiagnosticLog", "MessageLog", 
          "File" }, 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { 
          "CIM_DiagnosticSettingData.OtherLogStorageDescriptions", 
          "CIM_DiagnosticServiceCapabilities.SupportedLogStorage" }]
   uint16 LogStorage[];

      [Description ( 
          "This property provides additional information for "
          "LogStorage when the corresponding value is set to 1 "
          "(\"Other\")." ), 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { "CIM_DiagnosticSettingData.LogStorage" }]
   string OtherLogStorageDescriptions[];

      [Description ( 
          "A client may want to specify the desired volume or "
          "detail logged by a diagnostic service. This property is "
          "applied to a corresponding logging option, acting as a "
          "qualifier on its description. Three levels of verbosity "
          "are defined as follows: \n"
          "* \"Minimum\" (value=2): Specified if the least amount "
          "of information is desired; for example, Pass or Fail. \n"
          "* \"Standard\" (value=3): This is the standard level of "
          "messaging provided by the service. It is the form most "
          "likely to be used if no verbosity value is specified "
          "(default). \n"
          "* \"Full\" (value=4): Specified when all information, "
          "regardless of size, is desired. \n"
          "Note that VerbosityLevel is a subjective property and "
          "relates to the degree of detail, not an absolute metric. "
          "A client simply specifies its desired level of detail "
          "and the provider publishes its data in accordance with "
          "this desired level of detail. \n"
          "Verbosity may not apply to all LogOptions values, in "
          "which case the default VerbosityLevel of \"Standard\" "
          "SHOULD be used." ), 
       ValueMap { "2", "3", "4" }, 
       Values { "Minimum", "Standard", "Full" }, 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { "CIM_DiagnosticSettingData.LogOptions" }]
   uint16 VerbosityLevel[];

      [Description ( 
          "The time the Job should wait for a query response. "
          "before using a default response and continuing "
          "execution. A default response could result in a "
          "cancellation of the Job. The timeout value starts at the "
          "time the Job goes into the QueryPending state. \n"
          "0 = \"Do not query\": \n"
          "Setting the timer to zero tells the provider not to "
          "query but use the default response. \n"
          "Value > 0 and < 0xFFFFFFFF = \"Query With TimeOut\": \n"
          "Setting the QueryTimeout to a integer will cause the Job "
          "to wait for that number of seconds. At the end of that "
          "time, the Job will use the default response and continue "
          "execution. \n"
          "0xFFFFFFFF = \"Wait Forever\": \n"
          "By setting the timeout value to the very large value, "
          "0xFFFFFFFF, the job shall wait forever for a response. "
          "In this case, the client MUST bear the responsibility "
          "for responding to the query." ), 
       Units ( "Seconds" ), 
       PUnit ( "second" )]
   uint32 QueryTimeout = 0;

      [Description ( 
          "The test should only run non-destructive tests." )]
   boolean NonDestructive = false;


};
