Compile function OEngine_Services(@Service, @Params)
#pragma precomp SRP_PreCompiler
/***********************************************************************************************************************

    This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
    permission from Infineon Technologies.

    Name        :   OEngine_Services

    Description :   Handler program for all module related services.

    Notes       :   The generic parameters should contain all the necessary information to process the services. Often
                    this will be information like the data Record and Key ID.

    Parameters  :
        Service         [in] -- Name of the service being requested
        Param1-10   [in/out] -- Additional request parameter holders
        Response       [out] -- Response to be sent back to the Controller (MCP) or requesting procedure

    History     :   (Date, Initials, Notes)
        10/11/23    djs     Original programmer.

***********************************************************************************************************************/
$Insert APP_INSERTS
$Insert SERVICE_SETUP
$Insert REVDOTNETEQUATES

Declare Function   GetCurrentProcessId, GetCommandLine
Declare Subroutine Set_Property.Net, Mona_Services

GoToService else
    Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
end

Return Response or ""

//-----------------------------------------------------------------------------
// SERVICES
//-----------------------------------------------------------------------------

Service LogMemoryUsage()
    
    CmdLine           = GetCommandLine()
    EngIndex          = Index(CmdLine, '/S=', 1)
    EngNo             = CmdLine[EngIndex + 3, 'F ']
    BaseGroupResource = 'GRP_OPENINSIGHT_MES_OP_FE_ENGINES_'
    MonaResource      = BaseGroupResource:EngNo
    ErrCode           = ''
    Pid               = GetCurrentProcessId()
    If Pid NE '' then
        DotNetHandle = StartDotNet("","4.0")
        DotNetDir    = CheckDotNet('4.0'):'\'
        DirDllPath   = DotNetDir:'System.dll'
        Set_Property.Net(DotNetHandle, "AssemblyName", DirDllPath)
        If Not(Get_Status(errCode)) then
            objProc = Create_Class.Net(DotNetHandle, "System.Diagnostics.Process", False$)
            If Not(Get_status(errCode)) then
                Methods     = Get_Info.Net(objProc, REVDOTNET_INFO_METHODS)
                objThisProc = Send_Message.Net(objProc, "GetProcessById", Pid, 'System.Int32', True$)
                If Not(Get_Status(errCode)) then
                    // Log memory values
                    PeakWorkingSet = Get_Property.Net(objThisProc, 'PeakWorkingSet64', False$) / 1024
                    WorkingSet     = Get_Property.Net(objThisProc, 'WorkingSet64', False$) / 1024
                    Mona_Services('PostAverageMetric', MonaResource, 'PeakMemoryUsage', PeakWorkingSet)
                    Mona_Services('PostAverageMetric', MonaResource, 'CurrentMemoryUsage', WorkingSet)
                    Free_Class.Net(objThisProc)
                end
                Free_Class.Net(objProc)
            end
        end
    end
    
End Service

