Preserve connector source runtime evidence
This commit is contained in:
@@ -164,6 +164,21 @@ export type DatasourceOrigin = {
|
||||
updated_at?: string | null;
|
||||
capabilities: string[];
|
||||
metadata: Record<string, unknown>;
|
||||
source_mode: "live" | "cached" | "file_backed" | "static";
|
||||
pushdown: {
|
||||
projections: boolean;
|
||||
pagination: boolean;
|
||||
filters: string[];
|
||||
aggregations: string[];
|
||||
sorting: string[];
|
||||
};
|
||||
health: {
|
||||
status: "healthy" | "warning" | "error" | "unknown";
|
||||
code: string;
|
||||
summary: string;
|
||||
checked_at?: string | null;
|
||||
details: Record<string, unknown>;
|
||||
};
|
||||
};
|
||||
|
||||
export type DatasourcePreview = {
|
||||
@@ -172,6 +187,17 @@ export type DatasourcePreview = {
|
||||
total_rows: number;
|
||||
truncated: boolean;
|
||||
materialization?: DatasourceMaterialization | null;
|
||||
returned_bytes: number;
|
||||
elapsed_ms: number;
|
||||
effective_row_limit: number;
|
||||
effective_byte_limit: number;
|
||||
effective_timeout_ms: number;
|
||||
diagnostics: Array<{
|
||||
severity: "info" | "warning" | "error";
|
||||
code: string;
|
||||
message: string;
|
||||
details: Record<string, unknown>;
|
||||
}>;
|
||||
};
|
||||
|
||||
export async function listDatasources(
|
||||
|
||||
@@ -834,7 +834,8 @@ function OriginDetail({ origin }: { origin: DatasourceOrigin }) {
|
||||
<>
|
||||
<div className="datasources-metrics">
|
||||
<Metric label="Provider" value={origin.provider} />
|
||||
<Metric label="Kind" value={origin.kind} />
|
||||
<Metric label="Mode" value={readableToken(origin.source_mode)} />
|
||||
<Metric label="Health" value={readableToken(origin.health.status)} />
|
||||
<Metric label="Rows" value={formatNumber(origin.row_count)} />
|
||||
<Metric label="Fields" value={String(origin.schema.length)} />
|
||||
<Metric label="Updated" value={formatDate(origin.updated_at)} />
|
||||
@@ -849,8 +850,11 @@ function OriginDetail({ origin }: { origin: DatasourceOrigin }) {
|
||||
</div>
|
||||
<div className="datasources-key-values">
|
||||
<span><small>Origin reference</small><strong>{origin.ref}</strong></span>
|
||||
<span><small>Shape</small><strong>{origin.shape}</strong></span>
|
||||
<span><small>Kind</small><strong>{readableToken(origin.kind)}</strong></span>
|
||||
<span><small>Shape</small><strong>{readableToken(origin.shape)}</strong></span>
|
||||
<span><small>Fingerprint</small><strong>{shortFingerprint(origin.fingerprint)}</strong></span>
|
||||
<span><small>Health</small><strong>{origin.health.summary}</strong></span>
|
||||
<span><small>Pushdown</small><strong>{pushdownSummary(origin)}</strong></span>
|
||||
</div>
|
||||
</section>
|
||||
<section className="datasources-detail-section">
|
||||
@@ -864,6 +868,17 @@ function OriginDetail({ origin }: { origin: DatasourceOrigin }) {
|
||||
);
|
||||
}
|
||||
|
||||
function pushdownSummary(origin: DatasourceOrigin): string {
|
||||
const capabilities = [
|
||||
origin.pushdown.projections ? "projections" : "",
|
||||
origin.pushdown.pagination ? "pagination" : "",
|
||||
...origin.pushdown.filters.map((item) => `filter:${item}`),
|
||||
...origin.pushdown.aggregations.map((item) => `aggregate:${item}`),
|
||||
...origin.pushdown.sorting.map((item) => `sort:${item}`)
|
||||
].filter(Boolean);
|
||||
return capabilities.join(", ") || "None declared";
|
||||
}
|
||||
|
||||
function GovernanceDialog({
|
||||
open,
|
||||
settings,
|
||||
|
||||
Reference in New Issue
Block a user