pandora-metrics
Version:
## Overview
58 lines (57 loc) • 2.68 kB
TypeScript
import { Metric } from '../domain';
import { LongBucketCounter } from './LongBucketCounter';
import { Long } from '../../domain';
export interface IFastCompass extends Metric {
/**
* 记录一次方法调用的RT和子类别,子类别应当是正交的,不能有重叠
* 例如 成功/失败
* record a method invocation with execution time and sub-categories
* @param duration must be milliseconds
* @param subCategory all the sub-categories should be orthogonal,
* which will be added up to the total number of method invocations
*/
record(duration: any, subCategory: any): any;
/**
* 对于每个子类别,返回每个统计间隔的方法调用总次数
* return method count per bucket per category
* @return
*/
getMethodCountPerCategory(startTime?: any): Map<string, Map<number, Long>>;
/**
* 对于每个子类别,返回每个统计间隔的执行总时间和次数,按位分离操作放到下一层进行
* return method execution time and count per bucket per category
* @return
*/
getMethodRtPerCategory(startTime?: any): Map<string, Map<number, Long>>;
/**
* 对于每个子类别,返回每个统计间隔的执行总时间和次数,按位分离操作放到下一层进行
* return method execution time and count per bucket per category
* @return
*/
getCountAndRtPerCategory(startTime: any): Map<string, Map<number, Long>>;
/**
* 获取统计间隔
* @return the bucket interval
*/
getBucketInterval(): any;
}
/**
* 通过1个LongAdder来同时完成count和rt的累加操作
* Java里面1个Long有64个bit, 除去最高位表示符号的1个bit,还有63个bit可以使用
* 在一个不超过60s统计周期内,方法调用的总次数和总次数其实完全用不到63个bit
* 所以可以将这两个统计项放到一个long里面来表示
* 这里高位的25个bit表示统计周期内调用总次数,后38位表示总rt
*/
export declare class BaseFastCompass implements IFastCompass {
type: string;
bucketInterval: any;
numberOfBuckets: any;
maxCategoryCount: any;
subCategories: Map<string, LongBucketCounter>;
constructor(bucketInterval?: number, numberOfBuckets?: number, maxCategoryCount?: number);
record(duration: number, subCategory: string): void;
getMethodCountPerCategory(startTime?: number): Map<string, Map<number, Long>>;
getMethodRtPerCategory(startTime?: number): Map<string, Map<number, Long>>;
getBucketInterval(): any;
getCountAndRtPerCategory(startTime?: number): Map<string, Map<number, Long>>;
}