for first push
This commit is contained in:
54
packages/jobs/src/voiceprint.jobs.ts
Normal file
54
packages/jobs/src/voiceprint.jobs.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
import { Queue, Worker } from "bullmq";
|
||||
import { Redis } from "ioredis";
|
||||
import { AnalysisService } from "@shieldai/voiceprint";
|
||||
|
||||
const redisUrl = process.env.REDIS_URL || "redis://localhost:6379";
|
||||
const connection = new Redis(redisUrl);
|
||||
|
||||
const analysisQueue = new Queue("voiceprint-analysis", { connection });
|
||||
|
||||
const analysisWorker = new Worker(
|
||||
"voiceprint-analysis",
|
||||
async (job) => {
|
||||
const { userId, audioBuffer, sampleRate, analysisType } = job.data;
|
||||
const analysisService = new AnalysisService();
|
||||
const result = await analysisService.analyze(
|
||||
{
|
||||
audioBuffer: Buffer.from(audioBuffer, "base64"),
|
||||
sampleRate,
|
||||
analysisType,
|
||||
},
|
||||
userId
|
||||
);
|
||||
return { jobId: result.jobId, completedAt: new Date().toISOString() };
|
||||
},
|
||||
{ connection, concurrency: 2 }
|
||||
);
|
||||
|
||||
analysisWorker.on("completed", (job) => {
|
||||
console.log(`[VoicePrint] Job ${job.id} completed: ${JSON.stringify(job.returnvalue)}`);
|
||||
});
|
||||
|
||||
analysisWorker.on("failed", (job, err) => {
|
||||
console.error(`[VoicePrint] Job ${job.id} failed: ${err.message}`);
|
||||
});
|
||||
|
||||
export async function addAnalysisJob(
|
||||
userId: string,
|
||||
audioBuffer: Buffer,
|
||||
sampleRate?: number,
|
||||
analysisType?: string
|
||||
) {
|
||||
return analysisQueue.add("analyze", {
|
||||
userId,
|
||||
audioBuffer: audioBuffer.toString("base64"),
|
||||
sampleRate,
|
||||
analysisType,
|
||||
}, {
|
||||
attempts: 3,
|
||||
backoff: { type: "exponential", delay: 5000 },
|
||||
jobId: `vp-${userId}-${Date.now()}`,
|
||||
});
|
||||
}
|
||||
|
||||
console.log("[VoicePrint] Analysis worker started");
|
||||
Reference in New Issue
Block a user