package com.alogic.metrics;

import com.alogic.metrics.Fragment.Method;
import com.anysoft.formula.DataProvider;
import com.anysoft.util.JsonSerializer;

/**
 * 量度集
 * 
 * @author duanyy
 *
 * @since 1.6.6.13
 *
 */
public interface Measures extends JsonSerializer,DataProvider{
	
	/**
	 * 设置量度值
	 * @param key 量度key
	 * @param value 量度值
	 * @return 量度集实例
	 */
	public Measures set(String key,String value);
	
	/**
	 * 设置量度值
	 * @param key 量度key
	 * @param value 量度值
	 * @param m 汇聚方式
	 * @return 量度集实例
	 */
	public Measures set(String key,long value,Method m);
	
	/**
	 * 设置量度集
	 * @param key 量度key
	 * @param value 量度值
	 * @return 量度集实例
	 */
	public Measures set(String key,long value);
	
	/**
	 * 设置量度值
	 * @param key 量度key
	 * @param value 量度值
	 * @param m 汇聚方式
	 * @return 量度集实例
	 */
	public Measures set(String key,double value,Method m);
	
	/**
	 * 设置量度集
	 * @param key 量度key
	 * @param value 量度值
	 * @return 量度集实例
	 */	
	public Measures set(String key,double value);
	
	/**
	 * 和other汇聚
	 * @param other 其它的量度集
	 * @return 新的量度集
	 */
	public Measures incr(Measures other);
	
	/**
	 * 获取量度值
	 * @param key 量度key
	 * @param dftValue 缺省值
	 * @return 量度值
	 */
	public long getAsLong(String key,long dftValue);
	
	/**
	 * 获取量度值
	 * @param key 量度key
	 * @param dftValue 缺省值
	 * @return 量度值
	 */	
	public String getAsString(String key,String dftValue);
	
	/**
	 * 获取量度值
	 * @param key 量度key
	 * @param dftValue 缺省值
	 * @return 量度值
	 */	
	public double getAsDouble(String key,double dftValue);
	
	/**
	 * 获取量度的汇聚方式
	 * @param key 量度key
	 * @return method
	 */	
	public Method getMethod(String key);
	
	/**
	 * 判断是否存在指定的量度
	 * @param key 量度key
	 * @return 是否存在
	 */
	public boolean exist(String key);
	
	/**
	 * 获取量度值列表
	 * @return 量度值列表
	 */
	public Value[] values();
}
