PlatformDataConsoleService
in package
FinalYes
Executes the platform admin data console's allowlisted read-only queries.
Table of Contents
Constants
- DEFAULT_LIMIT : mixed = 25
- MAX_LIMIT : mixed = 100
-
QUERIES
: array<string, array{label: string, description: string, sql: string, columns: list
}> = ['tenants' => ['label' => 'Tenants', 'descripti...
Properties
- $connection : Connection
Methods
- __construct() : mixed
- Constructor.
- queryList() : array<string, array{label: string, description: string}>
- Return query metadata for UI selection.
-
run()
: array{query: string, label: string, description: string, columns: list
, rows: list >, page: int, limit: int, hasNext: bool} - isSensitiveKey() : bool
- Return whether a column or JSON field name should never be displayed.
- scrubRows() : array<int, array<string, mixed>>
- scrubString() : string
- Redact scalar strings that look like they contain secrets.
- scrubValue() : mixed
- Scrub one value by key name and secret-like scalar content.
Constants
DEFAULT_LIMIT
private
mixed
DEFAULT_LIMIT
= 25
MAX_LIMIT
private
mixed
MAX_LIMIT
= 100
QUERIES
private
array<string, array{label: string, description: string, sql: string, columns: list}>
QUERIES
= ['tenants' => ['label' => 'Tenants', 'description' => 'Tenant registry metadata without database credentials or feature configuration.', 'columns' => ['id', 'slug', 'display_name', 'status', 'region', 'primary_host', 'schema_version', 'created_at', 'activated_at', 'suspended_at', 'archived_at'], 'sql' => 'SELECT id, slug, display_name, status, region, primary_host, schema_version,
created_at, activated_at, suspended_at, archived_at
FROM tenants
ORDER BY display_name ASC, slug ASC'], 'jobs' => ['label' => 'Jobs', 'description' => 'Platform job status with sensitive parameters and error text reduced to indicators.', 'columns' => ['id', 'job_type', 'status', 'tenant_slug', 'created_at', 'started_at', 'finished_at', 'has_error'], 'sql' => 'SELECT j.id, j.job_type, j.status, t.slug AS tenant_slug, j.created_at,
j.started_at, j.finished_at,
CASE WHEN j.last_error IS NULL OR j.last_error = :empty THEN 0 ELSE 1 END AS has_error
FROM platform_jobs j
LEFT JOIN tenants t ON t.id = j.tenant_id
ORDER BY j.created_at DESC, j.id ASC'], 'schedules' => ['label' => 'Schedules', 'description' => 'Schedule cadence and status without raw failure details.', 'columns' => ['name', 'cron_expression', 'command', 'enabled', 'tenant_scope', 'tenant_slug', 'status', 'last_run_at', 'next_run_at', 'last_success_at', 'last_failure_at', 'has_error'], 'sql' => 'SELECT s.name, s.cron_expression, s.command, s.enabled, s.tenant_scope,
t.slug AS tenant_slug, s.status, s.last_run_at, s.next_run_at,
s.last_success_at, s.last_failure_at,
CASE WHEN s.last_error IS NULL OR s.last_error = :empty THEN 0 ELSE 1 END AS has_error
FROM platform_schedules s
LEFT JOIN tenants t ON t.id = s.tenant_id
ORDER BY s.enabled DESC, s.next_run_at ASC, s.name ASC'], 'backups' => ['label' => 'Backups', 'description' => 'Tenant and platform backup status without object URIs or encryption material.', 'columns' => ['backup_scope', 'id', 'tenant_slug', 'resource_name', 'backup_type', 'status', 'object_size_bytes', 'created_at', 'completed_at', 'retention_until'], 'sql' => "SELECT 'tenant' AS backup_scope, b.id, t.slug AS tenant_slug, NULL AS resource_name, " . "b.backup_type, b.status, b.object_size_bytes, b.created_at, b.completed_at, b.retention_until\n FROM tenant_backups b\n JOIN tenants t ON t.id = b.tenant_id\n UNION ALL\n SELECT 'platform' AS backup_scope, id, NULL AS tenant_slug, database_name AS resource_name,\n backup_type, status, object_size_bytes, created_at, completed_at, retention_until\n FROM platform_database_backups\n ORDER BY created_at DESC, id ASC"], 'audit_summaries' => ['label' => 'Audit summaries', 'description' => 'Grouped platform audit activity for operations review.', 'columns' => ['action', 'subject_type', 'event_count', 'latest_at'], 'sql' => 'SELECT action, subject_type, COUNT(*) AS event_count, MAX(created_at) AS latest_at
FROM audit_events
GROUP BY action, subject_type
ORDER BY latest_at DESC, action ASC']]
Properties
$connection read-only
private
Connection
$connection
Methods
__construct()
Constructor.
public
__construct(Connection $connection) : mixed
Parameters
- $connection : Connection
-
Platform metadata connection
queryList()
Return query metadata for UI selection.
public
queryList() : array<string, array{label: string, description: string}>
Return values
array<string, array{label: string, description: string}>run()
public
run(string $queryName[, int $page = 1 ][, int $limit = self::DEFAULT_LIMIT ]) : array{query: string, label: string, description: string, columns: list, rows: list>, page: int, limit: int, hasNext: bool}
Parameters
- $queryName : string
- $page : int = 1
- $limit : int = self::DEFAULT_LIMIT
Return values
array{query: string, label: string, description: string, columns: listisSensitiveKey()
Return whether a column or JSON field name should never be displayed.
private
isSensitiveKey(string $key) : bool
Parameters
- $key : string
Return values
boolscrubRows()
private
scrubRows(array<int, array<string, mixed>> $rows) : array<int, array<string, mixed>>
Parameters
- $rows : array<int, array<string, mixed>>
Return values
array<int, array<string, mixed>>scrubString()
Redact scalar strings that look like they contain secrets.
private
scrubString(string $value) : string
Parameters
- $value : string
Return values
stringscrubValue()
Scrub one value by key name and secret-like scalar content.
private
scrubValue(string $key, mixed $value) : mixed
Parameters
- $key : string
- $value : mixed