diff --git a/src/renderer/api/endpoints/helm-releases.api.ts b/src/renderer/api/endpoints/helm-releases.api.ts index 6831c508cb..fb3eae1a79 100644 --- a/src/renderer/api/endpoints/helm-releases.api.ts +++ b/src/renderer/api/endpoints/helm-releases.api.ts @@ -198,10 +198,9 @@ export class HelmRelease implements ItemObject { } getUpdated(humanize = true, compact = true) { - const now = new Date().getTime(); const updated = this.updated.replace(/\s\w*$/, ""); // 2019-11-26 10:58:09 +0300 MSK -> 2019-11-26 10:58:09 +0300 to pass into Date() const updatedDate = new Date(updated).getTime(); - const diff = now - updatedDate; + const diff = Date.now() - updatedDate; if (humanize) { return formatDuration(diff, compact); diff --git a/src/renderer/api/endpoints/persistent-volume.api.ts b/src/renderer/api/endpoints/persistent-volume.api.ts index dd5dbb616e..27a0279a0b 100644 --- a/src/renderer/api/endpoints/persistent-volume.api.ts +++ b/src/renderer/api/endpoints/persistent-volume.api.ts @@ -63,10 +63,12 @@ export class PersistentVolume extends KubeObject { return this.status.phase || "-"; } - getClaimRefName() { - const { claimRef } = this.spec; + getStorageClass(): string { + return this.spec.storageClassName; + } - return claimRef ? claimRef.name : ""; + getClaimRefName(): string { + return this.spec.claimRef?.name ?? ""; } } diff --git a/src/renderer/api/kube-object.ts b/src/renderer/api/kube-object.ts index 4ffd464d91..7d0c34de33 100644 --- a/src/renderer/api/kube-object.ts +++ b/src/renderer/api/kube-object.ts @@ -123,7 +123,7 @@ export class KubeObject implements ItemObject { } getTimeDiffFromNow(): number { - return new Date().getTime() - new Date(this.metadata.creationTimestamp).getTime(); + return Date.now() - new Date(this.metadata.creationTimestamp).getTime(); } getAge(humanize = true, compact = true, fromNow = false): string | number { diff --git a/src/renderer/components/+config-limit-ranges/limit-ranges.tsx b/src/renderer/components/+config-limit-ranges/limit-ranges.tsx index a3b111929a..715bc4430b 100644 --- a/src/renderer/components/+config-limit-ranges/limit-ranges.tsx +++ b/src/renderer/components/+config-limit-ranges/limit-ranges.tsx @@ -30,7 +30,7 @@ export class LimitRanges extends React.Component { sortingCallbacks={{ [columnId.name]: (item: LimitRange) => item.getName(), [columnId.namespace]: (item: LimitRange) => item.getNs(), - [columnId.age]: (item: LimitRange) => item.metadata.creationTimestamp, + [columnId.age]: (item: LimitRange) => item.getTimeDiffFromNow(), }} searchFilters={[ (item: LimitRange) => item.getName(), diff --git a/src/renderer/components/+config-maps/config-maps.tsx b/src/renderer/components/+config-maps/config-maps.tsx index 532532bf53..4d68319147 100644 --- a/src/renderer/components/+config-maps/config-maps.tsx +++ b/src/renderer/components/+config-maps/config-maps.tsx @@ -31,7 +31,7 @@ export class ConfigMaps extends React.Component { [columnId.name]: (item: ConfigMap) => item.getName(), [columnId.namespace]: (item: ConfigMap) => item.getNs(), [columnId.keys]: (item: ConfigMap) => item.getKeys(), - [columnId.age]: (item: ConfigMap) => item.metadata.creationTimestamp, + [columnId.age]: (item: ConfigMap) => item.getTimeDiffFromNow(), }} searchFilters={[ (item: ConfigMap) => item.getSearchFields(), diff --git a/src/renderer/components/+config-resource-quotas/resource-quotas.tsx b/src/renderer/components/+config-resource-quotas/resource-quotas.tsx index 5adfef2edc..3414b74d6a 100644 --- a/src/renderer/components/+config-resource-quotas/resource-quotas.tsx +++ b/src/renderer/components/+config-resource-quotas/resource-quotas.tsx @@ -31,7 +31,7 @@ export class ResourceQuotas extends React.Component { sortingCallbacks={{ [columnId.name]: (item: ResourceQuota) => item.getName(), [columnId.namespace]: (item: ResourceQuota) => item.getNs(), - [columnId.age]: (item: ResourceQuota) => item.metadata.creationTimestamp, + [columnId.age]: (item: ResourceQuota) => item.getTimeDiffFromNow(), }} searchFilters={[ (item: ResourceQuota) => item.getSearchFields(), diff --git a/src/renderer/components/+config-secrets/secrets.tsx b/src/renderer/components/+config-secrets/secrets.tsx index 60158cfb55..e660db3a09 100644 --- a/src/renderer/components/+config-secrets/secrets.tsx +++ b/src/renderer/components/+config-secrets/secrets.tsx @@ -38,7 +38,7 @@ export class Secrets extends React.Component { [columnId.labels]: (item: Secret) => item.getLabels(), [columnId.keys]: (item: Secret) => item.getKeys(), [columnId.type]: (item: Secret) => item.type, - [columnId.age]: (item: Secret) => item.metadata.creationTimestamp, + [columnId.age]: (item: Secret) => item.getTimeDiffFromNow(), }} searchFilters={[ (item: Secret) => item.getSearchFields(), diff --git a/src/renderer/components/+custom-resources/crd-resources.tsx b/src/renderer/components/+custom-resources/crd-resources.tsx index afc6dd87c2..c60a93f063 100644 --- a/src/renderer/components/+custom-resources/crd-resources.tsx +++ b/src/renderer/components/+custom-resources/crd-resources.tsx @@ -57,7 +57,7 @@ export class CrdResources extends React.Component { const sortingCallbacks: { [sortBy: string]: TableSortCallback } = { [columnId.name]: (item: KubeObject) => item.getName(), [columnId.namespace]: (item: KubeObject) => item.getNs(), - [columnId.age]: (item: KubeObject) => item.metadata.creationTimestamp, + [columnId.age]: (item: KubeObject) => item.getTimeDiffFromNow(), }; extraColumns.forEach(column => { diff --git a/src/renderer/components/+namespaces/namespaces.tsx b/src/renderer/components/+namespaces/namespaces.tsx index 3972f3d180..1aeec0fb44 100644 --- a/src/renderer/components/+namespaces/namespaces.tsx +++ b/src/renderer/components/+namespaces/namespaces.tsx @@ -33,7 +33,7 @@ export class Namespaces extends React.Component { sortingCallbacks={{ [columnId.name]: (ns: Namespace) => ns.getName(), [columnId.labels]: (ns: Namespace) => ns.getLabels(), - [columnId.age]: (ns: Namespace) => ns.metadata.creationTimestamp, + [columnId.age]: (ns: Namespace) => ns.getTimeDiffFromNow(), [columnId.status]: (ns: Namespace) => ns.getStatus(), }} searchFilters={[ diff --git a/src/renderer/components/+network-endpoints/endpoints.tsx b/src/renderer/components/+network-endpoints/endpoints.tsx index ce87c14a4a..ae37fd10ae 100644 --- a/src/renderer/components/+network-endpoints/endpoints.tsx +++ b/src/renderer/components/+network-endpoints/endpoints.tsx @@ -30,7 +30,7 @@ export class Endpoints extends React.Component { sortingCallbacks={{ [columnId.name]: (endpoint: Endpoint) => endpoint.getName(), [columnId.namespace]: (endpoint: Endpoint) => endpoint.getNs(), - [columnId.age]: (endpoint: Endpoint) => endpoint.metadata.creationTimestamp, + [columnId.age]: (endpoint: Endpoint) => endpoint.getTimeDiffFromNow(), }} searchFilters={[ (endpoint: Endpoint) => endpoint.getSearchFields() diff --git a/src/renderer/components/+network-ingresses/ingresses.tsx b/src/renderer/components/+network-ingresses/ingresses.tsx index 945f2b8f0a..d934127bca 100644 --- a/src/renderer/components/+network-ingresses/ingresses.tsx +++ b/src/renderer/components/+network-ingresses/ingresses.tsx @@ -31,7 +31,7 @@ export class Ingresses extends React.Component { sortingCallbacks={{ [columnId.name]: (ingress: Ingress) => ingress.getName(), [columnId.namespace]: (ingress: Ingress) => ingress.getNs(), - [columnId.age]: (ingress: Ingress) => ingress.metadata.creationTimestamp, + [columnId.age]: (ingress: Ingress) => ingress.getTimeDiffFromNow(), }} searchFilters={[ (ingress: Ingress) => ingress.getSearchFields(), diff --git a/src/renderer/components/+network-policies/network-policies.tsx b/src/renderer/components/+network-policies/network-policies.tsx index 6899c14558..62b298edcd 100644 --- a/src/renderer/components/+network-policies/network-policies.tsx +++ b/src/renderer/components/+network-policies/network-policies.tsx @@ -30,7 +30,7 @@ export class NetworkPolicies extends React.Component { sortingCallbacks={{ [columnId.name]: (item: NetworkPolicy) => item.getName(), [columnId.namespace]: (item: NetworkPolicy) => item.getNs(), - [columnId.age]: (item: NetworkPolicy) => item.metadata.creationTimestamp, + [columnId.age]: (item: NetworkPolicy) => item.getTimeDiffFromNow(), }} searchFilters={[ (item: NetworkPolicy) => item.getSearchFields(), diff --git a/src/renderer/components/+network-services/services.tsx b/src/renderer/components/+network-services/services.tsx index 740e0bfdf1..c250f7736c 100644 --- a/src/renderer/components/+network-services/services.tsx +++ b/src/renderer/components/+network-services/services.tsx @@ -40,7 +40,7 @@ export class Services extends React.Component { [columnId.ports]: (service: Service) => (service.spec.ports || []).map(({ port }) => port)[0], [columnId.clusterIp]: (service: Service) => service.getClusterIp(), [columnId.type]: (service: Service) => service.getType(), - [columnId.age]: (service: Service) => service.metadata.creationTimestamp, + [columnId.age]: (service: Service) => service.getTimeDiffFromNow(), [columnId.status]: (service: Service) => service.getStatus(), }} searchFilters={[ diff --git a/src/renderer/components/+nodes/nodes.tsx b/src/renderer/components/+nodes/nodes.tsx index 32da6a13db..6237bf4056 100644 --- a/src/renderer/components/+nodes/nodes.tsx +++ b/src/renderer/components/+nodes/nodes.tsx @@ -150,7 +150,7 @@ export class Nodes extends React.Component { [columnId.conditions]: (node: Node) => node.getNodeConditionText(), [columnId.taints]: (node: Node) => node.getTaints().length, [columnId.roles]: (node: Node) => node.getRoleLabels(), - [columnId.age]: (node: Node) => node.metadata.creationTimestamp, + [columnId.age]: (node: Node) => node.getTimeDiffFromNow(), [columnId.version]: (node: Node) => node.getKubeletVersion(), }} searchFilters={[ diff --git a/src/renderer/components/+pod-security-policies/pod-security-policies.tsx b/src/renderer/components/+pod-security-policies/pod-security-policies.tsx index a91e0114d6..affd9f13eb 100644 --- a/src/renderer/components/+pod-security-policies/pod-security-policies.tsx +++ b/src/renderer/components/+pod-security-policies/pod-security-policies.tsx @@ -28,7 +28,7 @@ export class PodSecurityPolicies extends React.Component { [columnId.name]: (item: PodSecurityPolicy) => item.getName(), [columnId.volumes]: (item: PodSecurityPolicy) => item.getVolumes(), [columnId.privileged]: (item: PodSecurityPolicy) => +item.isPrivileged(), - [columnId.age]: (item: PodSecurityPolicy) => item.metadata.creationTimestamp, + [columnId.age]: (item: PodSecurityPolicy) => item.getTimeDiffFromNow(), }} searchFilters={[ (item: PodSecurityPolicy) => item.getSearchFields(), diff --git a/src/renderer/components/+storage-classes/storage-classes.tsx b/src/renderer/components/+storage-classes/storage-classes.tsx index 1a8ed346fd..f4f0432afd 100644 --- a/src/renderer/components/+storage-classes/storage-classes.tsx +++ b/src/renderer/components/+storage-classes/storage-classes.tsx @@ -31,7 +31,7 @@ export class StorageClasses extends React.Component { store={storageClassStore} isClusterScoped sortingCallbacks={{ [columnId.name]: (item: StorageClass) => item.getName(), - [columnId.age]: (item: StorageClass) => item.metadata.creationTimestamp, + [columnId.age]: (item: StorageClass) => item.getTimeDiffFromNow(), [columnId.provisioner]: (item: StorageClass) => item.provisioner, [columnId.reclaimPolicy]: (item: StorageClass) => item.reclaimPolicy, }} diff --git a/src/renderer/components/+storage-volume-claims/volume-claims.tsx b/src/renderer/components/+storage-volume-claims/volume-claims.tsx index e93529b8d2..8a69f6ee60 100644 --- a/src/renderer/components/+storage-volume-claims/volume-claims.tsx +++ b/src/renderer/components/+storage-volume-claims/volume-claims.tsx @@ -43,7 +43,7 @@ export class PersistentVolumeClaims extends React.Component { [columnId.status]: (pvc: PersistentVolumeClaim) => pvc.getStatus(), [columnId.size]: (pvc: PersistentVolumeClaim) => unitsToBytes(pvc.getStorage()), [columnId.storageClass]: (pvc: PersistentVolumeClaim) => pvc.spec.storageClassName, - [columnId.age]: (pvc: PersistentVolumeClaim) => pvc.metadata.creationTimestamp, + [columnId.age]: (pvc: PersistentVolumeClaim) => pvc.getTimeDiffFromNow(), }} searchFilters={[ (item: PersistentVolumeClaim) => item.getSearchFields(), diff --git a/src/renderer/components/+storage-volumes/volumes.tsx b/src/renderer/components/+storage-volumes/volumes.tsx index 6822e3d4f7..55a9eb753e 100644 --- a/src/renderer/components/+storage-volumes/volumes.tsx +++ b/src/renderer/components/+storage-volumes/volumes.tsx @@ -34,10 +34,10 @@ export class PersistentVolumes extends React.Component { store={volumesStore} isClusterScoped sortingCallbacks={{ [columnId.name]: (item: PersistentVolume) => item.getName(), - [columnId.storageClass]: (item: PersistentVolume) => item.spec.storageClassName, + [columnId.storageClass]: (item: PersistentVolume) => item.getStorageClass(), [columnId.capacity]: (item: PersistentVolume) => item.getCapacity(true), [columnId.status]: (item: PersistentVolume) => item.getStatus(), - [columnId.age]: (item: PersistentVolume) => item.metadata.creationTimestamp, + [columnId.age]: (item: PersistentVolume) => item.getTimeDiffFromNow(), }} searchFilters={[ (item: PersistentVolume) => item.getSearchFields(), diff --git a/src/renderer/components/+user-management-roles-bindings/role-bindings.tsx b/src/renderer/components/+user-management-roles-bindings/role-bindings.tsx index f55e781e0e..1cb89b8f9f 100644 --- a/src/renderer/components/+user-management-roles-bindings/role-bindings.tsx +++ b/src/renderer/components/+user-management-roles-bindings/role-bindings.tsx @@ -33,7 +33,7 @@ export class RoleBindings extends React.Component { [columnId.name]: (binding: RoleBinding) => binding.getName(), [columnId.namespace]: (binding: RoleBinding) => binding.getNs(), [columnId.bindings]: (binding: RoleBinding) => binding.getSubjectNames(), - [columnId.age]: (binding: RoleBinding) => binding.metadata.creationTimestamp, + [columnId.age]: (binding: RoleBinding) => binding.getTimeDiffFromNow(), }} searchFilters={[ (binding: RoleBinding) => binding.getSearchFields(), diff --git a/src/renderer/components/+user-management-roles/roles.tsx b/src/renderer/components/+user-management-roles/roles.tsx index a990cbfa7e..8d916c9d42 100644 --- a/src/renderer/components/+user-management-roles/roles.tsx +++ b/src/renderer/components/+user-management-roles/roles.tsx @@ -32,7 +32,7 @@ export class Roles extends React.Component { sortingCallbacks={{ [columnId.name]: (role: Role) => role.getName(), [columnId.namespace]: (role: Role) => role.getNs(), - [columnId.age]: (role: Role) => role.metadata.creationTimestamp, + [columnId.age]: (role: Role) => role.getTimeDiffFromNow(), }} searchFilters={[ (role: Role) => role.getSearchFields(), diff --git a/src/renderer/components/+user-management-service-accounts/service-accounts.tsx b/src/renderer/components/+user-management-service-accounts/service-accounts.tsx index 4ea78904c0..34b3fc8d0a 100644 --- a/src/renderer/components/+user-management-service-accounts/service-accounts.tsx +++ b/src/renderer/components/+user-management-service-accounts/service-accounts.tsx @@ -36,7 +36,7 @@ export class ServiceAccounts extends React.Component { sortingCallbacks={{ [columnId.name]: (account: ServiceAccount) => account.getName(), [columnId.namespace]: (account: ServiceAccount) => account.getNs(), - [columnId.age]: (account: ServiceAccount) => account.metadata.creationTimestamp, + [columnId.age]: (account: ServiceAccount) => account.getTimeDiffFromNow(), }} searchFilters={[ (account: ServiceAccount) => account.getSearchFields(), diff --git a/src/renderer/components/+workloads-cronjobs/cronjobs.tsx b/src/renderer/components/+workloads-cronjobs/cronjobs.tsx index 08b84c0671..7c06cfbfdc 100644 --- a/src/renderer/components/+workloads-cronjobs/cronjobs.tsx +++ b/src/renderer/components/+workloads-cronjobs/cronjobs.tsx @@ -46,7 +46,7 @@ export class CronJobs extends React.Component { [columnId.suspend]: (cronJob: CronJob) => cronJob.getSuspendFlag(), [columnId.active]: (cronJob: CronJob) => cronJobStore.getActiveJobsNum(cronJob), [columnId.lastSchedule]: (cronJob: CronJob) => cronJob.getLastScheduleTime(), - [columnId.age]: (cronJob: CronJob) => cronJob.metadata.creationTimestamp, + [columnId.age]: (cronJob: CronJob) => cronJob.getTimeDiffFromNow(), }} searchFilters={[ (cronJob: CronJob) => cronJob.getSearchFields(), diff --git a/src/renderer/components/+workloads-daemonsets/daemonsets.tsx b/src/renderer/components/+workloads-daemonsets/daemonsets.tsx index e2d1e30e17..866d561036 100644 --- a/src/renderer/components/+workloads-daemonsets/daemonsets.tsx +++ b/src/renderer/components/+workloads-daemonsets/daemonsets.tsx @@ -47,7 +47,7 @@ export class DaemonSets extends React.Component { [columnId.name]: (daemonSet: DaemonSet) => daemonSet.getName(), [columnId.namespace]: (daemonSet: DaemonSet) => daemonSet.getNs(), [columnId.pods]: (daemonSet: DaemonSet) => this.getPodsLength(daemonSet), - [columnId.age]: (daemonSet: DaemonSet) => daemonSet.metadata.creationTimestamp, + [columnId.age]: (daemonSet: DaemonSet) => daemonSet.getTimeDiffFromNow(), }} searchFilters={[ (daemonSet: DaemonSet) => daemonSet.getSearchFields(), diff --git a/src/renderer/components/+workloads-deployments/deployments.tsx b/src/renderer/components/+workloads-deployments/deployments.tsx index 0147c238b9..18b9f7f29c 100644 --- a/src/renderer/components/+workloads-deployments/deployments.tsx +++ b/src/renderer/components/+workloads-deployments/deployments.tsx @@ -64,7 +64,7 @@ export class Deployments extends React.Component { [columnId.name]: (deployment: Deployment) => deployment.getName(), [columnId.namespace]: (deployment: Deployment) => deployment.getNs(), [columnId.replicas]: (deployment: Deployment) => deployment.getReplicas(), - [columnId.age]: (deployment: Deployment) => deployment.metadata.creationTimestamp, + [columnId.age]: (deployment: Deployment) => deployment.getTimeDiffFromNow(), [columnId.condition]: (deployment: Deployment) => deployment.getConditionsText(), }} searchFilters={[ diff --git a/src/renderer/components/+workloads-jobs/jobs.tsx b/src/renderer/components/+workloads-jobs/jobs.tsx index 6301c287d0..5961c17376 100644 --- a/src/renderer/components/+workloads-jobs/jobs.tsx +++ b/src/renderer/components/+workloads-jobs/jobs.tsx @@ -36,7 +36,7 @@ export class Jobs extends React.Component { [columnId.name]: (job: Job) => job.getName(), [columnId.namespace]: (job: Job) => job.getNs(), [columnId.conditions]: (job: Job) => job.getCondition() != null ? job.getCondition().type : "", - [columnId.age]: (job: Job) => job.metadata.creationTimestamp, + [columnId.age]: (job: Job) => job.getTimeDiffFromNow(), }} searchFilters={[ (job: Job) => job.getSearchFields(), diff --git a/src/renderer/components/+workloads-pods/pods.tsx b/src/renderer/components/+workloads-pods/pods.tsx index a59c9d79d2..fc2a0930af 100644 --- a/src/renderer/components/+workloads-pods/pods.tsx +++ b/src/renderer/components/+workloads-pods/pods.tsx @@ -83,7 +83,7 @@ export class Pods extends React.Component { [columnId.owners]: (pod: Pod) => pod.getOwnerRefs().map(ref => ref.kind), [columnId.qos]: (pod: Pod) => pod.getQosClass(), [columnId.node]: (pod: Pod) => pod.getNodeName(), - [columnId.age]: (pod: Pod) => pod.metadata.creationTimestamp, + [columnId.age]: (pod: Pod) => pod.getTimeDiffFromNow(), [columnId.status]: (pod: Pod) => pod.getStatusMessage(), }} searchFilters={[ diff --git a/src/renderer/components/+workloads-replicasets/replicasets.tsx b/src/renderer/components/+workloads-replicasets/replicasets.tsx index fa6ee5cef4..fc746f1a0d 100644 --- a/src/renderer/components/+workloads-replicasets/replicasets.tsx +++ b/src/renderer/components/+workloads-replicasets/replicasets.tsx @@ -40,7 +40,7 @@ export class ReplicaSets extends React.Component { [columnId.desired]: (replicaSet: ReplicaSet) => replicaSet.getDesired(), [columnId.current]: (replicaSet: ReplicaSet) => replicaSet.getCurrent(), [columnId.ready]: (replicaSet: ReplicaSet) => replicaSet.getReady(), - [columnId.age]: (replicaSet: ReplicaSet) => replicaSet.metadata.creationTimestamp, + [columnId.age]: (replicaSet: ReplicaSet) => replicaSet.getTimeDiffFromNow(), }} searchFilters={[ (replicaSet: ReplicaSet) => replicaSet.getSearchFields(), diff --git a/src/renderer/components/+workloads-statefulsets/statefulsets.tsx b/src/renderer/components/+workloads-statefulsets/statefulsets.tsx index 7c91c9905c..566bf7ed88 100644 --- a/src/renderer/components/+workloads-statefulsets/statefulsets.tsx +++ b/src/renderer/components/+workloads-statefulsets/statefulsets.tsx @@ -46,7 +46,7 @@ export class StatefulSets extends React.Component { sortingCallbacks={{ [columnId.name]: (statefulSet: StatefulSet) => statefulSet.getName(), [columnId.namespace]: (statefulSet: StatefulSet) => statefulSet.getNs(), - [columnId.age]: (statefulSet: StatefulSet) => statefulSet.metadata.creationTimestamp, + [columnId.age]: (statefulSet: StatefulSet) => statefulSet.getTimeDiffFromNow(), [columnId.replicas]: (statefulSet: StatefulSet) => statefulSet.getReplicas(), }} searchFilters={[ diff --git a/src/renderer/components/chart/bar-chart.tsx b/src/renderer/components/chart/bar-chart.tsx index 5c3e134664..74ee203d4c 100644 --- a/src/renderer/components/chart/bar-chart.tsx +++ b/src/renderer/components/chart/bar-chart.tsx @@ -3,7 +3,7 @@ import merge from "lodash/merge"; import moment from "moment"; import Color from "color"; import { observer } from "mobx-react"; -import { ChartData, ChartOptions, ChartPoint, Scriptable } from "chart.js"; +import { ChartData, ChartOptions, ChartPoint, ChartTooltipItem, Scriptable } from "chart.js"; import { Chart, ChartKind, ChartProps } from "./chart"; import { bytesToUnits, cssNames } from "../../utils"; import { ZebraStripes } from "./zebra-stripes.plugin"; @@ -115,12 +115,13 @@ export class BarChart extends React.Component { mode: "index", position: "cursor", callbacks: { - title: tooltipItems => { - const now = new Date().getTime(); + title([tooltip]: ChartTooltipItem[]) { + const xLabel = tooltip?.xLabel; + const skipLabel = xLabel == null || new Date(xLabel).getTime() > Date.now(); - if (new Date(tooltipItems[0].xLabel).getTime() > now) return ""; + if (skipLabel) return ""; - return `${tooltipItems[0].xLabel}`; + return String(xLabel); }, labelColor: ({ datasetIndex }) => { return { diff --git a/src/renderer/components/kube-object-status-icon/kube-object-status-icon.tsx b/src/renderer/components/kube-object-status-icon/kube-object-status-icon.tsx index 2fdb9bff6f..386255d1eb 100644 --- a/src/renderer/components/kube-object-status-icon/kube-object-status-icon.tsx +++ b/src/renderer/components/kube-object-status-icon/kube-object-status-icon.tsx @@ -48,7 +48,7 @@ export class KubeObjectStatusIcon extends React.Component { getAge(timestamp: string) { if (!timestamp) return ""; - const diff = new Date().getTime() - new Date(timestamp).getTime(); + const diff = Date.now() - new Date(timestamp).getTime(); return formatDuration(diff, true); } diff --git a/src/renderer/utils/__tests__/formatDuration.test.ts b/src/renderer/utils/__tests__/formatDuration.test.ts index 7c19ba93f9..30dc81a6fc 100644 --- a/src/renderer/utils/__tests__/formatDuration.test.ts +++ b/src/renderer/utils/__tests__/formatDuration.test.ts @@ -50,7 +50,7 @@ describe("human format durations", () => { }); test("durations less than 8 years returns years and days", () => { - const timeValue = new Date().getTime() - new Date(moment().subtract(2, "years").subtract(5, "days").subtract(2, "hours").toDate()).getTime(); + const timeValue = Date.now() - new Date(moment().subtract(2, "years").subtract(5, "days").subtract(2, "hours").toDate()).getTime(); const res = formatDuration(timeValue); @@ -58,7 +58,7 @@ describe("human format durations", () => { }); test("durations more than 8 years returns years", () => { - const timeValue = new Date().getTime() - new Date(moment().subtract(9, "years").subtract(5, "days").toDate()).getTime(); + const timeValue = Date.now() - new Date(moment().subtract(9, "years").subtract(5, "days").toDate()).getTime(); const res = formatDuration(timeValue);