Update frequency config

- Set values from 0.5 to 10 with 0.5 step
- Add random increment equal to 10% of frequency parameter
This commit is contained in:
Maks Snegov 2024-04-26 23:16:59 -07:00
parent 4a506de6fe
commit d19b9ced8f
2 changed files with 13 additions and 8 deletions

View File

@ -55,7 +55,7 @@
<label for="frequency">Check frequency<br>(every <span id="frequency_info">N</span> minutes)</label>
</div>
<div class="col">
<input type="range" id="frequency" name="frequency" min="1" max="15" step="1">
<input type="range" id="frequency" name="frequency" min="0.5" max="10" step="0.5">
</div>
</div>
<div class="row">

View File

@ -5,6 +5,7 @@ const pathnameRegex = /^\/\w{2}-\w{2}\/n?iv/;
const MAX_SIGNIN_ATTEMPTS = 1;
const PAGE_WAIT_TIME = 3792;
const MINUTE = 60;
const RANDOM_JITTER = 0.1;
const SOFT_BAN_TIMEOUT = 27;
const NOTIF_CHANNEL = "snegov_test"
@ -44,11 +45,15 @@ function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
function getJitter(frequency) {
return frequency * MINUTE * RANDOM_JITTER;
}
function getFutureDate(minutes, maxRandomSeconds = 0) {
// return date some amount of minutes in future plus random amount of seconds
let futureDate = new Date();
futureDate.setMinutes(futureDate.getMinutes() + minutes);
futureDate.setSeconds(futureDate.getSeconds() + getRandomInt(maxRandomSeconds));
futureDate.setSeconds(futureDate.getSeconds() + minutes * MINUTE + getRandomInt(maxRandomSeconds));
return futureDate.toISOString();
}
@ -195,7 +200,7 @@ async function getConsulates() {
"isSelected": option.selected,
"bestDate": null,
"currentDate": null,
"nextCheckAt": getFutureDate(0, config.frequency * MINUTE),
"nextCheckAt": getFutureDate(0, getJitter(config.frequency)),
"autobook": false,
};
}
@ -247,7 +252,7 @@ async function runner() {
config.activate = result['__activate'] || false;
config.username = result['__username'] || "";
config.password = result['__password'] || "";
config.frequency = parseInt(result['__frequency'] || 1);
config.frequency = parseFloat(result['__frequency'] || 1);
config.signinAttempts = result['__signinAttempts'] || 0;
config.apptId = result['__apptId'] || null;
config.currentAppt = result['__currentAppt'] || { consulate: null, date: null };
@ -278,7 +283,7 @@ async function runner() {
if (key === 'frequency') {
let wasChanged = false;
for (let consulate in config.consulates) {
let newNextCheckAt = getFutureDate(config.frequency, 10);
let newNextCheckAt = getFutureDate(config.frequency, getJitter(config.frequency));
if (config.consulates[consulate].nextCheckAt > newNextCheckAt) {
config.consulates[consulate].nextCheckAt = newNextCheckAt;
wasChanged = true;
@ -508,7 +513,7 @@ async function runner() {
console.log(msg);
await chrome.storage.local.set({ "__status": msg });
let availDates = await getAvailableDates(config.consulates[consulate].id);
config.consulates[consulate].nextCheckAt = getFutureDate(config.frequency, 10);
config.consulates[consulate].nextCheckAt = getFutureDate(config.frequency, getJitter(config.frequency));
if (!availDates) {
msg = `Failed to fetch available dates in ${consulate}`;
@ -530,7 +535,7 @@ async function runner() {
// Only set SOFT_BAN_TIMEOUT if it's not the first 5 minutes of 23pm UTC
if (!(currentHourUTC === 23 && currentMinuteUTC < 5)) {
config.consulates[consulate].nextCheckAt = getFutureDate(SOFT_BAN_TIMEOUT, 10);
config.consulates[consulate].nextCheckAt = getFutureDate(SOFT_BAN_TIMEOUT, getJitter(config.frequency));
}
continue;