comienzo de la visualización de tareas + cola de rabbit

This commit is contained in:
2026-03-26 12:35:44 +01:00
parent cfb907b840
commit cbbc0f6edb
18 changed files with 495 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
import { RabbitManagementClient } from "../infrastructure/RabbitManagementClient.js";
import { Queue } from "../domain/Queue.js";
export class RabbitUseCases {
private client: RabbitManagementClient
constructor(client: RabbitManagementClient) {
this.client = client
}
public async getQueuesStatus(): Promise<Queue[]> {
const queues = await this.client.getQueues()
return queues.sort((a, b) => b.messages - a.messages)
}
}

20
packages/sim-shared/config/env/index.ts vendored Normal file
View File

@@ -0,0 +1,20 @@
import { loadEnvFile } from "node:process";
import path from "node:path";
loadEnvFile(path.join("../../.env")) // Global
export const env = {
ENVIRONMENT: process.env.ENVIORMENT,
API_PORT: parseInt(process.env.API_PORT ?? "3000"),
RABBITMQ_HOST: String(process.env.RABBITMQ_HOST ?? "localhost"),
RABBITMQ_USER: String(process.env.RABBITMQ_USER ?? "test"),
RABBITMQ_PASSWORD: String(process.env.RABBITMQ_PASSWORD ?? "test"),
RABBITMQ_EXCHANGE: String(process.env.RABBITMQ_EXCHANGE ?? "/"),
RABBITMQ_PORT: parseInt(process.env.RABBITMQ_PORT ?? "5672"),
RABBITMQ_MODULENAME: process.env.MODULENAME,
RABBITMQ_TTL: process.env.RABBITMQ_TTL,
RABBITMQ_SECURE: process.env.RABBITMQ_SECURE,
RABBITMQ_RETRY_INTERVAL: process.env.RABBITMQ_INTERVAL,
RABBITMQ_VHOST: String(process.env.RABBITMQ_VHOST),
};

View File

@@ -0,0 +1,26 @@
import { RabbitMQEventBus, RMQConnectionParams } from "sim-shared/infrastructure/RabbitMQEventBus.js"
import { env } from "./env/index.js"
const rmqUser = env.RABBITMQ_USER
const rmqPass = env.RABBITMQ_PASSWORD
const rmqHost = env.RABBITMQ_HOST
const rmqPort = Number(env.RABBITMQ_PORT)
const rmqSecure = false
const rmqVhost = env.RABBITMQ_VHOST
export const rmqConnOptions = <RMQConnectionParams>{
username: rmqUser,
password: rmqPass,
vhost: rmqVhost,
hostname: rmqHost,
port: rmqPort,
secure: rmqSecure,
}
export const rabbitmqEventBus = new RabbitMQEventBus({
connectionParams: rmqConnOptions
})
export async function startRMQClient() {
await rabbitmqEventBus.connect()
}

View File

@@ -0,0 +1,7 @@
export interface Queue {
name: string;
messages: number;
ready: number;
unacked: number;
consumers: number;
}

View File

@@ -0,0 +1,37 @@
import axios, { AxiosInstance } from "axios";
import { Queue } from "sim-shared/domain/Queue.js";
export class RabbitManagementClient {
private client: AxiosInstance;
constructor(args: {
baseURL: string;
user: string;
password: string;
}) {
this.client = axios.create({
baseURL: args.baseURL,
auth: {
username: args.user,
password: args.password,
},
});
}
public async getQueues(): Promise<Queue[]> {
try {
const response = await this.client.get("/queues")
return response.data.map((q: any) => ({
name: q.name,
messages: q.messages,
ready: q.messages_ready,
unacked: q.messages_unacknowledged,
consumers: q.consumers
}))
} catch (err) {
console.error("[RabbitManagementClient] Error obteniendo colas", err);
throw err;
}
}
}