/**
 * Filter for rpc log.
 * Record used time for remote process call.
 */
import {getLogger} from 'pinusmod-logger';

let rpcLogger = getLogger('rpc-log', __filename);

import * as utils from '../../util/utils';
import {IRpcFilter} from 'pinusmod-rpc';

export class RpcLogFilter implements IRpcFilter {
    name = 'rpcLog';

    /**
     * Before filter for rpc
     */
    before(serverId: string, msg: any, opts: any, next: (target?: Error | string, message?: any, options?: any) => void) {
        opts = opts || {};
        opts.__start_time__ = Date.now();
        next();
    }

    /**
     * After filter for rpc
     */
    after(serverId: string, msg: any, opts: any, next: (target?: Error | string, message?: any, options?: any) => void) {
        if (!!opts && !!opts.__start_time__) {
            let start = opts.__start_time__;
            let end = Date.now();
            let timeUsed = end - start;
            let log = {
                route: msg.service,
                args: msg.args,
                time: utils.format(new Date(start)),
                timeUsed: timeUsed
            };
            rpcLogger.info(JSON.stringify(log));
        }
        next();
    }
}