redis stuff
This commit is contained in:
		
							parent
							
								
									f8ca958c12
								
							
						
					
					
						commit
						a559447e14
					
				| 
						 | 
					@ -1,14 +1,10 @@
 | 
				
			||||||
import { Elysia } from 'elysia';
 | 
					import { Elysia } from 'elysia';
 | 
				
			||||||
import { Redis } from 'ioredis'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { db } from '@/utils/database'
 | 
					import { db } from '@/utils/database'
 | 
				
			||||||
import { createSitemapXML, createSitemapIndexXML } from '@/utils/sitemap'
 | 
					import { createSitemapXML, createSitemapIndexXML } from '@/utils/sitemap'
 | 
				
			||||||
 | 
					import redis from '@/utils/redis';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const app = new Elysia()
 | 
					const app = new Elysia()
 | 
				
			||||||
const redis = new Redis({
 | 
					 | 
				
			||||||
  host: process.env.REDIS_HOST,
 | 
					 | 
				
			||||||
  password: process.env.REDIS_PASS,
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
app.get('/latest', async () => {
 | 
					app.get('/latest', async () => {
 | 
				
			||||||
  const cached = await redis.get('latest')
 | 
					  const cached = await redis.get('latest')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,15 +1,11 @@
 | 
				
			||||||
import { Elysia, t } from 'elysia';
 | 
					import { Elysia, t } from 'elysia';
 | 
				
			||||||
import { Redis } from 'ioredis'
 | 
					 | 
				
			||||||
import { RedisRateLimiter } from 'rolling-rate-limiter'
 | 
					import { RedisRateLimiter } from 'rolling-rate-limiter'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { db } from '@/utils/database'
 | 
					import { db } from '@/utils/database'
 | 
				
			||||||
import { validateVideo, validatePlaylist, validateChannel } from '@/utils/regex'
 | 
					import { validateVideo, validateChannel } from '@/utils/regex'
 | 
				
			||||||
 | 
					import redis from '@/utils/redis';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const app = new Elysia()
 | 
					const app = new Elysia()
 | 
				
			||||||
const redis = new Redis({
 | 
					 | 
				
			||||||
  host: process.env.REDIS_HOST,
 | 
					 | 
				
			||||||
  password: process.env.REDIS_PASS,
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
const limiter = new RedisRateLimiter({
 | 
					const limiter = new RedisRateLimiter({
 | 
				
			||||||
  client: redis,
 | 
					  client: redis,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,13 +1,9 @@
 | 
				
			||||||
import { Elysia } from 'elysia';
 | 
					import { Elysia } from 'elysia';
 | 
				
			||||||
import { Redis } from 'ioredis'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { db } from '@/utils/database'
 | 
					import { db } from '@/utils/database'
 | 
				
			||||||
 | 
					import redis from '@/utils/redis';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const app = new Elysia()
 | 
					const app = new Elysia()
 | 
				
			||||||
const redis = new Redis({
 | 
					 | 
				
			||||||
  host: process.env.REDIS_HOST,
 | 
					 | 
				
			||||||
  password: process.env.REDIS_PASS,
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
app.get('/transparency/list', async () => {
 | 
					app.get('/transparency/list', async () => {
 | 
				
			||||||
  const cached = await redis.get('transparency')
 | 
					  const cached = await redis.get('transparency')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,16 +1,12 @@
 | 
				
			||||||
import { Elysia } from 'elysia';
 | 
					import { Elysia } from 'elysia';
 | 
				
			||||||
import { Redis } from 'ioredis'
 | 
					 | 
				
			||||||
import DOMPurify from 'isomorphic-dompurify'
 | 
					import DOMPurify from 'isomorphic-dompurify'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { db } from '@/utils/database'
 | 
					import { db } from '@/utils/database'
 | 
				
			||||||
import { getChannel, getChannelVideos } from '@/utils/metadata';
 | 
					import { getChannel, getChannelVideos } from '@/utils/metadata';
 | 
				
			||||||
import { convertRelativeToDate } from '@/utils/common';
 | 
					import { convertRelativeToDate } from '@/utils/common';
 | 
				
			||||||
 | 
					import redis from '@/utils/redis';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const app = new Elysia()
 | 
					const app = new Elysia()
 | 
				
			||||||
const redis = new Redis({
 | 
					 | 
				
			||||||
  host: process.env.REDIS_HOST,
 | 
					 | 
				
			||||||
  password: process.env.REDIS_PASS,
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface processedVideo {
 | 
					interface processedVideo {
 | 
				
			||||||
  id: string;
 | 
					  id: string;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,4 @@
 | 
				
			||||||
import { Elysia, t } from 'elysia';
 | 
					import { Elysia, t } from 'elysia';
 | 
				
			||||||
import { Redis } from 'ioredis'
 | 
					 | 
				
			||||||
import * as fs from 'node:fs'
 | 
					import * as fs from 'node:fs'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { db } from '@/utils/database'
 | 
					import { db } from '@/utils/database'
 | 
				
			||||||
| 
						 | 
					@ -8,12 +7,9 @@ import { checkCaptcha, createDatabaseVideo } from '@/utils/common';
 | 
				
			||||||
import { downloadVideo } from '@/utils/download';
 | 
					import { downloadVideo } from '@/utils/download';
 | 
				
			||||||
import { uploadVideo } from '@/utils/upload';
 | 
					import { uploadVideo } from '@/utils/upload';
 | 
				
			||||||
import { getChannelVideos } from '@/utils/metadata';
 | 
					import { getChannelVideos } from '@/utils/metadata';
 | 
				
			||||||
 | 
					import redis from '@/utils/redis';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const app = new Elysia()
 | 
					const app = new Elysia()
 | 
				
			||||||
const redis = new Redis({
 | 
					 | 
				
			||||||
  host: process.env.REDIS_HOST,
 | 
					 | 
				
			||||||
  password: process.env.REDIS_PASS,
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
const videoIds: Record<string, string> = {}
 | 
					const videoIds: Record<string, string> = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const sendError = (ws: any, message: string) => {
 | 
					const sendError = (ws: any, message: string) => {
 | 
				
			||||||
| 
						 | 
					@ -54,7 +50,6 @@ const handleUpload = async (ws: any, videoId: string, isChannel: boolean = false
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
app.ws('/save', {
 | 
					app.ws('/save', {
 | 
				
			||||||
  query: t.Object({
 | 
					  query: t.Object({
 | 
				
			||||||
    url: t.String()
 | 
					    url: t.String()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					import { Redis } from 'ioredis'
 | 
				
			||||||
 | 
					import * as fs from 'node:fs'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const redis = new Redis({
 | 
				
			||||||
 | 
					  host: process.env.REDIS_HOST,
 | 
				
			||||||
 | 
					  password: process.env.REDIS_PASS,
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					redis.on('ready', async function () {
 | 
				
			||||||
 | 
					  console.log('connected to redis')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const keys = await redis.keys('*')
 | 
				
			||||||
 | 
					  const filteredKeys = keys.filter(key => !key.startsWith('blacklist:'))
 | 
				
			||||||
 | 
					  if (filteredKeys.length) await redis.del(filteredKeys)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  setInterval(async () => {
 | 
				
			||||||
 | 
					    const files = fs.readdirSync('videos')
 | 
				
			||||||
 | 
					    const webmFiles = files.filter((file) => file.endsWith('.mp4'))
 | 
				
			||||||
 | 
					    webmFiles.forEach(async (f) => {
 | 
				
			||||||
 | 
					      const videoId = f.replace('.mp4', '')
 | 
				
			||||||
 | 
					      const isActive = await redis.get(videoId)
 | 
				
			||||||
 | 
					      if (!isActive) {
 | 
				
			||||||
 | 
					        fs.unlinkSync(`./videos/${f}`)
 | 
				
			||||||
 | 
					        console.log(`deleted file ${f} because there is no active download of it`)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  }, 5 * 60000)
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default redis
 | 
				
			||||||
		Loading…
	
		Reference in New Issue