mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-26 10:28:38 -06:00
Adds option to fetch instance usage data
This commit is contained in:
parent
088b05793f
commit
33a5a503d9
@ -1,4 +1,4 @@
|
|||||||
import { Document } from 'bson';
|
import { calculateObjectSize, Document } from 'bson';
|
||||||
|
|
||||||
import { configService, Database } from '../../../../config/env.config';
|
import { configService, Database } from '../../../../config/env.config';
|
||||||
import { Logger } from '../../../../config/logger.config';
|
import { Logger } from '../../../../config/logger.config';
|
||||||
@ -137,4 +137,49 @@ export class KwikController {
|
|||||||
|
|
||||||
return { status: 'ok' };
|
return { status: 'ok' };
|
||||||
}
|
}
|
||||||
|
public async instanceInfo({ instanceName }: InstanceDto, messageTimestamp: number, usage?: number) {
|
||||||
|
const db = configService.get<Database>('DATABASE');
|
||||||
|
const connection = dbserver.getClient().db(db.CONNECTION.DB_PREFIX_NAME + '-whatsapp-api');
|
||||||
|
const messages = connection.collection('messages');
|
||||||
|
const pipeline: Document[] = [
|
||||||
|
{ $sort: { 'key.remoteJid': -1, messageTimestamp: -1 } },
|
||||||
|
{
|
||||||
|
$group: {
|
||||||
|
_id: '$key.remoteJid',
|
||||||
|
owner: { $first: '$owner' },
|
||||||
|
message: { $first: '$message' },
|
||||||
|
lastAllMsgTimestamp: { $first: '$messageTimestamp' },
|
||||||
|
name: { $first: '$pushName' },
|
||||||
|
fromMe: { $first: '$key.fromMe' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ $match: { owner: instanceName, lastAllMsgTimestamp: { $gte: messageTimestamp } } },
|
||||||
|
{ $count: 'rowCount' },
|
||||||
|
];
|
||||||
|
const chatCount = await messages.aggregate(pipeline).toArray();
|
||||||
|
|
||||||
|
if (usage) {
|
||||||
|
return {
|
||||||
|
chatCount: chatCount[0].rowCount,
|
||||||
|
totalSize: usage,
|
||||||
|
newVal: 0,
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
const userMessages = await messages
|
||||||
|
.find({ owner: instanceName, messageTimestamp: { $gte: messageTimestamp } })
|
||||||
|
.toArray();
|
||||||
|
|
||||||
|
let totalSize = 0;
|
||||||
|
|
||||||
|
userMessages.forEach(function (doc) {
|
||||||
|
totalSize += calculateObjectSize(doc);
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
chatCount: chatCount[0].rowCount,
|
||||||
|
totalSize: totalSize,
|
||||||
|
newVal: 1,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ export class KwikRouter extends RouterBroker {
|
|||||||
return res.status(HttpStatus.OK).json(response);
|
return res.status(HttpStatus.OK).json(response);
|
||||||
});
|
});
|
||||||
this.router.post(this.routerPath('cleanup'), ...guards, async (req, res) => {
|
this.router.post(this.routerPath('cleanup'), ...guards, async (req, res) => {
|
||||||
logger.verbose('request received in findChats');
|
logger.verbose('request received in cleanup');
|
||||||
logger.verbose('request body: ');
|
logger.verbose('request body: ');
|
||||||
logger.verbose(req.body);
|
logger.verbose(req.body);
|
||||||
|
|
||||||
@ -52,6 +52,24 @@ export class KwikRouter extends RouterBroker {
|
|||||||
|
|
||||||
return res.status(HttpStatus.OK).json(response);
|
return res.status(HttpStatus.OK).json(response);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.router.get(this.routerPath('instanceInfo'), ...guards, async (req, res) => {
|
||||||
|
logger.verbose('request received in instanceInfo');
|
||||||
|
logger.verbose('request body: ');
|
||||||
|
logger.verbose(req.body);
|
||||||
|
|
||||||
|
logger.verbose('request query: ');
|
||||||
|
logger.verbose(req.query);
|
||||||
|
|
||||||
|
const response = await this.dataValidate<InstanceDto>({
|
||||||
|
request: req,
|
||||||
|
schema: null,
|
||||||
|
ClassRef: InstanceDto,
|
||||||
|
execute: (instance) => kwikController.instanceInfo(instance, Number(req.query.messageTimestamp)),
|
||||||
|
});
|
||||||
|
|
||||||
|
return res.status(HttpStatus.OK).json(response);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public readonly router = Router();
|
public readonly router = Router();
|
||||||
|
@ -6,7 +6,7 @@ import { dbserver } from '../../libs/db.connect';
|
|||||||
import { instanceNameSchema, oldTokenSchema, presenceOnlySchema } from '../../validate/validate.schema';
|
import { instanceNameSchema, oldTokenSchema, presenceOnlySchema } from '../../validate/validate.schema';
|
||||||
import { RouterBroker } from '../abstract/abstract.router';
|
import { RouterBroker } from '../abstract/abstract.router';
|
||||||
import { InstanceDto, SetPresenceDto } from '../dto/instance.dto';
|
import { InstanceDto, SetPresenceDto } from '../dto/instance.dto';
|
||||||
import { instanceController } from '../server.module';
|
import { instanceController, kwikController } from '../server.module';
|
||||||
import { OldToken } from '../services/auth.service';
|
import { OldToken } from '../services/auth.service';
|
||||||
import { HttpStatus } from './index.router';
|
import { HttpStatus } from './index.router';
|
||||||
|
|
||||||
@ -104,6 +104,9 @@ export class InstanceRouter extends RouterBroker {
|
|||||||
logger.verbose(req.body);
|
logger.verbose(req.body);
|
||||||
|
|
||||||
const key = req.get('apikey');
|
const key = req.get('apikey');
|
||||||
|
const fullFetch = req.query.fullFetch ? Number(req.query.fullFetch) : 0;
|
||||||
|
const messageTimestamp = req.query.messageTimestamp ? req.query.messageTimestamp : -1;
|
||||||
|
const usage = req.query.usage ? Number(req.query.usage) : null;
|
||||||
|
|
||||||
logger.verbose('request query: ');
|
logger.verbose('request query: ');
|
||||||
logger.verbose(req.query);
|
logger.verbose(req.query);
|
||||||
@ -114,6 +117,16 @@ export class InstanceRouter extends RouterBroker {
|
|||||||
execute: (instance) => instanceController.fetchInstances(instance, key),
|
execute: (instance) => instanceController.fetchInstances(instance, key),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (fullFetch == 1) {
|
||||||
|
const usageData = await this.dataValidate<InstanceDto>({
|
||||||
|
request: req,
|
||||||
|
schema: null,
|
||||||
|
ClassRef: InstanceDto,
|
||||||
|
execute: (instance) => kwikController.instanceInfo(instance, Number(messageTimestamp), usage),
|
||||||
|
});
|
||||||
|
response.usageData = usageData;
|
||||||
|
}
|
||||||
|
|
||||||
return res.status(HttpStatus.OK).json(response);
|
return res.status(HttpStatus.OK).json(response);
|
||||||
})
|
})
|
||||||
.post(this.routerPath('setPresence'), ...guards, async (req, res) => {
|
.post(this.routerPath('setPresence'), ...guards, async (req, res) => {
|
||||||
|
Loading…
Reference in New Issue
Block a user