Files
UnrealEngineUWP/Engine/Source/Programs/CrashReporter/CrashReportProcess/Config.cs
Ben Marsh 3de35115ca Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3283640)
#lockdown Nick.Penwarden
#rb none

==========================
MAJOR FEATURES + CHANGES
==========================

Change 3229011 on 2016/12/09 by Steve.Robb

	Licensee version updated in FWorldTileInfo::Read().

	https://udn.unrealengine.com/questions/325874/fworldtileinfo-not-passing-fileversionlicenseeue4.html

Change 3230493 on 2016/12/12 by Robert.Manuszewski

	Adding a check against assembling the reference token stream while streaming without locking GC.

Change 3230515 on 2016/12/12 by Steve.Robb

	GetStaticEnum and GetStaticStruct removed.
	Various generated code tidy-ups.

Change 3230522 on 2016/12/12 by Steve.Robb

	UHT no longer complains about bases with different prefixes.
	References to obsolete DependsOn removed.

Change 3230528 on 2016/12/12 by Steve.Robb

	ReferenceChainSearch tidyups.

Change 3234235 on 2016/12/14 by Robert.Manuszewski

	PR #2695: fix comments (Contributed by wyhily2010)

Change 3234237 on 2016/12/14 by Robert.Manuszewski

	PR #2614: [GenericPlatformFile] New Function, GetTimeStampLocal, returns file time stamp in local time instead of UTC   Rama (Contributed by EverNewJoy)

Change 3236214 on 2016/12/15 by Robert.Manuszewski

	PR# 1988 : Allow absolute path in -UserDir=<Path> argument (contributed by bozaro)

Change 3236582 on 2016/12/15 by Robert.Manuszewski

	Allow commandline use in shipping builds

	#jira UE-24613

Change 3236591 on 2016/12/15 by Robert.Manuszewski

	Removed unnecessary console variable logspam

	#jira UE-24614

Change 3236737 on 2016/12/15 by Steve.Robb

	Fixes to non-contiguous enums in OSS.

Change 3239686 on 2016/12/19 by Chris.Wood

	Fixed CompressionHelper method UE4CompressFileGZIP() that leaked a file handle when a compression error occurred (CRP v1.2.12)
	[UE-39910] - CrashReportProcess leaks file handles and doesn't cleanup folders after compression fails during output to S3

Change 3240687 on 2016/12/20 by Chris.Wood

	Improved CrashReportProcess retry logic to avoid stuck threads when CRW fails to add crashes (CRP 1.2.13)
	[UE-39941] - Improve CrashReportProcess retry logic when CR website returns failed response to AddCrash Request

Change 3246347 on 2017/01/04 by Steve.Robb

	Readability, debuggability and standards improvements.

Change 3249122 on 2017/01/06 by Steve.Robb

	Generic FPaths::Combine, allowing a mix of string argument types and unlimited arity.

Change 3249580 on 2017/01/06 by Steve.Robb

	Fix for TArray::HeapSort when array contains pointers.

	See: https://answers.unrealengine.com/questions/545533/bug-heapsort-with-tarray-of-pointers-fails-to-comp.html

Change 3250593 on 2017/01/09 by Robert.Manuszewski

	PR #3046: UE-39578: Added none to invalid filenames (Contributed by projectgheist)

Change 3250596 on 2017/01/09 by Robert.Manuszewski

	PR #3094: Fixing typo in comments for LODColoration in BaseEngine.ini - UE-40196 (Contributed by sanjay-nambiar)

Change 3250599 on 2017/01/09 by Robert.Manuszewski

	PR #3096: Fixed Log message in ExclusiveLoadPackageTimeTracker : UE-37583 (Contributed by sanjay-nambiar)

Change 3250863 on 2017/01/09 by Steve.Robb

	Build configuration option to force the use of the Debug version of UnrealHeaderTool.

Change 3250994 on 2017/01/09 by Ben.Zeigler

	Remove bad or redundant ini redirects. These did not work with the old system but were silently ignored, my new system throws warnings about them

Change 3251000 on 2017/01/09 by Ben.Zeigler

	#jira UE-39599 Add FCoreRedirects which replaces and unifies the redirect systems in LinkerLoad, K2Node, Enum, and TaggedProperty. This fixes various bugs and makes things uniform.
	It will parse the previous ini files, or load out of a [CoreRedirects] section in any loaded ini file
	The old redirect system can be re-enabled by setting USE_CORE_REDIRECTS to 0 in CoreRedirects.h. This will be removed eventually
	Some refactors to pass in information needed by the new system that the old system didn't need
	Add LoadTimeVerbose stats for processing redirects and enable that group during -LoadTimeFile

Change 3253580 on 2017/01/11 by Graeme.Thornton

	Added some validation of the class index in exportmap entries

	#jira UE-37873

Change 3253777 on 2017/01/11 by Graeme.Thornton

	Increase SerialSize and SerialOffset in FObjectExport to 64bits, to handle super large files

	#jira UE-39946

Change 3257750 on 2017/01/13 by Ben.Zeigler

	Fix issue where incorrectly set up animation node redirects (were ActiveClassRedirects, should have been ActiveStructRedirects) didn't work in the new redirect system because it validated more.
	Added backward compatibilty code and fixed some conflicts in the ini.

Change 3261176 on 2017/01/17 by Ben.Zeigler

	#jira UE-40746 Fix redundant ini redirect
	#jira UE-40725 Fix section of Match3 defaultengine.ini that appears to have been accidentally duplicated from baseengine.ini several years ago

Change 3261915 on 2017/01/18 by Steve.Robb

	Fixes to localized printf formats.

Change 3262142 on 2017/01/18 by Ben.Zeigler

	Remove runtime code for old ActiveClassRedirects and related systems.
	It was already disabled and the old ini format is still parsed and converted to FCoreRedirects at runtime so there should be no functionality change.
	Merged the deprecated tagged property and enum redirect ini parsing into LinkerLoad, and remove the RemapImports step entirely as it's part of FixupImportMap.

Change 3263596 on 2017/01/19 by Gil.Gribb

	UE4 - Fixed many bugs with the event driven loader and allowed it to work at boot time.

Change 3263597 on 2017/01/19 by Gil.Gribb

	UE4 - Allowed UnrealPak to do a better job with EDL pak files when the order provided is old or from the cooker. Several minor tweaks to low level async IO stuff in support of switch experiments.

Change 3263922 on 2017/01/19 by Gil.Gribb

	UE4 - Fixed a bug with nativized blueprints that was introduced with the boot time EDL changes.

Change 3264131 on 2017/01/19 by Robert.Manuszewski

	Simple app to test hard to repro bugs

Change 3264849 on 2017/01/19 by Ben.Zeigler

	Change FParse::Value to treat ) like , for parsing to handle config parsing struct format. This fixes cases where lines end with bool or FName variables that aren't written out quoted:
	+ClassRedirects=(OldName="LandscapeProxy",NewName="LandscapeStreamingProxy",InstanceOnly=True)

Change 3265232 on 2017/01/19 by Ben.Zeigler

	#jira UE-39599 Finish class redirect refactor by cleaning up BaseEngine.ini
	Move plugin-specific redirects to new plugin ini files
	Move all redirects from BaseEngine.ini prior to 4.11 to native registration in FCoreRedirects. Needed to split up functions to avoid long compile times
	Move all redirects after 4.11 to new ini format
	Some related blueprint fixup code changes, these weren't cooperating well with some ini redirects

Change 3265490 on 2017/01/20 by Steve.Robb

	Prevent engine reinstancing on hot reload.

	#jira UE-40765

Change 3265593 on 2017/01/20 by Gil.Gribb

	UE4 - Stored a copy of the callback in async read request so that we don't need to worry about lifetime so we can capture variables as needed. Also fixed race in audio streaming.

Change 3266003 on 2017/01/20 by Gil.Gribb

	UE4 - Fixed bug which would cause a fatal error when cooking subobjects that were pending kill.

Change 3267433 on 2017/01/22 by Gil.Gribb

	UE4 - Fixed a bug with EDL at boot time which caused a fatal error with unfired imports.

Change 3267677 on 2017/01/23 by Steve.Robb

	Fix for whitespace before UCLASS() causing compile errors.

	#jira UE-24110

Change 3267685 on 2017/01/23 by Steve.Robb

	First pass of fixes to printf-style calls to only use TCHAR[] specifiers.

Change 3267746 on 2017/01/23 by Steven.Hutton

	Resolve offline work

	Changes to repositories to support better handling of db connections.

Change 3267865 on 2017/01/23 by Steve.Robb

	Clarification of TArray::FindLastByPredicate() and FString::FindLastCharByPredicate().

	#fyi nick.darnell

Change 3268075 on 2017/01/23 by Gil.Gribb

	UE4 - Fixed another bug with RF_PendingKill subobjects and the new loader.

Change 3268447 on 2017/01/23 by Gil.Gribb

	Fortnite - Removed calls to ::StaticClass() before main starts; this is not allowed.

Change 3269491 on 2017/01/24 by Gil.Gribb

	UE4 - Cancelling async loading with the EDL loader now prints a warning and does a flush instead.

Change 3269492 on 2017/01/24 by Gil.Gribb

	UE4 - Suppressed a few EDL cook wanrings.

Change 3270085 on 2017/01/24 by Gil.Gribb

	UE4 - Remove pak highwater spam.

Change 3270089 on 2017/01/24 by Gil.Gribb

	UE4 - fix random bug with memory counting and some vertex buffer

Change 3271246 on 2017/01/25 by Chris.Wood

	Fixed CrashReportProcess pipeline for Mac and Linux crashes lacking machine Ids (CRP v1.2.14)
	[UE-40605] - Machine ID is not being shown on the crashreporter website

Change 3271827 on 2017/01/25 by Steve.Robb

	C4946 warning disabled in third party headers (triggers in Clang/LLVM).

Change 3271874 on 2017/01/25 by Steve.Robb

	Fix for missing error check after header preparsing.

Change 3271911 on 2017/01/25 by Steve.Robb

	ObjectMacros.h now automatically included by generated headers.

	#fyi jamie.dale

Change 3273125 on 2017/01/26 by Steve.Robb

	Check to ensure that a .generated.h header is included by headers which have exported types, to avoid crazy compiler errors.

	#fyi james.golding

Change 3273209 on 2017/01/26 by Steve.Robb

	UnrealCodeAnalyzer compilation fixes.

Change 3274917 on 2017/01/27 by Steve.Robb

	GC disabled when recompiling child BPs, as is already the case for the parent (CL# 2731120).
	Now-unused field removed.

Change 3279091 on 2017/01/31 by Ben.Marsh

	UBT: Remove code paths which assume relative paths based on a particular CWD. Use the absolute paths stored in UnrealBuildTool.RootDirectory/UnrealBuildTool.EngineDirectory instead.

Change 3279195 on 2017/01/31 by Gil.Gribb

	Turned EDL on for orion

Change 3279493 on 2017/01/31 by Ben.Zeigler

	#jira UE-41341 Redo redirector fixups that got undone in merge from Main

Change 3280284 on 2017/01/31 by Ben.Zeigler

	#jira UE-41357 Fix typo in vehicle redirect. Also fix base crash when converting old content with nodes that don't exist.
	Fix issues with loading plugin ini files. They weren't properly "diffing" against the base/default source file so my redirect typo fix didn't propagate.
	Some general config system refactors on Josh's advice, and make base.ini optional if reading out of a non-standard engine directory
	Engine plugin ini are now BasePlugin.ini, game plugins are still DefaultPlugin.ini.
	Fix crash when loading old content pointing to nonexistent node type. It will still error/ensure but won't crash.

Change 3280299 on 2017/01/31 by Gil.Gribb

	possibly fix edl at boot with orion server....though was no-repro

Change 3280386 on 2017/01/31 by Ben.Zeigler

	Header include fixes for -nopch, fixes incremental build

Change 3280557 on 2017/01/31 by Ben.Zeigler

	Fix Config crash. FConfigFile's copy constructor is apparently not safe and resulted in garbage memory in some cases

Change 3280817 on 2017/02/01 by Steve.Robb

	Unused SmartCastProperty removed.

Change 3280897 on 2017/02/01 by Chris.Wood

	Improved CRP shutdown code to abort AddCrash requests when cancel is requested (CRP v1.2.15)
	[UE-41338] - Fix CRP shutdown when website isn't accepting new crashes

	Also, improved shutdown code to try to avoid occassional exception when writing out the report index. Looks like it isn't shutting down worker threads cleanly sometimes. Added more logging to this too.

Change 3280989 on 2017/02/01 by Gil.Gribb

	New unrealpak binaries

Change 3281416 on 2017/02/01 by Michael.Trepka

	Updated UnrealPak binaries for Mac

Change 3282457 on 2017/02/01 by Ben.Zeigler

	#jira UE-41425 Protect against issues with streamable manager requests recursively completing by caching the array locally.
	This code is safer in general in my local version so just doing a quick fix for now

Change 3282619 on 2017/02/01 by Arciel.Rekman

	Linux: update UnrealPak.

[CL 3283649 by Ben Marsh in Main branch]
2017-02-02 14:41:50 -05:00

459 lines
14 KiB
C#

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System.Reflection;
namespace Tools.CrashReporter.CrashReportProcess
{
/// <summary>
/// Config values for the Crash Report Process. The binary expects to find an xml representation in the binary folder at runtime.
/// </summary>
[XmlRoot]
public class Config
{
/// <summary>
/// CRP version for displaying in status reports/logs etc
/// </summary>
[XmlElement]
public string VersionString { get; set; }
/// <summary>
/// Folder where the files that are linked from the website are stored.
/// </summary>
[XmlElement]
public string ProcessedReports { get; set; }
/// <summary>
/// Time after which old, unprocessed reports in landing zones are deleted.
/// </summary>
[XmlElement]
public int DeleteWaitingReportsDays { get; set; }
/// <summary>
/// The website domain to which we output crashes.
/// </summary>
[XmlElement]
public string CrashReportWebSite { get; set; }
/// <summary>
/// Folder where the video file that are linked from the website are stored.
/// </summary>
[XmlElement]
public string ProcessedVideos { get; set; }
/// <summary>
/// Folder where the Perforce depot is located.
/// </summary>
[XmlElement]
public string DepotRoot { get; set; }
/// <summary>
/// Perforce username used by the CRP and MDD.
/// </summary>
[XmlElement]
public string P4User { get; set; }
/// <summary>
/// Perforce workspace used by the CRP and MDD.
/// </summary>
[XmlElement]
public string P4Client { get; set; }
/// <summary>
/// Folder where new crash reports are queued from internal, company users.
/// </summary>
[XmlElement]
public string InternalLandingZone { get; set; }
/// <summary>
/// Folder where new crash reports are queued from external users.
/// </summary>
[XmlElement]
public string ExternalLandingZone { get; set; }
/// <summary>
/// Folder where new crash reports are queued from the data router S3 bucket.
/// </summary>
[XmlElement]
public string DataRouterLandingZone { get; set; }
/// <summary>
/// Folder where new crash reports are queued from the PS4 crash service.
/// </summary>
[XmlElement]
public string PS4LandingZone { get; set; }
/// <summary>
/// Number of reports in a queue at which reports will start to be discarded to stop a backlog from growing uncontrollably.
/// </summary>
[XmlElement]
public int QueueLowerLimitForDiscard { get; set; }
/// <summary>
/// Number of reports in a queue at which reports will all be discarded so this is the upper limit for a backlog.
/// </summary>
[XmlElement]
public int QueueUpperLimitForDiscard { get; set; }
/// <summary>
/// String passed to Minidump Diagnostics to modify its Perforce depot root.
/// </summary>
[XmlElement]
public string DepotIndex { get; set; }
/// <summary>
/// String specifying the local path of the MinidumpDiagnostics exe
/// </summary>
[XmlElement]
public string MDDExecutablePath { get; set; }
/// <summary>
/// String specifying the path to the folder used by MinidumpDiagnostics for the PDB cache
/// </summary>
[XmlElement]
public string MDDPDBCachePath { get; set; }
/// <summary>
/// Number telling MinidumpDiagnostics how large it can make the PDB cache
/// </summary>
[XmlElement]
public int MDDPDBCacheSizeGB { get; set; }
/// <summary>
/// Number telling MinidumpDiagnostics when it should start clearing cache entries to create more disk space
/// </summary>
[XmlElement]
public int MDDPDBCacheMinFreeSpaceGB { get; set; }
/// <summary>
/// Number telling MinidumpDiagnostics the minimum age if a cache entry that should be considered for deletion/stale
/// </summary>
[XmlElement]
public int MDDPDBCacheFileDeleteDays { get; set; }
/// <summary>
/// Timeout when waiting for MinidumpDiagnostics to complete
/// </summary>
[XmlElement]
public int MDDTimeoutMinutes { get; set; }
/// <summary>
/// The number of threads created by each main processor thread to upload crashes to the website. (relieves a bottleneck when using a single processor thread)
/// </summary>
[XmlElement]
public int AddReportsPerProcessor { get; set; }
/// <summary>
/// The number of main processor threads
/// </summary>
[XmlElement]
public int ProcessorThreadCount { get; set; }
/// <summary>
/// The number of parallel MDD instances allowed
/// </summary>
[XmlElement]
public int MaxConcurrentMDDs { get; set; }
/// <summary>
/// Incoming webhook URL for Slack integration.
/// </summary>
[XmlElement]
public string SlackWebhookUrl { get; set; }
/// <summary>
/// Slack channel to which messages are posted. Can be null or empty to use the webhook default.
/// </summary>
[XmlElement]
public string SlackChannel { get; set; }
/// <summary>
/// Slack username from which messages are posted. Can be null or empty to use the webhook default.
/// </summary>
[XmlElement]
public string SlackUsername { get; set; }
/// <summary>
/// Slack user icon name (e.g. ":someemoji:") from which messages are posted. Can be null or empty to use the webhook default.
/// </summary>
[XmlElement]
public string SlackEmoji { get; set; }
/// <summary>
/// The time period in which an alert with the same identifying key is not allowed to repeat.
/// </summary>
[XmlElement]
public int SlackAlertRepeatMinimumMinutes { get; set; }
/// <summary>
/// The time period in which a crash decimation (large backlog) alert with the same identifying key is not allowed to repeat.
/// </summary>
[XmlElement]
public int SlackDecimateAlertRepeatMinimumMinutes { get; set; }
/// <summary>
/// Local folder used to setup testing folders in Debug builds. Overrides other folder params in config.
/// </summary>
[XmlElement]
public string DebugTestingFolder { get; set; }
/// <summary>
/// Period between reports to Slack (if available).
/// </summary>
[XmlElement]
public int MinutesBetweenQueueSizeReports { get; set; }
/// <summary>
/// Size limit below which queues will attempt to enqueue more crashes into memory
/// Above this size, a queue will skip enqueueing until the next update.
/// </summary>
[XmlElement]
public int MinDesiredMemoryQueueSize { get; set; }
/// <summary>
/// Size limit beyond which crashes won't be enqueued into memory on each queue.
/// </summary>
[XmlElement]
public int MaxMemoryQueueSize { get; set; }
/// <summary>
/// AWSSDK AWS credentials filepath containing the keys used to access SQS and S3
/// </summary>
[XmlElement]
public string AWSCredentialsFilepath { get; set; }
/// <summary>
/// AWSSDK Profile name used in the AWS credentials file for reading crashes from DataRouter
/// </summary>
[XmlElement]
public string AWSProfileInputName { get; set; }
/// <summary>
/// AWSSDK service Url for S3 client reading crashes from DataRouter
/// </summary>
[XmlElement]
public string AWSS3ServiceInputURL { get; set; }
/// <summary>
/// AWSSDK service Url for SQS client reading crashes from DataRouter
/// </summary>
[XmlElement]
public string AWSSQSServiceInputURL { get; set; }
/// <summary>
/// AWSSDK queue Url for SQS client reading crashes from DataRouter
/// </summary>
[XmlElement]
public string AWSSQSQueueInputUrl { get; set; }
/// <summary>
/// AWSSDK Profile name used in the AWS credentials file for writing crashes to S3
/// </summary>
[XmlElement]
public string AWSProfileOutputName { get; set; }
/// <summary>
/// AWSSDK service Url for S3 client for writing crashes to S3
/// </summary>
[XmlElement]
public string AWSS3ServiceOutputURL { get; set; }
/// <summary>
/// Should we output a copy of the crash report files to disk? (ProcessedReports, ProcessedVideos)
/// </summary>
[XmlElement]
public bool CrashFilesToDisk { get; set; }
/// <summary>
/// Should we output a copy of the crash report files to S3?
/// </summary>
[XmlElement]
public bool CrashFilesToAWS { get; set; }
/// <summary>
/// Should large crash files saved to S3 be compressed? (crash context will never be compressed)
/// </summary>
[XmlElement]
public bool CompressCrashFilesOnAWS { get; set; }
/// <summary>
/// Should we save invalid reports that fail to process to S3?
/// </summary>
[XmlElement]
public bool InvalidReportsToAWS { get; set; }
/// <summary>
/// AWSSDK AWS S3 bucket used for output of crash reporter files (optional)
/// </summary>
[XmlElement]
public string AWSS3OutputBucket { get; set; }
/// <summary>
/// AWSSDK AWS S3 path/key prefix used for output of crash reporter files (suffix will be crash id and file name) (optional)
/// </summary>
[XmlElement]
public string AWSS3OutputKeyPrefix { get; set; }
/// <summary>
/// AWSSDK AWS S3 path/key prefix used for writing invalid reports (optional)
/// </summary>
[XmlElement]
public string AWSS3InvalidKeyPrefix { get; set; }
/// <summary>
/// AWSSDK AWS S3 path/key suffix used in place of the existing extension for writing compressed reports (optional)
/// </summary>
[XmlElement]
public string AWSS3CompressedSuffix { get; set; }
/// <summary>
/// Buffer size used to decompress zlib archives taken from S3
/// </summary>
[XmlElement]
public int MaxUncompressedS3RecordSize { get; set; }
/// <summary>
/// Index file used to store all processed crash names and times. Stops duplicates. Leave blank to disable.
/// </summary>
[XmlElement]
public string ProcessedReportsIndexPath { get; set; }
/// <summary>
/// Time that the ProcessedReportsIndex retains items for duplicate checking.
/// </summary>
[XmlElement]
public int ReportsIndexRetentionDays { get; set; }
/// <summary>
/// Timeout when calling AddCrash to submit crashes to the website/database.
/// </summary>
[XmlElement]
public int AddCrashRequestTimeoutSeconds { get; set; }
/// <summary>
/// Number of times to retry AddCrash after a bad response (doesn't count timeouts that are always retried).
/// </summary>
[XmlElement]
public int AddCrashRejectedRetries { get; set; }
/// <summary>
/// Time that we wait between a failed AddCrash call and a retry.
/// </summary>
[XmlElement]
public int AddCrashRetryDelaySeconds { get; set; }
/// <summary>
/// The time limit for consecutive failed AddCrash() calls after which an alert will be created.
/// </summary>
[XmlElement]
public int FailedWebAddAlertTimeSeconds { get; set; }
/// <summary>
/// Disk space available threshold that generates alerts. If a disk has less space than this, it will generate alerts.
/// </summary>
[XmlElement]
public float DiskSpaceAlertPercent { get; set; }
/// <summary>
/// Switch on perf monitoring via StatusReporting. Adds an extra report with perf info.
/// </summary>
[XmlElement]
public bool MonitorPerformance { get; set; }
/// <summary>
/// Get the default config object (lazy loads it on first access)
/// </summary>
public static Config Default
{
get
{
if (DefaultSingleton == null)
{
LoadConfig();
}
return DefaultSingleton;
}
}
/// <summary>
/// Force reload default config object from disk
/// </summary>
public static void LoadConfig()
{
DefaultSingleton = LoadConfigPrivate();
}
private static Config LoadConfigPrivate()
{
Config LoadedConfig = new Config();
string ExePath = Assembly.GetEntryAssembly().Location;
string ExeFolder = Path.GetDirectoryName(ExePath);
string ConfigPath = Path.Combine(ExeFolder, "CrashReportProcess.config");
if (File.Exists(ConfigPath))
{
if (!string.IsNullOrEmpty(ConfigPath))
{
using (XmlReader Reader = XmlReader.Create(ConfigPath))
{
CrashReporterProcessServicer.WriteEvent("Loading config from " + ConfigPath);
XmlSerializer Xml = new XmlSerializer(typeof (Config));
LoadedConfig = Xml.Deserialize(Reader) as Config;
}
}
}
#if DEBUG
// Debug mode redirects to local folder in DebugTestingFolder
LoadedConfig.ProcessedReports = Path.Combine(LoadedConfig.DebugTestingFolder, "ProcessedReports");
LoadedConfig.ProcessedVideos = Path.Combine(LoadedConfig.DebugTestingFolder, "ProcessedVideos");
LoadedConfig.DepotRoot = Path.Combine(LoadedConfig.DebugTestingFolder, "DepotRoot");
if (!string.IsNullOrWhiteSpace(LoadedConfig.InternalLandingZone))
{
LoadedConfig.InternalLandingZone = Path.Combine(LoadedConfig.DebugTestingFolder, "InternalLandingZone");
}
if (!string.IsNullOrWhiteSpace(LoadedConfig.ExternalLandingZone))
{
LoadedConfig.ExternalLandingZone = Path.Combine(LoadedConfig.DebugTestingFolder, "ExternalLandingZone");
}
if (!string.IsNullOrWhiteSpace(LoadedConfig.DataRouterLandingZone))
{
LoadedConfig.DataRouterLandingZone = Path.Combine(LoadedConfig.DebugTestingFolder, "DataRouterLandingZone");
}
if (!string.IsNullOrWhiteSpace(LoadedConfig.PS4LandingZone))
{
LoadedConfig.PS4LandingZone = Path.Combine(LoadedConfig.DebugTestingFolder, "PS4LandingZone");
}
if (!string.IsNullOrWhiteSpace(LoadedConfig.MDDExecutablePath))
{
LoadedConfig.MDDExecutablePath = Path.Combine(LoadedConfig.DebugTestingFolder, "MinidumpDiagnostics", "Engine", "Binaries", "Win64", "MinidumpDiagnostics.exe");
}
LoadedConfig.VersionString += " debugbuild";
LoadedConfig.AWSCredentialsFilepath = Path.Combine(LoadedConfig.DebugTestingFolder, "AWS", "credentials.ini");
if (!string.IsNullOrWhiteSpace(LoadedConfig.ProcessedReportsIndexPath))
{
LoadedConfig.ProcessedReportsIndexPath = Path.Combine(LoadedConfig.DebugTestingFolder, "ProcessedReports.ini");
}
LoadedConfig.CrashReportWebSite = string.Empty;
LoadedConfig.AWSS3OutputKeyPrefix = LoadedConfig.AWSS3OutputKeyPrefix.Replace("prod", "test");
LoadedConfig.AWSS3InvalidKeyPrefix = LoadedConfig.AWSS3InvalidKeyPrefix.Replace("prod", "test");
LoadedConfig.MinDesiredMemoryQueueSize = 5;
LoadedConfig.MaxMemoryQueueSize = 15;
#if SLACKTESTING
LoadedConfig.SlackUsername = "CrashReportProcess_TESTING_IgnoreMe";
//LoadedConfig.SlackChannel = "OPTIONALTESTINGCHANNELHERE";
#else
LoadedConfig.SlackWebhookUrl = string.Empty; // no Slack in dbeug
#endif
#endif
return LoadedConfig;
}
private static Config DefaultSingleton;
}
}