package com.elab.spring.monitor;

/**
 * 业务监控数据收集器
 *
 * @author liukaixiong
 * @Email liukx@elab-plus.com
 * @date 2021/9/26 - 14:31
 */
public interface ServiceMonitorDataCollect {

    /**
     * 发送指标数据
     *
     * @param author     作者名称
     * @param methodName 方法名称
     * @param groupName  业务组  :  区分业务组
     * @param key        数据纬度 : 区分业务块
     * @param dataId     数据标识 : 用于快速搜索内容
     * @param request    请求参数
     * @param process    业务执行器
     */
    public Object send(String[] author, String methodName, String groupName, String key, String dataId, Object request,
        MonitorSupplier process) throws Exception;

    /**
     * 监控运行函数方法
     *
     * @param <T>
     */
    public interface MonitorSupplier<T> {
        /**
         * 获取结果内容
         *
         * @return
         * @throws Exception
         */
        T get() throws Exception;
    }

}
