Function Environment_Services(@Service, @Params)
/***********************************************************************************************************************

    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 SRP Computer Solutions, Inc.

    Name        :   Environment_Services

    Description :   Handler program for all module related services.

    Notes       :   Service module to support environmental state issues. Environmental refers to the state of the
                    operating system, which includes version, client vs. server, and path to critical systems.

    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

    Metadata    :

    History     :   (Date, Initials, Notes)
        11/18/17    dmb     Original programmer.
        06/21/18    dmb     Update various services to support the MESSA005 server (Application Server). Refactor
                            various services to use the GetServer service instead of parsing @STATION and to use the
                            GetLocalRootPath service instead of hardcoding the drive letter. - [IREPIOI-50]
        06/21/18    dmb     Update various services to support the MESST1002 and MESST1003 terminal servers.
                            - [IREPIOI-50]
        06/22/18    dmb     Update GetLocalRootPath service to use V: for the terminal servers. - [IREPIOI-50]
        06/22/18    dmb     Update GetApplicationRootPath service to use the GetApplicationRootIP service.
                            - [IREPIOI-50]
        07/03/18    dmb     Add GetLabelPrintMethod service. - [IREPIOI-54]
        08/06/19    fdr     Added GetMetrologyProductionPath
        09/25/23    djs     Updated services to support Stealth migration.

***********************************************************************************************************************/

#pragma precomp SRP_PreCompiler

$insert LOGICAL
$insert SERVICE_SETUP
$insert SRPMail_Inserts

Common /EnvironmentServices/ Unused1@, Unused2@, Unused3@, Unused4@, Unused5@, Unused6@, Unused7@, Unused8@, Unused9@, Unused10@

Declare function    Environment_Services, Memory_Services, SRP_List, SRP_FastArray, SRP_Array, Database_Services
Declare function    Active_Directory_Services, SRP_Send_Mail, RTI_GetNetworkUserName, Utility
Declare subroutine  Environment_Services, Memory_Services, SRP_List, SRP_FastArray, Database_Services, GetTempPath

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

Return Response OR ''


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Service Parameter Options
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Options BOOLEAN     = True$, False$


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Services
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//----------------------------------------------------------------------------------------------------------------------
// GetServer
//
// Returns the current server name. Note: this assumes that the current Process ID has been apended to @STATION.
// Therefore, this will be removed before returning to the caller.
//----------------------------------------------------------------------------------------------------------------------
Service GetServer()

    NumFields   = DCount(@Station, '_')
    Server      = Field(@Station, '_', 1, NumFields - 1)

    Response    = Server

end service

Service IsProd()
	Machine = Environment_Services('GetServer')
	IsProd = False$
	If Machine _NEC "messa012" and Machine _NEC "mestsa01ec" and Machine _NEC "MESTST1010" and Machine _NEC "MESTST1009" then
		IsProd = True$
	end
	Response = IsProd
end service


//----------------------------------------------------------------------------------------------------------------------
// GetApplicationRootPath
//
// Returns the application's root path. If this is a server, the shared folder will be included.
//----------------------------------------------------------------------------------------------------------------------
Service GetApplicationRootPath()

    RootIP              = Environment_Services('GetApplicationRootIP')
    ApplicationRootPath = RootIP : '\Apps'

    Response            = ApplicationRootPath

end service


//----------------------------------------------------------------------------------------------------------------------
// GetApplicationRootIP
//
// Returns the application's root IP.
//----------------------------------------------------------------------------------------------------------------------
Service GetApplicationRootIP()

    Machine     = Environment_Services('GetServer')

    Begin Case
    	Case Machine EQ 'MESSA005'  	; ApplicationRootIP = '\\messa005.infineon.com' 
        Case Machine EQ 'MESTSA01EC'	; ApplicationRootIP = '\\10.95.140.13'          
        Case Machine EQ 'MESSA012'      ; ApplicationRootIP = '\\10.95.176.50'
        Case Machine EQ 'MESST5201' 	; ApplicationRootIP = '\\10.95.140.14'
        Case Machine EQ 'MESST5202'		; ApplicationRootIP = '\\10.95.140.14'
        Case Machine EQ 'MESTST1009'	; ApplicationRootIP = '\\10.95.140.13'
        Case Machine EQ 'MESTST1010'	; ApplicationRootIP = '\\10.95.140.13'
        Case Otherwise$                 ; ApplicationRootIP = '\\10.95.140.14'
    End Case

    Response    = ApplicationRootIP

end service


//----------------------------------------------------------------------------------------------------------------------
// GetFTPRootPath
//
// Returns the FTP root path. This is where the scripts and FTP transfer files will be located.
//----------------------------------------------------------------------------------------------------------------------
Service GetFTPRootPath()

    Machine     = Environment_Services('GetServer')
    RootPath    = Environment_Services('GetLocalRootPath')

    Begin Case
        Case Machine EQ 'MESIRWAP001'   ; FTPRootPath   = RootPath
        Case Machine EQ 'MESSA005'      ; FTPRootPath   = RootPath : '\FTP'
        Case Machine EQ 'MESSA01EC'     ; FTPRootPath   = RootPath : '\FTP'
        Case Machine EQ 'MESST6501'     ; FTPRootPath   = RootPath : '\FTP'
        Case Machine EQ 'MESST6502'     ; FTPRootPath   = RootPath : '\FTP'
        Case Otherwise$                 ; FTPRootPath   = RootPath : '\FTP'
    End Case

    Response    = FTPRootPath

end service


//----------------------------------------------------------------------------------------------------------------------
// GetReportsRootPath
//
// Returns the Reports root path. This is where various reports will be located.
//----------------------------------------------------------------------------------------------------------------------
Service GetReportsRootPath()

    RootPath    = Environment_Services('GetLocalRootPath')
    Response    = RootPath : '\OIReports'

end service


//----------------------------------------------------------------------------------------------------------------------
// GetUserDataRootPath
//
// Returns the user data root path. This is where various reports will be located.
//----------------------------------------------------------------------------------------------------------------------
Service GetUserDataRootPath()

    UserDataRootPath = '\\messdv002.na.infineon.com'
    Response         = UserDataRootPath

end service


//----------------------------------------------------------------------------------------------------------------------
// GetUserDataProductionPath
//
// Returns the user data production path. This is where various reports will be located.
//----------------------------------------------------------------------------------------------------------------------
Service GetUserDataProductionPath()

    ProductionPath = Environment_Services('GetUserDataRootPath') : '\IT'
    Response       = ProductionPath

end service


//----------------------------------------------------------------------------------------------------------------------
// GetSpcFilesharePath
//
// Returns the SPC data path.
//----------------------------------------------------------------------------------------------------------------------
Service GetSpcFilesharePath()
	
	IsProd = Environment_Services("IsProd")
	
	If IsProd EQ True$ then
		Response = '\\mesfs.infineon.com\EC_SPC_Si_Import\TXT'
	end else
		Path = Environment_Services('GetApplicationRootPath'):'\SPC_Data'
		MakeDirSuccess = Utility("MAKEDIR", Path)
		Response = Path
	end
	
end service


//----------------------------------------------------------------------------------------------------------------------
// GetSPCDataPath
//
// Returns the SPC data path.
//----------------------------------------------------------------------------------------------------------------------
Service GetSPCDataPath()
	
	IsProd = Environment_Services("IsProd")
	
	If IsProd EQ True$ then
		Response = '\\messa04ec.infineon.com\OI_SPC_Data_Transfer'
	end else
		Path = Environment_Services('GetApplicationRootPath'):'\SPC_Data'
		MakeDirSuccess = Utility("MAKEDIR", Path)
		Response = Path
	end
	
end service


//----------------------------------------------------------------------------------------------------------------------
// GetMetrologyViewerURL
//
// Returns the Metrology Viewer URL.
//----------------------------------------------------------------------------------------------------------------------
Service GetMetrologyViewerURL()

    ProductionPath = 'http://messa010ec.infineon.com/'
    Response       = ProductionPath

end service


//----------------------------------------------------------------------------------------------------------------------
// GetWaferMapProductionPath
//
// Returns the wafer map production path.
//----------------------------------------------------------------------------------------------------------------------
Service GetWaferMapProductionPath()

    ProductionPath = '\\mesfs.infineon.com\EC_Metrology_Si\MetrologyAttachments\TencorRunData'
    Response       = ProductionPath

end service


//----------------------------------------------------------------------------------------------------------------------
// GetMetrologyProductionPath
//
// Returns the Metrology data production path.
//----------------------------------------------------------------------------------------------------------------------
Service GetMetrologyProductionPath()
    
    ProductionPath = 'messqlec1.infineon.com\PROD1,53959'
    Response       = ProductionPath

end service


//----------------------------------------------------------------------------------------------------------------------
// GetControlPlanProductionPath
//
// Returns the Control Plan production path.
//----------------------------------------------------------------------------------------------------------------------
Service GetControlPlanProductionPath()

    ProductionPath    = 'iqsdms1'

    Response    = ProductionPath

end service


//----------------------------------------------------------------------------------------------------------------------
// GetWaferTrackProductionPath
//
// Returns the Wafer Track data production path.
//----------------------------------------------------------------------------------------------------------------------
Service GetWaferTrackProductionPath()

    ProductionPath    = 'IQSDMS1'

    Response    = ProductionPath

end service


//----------------------------------------------------------------------------------------------------------------------
// GetLocalRootPath
//
// Returns the local root path. This is where the scripts and FTP transfer files will be located.
//----------------------------------------------------------------------------------------------------------------------
Service GetLocalRootPath()

    Machine     = Environment_Services('GetServer')

    Begin Case
        Case Machine EQ 'MESIRWAP001'   ; LocalRootPath = 'C:'
        Case Machine EQ 'MESSA005'      ; LocalRootPath = 'D:'
        Case Machine EQ 'MESSA012'      ; LocalRootPath = 'D:'
        Case Machine EQ 'MESSA01EC'     ; LocalRootPath = 'D:'
        Case Machine EQ 'MESTSA01EC'    ; LocalRootPath = 'D:'
        Case Machine EQ 'MESST6501'     ; LocalRootPath = 'C:'  ; // This is a map to the user's actual C drive.
        Case Machine EQ 'MESST6502'     ; LocalRootPath = 'C:'  ; // This is a map to the user's actual C drive.
        Case Machine EQ 'MESTST1006'    ; LocalRootPath = 'C:'  ; // This is a map to the user's actual C drive.
        Case Machine EQ 'MESTST1007'    ; LocalRootPath = 'C:'  ; // This is a map to the user's actual C drive.        	
        Case Otherwise$                 ; LocalRootPath = 'C:'
    End Case

    Response    = LocalRootPath

end service


//----------------------------------------------------------------------------------------------------------------------
// GetLabelPrintMethod
//
// Returns the method that label programs should use for printing (i.e., OIPI or DirectPrint).
//----------------------------------------------------------------------------------------------------------------------
Service GetLabelPrintMethod()

    LabelPrintMethod    = Database_Services('ReadDataRow', 'APP_INFO', 'LABEL_PRINT_METHOD')<1>
    Locate LabelPrintMethod in 'OIPI,DirectPrint' using ',' setting cPos else LabelPrintMethod = 'OIPI'

    Response            = LabelPrintMethod

end service


//----------------------------------------------------------------------------------------------------------------------
// GetDispositionReportPath
//
// Returns the path to where disposition reports are stored. This is used for GaN Run Data Sheets.
//----------------------------------------------------------------------------------------------------------------------
Service GetDispositionReportPath()
    
    ! Deprecated - GaN
    ReportPath = '\\messdv002.na.infineon.com\Characterization\Disposition Reports'
    Response = ReportPath
    
end service


//----------------------------------------------------------------------------------------------------------------------
// GetPrintServerPath
//
// Returns printer server UNC path.
//----------------------------------------------------------------------------------------------------------------------
Service GetPrintServerPath()

    ServerPath = '\\messp1002.na.infineon.com\'
    Response = ServerPath
    
end service


//----------------------------------------------------------------------------------------------------------------------
// GetDispositionReportPath
//
// Returns the path to where GaN reactor schedule excel spreadsheets are stored.
//----------------------------------------------------------------------------------------------------------------------
Service GetGaNSchedulePath()
    
    ! Deprecated - GaN
    ReportPath = '\\messv02ecc1.ec.local\EC_MOCVD\Aixtron Reactor Schedulers'
    Response = ReportPath
    
end service


//----------------------------------------------------------------------------------------------------------------------
// SetServerCanary
//
// Sets a datetime stamp into the APP_INFO table and the canary.txt file to establish the last time it was successful in
// accessing the database.
//----------------------------------------------------------------------------------------------------------------------
Service SetServerCanary()

    hSysLists   = Database_Services('GetTableHandle', 'SYSLISTS')
    Lock hSysLists, ServiceKeyID then

        DateTimeStamp   = Oconv(Date(), 'D4/') : ' - ' : Oconv(Time(), 'MTHS')
        Database_Services('WriteDataRow', 'APP_INFO', 'CANARY', DateTimeStamp, True$, False$, True$)
        If Error_Services('NoError') then
            OSWrite DateTimeStamp to Environment_Services('GetApplicationRootPath') : '\LogFiles\Canary\Canary.txt'
            // Call SRP Send Mail to make sure it is already cached.
            Result      = SRP_Send_Mail('', '')
        end else
            Error       = Error_Services('GetMessage')
            Message     = ''
            Message<1>  = 'Message from the ' : Service : ' service.'
            Message<2>  = 'oinotify@infineon.com'
            Message<3>  = 'dstieber@srpcs.com,dbakke@srpcs.com,Dan.Crisp@infineon.com,4805890050@vtext.com,7143924402@tmomail.net,jonathan.ouellette@infineon.com'
            Message<7>  = 'TEXT'
            Message<8>  = 'Error in ' : Service : ' service. Message: ' : Error
            Message<9>  = ''

            Config    = ''
            Config<1> = SendUsing_Port$
            Config<3> = 25
            Config<4> = 'mailrelay-external.infineon.com' ; //'appmail.eu.infineon.com'
            Config<5> = True$
            Config<6> = 'oinotify@infineon.com'
            Config<7> = 'oinotify1'
            Config<8> = False$
            Result    = SRP_Send_Mail(Message, Config)
        end

        Unlock hSysLists, ServiceKeyID else Null
    end

end service


Service GetSAPPath()
    
    Machine     = Environment_Services('GetServer')
    Environment = 'QA'

    Begin Case
        Case Machine EQ 'MESSA005'      ; Environment   = 'PRD'
        Case Machine EQ 'MESSA01EC'     ; Environment   = 'PRD'
    End Case

    Response = Environment
    
end service


Service GetSQLScrapeConnectionString()
    
	 Machine = Environment_Services('GetServer')
	 Begin Case
	 	Case Machine = 'MESSA01EC'
	 	    // PROD SQL Servers
			ConnectionString = 'Provider=MSOLEDBSQL.1;Password=0okm9ijn;Persist Security Info=True;User ID=srpadmin;Initial Catalog=LSL2SQL;Data Source=MESSQLEC1.infineon.com\PROD1,53959;Initial File Name="";Trust Server Certificate=True;Server SPN="";Authentication="";Access Token=""'
	 	Case Machine = 'MESTSA01EC'
	 	    // DEV SQL Servers
            ConnectionString = 'Provider=MSOLEDBSQL.1;Password=Fisql2023!;Persist Security Info=True;User ID=fisql;Initial Catalog=LSL2SQL;Data Source=10.95.140.27\TEST1,50572;Initial File Name="";Trust Server Certificate=True;Server SPN="";Authentication="";Access Token=""'
	 	Case Otherwise$
	 	    // Default to DEV SQL Servers just in case
			ConnectionString = 'Provider=MSOLEDBSQL.1;Password=Fisql2023!;Persist Security Info=True;User ID=fisql;Initial Catalog=LSL2SQL;Data Source=10.95.140.27\TEST1,50572;Initial File Name="";Trust Server Certificate=True;Server SPN="";Authentication="";Access Token=""'
	 End Case
	 Response = ConnectionString
	 
end service


Service GetUserDesktopPath()
	
    Response     = ''
    UserRootPath = ''
    UserName     = RTI_GetNetworkUserName()
    Machine      = Environment_Services('GetServer')
    If Machine EQ 'MESST5201' OR Machine EQ 'MESST5202' OR Machine EQ 'MESTST1009' OR Machine EQ 'MESTST1010' then
        RootPath = '\\tsclient\C\Users\'
    end else
        RootPath = 'C:\Users\'
    end
    If UserName NE '' then
        Response = RootPath : UserName : '\Desktop\'
    end
    
end service


Service GetTempPath()
	
	TempDirectory = Str(\00\, 1024)
	GetTempPath(Len(TempDirectory), TempDirectory)
	Convert \00\ to '' in TempDirectory
	Response      = TempDirectory
	
end service


Service GetMonaResource()
	
	If Environment_Services("IsProd") then
		Response = "OPENINSIGHT_MES_OP_FE"
	end else
		Response = "OPENINSIGHT_MES_OP_FE_DEV"
	end
	
end service


Service GetMonInBufferedWorkerApiUrl()
	
	If Environment_Services("IsProd") then
		Response = "https://messa014.infineon.com:7851"
	end else
		Response = "https://mestsa008.infineon.com:7851"
	end
	
end service


Service GetProveInApiUrl()
	
	If Environment_Services("IsProd") then
		Response = "https://messa014.infineon.com:8851"
	end else
		Response = "https://mestsa008.infineon.com:8851"
	end
	
end service


Service GetIfxEmailServer()
	
	Response = 'smtp.intra.infineon.com'
	
end service

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




