{
  "Status": "Success",
  "Service": {},
  "Runtime": {
    "Pid": 1,
    "Process": "dotnet",
    "Release": "/usr/share/dotnet/dotnet",
    "Version": "1.0.0",
    "UpTime": "2,345,686.77s",
    "Memory": "358,884.00 MB",
    "Cwd": "/app"
  },
  "Host": {
    "Hostname": "capp-d-suk0-murphy-api--0000047-c96b858f6-zfn7q",
    "OS": "Debian GNU/Linux 12 (bookworm)",
    "Arch": 1
  },
  "Logs": {
    "LatestErrors": [],
    "Messages": [
      {
        "LoggedAt": "2026-05-27T10:54:24.1473145+00:00",
        "Level": "Debug",
        "Message": "2026-05-27 10:54:24.147 +00:00 [Debug] Exiting LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) method. Returned status code 200.\n"
      },
      {
        "LoggedAt": "2026-05-27T10:54:24.1472079+00:00",
        "Level": "Information",
        "Message": "2026-05-27 10:54:24.147 +00:00 [Information] Model is valid. Executing LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) action ...\n"
      },
      {
        "LoggedAt": "2026-05-27T10:54:24.1471098+00:00",
        "Level": "Information",
        "Message": "2026-05-27 10:54:24.147 +00:00 [Information] Validating model for LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) action ...\n"
      },
      {
        "LoggedAt": "2026-05-27T10:54:24.1469697+00:00",
        "Level": "Debug",
        "Message": "2026-05-27 10:54:24.146 +00:00 [Debug] Entering LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) method\n"
      },
      {
        "LoggedAt": "2026-05-27T10:04:48.3887026+00:00",
        "Level": "Debug",
        "Message": "2026-05-27 10:04:48.388 +00:00 [Debug] Exiting LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) method. Returned status code 200.\n"
      },
      {
        "LoggedAt": "2026-05-27T10:04:48.3875493+00:00",
        "Level": "Information",
        "Message": "2026-05-27 10:04:48.387 +00:00 [Information] Model is valid. Executing LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) action ...\n"
      },
      {
        "LoggedAt": "2026-05-27T10:04:48.3873196+00:00",
        "Level": "Information",
        "Message": "2026-05-27 10:04:48.387 +00:00 [Information] Validating model for LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) action ...\n"
      },
      {
        "LoggedAt": "2026-05-27T10:04:48.3386557+00:00",
        "Level": "Debug",
        "Message": "2026-05-27 10:04:48.338 +00:00 [Debug] Entering LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) method\n"
      },
      {
        "LoggedAt": "2026-05-10T15:06:52.8847858+00:00",
        "Level": "Debug",
        "Message": "2026-05-10 15:06:52.884 +00:00 [Debug] Exiting LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) method. Returned status code 200.\n"
      },
      {
        "LoggedAt": "2026-05-10T15:06:52.8846111+00:00",
        "Level": "Information",
        "Message": "2026-05-10 15:06:52.884 +00:00 [Information] Model is valid. Executing LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) action ...\n"
      },
      {
        "LoggedAt": "2026-05-10T15:06:52.8845078+00:00",
        "Level": "Information",
        "Message": "2026-05-10 15:06:52.884 +00:00 [Information] Validating model for LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) action ...\n"
      },
      {
        "LoggedAt": "2026-05-10T15:06:52.882885+00:00",
        "Level": "Debug",
        "Message": "2026-05-10 15:06:52.882 +00:00 [Debug] Entering LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) method\n"
      },
      {
        "LoggedAt": "2026-05-06T11:26:40.2054581+00:00",
        "Level": "Debug",
        "Message": "2026-05-06 11:26:40.205 +00:00 [Debug] Exiting LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) method. Returned status code 200.\n"
      },
      {
        "LoggedAt": "2026-05-06T11:26:40.2024631+00:00",
        "Level": "Information",
        "Message": "2026-05-06 11:26:40.202 +00:00 [Information] Model is valid. Executing LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) action ...\n"
      },
      {
        "LoggedAt": "2026-05-06T11:26:40.2022695+00:00",
        "Level": "Information",
        "Message": "2026-05-06 11:26:40.202 +00:00 [Information] Validating model for LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) action ...\n"
      },
      {
        "LoggedAt": "2026-05-06T11:26:40.1949169+00:00",
        "Level": "Debug",
        "Message": "2026-05-06 11:26:40.194 +00:00 [Debug] Entering LittleBlocks.AspNetCore.Logging.SeriLog.LoggingController.Get (LittleBlocks.AspNetCore) method\n"
      },
      {
        "LoggedAt": "2026-04-30T22:02:01.4650352+00:00",
        "Level": "Debug",
        "Message": "2026-04-30 22:02:01.465 +00:00 [Debug] Exiting Murphy.API.WebApi.Controllers.FxController.Post (Murphy.API.WebApi) method. Returned status code 200.\n"
      },
      {
        "LoggedAt": "2026-04-30T22:02:01.4614219+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:02:01.461 +00:00 [Information] 26348 rates has been downloaded\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:55.2414565+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:55.241 +00:00 [Information] Calculate Ltm Average rates\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:55.2384719+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:55.238 +00:00 [Information] FX rates processing completed successfully\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:52.0640449+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:52.064 +00:00 [Information] Inserted 224 new rates\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:52.0397223+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:52.039 +00:00 [Information] Updated 5054 existing rates\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:52.0233511+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:52.023 +00:00 [Information] Processing upsert for 5536 downloaded rates\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:52.0184552+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:52.018 +00:00 [Information] Building existing rates lookup dictionary\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:52.0179293+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:52.017 +00:00 [Information] No duplicate rates found in database\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:51.9546387+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:51.954 +00:00 [Information] Found 5318 existing rates in database\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:50.8541355+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:50.854 +00:00 [Information] Fetching existing rates from database\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:50.8530074+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:50.853 +00:00 [Information] Processing FX rates from 2024-05-31 to 2026-04-30\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:49.3311699+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:49.331 +00:00 [Information] Downloaded 5536 FX rates\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:47.6597711+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:47.659 +00:00 [Information] Download the exchange rates\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:47.6584359+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:47.658 +00:00 [Information] Downloading ECB fx rates for the last 24 months\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:47.6571149+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:47.657 +00:00 [Information] Downloading FX rates for the last 24 months\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:47.6562192+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:47.656 +00:00 [Information] Starting FX rates download process for 24 months\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:47.5207289+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:47.520 +00:00 [Information] Model is valid. Executing Murphy.API.WebApi.Controllers.FxController.Post (Murphy.API.WebApi) action ...\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:47.5197726+00:00",
        "Level": "Information",
        "Message": "2026-04-30 22:00:47.519 +00:00 [Information] Validating model for Murphy.API.WebApi.Controllers.FxController.Post (Murphy.API.WebApi) action ...\n"
      },
      {
        "LoggedAt": "2026-04-30T22:00:47.5182772+00:00",
        "Level": "Debug",
        "Message": "2026-04-30 22:00:47.518 +00:00 [Debug] Entering Murphy.API.WebApi.Controllers.FxController.Post (Murphy.API.WebApi) method\n"
      },
      {
        "LoggedAt": "2026-04-30T17:59:14.4997131+00:00",
        "Level": "Warning",
        "Message": "2026-04-30 17:59:14.499 +00:00 [Warning] Failed to determine the https port for redirect.\n"
      },
      {
        "LoggedAt": "2026-04-30T08:21:06.4428905+00:00",
        "Level": "Warning",
        "Message": "2026-04-30 08:21:06.442 +00:00 [Warning] No XML encryptor configured. Key {31b0e544-a77c-4ae8-86d8-ba019043567c} may be persisted to storage in unencrypted form.\n"
      },
      {
        "LoggedAt": "2026-04-30T08:21:06.4327128+00:00",
        "Level": "Warning",
        "Message": "2026-04-30 08:21:06.432 +00:00 [Warning] Storing keys in a directory '\"/home/app/.aspnet/DataProtection-Keys\"' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed. For more information go to https://aka.ms/aspnet/dataprotectionwarning\n"
      },
      {
        "LoggedAt": "2026-04-30T08:21:06.4001096+00:00",
        "Level": "Warning",
        "Message": "2026-04-30 08:21:06.400 +00:00 [Warning] The WebRootPath was not found: \"/app/wwwroot\". Static files may be unavailable.\n"
      }
    ]
  }
}