// Copyright (c) 2008 DMTF.  All rights reserved.
   [Abstract, Version ( "2.22.0" ), 
    UMLPackagePath ( "CIM::System::Diagnostics" ), 
    Description ( 
       "The CIM_DiagnosticService class provides the ability to start "
       "a service that functions to participate in a problem "
       "determination process. Specific diagnostic services SHOULD be "
       "defined by subclassing this class. Examples of a diagnostic "
       "service are tests, information retrievers, exercisers, and "
       "ports to external executives." )]
class CIM_DiagnosticService : CIM_Service {


      [Description ( 
          "The RunDiagnostic method executes this test for the "
          "specified ManagedSystemElement (defined using the "
          "SystemElement input parameter). The capabilities for the "
          "diagnostic service indicate where the results from the "
          "test job are stored. How the test should execute, i.e. "
          "its settings, is defined in a DiagnosticSetting object "
          "(or by a subclass of DiagnosticSetting). A reference to "
          "a Setting object is specified using the Setting input "
          "parameter. If a reference is not passed into the method, "
          "then a default DiagnosticSetting SHALL be used. \n"
          "When RunDiagnostic starts execution, the settings, which "
          "are time sensitive, SHOULD be evaluated and captured. "
          "This is suggested since the DiagnosticSetting object MAY "
          "be modified at any time, and therefore the current test "
          "settings could be lost. \n"
          "If 0 is returned, the function completed successfully "
          "and no ConcreteJob instance is created. If 0x1000 a "
          "ConcreteJob will be started." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "..", "0x1000", 
          "..", "0x8000.." }, 
       Values { "Job completed with no error", "Not Supported", 
          "Unknown", "Timeout", "Failed", "Invalid Parameter", 
          "DMTF Reserved", 
          "Method parameters checked - job started", 
          "Method Reserved", "Vendor Specific" }]
   uint32 RunDiagnostic(
         [IN, Description ( 
             "Specifies the element upon which the "
             "DiagnosticService SHOULD be run." )]
      CIM_ManagedElement REF ManagedElement, 
         [IN, Description ( 
             "Specifies the desired settings that SHOULD be "
             "applied to the Diagnostic. If null, then the "
             "Diagnostic\'s defaults MAY be used." )]
      CIM_DiagnosticSetting REF DiagSetting, 
         [IN, Description ( 
             "Specifies the desired settings that SHOULD be "
             "applied to the resulting Job. If null and a "
             "resulting Job is required (i.e., the Diagnostic is "
             "long running), then the test\'s defaults MAY be "
             "used." )]
      CIM_JobSettingData REF JobSetting, 
         [IN ( false ), OUT, Description ( 
             "Returns a handle to the resulting Job." )]
      CIM_ConcreteJob REF Job);

      [Description ( 
          "The RunDiagnosticService method is invoked to commence "
          "execution of a diagnostic program on a specific managed "
          "element. The input parameters specify this managed "
          "element and the settings to be applied to the diagnostic "
          "and the resultant job. The method returns a reference to "
          "the ConcreteJob instance created. \n"
          "Prior to invoking this method, clients examine defaults "
          "and appropriate capabilities and create valid "
          "DiagnosticSettingData and JobSettingData instances to "
          "apply as input parameters. The RunDiagnosticService "
          "method SHALL evaluate and capture the attributes of "
          "DiagnosticSettingData in an instance of "
          "DiagnosticSettingDataRecord for use in post-mortem "
          "analysis of diagnostic results. \n"
          "A job SHALL be instantiated as a means for monitoring "
          "the diagnostic as it runs and to provide useful "
          "accounting and status information once the diagnostic "
          "has completed. \n"
          "The \"Busy\" return code indicates that the method "
          "cannot be invoked \"at this time\". It is not an error "
          "condition, but signals that the provider is doing "
          "something else and cannot respond." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "..", 
          "0x1000..0x7FFF", "0x8000.." }, 
       Values { "Success", "Not Supported", "Unknown", "Timeout", 
          "Failed", "Invalid Parameter", "Busy", "DMTF Reserved", 
          "Method Reserved", "Vendor Specific" }]
   uint32 RunDiagnosticService(
         [IN, Description ( 
             "Specifies the element upon which the "
             "DiagnosticService SHOULD be run." )]
      CIM_ManagedElement REF ManagedElement, 
         [IN, Description ( 
             "A string containing an encoding of the "
             "DiagnosticSettingData instance to be applied to "
             "the diagnostic. If null, the diagnostic\'s "
             "defaults are used." ), 
          EmbeddedInstance ( "CIM_DiagnosticSettingData" )]
      string DiagnosticSettings, 
         [IN, Description ( 
             "A string containing an encoding of the "
             "JobSettingData instance to be applied to the "
             "resulting job. If null, the job\'s defaults are "
             "used." ), 
          EmbeddedInstance ( "CIM_JobSettingData" )]
      string JobSettings, 
         [IN ( false ), OUT, Description ( 
             "Returns a reference to the resulting Job." )]
      CIM_ConcreteJob REF Job);

};
