102 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#pragma once
 | 
						|
/*
 | 
						|
 * Copyright (c) 2016 MariaDB Corporation Ab
 | 
						|
 *
 | 
						|
 * Use of this software is governed by the Business Source License included
 | 
						|
 * in the LICENSE.TXT file and at www.mariadb.com/bsl11.
 | 
						|
 *
 | 
						|
 * Change Date: 2020-01-01
 | 
						|
 *
 | 
						|
 * On the date above, in accordance with the Business Source License, use
 | 
						|
 * of this software will be governed by version 2 or later of the General
 | 
						|
 * Public License.
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * @file statistics.h  - Lock-free statistics gathering
 | 
						|
 */
 | 
						|
 | 
						|
#include <maxscale/cdefs.h>
 | 
						|
#include <stdint.h>
 | 
						|
 | 
						|
MXS_BEGIN_DECLS
 | 
						|
 | 
						|
typedef void* ts_stats_t;
 | 
						|
 | 
						|
/** Enum values for ts_stats_get */
 | 
						|
enum ts_stats_type
 | 
						|
{
 | 
						|
    TS_STATS_MAX, /**< Maximum value */
 | 
						|
    TS_STATS_MIX, /**< Minimum value */
 | 
						|
    TS_STATS_SUM, /**< Sum of all value */
 | 
						|
    TS_STATS_AVG  /**< Average of all values */
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Allocate a new statistics object
 | 
						|
 *
 | 
						|
 * @return New statistics object or NULL if memory allocation failed
 | 
						|
 */
 | 
						|
ts_stats_t ts_stats_alloc();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Free statistics
 | 
						|
 *
 | 
						|
 * @param stats Statistics to free
 | 
						|
 */
 | 
						|
void ts_stats_free(ts_stats_t stats);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Get statistics
 | 
						|
 *
 | 
						|
 * @param stats Statistics to read
 | 
						|
 * @param type Type of statistics to get
 | 
						|
 * @return Statistics value
 | 
						|
 *
 | 
						|
 * @see enum ts_stats_type
 | 
						|
 */
 | 
						|
int64_t ts_stats_get(ts_stats_t stats, enum ts_stats_type type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Increment thread statistics by one
 | 
						|
 *
 | 
						|
 * @param stats     Statistics to add to
 | 
						|
 * @param thread_id ID of thread
 | 
						|
 */
 | 
						|
void ts_stats_increment(ts_stats_t stats, int thread_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Assign a value to a statistics element
 | 
						|
 *
 | 
						|
 * This sets the value for the specified thread.
 | 
						|
 *
 | 
						|
 * @param stats     Statistics to set
 | 
						|
 * @param value     Value to set to
 | 
						|
 * @param thread_id ID of thread
 | 
						|
 */
 | 
						|
void ts_stats_set(ts_stats_t stats, int value, int thread_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Assign the maximum value to a statistics element
 | 
						|
 *
 | 
						|
 * This sets the value for the specified thread if the current value is smaller.
 | 
						|
 *
 | 
						|
 * @param stats     Statistics to set
 | 
						|
 * @param value     Value to set to
 | 
						|
 * @param thread_id ID of thread
 | 
						|
 */
 | 
						|
void ts_stats_set_max(ts_stats_t stats, int value, int thread_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Assign the minimum value to a statistics element
 | 
						|
 *
 | 
						|
 * This sets the value for the specified thread if the current value is larger.
 | 
						|
 *
 | 
						|
 * @param stats     Statistics to set
 | 
						|
 * @param value     Value to set to
 | 
						|
 * @param thread_id ID of thread
 | 
						|
 */
 | 
						|
void ts_stats_set_min(ts_stats_t stats, int value, int thread_id);
 | 
						|
 | 
						|
MXS_END_DECLS
 |