diff --git a/api/http/handler/endpoints/endpoint_list.go b/api/http/handler/endpoints/endpoint_list.go
index ddede499f..66ecc7e62 100644
--- a/api/http/handler/endpoints/endpoint_list.go
+++ b/api/http/handler/endpoints/endpoint_list.go
@@ -4,6 +4,7 @@ import (
"net/http"
"strconv"
"strings"
+ "time"
"github.com/portainer/libhttp/request"
@@ -125,6 +126,7 @@ func (handler *Handler) endpointList(w http.ResponseWriter, r *http.Request) *ht
if paginatedEndpoints[idx].EdgeCheckinInterval == 0 {
paginatedEndpoints[idx].EdgeCheckinInterval = settings.EdgeAgentCheckinInterval
}
+ paginatedEndpoints[idx].QueryDate = time.Now().Unix()
}
w.Header().Set("X-Total-Count", strconv.Itoa(filteredEndpointCount))
diff --git a/api/portainer.go b/api/portainer.go
index 773cf56fd..1c06b8086 100644
--- a/api/portainer.go
+++ b/api/portainer.go
@@ -325,6 +325,8 @@ type (
AMTDeviceGUID string `json:"AMTDeviceGUID,omitempty" example:"4c4c4544-004b-3910-8037-b6c04f504633"`
// LastCheckInDate mark last check-in date on checkin
LastCheckInDate int64
+ // QueryDate of each query with the endpoints list
+ QueryDate int64
// IsEdgeDevice marks if the environment was created as an EdgeDevice
IsEdgeDevice bool
// Whether the device has been trusted or not by the user
diff --git a/app/portainer/environments/types.ts b/app/portainer/environments/types.ts
index f25c11106..b43084dae 100644
--- a/app/portainer/environments/types.ts
+++ b/app/portainer/environments/types.ts
@@ -63,6 +63,7 @@ export type Environment = {
GroupId: EnvironmentGroupId;
EdgeID?: string;
EdgeCheckinInterval?: number;
+ QueryDate?: number;
LastCheckInDate?: number;
Name: string;
Status: EnvironmentStatus;
diff --git a/app/portainer/home/EnvironmentList/EnvironmentItem/EdgeIndicator.test.tsx b/app/portainer/home/EnvironmentList/EnvironmentItem/EdgeIndicator.test.tsx
index 75c090584..5cb000ad4 100644
--- a/app/portainer/home/EnvironmentList/EnvironmentItem/EdgeIndicator.test.tsx
+++ b/app/portainer/home/EnvironmentList/EnvironmentItem/EdgeIndicator.test.tsx
@@ -21,14 +21,14 @@ function renderComponent(
edgeId = '',
lastCheckInDate = 0,
checkInInterval = 0,
- homepageLoadTime = 0
+ queryDate = 0
) {
return render(
);
}
diff --git a/app/portainer/home/EnvironmentList/EnvironmentItem/EdgeIndicator.tsx b/app/portainer/home/EnvironmentList/EnvironmentItem/EdgeIndicator.tsx
index 206c33a91..02759a346 100644
--- a/app/portainer/home/EnvironmentList/EnvironmentItem/EdgeIndicator.tsx
+++ b/app/portainer/home/EnvironmentList/EnvironmentItem/EdgeIndicator.tsx
@@ -5,7 +5,7 @@ import { isoDateFromTimestamp } from '@/portainer/filters/filters';
interface Props {
checkInInterval?: number;
edgeId?: string;
- homepageLoadTime?: number;
+ queryDate?: number;
lastCheckInDate?: number;
}
@@ -13,7 +13,7 @@ export function EdgeIndicator({
edgeId,
lastCheckInDate,
checkInInterval,
- homepageLoadTime,
+ queryDate,
}: Props) {
if (!edgeId) {
return (
@@ -25,9 +25,8 @@ export function EdgeIndicator({
// give checkIn some wiggle room
let isCheckValid = false;
- if (checkInInterval && homepageLoadTime && lastCheckInDate) {
- isCheckValid =
- homepageLoadTime - lastCheckInDate <= checkInInterval * 2 + 20;
+ if (checkInInterval && queryDate && lastCheckInDate) {
+ isCheckValid = queryDate - lastCheckInDate <= checkInInterval * 2 + 20;
}
return (
diff --git a/app/portainer/home/EnvironmentList/EnvironmentItem/EnvironmentItem.stories.tsx b/app/portainer/home/EnvironmentList/EnvironmentItem/EnvironmentItem.stories.tsx
index 482a9c6f4..c941bba0c 100644
--- a/app/portainer/home/EnvironmentList/EnvironmentItem/EnvironmentItem.stories.tsx
+++ b/app/portainer/home/EnvironmentList/EnvironmentItem/EnvironmentItem.stories.tsx
@@ -15,17 +15,10 @@ export default {
interface Args {
environment: Environment;
- homepageLoadTime: number;
}
-function Template({ environment, homepageLoadTime = 1 }: Args) {
- return (
- {}}
- />
- );
+function Template({ environment }: Args) {
+ return {}} />;
}
export const DockerEnvironment: Story = Template.bind({});
diff --git a/app/portainer/home/EnvironmentList/EnvironmentItem/EnvironmentItem.test.tsx b/app/portainer/home/EnvironmentList/EnvironmentItem/EnvironmentItem.test.tsx
index cf203c7cf..6b4122ccc 100644
--- a/app/portainer/home/EnvironmentList/EnvironmentItem/EnvironmentItem.test.tsx
+++ b/app/portainer/home/EnvironmentList/EnvironmentItem/EnvironmentItem.test.tsx
@@ -67,7 +67,6 @@ function renderComponent(
onClick={() => {}}
environment={env}
groupName={group.Name}
- homepageLoadTime={0}
/>
);
diff --git a/app/portainer/home/EnvironmentList/EnvironmentItem/EnvironmentItem.tsx b/app/portainer/home/EnvironmentList/EnvironmentItem/EnvironmentItem.tsx
index 2cdbc42da..b79cb5bff 100644
--- a/app/portainer/home/EnvironmentList/EnvironmentItem/EnvironmentItem.tsx
+++ b/app/portainer/home/EnvironmentList/EnvironmentItem/EnvironmentItem.tsx
@@ -25,18 +25,12 @@ import styles from './EnvironmentItem.module.css';
import { EnvironmentStatusBadge } from './EnvironmentStatusBadge';
interface Props {
- homepageLoadTime?: number;
environment: Environment;
groupName?: string;
onClick(environment: Environment): void;
}
-export function EnvironmentItem({
- environment,
- onClick,
- homepageLoadTime,
- groupName,
-}: Props) {
+export function EnvironmentItem({ environment, onClick, groupName }: Props) {
const isAdmin = useIsAdmin();
const isEdge = isEdgeEnvironment(environment.Type);
@@ -77,7 +71,7 @@ export function EnvironmentItem({
edgeId={environment.EdgeID}
checkInInterval={environment.EdgeCheckinInterval}
lastCheckInDate={environment.LastCheckInDate}
- homepageLoadTime={homepageLoadTime}
+ queryDate={environment.QueryDate}
/>
) : (
<>
diff --git a/app/portainer/home/EnvironmentList/EnvironmentList.tsx b/app/portainer/home/EnvironmentList/EnvironmentList.tsx
index f1e09df8e..a79d746e8 100644
--- a/app/portainer/home/EnvironmentList/EnvironmentList.tsx
+++ b/app/portainer/home/EnvironmentList/EnvironmentList.tsx
@@ -31,8 +31,6 @@ interface Props {
}
export function EnvironmentList({ onClickItem, onRefresh }: Props) {
- const homepageLoadTime = usePageLoadingTime();
-
const isAdmin = useIsAdmin();
const storageKey = 'home_endpoints';
@@ -98,7 +96,6 @@ export function EnvironmentList({ onClickItem, onRefresh }: Props) {
groupsQuery.data?.find((g) => g.Id === env.GroupId)?.Name
}
onClick={onClickItem}
- homepageLoadTime={homepageLoadTime}
/>
))
)}
@@ -145,15 +142,3 @@ function renderItems(
return items;
}
-
-function usePageLoadingTime() {
- const [homepageLoadTime, setHomepageLoadTime] = useState<
- number | undefined
- >();
-
- useEffect(() => {
- setHomepageLoadTime(Math.floor(Date.now() / 1000));
- }, []);
-
- return homepageLoadTime;
-}
diff --git a/app/portainer/home/EnvironmentList/index.ts b/app/portainer/home/EnvironmentList/index.ts
index ac5df9c70..2322dcf40 100644
--- a/app/portainer/home/EnvironmentList/index.ts
+++ b/app/portainer/home/EnvironmentList/index.ts
@@ -8,6 +8,5 @@ export const EnvironmentListAngular = react2angular(EnvironmentList, [
'tags',
'onClickItem',
'onRefresh',
- 'homepageLoadTime',
'groups',
]);