mirror of
https://github.com/prymitive/karma
synced 2026-05-07 03:26:52 +00:00
Merge pull request #1113 from prymitive/fetcher
chore(ui): only fetch updates if seconds passed since last fetch
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
import React, { Component } from "react";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { observable, action } from "mobx";
|
||||
import { observer } from "mobx-react";
|
||||
|
||||
import moment from "moment";
|
||||
@@ -16,23 +15,6 @@ const Fetcher = observer(
|
||||
settingsStore: PropTypes.instanceOf(Settings).isRequired
|
||||
};
|
||||
|
||||
lastTick = observable(
|
||||
{
|
||||
time: moment(0),
|
||||
completedAt: moment(0),
|
||||
update() {
|
||||
this.time = moment();
|
||||
},
|
||||
markCompleted() {
|
||||
this.completedAt = moment();
|
||||
}
|
||||
},
|
||||
{
|
||||
update: action,
|
||||
markCompleted: action
|
||||
}
|
||||
);
|
||||
|
||||
getSortSettings = () => {
|
||||
const { settingsStore } = this.props;
|
||||
|
||||
@@ -77,11 +59,7 @@ const Fetcher = observer(
|
||||
fetchIfIdle = () => {
|
||||
const { alertStore, settingsStore } = this.props;
|
||||
|
||||
// add 5s minimum interval between fetches
|
||||
const idleAt = moment(this.lastTick.completedAt).add(5, "seconds");
|
||||
const isIdle = moment().isSameOrAfter(idleAt);
|
||||
|
||||
const nextTick = moment(this.lastTick.time).add(
|
||||
const nextTick = moment(alertStore.status.lastUpdateAt).add(
|
||||
settingsStore.fetchConfig.config.interval,
|
||||
"seconds"
|
||||
);
|
||||
@@ -93,13 +71,7 @@ const Fetcher = observer(
|
||||
status === AlertStoreStatuses.Fetching.toString() ||
|
||||
status === AlertStoreStatuses.Processing.toString();
|
||||
|
||||
if (
|
||||
isIdle &&
|
||||
pastDeadline &&
|
||||
!updateInProgress &&
|
||||
!alertStore.status.paused
|
||||
) {
|
||||
this.lastTick.update();
|
||||
if (pastDeadline && !updateInProgress && !alertStore.status.paused) {
|
||||
this.callFetch();
|
||||
}
|
||||
};
|
||||
@@ -117,7 +89,6 @@ const Fetcher = observer(
|
||||
sortSettings.sortLabel,
|
||||
sortSettings.sortReverse
|
||||
);
|
||||
this.lastTick.markCompleted();
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
@@ -130,7 +101,6 @@ const Fetcher = observer(
|
||||
const { alertStore } = this.props;
|
||||
|
||||
if (!alertStore.status.paused) {
|
||||
this.lastTick.update();
|
||||
this.callFetch();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,9 @@ beforeEach(() => {
|
||||
alertStore = new AlertStore(["label=value"]);
|
||||
fetchSpy = jest
|
||||
.spyOn(alertStore, "fetchWithThrottle")
|
||||
.mockImplementation(() => {});
|
||||
.mockImplementation(() => {
|
||||
alertStore.status.setIdle();
|
||||
});
|
||||
|
||||
settingsStore = new Settings();
|
||||
settingsStore.fetchConfig.config.interval = 30;
|
||||
|
||||
@@ -6,6 +6,8 @@ import equal from "fast-deep-equal";
|
||||
|
||||
import qs from "qs";
|
||||
|
||||
import moment from "moment";
|
||||
|
||||
import { FetchWithCredentials } from "Common/Fetch";
|
||||
|
||||
const QueryStringEncodeOptions = {
|
||||
@@ -210,11 +212,13 @@ class AlertStore {
|
||||
status = observable(
|
||||
{
|
||||
value: AlertStoreStatuses.Idle,
|
||||
lastUpdateAt: 0,
|
||||
error: null,
|
||||
paused: false,
|
||||
setIdle() {
|
||||
this.value = AlertStoreStatuses.Idle;
|
||||
this.error = null;
|
||||
this.lastUpdateAt = moment();
|
||||
},
|
||||
setFetching() {
|
||||
this.value = AlertStoreStatuses.Fetching;
|
||||
@@ -226,6 +230,7 @@ class AlertStore {
|
||||
setFailure(err) {
|
||||
this.value = AlertStoreStatuses.Failure;
|
||||
this.error = err;
|
||||
this.lastUpdateAt = moment();
|
||||
},
|
||||
pause() {
|
||||
this.paused = true;
|
||||
|
||||
Reference in New Issue
Block a user