Skip to content

Uplinkr Release Notes and Changelog

v0.3.0 - I’m alive and settings management

Section titled “v0.3.0 - I’m alive and settings management”

Global I’m alive configuration via settings.json

Section titled “Global I’m alive configuration via settings.json”
  • Added global uplinkr/settings.json management for I’m alive behavior
  • Added uplinkr:settings command options for I’m alive:
    • enable/disable
    • interval in hours (1-24)
    • channels (mail, log, webhook)
  • uplinkr:install can enable/configure I’m alive directly via:
    • --iam-alive
    • --iam-alive-interval-hours=...
    • --iam-alive-channels=...

I’m alive scheduling and channel behavior

Section titled “I’m alive scheduling and channel behavior”
  • I’m alive scheduler registration now reads from global uplinkr/settings.json
  • If iam_alive.enabled = true and uplinkr.scheduler.enabled = true, uplinkr:iam-alive is auto-registered in scheduler
  • Interval is hour-based (1-24) and evaluated at runtime via last_sent_at, so the configured cadence is respected for all values.
  • I’m alive now supports the same notification channels as checks:
    • mail
    • log
    • webhook

I’m alive notification payload/content expansion

Section titled “I’m alive notification payload/content expansion”
  • Added cross-project summary data in I’m alive notifications:
    • active projects (status=enabled)
    • configured probes/checks (sum from all project settings.json probe entries)
    • successful checks (current state entries with consecutive_failures = 0)
    • failed checks (current state entries with consecutive_failures > 0)
  • Mail output now contains a short friendly all-ok text and a readable current iam_alive settings section (without the Enabled line).
  • Log and webhook payloads now include the same summary/settings data for consistent observability
  • Added iam_alive.last_sent_at in global settings.json and update it after successful heartbeat dispatch
  • uplinkr:settings output now shows last_sent_at
  • Expanded uplinkr:project:list to render project details from settings.json and state summary data from state.json
  • Added project header output with project, label, and status (enabled/disabled)
  • Added colorized status rendering in CLI output (enabled in green, non-enabled in red)
  • Added optional description line per project
  • Added alerts table output from settings.json > alerts
  • Added probes/checks table output from settings.json > probes
  • Added state table output from state.json with total_failures and last_notification
  • Added --project option to display only one project
  • If --project does not match, command now prints a hint and lists all available project names
  • Moved project:list output strings into language keys in resources/lang/en/messages.php
  • uplinkr:iam-alive now resolves config at runtime to avoid stale singleton-config edge cases in longer test/runtime processes
  • uplinkr:iam-alive now only updates last_sent_at when at least one effectively enabled delivery channel is available.
  • Scheduler execution for I’m alive now respects configured hour intervals consistently, including values that do not divide 24.

v0.2.1 — Scheduler safety for async probe execution

Section titled “v0.2.1 — Scheduler safety for async probe execution”
  • Added scheduler.alert_cron as a separate cron expression for uplinkr:project:alert:decision
  • Default scheduler.alert_cron is now */2 * * * * to give queued probe jobs more time to persist fresh state.json data
  • Setting scheduler.alert_cron to null reuses the main scheduler.cron schedule
  • uplinkr:project:alert:decision is no longer scheduled with runInBackground()
  • Reduces the risk of stale state.json reads when async (job) probe execution returns before queue workers persist probe state

v0.2.0 — TLS, async execution & alert quality improvements

Section titled “v0.2.0 — TLS, async execution & alert quality improvements”
  • Added async probe execution via queue jobs (execution_mode: direct or job)
  • Added new uplinkr:config command to inspect effective configuration
  • Added TLS metadata field probe_tls_expiration_date in probe results
  • Added project-level alert notification aggregation (reduced alert noise)
  • Added aggregated notification rendering with deterministic probe ordering
  • Added configurable probe-result JSON formatting (pretty_print_probe_results)
  • probes.execution_mode
  • probes.queue_connection
  • storage.pretty_print_probe_results
  • Added explicit Composer requirement ext-openssl for TLS certificate parsing support
  • UrlHandler now dispatches jobs when execution_mode = 'job' and returns null for dispatched probe runs
  • UplinkrConfig now includes probeExecutionMode, probeQueueConnection, and shouldExecuteProbesAsJob()
  • HandlesProbeOutput now handles null results and shows clearer feedback for queued probe dispatching
  • probe_tls_expiration_date is now propagated into alert notification payloads (mail, webhook, log)
  • Project handlers were reorganized into focused namespaces (Analyze, Archive, Probes) with updated imports/bindings/tests
  • AlertDecisionHandler now persists alert state immediately after each successfully delivered grouped notification batch to reduce duplicate alerts on partial failures
  • Persisted probe_tls_expiration_date into state.json probe entries for reliable alert decision access
  • Aggregated mail output now renders n/a when TLS expiration is null
  • uplinkr:config output now escapes keys/values to avoid console markup parsing and shows empty arrays as []
  • AnalyzeHandler::extractDateFromFilename() now respects the configured probe filename separator
  • PruneHandler now parses probe-result dates according to configured grouping (daily, hourly, monthly)
  • Added backward-compatible normalization from legacy header to headers in project storage and values
  • Extended probe/job execution test coverage (direct mode, job mode, and executeProbe())
  • Added coverage for TLS metadata propagation, aggregated alert notifications/log output, and deterministic probe ordering
  • Added coverage for configurable probe-result JSON pretty printing and config command escaping
  • Added coverage for custom filename separators, hourly pruning, and header key normalization
  • No breaking changes
  • Default behavior remains synchronous (execution_mode=direct)
  • Existing storage behavior remains unchanged by default (pretty_print_probe_results = true)

v0.1.2 — Stability & compatibility fixes

Section titled “v0.1.2 — Stability & compatibility fixes”

This patch release focuses on configuration safety, clearer error handling, and general code quality improvements. No new features are introduced; existing behavior is preserved while preventing unintended breaking changes.

  • User-Agent configuration for HTTP probes

  • Implemented configurable user_agent support for HTTP-based probes.

  • Constructor compatibility safeguard

  • Moved the userAgent parameter to the end of the UplinkrConfig constructor.

  • Prevents breaking changes by maintaining positional argument compatibility for existing constructor calls.

  • Improved error logging

  • Added explicit error logging when invalid JSON data is encountered.

  • Corrected analysis failure messaging

  • Fixed incorrect string output used for failed analyses in result messages.

  • General code cleanup

  • Minor refactoring and cleanup to improve readability and maintainability.

  • No breaking changes
  • Recommended update for all users

This patch release improves resilience in containerized environments where filesystem permission issues can affect access to storage/app/uplinkr.

  • League\Flysystem\UnableToListContents is now explicitly handled during project directory listing.
  • Instead of aborting execution, Uplinkr now falls back gracefully to an empty result ([]).
  • A warning log entry is emitted to make the fallback reason visible to operators.

When storage listing fails, Uplinkr logs a warning with structured context:

  • disk
  • storage_path
  • reason (original exception message)
  • No breaking changes.
  • CLI commands remain stable and do not crash on listing permission failures.
  • Improved observability through explicit warning logs.

If this warning appears, verify:

  • Runtime user permissions (for example: www-data)
  • Owner/group configuration of mounted storage directories
  • Container mount options (read/write access, UID/GID mapping)
  • Added a unit test covering the exception path and verifying warning log emission.
  • Updated README, CHANGELOG and CONTRIBUTING for clarity and consistency.

  • CLI-first monitoring for URLs and APIs
  • Project and probe management
  • File-based JSON storage
  • Alert configuration with log, mail and webhook channels
  • Scheduler integration for automated probe execution
  • Prune tooling for old results
  • Minimal result summaries (experimental)

Notes

  • Requires PHP 8.2+ and Laravel 12
  • Early MVP — API and behavior may evolve
  • No breaking changes