Skip to content

Probe Result Data Files and Structure

Probe data files contain the detailed results of executed health checks. Each file represents a single execution cycle and includes results for all probes configured in the project.

storage/app/private/uplinkr/<project-name>/probes/<url-name>@<timestamp>.json

Probe files follow this naming pattern:

<sanitized-url>@<timestamp>.json

Examples:

uplinkr_dev@2026-01-30-12.json
api_test_uplinkr_dev@2026-01-30-21.json
health_check_example_com@2026-02-01-08.json

URLs are sanitized for filesystem compatibility:

  • Protocol removed (https:// → “)
  • Dots replaced with underscores (example.comexample_com)
  • Slashes replaced with underscores (/api/health_api_health)
  • Special characters removed or replaced

Format: YYYY-MM-DD-HH (hourly granularity)

Example: 2026-01-30-12 = January 30, 2026 at 12:00

Each probe file contains an array of probe results:

[
{
"status_header": 200,
"headers": {...},
"probe_id": "uuid",
"probe_message": {...},
"probe_status": "healthy",
"time_to_load": 0.123,
"executed": "2026-01-30T12:00:00.971032Z",
"probe_tls_expiration_date": "2027-01-01T00:00:00+00:00",
"settings": {...}
},
...
]
FieldTypeDescription
status_headerintegerHTTP status code (200, 404, 500, etc.)
headersobjectResponse headers from the probe request
probe_idstringUnique identifier (UUID) for this probe execution
probe_messageobjectLocalized message and timing information
probe_statusstringHealth status: healthy, unreachable, slow, failed
time_to_loadfloatResponse time in seconds
executedstringISO 8601 timestamp of execution
probe_tls_expiration_datestring|nullTLS certificate expiration date for HTTPS probes (if available)
settingsobjectProbe configuration used for this check

Response headers are stored as key-value pairs with arrays for values:

{
"Content-Type": ["application/json"],
"Content-Length": ["1234"],
"X-Custom-Header": ["value1", "value2"]
}
{
"lang_key": "messages.probe_healthy",
"duration_ms": 123.45,
"duration_s": 0.12
}
FieldTypeDescription
lang_keystringTranslation key for status message
duration_msfloatResponse time in milliseconds
duration_sfloatResponse time in seconds

Contains the probe configuration that was used:

{
"url": "https://example.com/health",
"project": "my-project",
"method": "GET",
"headers": [],
"body": null
}

Legacy note: Older entries may still contain header; Uplinkr normalizes this to headers for compatibility.

StatusDescription
healthyResponse received with expected status code
unreachableTarget could not be reached (DNS, network, timeout)
slowResponse received but exceeded latency threshold
failedReceived response but with error status code
{
"status_header": 404,
"headers": {
"Content-Type": ["text/html"],
"Content-Length": ["1271"],
"Connection": ["keep-alive"],
"Date": ["Fri, 30 Jan 2026 12:00:00 GMT"],
"Server": ["Apache"]
},
"probe_id": "0e910eb9-73ca-4981-af44-df6d99050908",
"probe_message": {
"lang_key": "messages.probe_unreachable",
"duration_ms": 178.73,
"duration_s": 0.18
},
"probe_status": "unreachable",
"time_to_load": 0.1787271499633789,
"executed": "2026-01-30T12:00:00.971032Z",
"settings": {
"url": "https://uplinkr.dev/health",
"project": "uplinkr-dev-api-test",
"method": "GET",
"headers": [],
"body": null
}
}

Probe files can grow large depending on:

  • Number of probes per project
  • Response header sizes
  • Execution frequency

Typical sizes:

  • Small project (5 probes): ~50-100 KB per file
  • Medium project (20 probes): ~200-500 KB per file
  • Large project (50+ probes): 1+ MB per file

Large probe files may:

  • Slow down file reads when analyzing historical data
  • Consume significant disk space over time
  • Impact backup durations

Recommendations:

  • Archive old probe data periodically
  • Monitor disk usage in high-frequency scenarios
  • Consider retention policies for probe data

Remove old probe files:

Terminal window
# Remove probe files older than 30 days
find storage/app/private/uplinkr/*/probes/ -name "*.json" -mtime +30 -delete

Use Uplinkr’s archiving feature:

Terminal window
php artisan uplinkr:project:archive my-project

This copies the project directory (including probe data) to the archived/ folder.

Probe data enables:

  • Trend analysis over time
  • Incident investigation
  • Performance baseline establishment
  • SLA compliance verification

When investigating issues:

  1. Locate the timestamp of the incident
  2. Find corresponding probe file: <url>@<timestamp>.json
  3. Examine headers, status_header, and time_to_load
  4. Check probe_message for detailed error information

Parse probe files for custom reports:

Terminal window
# Count failed probes in the last day
find storage/app/private/uplinkr/my-project/probes/ -name "*.json" -mtime -1 \
-exec jq '[.[] | select(.probe_status == "failed")] | length' {} \;