Security News
Cloudflare Adds Security.txt Setup Wizard
Cloudflare has launched a setup wizard allowing users to easily create and manage a security.txt file for vulnerability disclosure on their websites.
round-robin-js
Advanced tools
An implementation of the round robin as a data structure. The following strategies are implemented:
SequentialRoundRobin | selects the next item based on the order of insertion |
RandomRoundRobin | selects the next item randomly |
PriorityRoundRobin | selects the next item based on its priority |
npm install --save round-robin-js
const {
SequentialRoundRobin,
RandomRoundRobin,
PriorityRoundRobin
} = require('round-robin-js');
import {
SequentialRoundRobin,
RandomRoundRobin,
PriorityRoundRobin,
RoundRobinItem // the internal item type
} from 'round-robin-js';
All types accept an initial list of values. PriorityRoundRobin requires a compare function to select next item based on priority.
const cpusTable = new SequentialRoundRobin([1, 2, 3]);
const rockPaperScissors = new RandomRoundRobin(['Rock', 'Paper', 'Scissors']);
const availableServers = new PriorityRoundRobin(
(a, b) => a.load - b.load, // select next available server with lowest load
[{ hostname: 's1.test.com', load: 40 }, { hostname: 's2.test.com', load: 30 }]
);
const cpusTable = new SequentialRoundRobin<number>([1, 2, 3]);
const rockPaperScissors = new RandomRoundRobin<string>(['Rock', 'Paper', 'Scissors']);
interface IServer {
hostname: string;
load: number;
}
const availableServers = new PriorityRoundRobin<IServer>(
(a: IServer, b: IServer) => a.load - b.load, // select next available server with lowest load
[{ hostname: 's1.test.com', load: 40 }, { hostname: 's2.test.com', load: 30 }]
);
adds a new item to the table.
cpusTable.add(4); // { key: 3, value: 4 }
cpusTable.add(5); // { key: 4, value: 5 }
availableServers.add({ hostname: 's3.test.com', load: 15 }); // { key: 2, value: { hostname: 's3.test.com', load: 15 } }
availableServers.add({ hostname: 's4.test.com', load: 60 }); // { key: 3, value: { hostname: 's4.test.com', load: 60 } }
selects and returns the next item in the round.
// first round
cpusTable.next(); // { key: 0, value: 1 }
cpusTable.next(); // { key: 1, value: 2 }
cpusTable.next(); // { key: 2, value: 3 }
cpusTable.next(); // { key: 3, value: 4 }
cpusTable.next(); // { key: 4, value: 5 }
// second round ...
cpusTable.next(); // { key: 0, value: 1 }
// first round
rockPaperScissors.next(); // { key: 1, value: 'Paper' }
rockPaperScissors.next(); // { key: 0, value: 'Rock' }
rockPaperScissors.next(); // { key: 2, value: 'Scissors' }
// second round ...
rockPaperScissors.next(); // { key: 0, value: 'Rock' }
availableServers.next(); // { key: 2, value: { hostname: 's3.test.com', load: 15 } }
availableServers.next(); // { key: 1, value: { hostname: 's2.test.com', load: 30 } }
availableServers.next(); // { key: 0, value: { hostname: 's1.test.com', load: 40 } }
availableServers.next(); // { key: 3, value: { hostname: 's4.test.com', load: 60 } }
// second round ...
availableServers.next(); // { key: 2, value: { hostname: 's3.test.com', load: 15 } }
returns the number of items in the table.
cpusTable.count(); // 5
rockPaperScissors.count(); // 3
availableServers.count(); // 4
deletes an item from the table by its key.
cpusTable.deleteByKey(1); // 2 is deleted
cpusTable.count(); // 4
availableServers.deleteByKey(2); // true / { hostname: 's3.test.com', load: 15 } is deleted
availableServers.count(); // 3
accepts a callback to delete items that match a criteria from the table and returns the count of deleted.
availableServers.deleteByValue((s) => s.load > 30); // 2
availableServers.next(); // { key: 1, value: { hostname: 's2.test.com', load: 30 } }
availableServers.next(); // { key: 1, value: { hostname: 's2.test.com', load: 30 } }
resets the round selection from the start.
cpusTable.next(); // { key: 1, value: 2 }
cpusTable.next(); // { key: 2, value: 3 }
cpusTable.reset();
cpusTable.next(); // { key: 0, value: 1 }
cpusTable.next(); // { key: 1, value: 2 }
availableServers.next(); // { key: 1, value: { hostname: 's2.test.com', load: 30 } }
availableServers.add({ hostname: 's99.test.com', load: 10 });
availableServers.next(); // { key: 4, value: { hostname: 's99.test.com', load: 10 } }
availableServers.reset();
availableServers.next(); // { key: 4, value: { hostname: 's99.test.com', load: 10 } }
clears all values in the table.
cpusTable.clear();
cpusTable.count(); // 0
cpusTable.next(); // null
rockPaperScissors.clear();
rockPaperScissors.count(); // 0
rockPaperScissors.next(); // null
availableServers.clear();
availableServers.count(); // 0
availableServers.next(); // null
grunt build
The MIT License. Full License is here
FAQs
an implementation of round robin as a data structure
The npm package round-robin-js receives a total of 1,404 weekly downloads. As such, round-robin-js popularity was classified as popular.
We found that round-robin-js demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Cloudflare has launched a setup wizard allowing users to easily create and manage a security.txt file for vulnerability disclosure on their websites.
Security News
The Socket Research team breaks down a malicious npm package targeting the legitimate DOMPurify library. It uses obfuscated code to hide that it is exfiltrating browser and crypto wallet data.
Security News
ENISA’s 2024 report highlights the EU’s top cybersecurity threats, including rising DDoS attacks, ransomware, supply chain vulnerabilities, and weaponized AI.