Skip to content

Commit

Permalink
sync scheduled comm, upd iapi env, fix ex in rate_control
Browse files Browse the repository at this point in the history
  • Loading branch information
SorenEricMent committed Oct 28, 2022
1 parent 8fe83cf commit b2c2671
Show file tree
Hide file tree
Showing 6 changed files with 117 additions and 322 deletions.
13 changes: 11 additions & 2 deletions main.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,17 @@ async function wrapper() {
const initializeBlorumServer = (await import("./modules/init.mjs")).initializeBlorumServer;
const prerequisite = initializeBlorumServer();
prerequisite.then(async function (results) {
scheduleDaemon = results.scheduleDaemon;
scheduleDaemon.on('message', (message) => {
switch (message.action) {
case "log":
results.log(message.level, "ScheduleD", message.info);
break;
}
});

const IAPI = (await import("./modules/iapi.mjs")).IAPI;
const iapi = new IAPI(results.mysql, results.redis, results.siteConfig, results.log, results.bootConfig.security.digest_salt, results.bootConfig.database.redis.prefix);
const iapi = new IAPI(results.mysql, results.redis, results.siteConfig, results.log, results.bootConfig.security.digest_salt, results.bootConfig.database.redis.prefix, scheduleDaemon);
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
Expand Down Expand Up @@ -41,7 +50,7 @@ async function wrapper() {
});

const IAPI = (await import("./modules/iapi.mjs")).IAPI;
const iapi = new IAPI(results.mysql, results.redis, results.siteConfig, results.log, results.bootConfig.security.digest_salt, results.bootConfig.database.redis.prefix);
const iapi = new IAPI(results.mysql, results.redis, results.siteConfig, results.log, results.bootConfig.security.digest_salt, results.bootConfig.database.redis.prefix, scheduleDaemon);
results.log("log", "Main", "Blorum pre-initialization finished.");
let router = initializeRouter(iapi, results.mysql, results.redis, results.siteConfig, results.log);
if (results.bootConfig.port <= 1000 && results.bootConfig.port != 0) {
Expand Down
12 changes: 10 additions & 2 deletions modules/iapi.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,34 @@ JSON.parse = parse.parse;
import {
generateNewToken, blake3Hash, objHasAllProperties,
strASCIIOnly, strStrictLegal, basicPasswordRequirement, isValidEmail, strNotOnlyNumber,
mergeJSON, getFinalPermission, removeElementFromArray
mergeJSON, getFinalPermission, removeElementFromArray, syncScheduleDMsg
} from "./utils.mjs";

import { v4 as uuidv4 } from 'uuid';

import stringify from "quick-stable-stringify";

class IAPI {
constructor(mysql, redis, siteConfig, log, salt, redisPrefix) {
constructor(mysql, redis, siteConfig, log, salt, redisPrefix, scheduleDaemon) {
this.mysql = mysql;
this.redis = redis;
this.siteConfig = siteConfig;
this.log = log;
this.salt = salt;
this.rp = redisPrefix;
this.scheduleDaemon = scheduleDaemon;

this.log("log", "IAPI", "IAPI instance created.");
}
timestamp(){
return new Date().getTime();
}
sendScheduleDMsg(action, load){
return syncScheduleDMsg(this.scheduleDaemon, action, load);
}

getScheduleDStatus(){

}
changeSiteConfig(actions){
//Update IAPI object and database in the same time.
Expand Down
8 changes: 4 additions & 4 deletions modules/rate_control.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ function RateControlMiddleware(log, redis, siteConfig, iapi, getReqInfo) {
let IPTokenBucket = JSON.parse(result);
judger(reqPath, reqMethod, IPTokenBucket).then((result) => {
//update with result.newBucket
this.redis.set(redisKeyIT, JSON.stringify(result.newBucket), "PX", TTLLeft, (err, res) => {
this.redis.set(redisKeyIT, JSON.stringify(result.newBucket), "EX", TTLLeft, (err, res) => {
if(err){
reject({
"status": 500,
Expand All @@ -94,7 +94,7 @@ function RateControlMiddleware(log, redis, siteConfig, iapi, getReqInfo) {
});
}else{
let newBucket = this.ipRateLimits;
this.redis.set(redisKeyIT, JSON.stringify(newBucket), "PX", this.expireThreshold,
this.redis.set(redisKeyIT, JSON.stringify(newBucket), "EX", this.expireThreshold,
(err, res) => {
if(err){
reject({
Expand Down Expand Up @@ -127,7 +127,7 @@ function RateControlMiddleware(log, redis, siteConfig, iapi, getReqInfo) {
let userTokenBucket = JSON.parse(result);
judger(reqPath, reqMethod, userTokenBucket).then((result) => {
//update with result.newBucket
this.redis.set(redisKeyUT, JSON.stringify(result.newBucket), "PX", TTLLeft, (err, res) => {
this.redis.set(redisKeyUT, JSON.stringify(result.newBucket), "EX", TTLLeft, (err, res) => {
if(err){
reject({
"status": 500,
Expand All @@ -153,7 +153,7 @@ function RateControlMiddleware(log, redis, siteConfig, iapi, getReqInfo) {
});
}else{
let permissionExpireAfter = req.validUserPermissions.permissions.cookie_expire_after;
this.redis.set(redisKeyUT, JSON.stringify(req.validUserPermissions.rate_limits), "PX", permissionExpireAfter, (err) => {
this.redis.set(redisKeyUT, JSON.stringify(req.validUserPermissions.rate_limits), "EX", permissionExpireAfter, (err) => {
if(err){
reject({
"status": 500,
Expand Down
27 changes: 26 additions & 1 deletion modules/scheduled.mjs
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import { default as process } from 'process';

import { clearInterval } from 'timers';
var taskList = [];
var mysql, redis;
var mainLoop = {
"_destroyed": true
};

function log(level, message){
process.send({
Expand All @@ -25,7 +29,28 @@ function beforeInit(message){

function afterInit(message){
switch(message.action){
case "start_loop":
mainLoop = setInterval(function(){

},message.interval);
break;
case "stop_loop":
clearInterval(mainLoop);
case "loop_status":
process.send({
"status": mainLoop._destroyed
});
case "create_task":
break;
case "fetch_task_list":
break;
default:
process.send({
"action": "log",
"id": message.id,
"level": "log",
"info": JSON.stringify(message)
});
}
}

Expand Down
28 changes: 25 additions & 3 deletions modules/utils.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ import { blake3 } from '@noble/hashes/blake3';
import { default as crypto } from "crypto";
import Redis from "ioredis";
import parse from "simdjson";
import { v4 as uuidv4 } from 'uuid';
JSON.parse = parse.parse;

const version = "1.0.0 in_dev (unf, debug) dv 10007";
const innerVersion = "10000000";
const version = "1.0.0 Development";
const innerVersion = "0";

const c = {
"reset": "\x1b[0m",
Expand Down Expand Up @@ -411,10 +412,31 @@ function removeElementFromArray(arr, element){
function filterAction(obj){
//Remove all dumplicate actions in an actionList
}

function syncScheduleDMsg(daemon, action, load){
let messageID = uuidv4();
let message = {
"id": messageID,
"action": action,
"data": load
};
return new Promise((resolve, reject) => {
let executor = (msg) => {
if(msg.id == messageID){
resolve(msg);
//remove this listener
daemon.removeListener("message", executor);
}
};
daemon.on("message", executor);
daemon.send(message);
});
}

export {
version, innerVersion, outputLogs, outputLogsColored, blake3Hash, generateNewToken,
isModuleAvailable, promisifiedMysqlConnect, promisifiedRedisConnect,
strASCIIOnly, strStrictLegal, basicPasswordRequirement, isValidEmail, isAllString,
objHasAllProperties, strNotOnlyNumber, mergeJSON, mergeArray, cookieParser, pureArray, filterSpace, getPermissionSum, getLPermissionSum, getFinalPermission,
removeElementFromArray, InfFixProxy, filterAction
removeElementFromArray, InfFixProxy, filterAction, syncScheduleDMsg
};
Loading

0 comments on commit b2c2671

Please sign in to comment.