From 144eef0de4766dbf77c5792b19344895073f19e5 Mon Sep 17 00:00:00 2001 From: Thomas Hardy Date: Tue, 22 Mar 2022 12:19:43 -0400 Subject: [PATCH] ui: set index created time as last used time Previously, database table page on db-console displayed "Never" when there was no Last Read or Last Reset timestamp. This change sets the default message to display the creation time of the timestamp if it exists. Release note (ui change): add index created time as an option on the db-console database table page --- .../databaseTablePage.stories.tsx | 6 ++++ .../databaseTablePage/databaseTablePage.tsx | 21 +++++------ .../databases/databaseTablePage/redux.spec.ts | 35 ++++++++++++++++--- .../databases/databaseTablePage/redux.ts | 14 ++++++-- .../db-console/src/views/databases/utils.ts | 2 +- 5 files changed, 56 insertions(+), 22 deletions(-) diff --git a/pkg/ui/workspaces/cluster-ui/src/databaseTablePage/databaseTablePage.stories.tsx b/pkg/ui/workspaces/cluster-ui/src/databaseTablePage/databaseTablePage.stories.tsx index bb444ba90f9d..2ca1ba08f21a 100644 --- a/pkg/ui/workspaces/cluster-ui/src/databaseTablePage/databaseTablePage.stories.tsx +++ b/pkg/ui/workspaces/cluster-ui/src/databaseTablePage/databaseTablePage.stories.tsx @@ -126,6 +126,12 @@ const withData: DatabaseTablePageProps = { lastUsedType: "reset", indexName: "secondary", }, + { + totalReads: 0, + lastUsed: moment("2022-03-12T14:31:00Z"), + lastUsedType: "created", + indexName: "secondary", + }, ], lastReset: moment("2021-09-04T13:55:00Z"), }, diff --git a/pkg/ui/workspaces/cluster-ui/src/databaseTablePage/databaseTablePage.tsx b/pkg/ui/workspaces/cluster-ui/src/databaseTablePage/databaseTablePage.tsx index 5c8cf2d89c23..f27b0aea809c 100644 --- a/pkg/ui/workspaces/cluster-ui/src/databaseTablePage/databaseTablePage.tsx +++ b/pkg/ui/workspaces/cluster-ui/src/databaseTablePage/databaseTablePage.tsx @@ -239,24 +239,19 @@ export class DatabaseTablePage extends React.Component< } private getLastUsedString(indexStat: IndexStat) { - const lastReset = this.props.indexStats.lastReset; + // This case only occurs when we have no reads, resets, or creation time on + // the index. + if (indexStat.lastUsed.isSame(this.minDate)) { + return "Never"; + } switch (indexStat.lastUsedType) { + case "created": + case "reset": case "read": return formatDate( indexStat.lastUsed, - "[Last read:] MMM DD, YYYY [at] h:mm A", + `[Last ${indexStat.lastUsedType}:] MMM DD, YYYY [at] h:mm A`, ); - case "reset": - default: - // TODO(lindseyjin): replace default case with create time after it's added to table_indexes - if (lastReset.isSame(this.minDate)) { - return "Never"; - } else { - return formatDate( - lastReset, - "[Last reset:] MMM DD, YYYY [at] h:mm A", - ); - } } } diff --git a/pkg/ui/workspaces/db-console/src/views/databases/databaseTablePage/redux.spec.ts b/pkg/ui/workspaces/db-console/src/views/databases/databaseTablePage/redux.spec.ts index 42ab5bf7686f..68798409e691 100644 --- a/pkg/ui/workspaces/db-console/src/views/databases/databaseTablePage/redux.spec.ts +++ b/pkg/ui/workspaces/db-console/src/views/databases/databaseTablePage/redux.spec.ts @@ -143,7 +143,7 @@ class TestDriver { } } -describe("Database Table Page", function() { +describe.only("Database Table Page", function() { let driver: TestDriver; beforeEach(function() { @@ -275,8 +275,27 @@ describe("Database Table Page", function() { index_name: "jobs_status_created_idx", index_type: "secondary", }, + { + statistics: { + key: { + table_id: 1, + index_id: 2, + }, + stats: { + total_read_count: new Long(0), + last_read: makeTimestamp("0001-01-01T00:00:00Z"), + total_rows_read: new Long(0), + total_write_count: new Long(0), + last_write: makeTimestamp("0001-01-01T00:00:00Z"), + total_rows_written: new Long(0), + }, + }, + index_name: "index_no_reads_no_resets", + index_type: "secondary", + created_at: makeTimestamp("0001-01-01T00:00:00Z"), + }, ], - last_reset: makeTimestamp("2021-11-12T20:18:22.167627Z"), + last_reset: makeTimestamp("0001-01-01T00:00:00Z"), }); await driver.refreshIndexStats(); @@ -293,10 +312,16 @@ describe("Database Table Page", function() { ), lastUsedType: "read", }, + { + indexName: "index_no_reads_no_resets", + totalReads: 0, + lastUsed: util.TimestampToMoment( + makeTimestamp("0001-01-01T00:00:00Z"), + ), + lastUsedType: "created", + }, ], - lastReset: util.TimestampToMoment( - makeTimestamp("2021-11-12T20:18:22.167627Z"), - ), + lastReset: util.TimestampToMoment(makeTimestamp("0001-01-01T00:00:00Z")), }); }); }); diff --git a/pkg/ui/workspaces/db-console/src/views/databases/databaseTablePage/redux.ts b/pkg/ui/workspaces/db-console/src/views/databases/databaseTablePage/redux.ts index 9b7de1ecee7f..c1e1df497afb 100644 --- a/pkg/ui/workspaces/db-console/src/views/databases/databaseTablePage/redux.ts +++ b/pkg/ui/workspaces/db-console/src/views/databases/databaseTablePage/redux.ts @@ -74,13 +74,21 @@ export const mapStateToProps = createSelector( indexStat.statistics?.stats?.last_read, ); let lastUsed, lastUsedType; - if (lastRead.isAfter(lastReset)) { - lastUsed = lastRead; - lastUsedType = "read"; + if (indexStat.created_at !== null) { + lastUsed = util.TimestampToMoment(indexStat.created_at); + lastUsedType = "created"; } else { lastUsed = lastReset; lastUsedType = "reset"; } + if (lastReset.isAfter(lastUsed)) { + lastUsed = lastReset; + lastUsedType = "reset"; + } + if (lastRead.isAfter(lastUsed)) { + lastUsed = lastRead; + lastUsedType = "read"; + } return { indexName: indexStat.index_name, totalReads: longToInt(indexStat.statistics?.stats?.total_read_count), diff --git a/pkg/ui/workspaces/db-console/src/views/databases/utils.ts b/pkg/ui/workspaces/db-console/src/views/databases/utils.ts index c15255a7a5ec..f79a101c84fe 100644 --- a/pkg/ui/workspaces/db-console/src/views/databases/utils.ts +++ b/pkg/ui/workspaces/db-console/src/views/databases/utils.ts @@ -67,6 +67,6 @@ export function getNodesByRegionString( // makeTimestamp converts a string to a google.protobuf.Timestamp object. export function makeTimestamp(date: string): Timestamp { return new protos.google.protobuf.Timestamp({ - seconds: new Long(Date.parse(date) * 1e-3), + seconds: new Long(new Date(date).getUTCSeconds()), }); }