mirror of
https://github.com/HeyPuter/puter.git
synced 2026-05-05 00:50:41 +00:00
clean: cleanup utils directory
This commit is contained in:
@@ -52,7 +52,6 @@ class Context {
|
||||
);
|
||||
}
|
||||
|
||||
// x = globalThis.root_context ?? this.create({});
|
||||
x = this.root.sub({}, this.USE_NAME_FALLBACK);
|
||||
}
|
||||
if ( x && k ) return x.get(k);
|
||||
@@ -180,7 +179,6 @@ class Context {
|
||||
});
|
||||
}
|
||||
abind (cb) {
|
||||
const als = this.constructor.contextAsyncLocalStorage;
|
||||
return async (...args) => {
|
||||
return await this.arun(async () => {
|
||||
return await cb(...args);
|
||||
|
||||
@@ -16,15 +16,6 @@
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
// function fuzz_number(n) {
|
||||
// if (n === 0) return 0;
|
||||
|
||||
// // let randomized = n + (Math.random() - 0.5) * n * 0.2;
|
||||
// let randomized = n;
|
||||
// let magnitude = Math.floor(Math.log10(randomized));
|
||||
// let factor = Math.pow(10, magnitude);
|
||||
// return Math.round(randomized / factor) * factor;
|
||||
// }
|
||||
|
||||
function fuzz_number(num) {
|
||||
// If the number is 0, then return 0
|
||||
@@ -46,47 +37,6 @@ function fuzz_number(num) {
|
||||
return Math.round(num / factor) * factor;
|
||||
}
|
||||
|
||||
// function fuzz_number(number) {
|
||||
// if (isNaN(number)) {
|
||||
// return 'Invalid number';
|
||||
// }
|
||||
|
||||
// let formattedNumber;
|
||||
// if (number >= 1000000) {
|
||||
// // For millions, we want to show one decimal place
|
||||
// formattedNumber = (number / 1000000).toFixed(0) + 'm';
|
||||
// } else if (number >= 1000) {
|
||||
// // For thousands, we want to show one decimal place
|
||||
// formattedNumber = (number / 1000).toFixed(0) + 'k';
|
||||
// } else if (number >= 500) {
|
||||
// // For hundreds, we want to show no decimal places
|
||||
// formattedNumber = '500+';
|
||||
// } else if (number >= 100) {
|
||||
// // For hundreds, we want to show no decimal places
|
||||
// formattedNumber = '100+';
|
||||
// } else if (number >= 50) {
|
||||
// // For hundreds, we want to show no decimal places
|
||||
// formattedNumber = '50+';
|
||||
// } else if (number >= 10) {
|
||||
// // For hundreds, we want to show no decimal places
|
||||
// formattedNumber = '10+';
|
||||
// }
|
||||
// else {
|
||||
// // For numbers less than 10, we show the number as is.
|
||||
// formattedNumber = '1+';
|
||||
// }
|
||||
|
||||
// // If the decimal place is 0 (e.g., 5.0k), we remove the decimal part (to have 5k instead)
|
||||
// formattedNumber = formattedNumber.replace(/\.0(?=[k|m])/, '');
|
||||
|
||||
// // Append the plus sign for numbers 1000 and greater, denoting the number is 'this value or more'.
|
||||
// if (number >= 1000) {
|
||||
// formattedNumber += '+';
|
||||
// }
|
||||
|
||||
// return formattedNumber;
|
||||
// }
|
||||
|
||||
module.exports = {
|
||||
fuzz_number
|
||||
};
|
||||
|
||||
@@ -18,6 +18,9 @@
|
||||
*/
|
||||
const { TeePromise } = require('@heyputer/putility').libs.promise;
|
||||
|
||||
/**
|
||||
* RWLock is a read-write lock that allows multiple readers or a single writer.
|
||||
*/
|
||||
class RWLock {
|
||||
static TYPE_READ = Symbol('read');
|
||||
static TYPE_WRITE = Symbol('write');
|
||||
@@ -45,11 +48,6 @@ class RWLock {
|
||||
this.check_queue_();
|
||||
}
|
||||
check_queue_ () {
|
||||
// console.log('check_queue_', {
|
||||
// readers_: this.readers_,
|
||||
// writer_: this.writer_,
|
||||
// queue: this.queue.map(item => item.type),
|
||||
// });
|
||||
if ( this.queue.length === 0 ) {
|
||||
if ( this.readers_ === 0 && ! this.writer_ ) {
|
||||
this.on_empty_();
|
||||
|
||||
@@ -100,7 +100,6 @@ class ParallelTasks {
|
||||
return;
|
||||
}
|
||||
|
||||
// const span = this.tracer.startSpan(name);
|
||||
this.promises.push(this.run_(name, fn));
|
||||
}
|
||||
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2024 Puter Technologies Inc.
|
||||
*
|
||||
* This file is part of Puter.
|
||||
*
|
||||
* Puter is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
class QueueBatcher {
|
||||
//
|
||||
}
|
||||
@@ -52,7 +52,7 @@ const simple_retry = async function simple_retry (func, max_tries, interval) {
|
||||
};
|
||||
|
||||
const poll = async function poll({ poll_fn, schedule_fn }) {
|
||||
let delay = undefined;
|
||||
let delay;
|
||||
|
||||
while ( true ) {
|
||||
const is_done = await poll_fn();
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
*/
|
||||
const { PassThrough, Readable, Transform } = require('stream');
|
||||
const { TeePromise } = require('@heyputer/putility').libs.promise;
|
||||
const { EWMA } = require('./opmath');
|
||||
|
||||
class StreamBuffer extends TeePromise {
|
||||
constructor () {
|
||||
@@ -47,6 +46,15 @@ const stream_to_the_void = stream => {
|
||||
stream.on('error', () => {});
|
||||
};
|
||||
|
||||
/**
|
||||
* This will split a stream (on the read side) into `n` streams.
|
||||
* The slowest reader will determine the speed the the source stream
|
||||
* is consumed at to avoid buffering.
|
||||
*
|
||||
* @param {*} source
|
||||
* @param {*} n
|
||||
* @returns
|
||||
*/
|
||||
const pausing_tee = (source, n) => {
|
||||
const { PassThrough } = require('stream');
|
||||
|
||||
@@ -59,39 +67,31 @@ const pausing_tee = (source, n) => {
|
||||
streams_.push(stream);
|
||||
stream.on('drain', () => {
|
||||
ready_[i] = true;
|
||||
// console.log(source.id, 'PR :: drain from reader', i, ready_);
|
||||
if ( first_ ) {
|
||||
source.resume();
|
||||
first_ = false;
|
||||
}
|
||||
if (ready_.every(v => !! v)) source.resume();
|
||||
});
|
||||
// stream.on('newListener', (event, listener) => {
|
||||
// console.log('PR :: newListener', i, event, listener);
|
||||
// });
|
||||
}
|
||||
|
||||
source.on('data', (chunk) => {
|
||||
// console.log(source.id, 'PT :: data from source', chunk.length);
|
||||
ready_.forEach((v, i) => {
|
||||
ready_[i] = streams_[i].write(chunk);
|
||||
});
|
||||
if ( ! ready_.every(v => !! v) ) {
|
||||
// console.log('PT :: pausing source', ready_);
|
||||
source.pause();
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
source.on('end', () => {
|
||||
// console.log(source.id, 'PT :: end from source');
|
||||
for ( let i=0 ; i < n ; i++ ) {
|
||||
streams_[i].end();
|
||||
}
|
||||
});
|
||||
|
||||
source.on('error', (err) => {
|
||||
// console.log(source.id, 'PT :: error from source', err);
|
||||
for ( let i=0 ; i < n ; i++ ) {
|
||||
streams_[i].emit('error', err);
|
||||
}
|
||||
@@ -100,6 +100,9 @@ const pausing_tee = (source, n) => {
|
||||
return streams_;
|
||||
};
|
||||
|
||||
/**
|
||||
* A debugging stream transform that logs the data it receives.
|
||||
*/
|
||||
class LoggingStream extends Transform {
|
||||
constructor(options) {
|
||||
super(options);
|
||||
@@ -431,9 +434,7 @@ async function* chunk_stream(
|
||||
offset += amount;
|
||||
|
||||
while (offset >= chunk_size) {
|
||||
console.log('start yield');
|
||||
yield buffer;
|
||||
console.log('end yield');
|
||||
|
||||
buffer = Buffer.alloc(chunk_size);
|
||||
offset = 0;
|
||||
@@ -449,13 +450,8 @@ async function* chunk_stream(
|
||||
|
||||
if ( chunk_time_ewma !== null ) {
|
||||
const chunk_time = chunk_time_ewma.get();
|
||||
// const sleep_time = chunk_size * chunk_time;
|
||||
const sleep_time = (chunk.length / chunk_size) * chunk_time / 2;
|
||||
// const sleep_time = (amount / chunk_size) * chunk_time;
|
||||
// const sleep_time = (amount / chunk_size) * chunk_time;
|
||||
console.log(`start sleep ${amount} / ${chunk_size} * ${chunk_time} = ${sleep_time}`);
|
||||
await new Promise(resolve => setTimeout(resolve, sleep_time));
|
||||
console.log('end sleep');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ const valid_file_size = v => {
|
||||
if ( ! Number.isInteger(v) ) {
|
||||
return { ok: false, v };
|
||||
}
|
||||
if ( ! (v >= 0) ) {
|
||||
if ( v < 0 ) {
|
||||
return { ok: false, v };
|
||||
}
|
||||
return { ok: true, v };
|
||||
|
||||
@@ -28,8 +28,7 @@ class WorkList {
|
||||
|
||||
clear_invalid () {
|
||||
const new_items = [];
|
||||
for ( let i=0 ; i < this.items.length ; i++ ) {
|
||||
const item = this.items[i];
|
||||
for ( const item of this.items ) {
|
||||
if ( item.invalid ) continue;
|
||||
new_items.push(item);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user