This commit is contained in:
1 parent
3d5edaa086
commit
27cf50da27
4 files changed
+345
-12
No files matched your search
@@ -15,6 +15,13 @@ type
|
||||
dsiSeekReadConsistency
|
||||
);
|
||||
|
||||
TTerrainReadinessDiagnosticStageId = (
|
||||
trsiRxTilesLoad,
|
||||
trsiMapStreamLoad,
|
||||
trsiMapHeader,
|
||||
trsiTileRecords
|
||||
);
|
||||
|
||||
TOptionalString = record
|
||||
HasValue: Boolean;
|
||||
Value: string;
|
||||
@@ -35,6 +42,11 @@ type
|
||||
Value: TDiagnosticStageId;
|
||||
end;
|
||||
|
||||
TOptionalTerrainReadinessDiagnosticStageId = record
|
||||
HasValue: Boolean;
|
||||
Value: TTerrainReadinessDiagnosticStageId;
|
||||
end;
|
||||
|
||||
TDiagnosticError = record
|
||||
Present: Boolean;
|
||||
ClassName: TOptionalString;
|
||||
@@ -62,6 +74,24 @@ type
|
||||
Stream: TFileIODiagnosticStreamResult;
|
||||
end;
|
||||
|
||||
TTerrainReadinessDiagnosticEvidence = record
|
||||
RxTilesLoaded: TOptionalBoolean;
|
||||
GeneratedTransitionsReady: TOptionalBoolean;
|
||||
MapX: TOptionalInt64;
|
||||
MapY: TOptionalInt64;
|
||||
GameRev: TOptionalInt64;
|
||||
ExpectedTileCount: TOptionalInt64;
|
||||
CompletedTileCount: TOptionalInt64;
|
||||
end;
|
||||
|
||||
TTerrainReadinessDiagnosticResult = record
|
||||
Status: TDiagnosticStatus;
|
||||
FailureStage: TOptionalTerrainReadinessDiagnosticStageId;
|
||||
Error: TDiagnosticError;
|
||||
Stages: array[TTerrainReadinessDiagnosticStageId] of TDiagnosticStatus;
|
||||
Evidence: TTerrainReadinessDiagnosticEvidence;
|
||||
end;
|
||||
|
||||
TDiagnosticApplicationMetadata = record
|
||||
Name: string;
|
||||
PackageName: string;
|
||||
@@ -88,12 +118,17 @@ type
|
||||
SelectedMap: TDiagnosticSelectedMapMetadata;
|
||||
OverallStatus: TDiagnosticStatus;
|
||||
FileIO: TFileIODiagnosticResult;
|
||||
TerrainReadiness: TTerrainReadinessDiagnosticResult;
|
||||
end;
|
||||
|
||||
function CurrentDiagnosticReport: TDiagnosticReportState;
|
||||
procedure ReplaceFileIODiagnosticResult(const AResult: TFileIODiagnosticResult);
|
||||
procedure ReplaceTerrainReadinessDiagnosticResult(
|
||||
const AResult: TTerrainReadinessDiagnosticResult);
|
||||
function DiagnosticStatusToken(const AStatus: TDiagnosticStatus): string;
|
||||
function DiagnosticStageIdToken(const AStage: TDiagnosticStageId): string;
|
||||
function TerrainReadinessDiagnosticStageIdToken(
|
||||
const AStage: TTerrainReadinessDiagnosticStageId): string;
|
||||
function DiagnosticReportJsonSnapshot: string;
|
||||
|
||||
implementation
|
||||
@@ -103,6 +138,7 @@ uses
|
||||
|
||||
var
|
||||
CurrentFileIO: TFileIODiagnosticResult;
|
||||
CurrentTerrainReadiness: TTerrainReadinessDiagnosticResult;
|
||||
|
||||
function DiagnosticStatusToken(const AStatus: TDiagnosticStatus): string;
|
||||
begin
|
||||
@@ -124,6 +160,17 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TerrainReadinessDiagnosticStageIdToken(
|
||||
const AStage: TTerrainReadinessDiagnosticStageId): string;
|
||||
begin
|
||||
case AStage of
|
||||
trsiRxTilesLoad: Result := 'rx_tiles_load';
|
||||
trsiMapStreamLoad: Result := 'map_stream_load';
|
||||
trsiMapHeader: Result := 'map_header';
|
||||
trsiTileRecords: Result := 'tile_records';
|
||||
end;
|
||||
end;
|
||||
|
||||
function CurrentDiagnosticReport: TDiagnosticReportState;
|
||||
begin
|
||||
Result.ApplicationInfo.Name := 'kam_mobile';
|
||||
@@ -138,7 +185,15 @@ begin
|
||||
Result.SelectedMap.RelativePath := SelectedMapRelativePath;
|
||||
Result.SelectedMap.Url := SelectedMapUrl;
|
||||
Result.FileIO := CurrentFileIO;
|
||||
Result.OverallStatus := Result.FileIO.Status;
|
||||
Result.TerrainReadiness := CurrentTerrainReadiness;
|
||||
if (Result.FileIO.Status = dsFail)
|
||||
or (Result.TerrainReadiness.Status = dsFail) then
|
||||
Result.OverallStatus := dsFail
|
||||
else if (Result.FileIO.Status = dsPass)
|
||||
and (Result.TerrainReadiness.Status = dsPass) then
|
||||
Result.OverallStatus := dsPass
|
||||
else
|
||||
Result.OverallStatus := dsNotRun;
|
||||
end;
|
||||
|
||||
procedure ReplaceFileIODiagnosticResult(const AResult: TFileIODiagnosticResult);
|
||||
@@ -146,6 +201,12 @@ begin
|
||||
CurrentFileIO := AResult;
|
||||
end;
|
||||
|
||||
procedure ReplaceTerrainReadinessDiagnosticResult(
|
||||
const AResult: TTerrainReadinessDiagnosticResult);
|
||||
begin
|
||||
CurrentTerrainReadiness := AResult;
|
||||
end;
|
||||
|
||||
function OptionalStringJson(const AValue: TOptionalString): TJSONData;
|
||||
begin
|
||||
if AValue.HasValue then
|
||||
@@ -176,6 +237,8 @@ var
|
||||
Root, ObjectValue, Action, Stage, Stream: TJSONObject;
|
||||
Actions, Stages: TJSONArray;
|
||||
StageId: TDiagnosticStageId;
|
||||
TerrainStageId: TTerrainReadinessDiagnosticStageId;
|
||||
Evidence: TJSONObject;
|
||||
begin
|
||||
State := CurrentDiagnosticReport;
|
||||
Root := TJSONObject.Create;
|
||||
@@ -237,6 +300,49 @@ begin
|
||||
Stream.Add('repeat_equal', OptionalBooleanJson(State.FileIO.Stream.RepeatEqual));
|
||||
Action.Add('stream', Stream);
|
||||
Actions.Add(Action);
|
||||
Action := TJSONObject.Create;
|
||||
Action.Add('id', 'terrain_readiness');
|
||||
Action.Add('status', DiagnosticStatusToken(State.TerrainReadiness.Status));
|
||||
if State.TerrainReadiness.FailureStage.HasValue then
|
||||
Action.Add('failure_stage', TerrainReadinessDiagnosticStageIdToken(
|
||||
State.TerrainReadiness.FailureStage.Value))
|
||||
else
|
||||
Action.Add('failure_stage', TJSONNull.Create);
|
||||
if State.TerrainReadiness.Error.Present then
|
||||
begin
|
||||
ObjectValue := TJSONObject.Create;
|
||||
ObjectValue.Add('class', OptionalStringJson(
|
||||
State.TerrainReadiness.Error.ClassName));
|
||||
ObjectValue.Add('message', OptionalStringJson(
|
||||
State.TerrainReadiness.Error.MessageText));
|
||||
Action.Add('error', ObjectValue);
|
||||
end else
|
||||
Action.Add('error', TJSONNull.Create);
|
||||
Stages := TJSONArray.Create;
|
||||
for TerrainStageId := Low(TTerrainReadinessDiagnosticStageId)
|
||||
to High(TTerrainReadinessDiagnosticStageId) do
|
||||
begin
|
||||
Stage := TJSONObject.Create;
|
||||
Stage.Add('id', TerrainReadinessDiagnosticStageIdToken(TerrainStageId));
|
||||
Stage.Add('status', DiagnosticStatusToken(
|
||||
State.TerrainReadiness.Stages[TerrainStageId]));
|
||||
Stages.Add(Stage);
|
||||
end;
|
||||
Action.Add('stages', Stages);
|
||||
Evidence := TJSONObject.Create;
|
||||
Evidence.Add('rx_tiles_loaded', OptionalBooleanJson(
|
||||
State.TerrainReadiness.Evidence.RxTilesLoaded));
|
||||
Evidence.Add('generated_transitions_ready', OptionalBooleanJson(
|
||||
State.TerrainReadiness.Evidence.GeneratedTransitionsReady));
|
||||
Evidence.Add('map_x', OptionalInt64Json(State.TerrainReadiness.Evidence.MapX));
|
||||
Evidence.Add('map_y', OptionalInt64Json(State.TerrainReadiness.Evidence.MapY));
|
||||
Evidence.Add('game_rev', OptionalInt64Json(State.TerrainReadiness.Evidence.GameRev));
|
||||
Evidence.Add('expected_tile_count', OptionalInt64Json(
|
||||
State.TerrainReadiness.Evidence.ExpectedTileCount));
|
||||
Evidence.Add('completed_tile_count', OptionalInt64Json(
|
||||
State.TerrainReadiness.Evidence.CompletedTileCount));
|
||||
Action.Add('evidence', Evidence);
|
||||
Actions.Add(Action);
|
||||
Root.Add('actions', Actions);
|
||||
Result := Root.AsJSON;
|
||||
finally
|
||||
|
||||
Reference in new issue
Block a user