开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
forked from Jasen/cetus
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (14)
标签 (23)
master
test
feature/backends
info/log
subtable
tmp/ad593ef
partition
optimize
bugfix/drop_database
parser/index_hint
single-process
enhance/persistence
enhance/mgr
optimize_sql_parser
v2.3.7
v2.3.6
v2.3.5
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.9
v2.2.8
v2.2.7
v1.3.0
v2.2.6
v2.2.5
v2.2.4
v1.2.0
v2.2.3
v2.2.1
v2.2.0
v1.1.1
v2.1.0
master
分支 (14)
标签 (23)
master
test
feature/backends
info/log
subtable
tmp/ad593ef
partition
optimize
bugfix/drop_database
parser/index_hint
single-process
enhance/persistence
enhance/mgr
optimize_sql_parser
v2.3.7
v2.3.6
v2.3.5
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.9
v2.2.8
v2.2.7
v1.3.0
v2.2.6
v2.2.5
v2.2.4
v1.2.0
v2.2.3
v2.2.1
v2.2.0
v1.1.1
v2.1.0
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (14)
标签 (23)
master
test
feature/backends
info/log
subtable
tmp/ad593ef
partition
optimize
bugfix/drop_database
parser/index_hint
single-process
enhance/persistence
enhance/mgr
optimize_sql_parser
v2.3.7
v2.3.6
v2.3.5
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.9
v2.2.8
v2.2.7
v1.3.0
v2.2.6
v2.2.5
v2.2.4
v1.2.0
v2.2.3
v2.2.1
v2.2.0
v1.1.1
v2.1.0
cetus
/
plugins
/
admin
/
admin-stats.c
cetus
/
plugins
/
admin
/
admin-stats.c
admin-stats.c 2.77 KB
一键复制 编辑 原始数据 按行查看 历史
wangbin579 提交于 2018年06月22日 16:26 +08:00 . Change log and fix warnings,etc
#include "glib-ext.h"
#include "admin-stats.h"
#include "admin-plugin.h"
#include "chassis-event.h"
/* ring buffer from: https://github.com/AndersKaloer/Ring-Buffer */
#define RING_BUFFER_SIZE 128 /* must be power of 2, !! index [0, 126] !!*/
#define RING_BUFFER_MASK (RING_BUFFER_SIZE-1)
typedef struct ring_buffer_t {
int head;
int tail;
guint64 buffer[RING_BUFFER_SIZE];
} ring_buffer_t;
static void ring_buffer_add(ring_buffer_t *buffer, guint64 data) {
if (((buffer->head - buffer->tail) & RING_BUFFER_MASK) == RING_BUFFER_MASK)
buffer->tail = ((buffer->tail + 1) & RING_BUFFER_MASK);
buffer->buffer[buffer->head] = data;
buffer->head = ((buffer->head + 1) & RING_BUFFER_MASK);
}
static guint64 ring_buffer_get(ring_buffer_t *buffer, int index) {
if (index >= ((buffer->head - buffer->tail) & RING_BUFFER_MASK))
return 0;
int data_index = ((buffer->tail + index) & RING_BUFFER_MASK);
return buffer->buffer[data_index];
}
struct admin_stats_t {
struct event sampling_timer;
chassis* chas;
ring_buffer_t sql_count_ring;
ring_buffer_t trx_count_ring;
};
/* sample interval is 10-sec, 127 samples takes about 21-min */
static void sql_stats_sampling_func(int fd, short what, void *arg)
{
admin_stats_t* a = arg;
query_stats_t* stats = &(a->chas->query_stats);
ring_buffer_add(&a->sql_count_ring,
stats->client_query.ro + stats->client_query.rw);
ring_buffer_add(&a->trx_count_ring, stats->xa_count);
static struct timeval ten_sec = {10, 0};
/* EV_PERSIST not work for libevent1.4, re-activate timer each time */
chassis_event_add_with_timeout(a->chas, &a->sampling_timer, &ten_sec);
}
admin_stats_t* admin_stats_init(chassis* chas)
{
admin_stats_t* stats = g_new0(admin_stats_t, 1);
stats->chas = chas;
stats->sql_count_ring.head = 126;
stats->trx_count_ring.head = 126;
/* EV_PERSIST not working for libevent 1.4 */
evtimer_set(&stats->sampling_timer, sql_stats_sampling_func, stats);
struct timeval ten_sec = {10, 0};
chassis_event_add_with_timeout(chas, &stats->sampling_timer, &ten_sec);
return stats;
}
void admin_stats_free(admin_stats_t* stats)
{
evtimer_del(&stats->sampling_timer);
g_free(stats);
}
void admin_stats_get_average(admin_stats_t* stats, int type, char* buf, int len)
{
ring_buffer_t* ring = type==1 ? &stats->sql_count_ring : &stats->trx_count_ring;
const int MOST_RECENT = 126;
guint64 c_now = ring_buffer_get(ring, MOST_RECENT);
guint64 c_1min = ring_buffer_get(ring, MOST_RECENT - 6);
guint64 c_5min = ring_buffer_get(ring, MOST_RECENT - 6*5);
guint64 c_15min = ring_buffer_get(ring, MOST_RECENT - 6*15);
snprintf(buf, len, "%.2f, %.2f, %.2f",
(c_now-c_1min)/60.0, (c_now-c_5min)/300.0, (c_now-c_15min)/900.0);
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

Cetus是由C语言开发的关系型数据库MySQL的中间件,主要提供了一个全面的数据库访问代理功能。Cetus连接方式与MySQL基本兼容,应用程序几乎不用修改即可通过Cetus访问数据库,实现了数据库层的水平扩展和高可用。
暂无标签
GPL-2.0
使用 GPL-2.0 开源许可协议
, GPL-2.0
使用 GPL-2.0 开源许可协议
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/netdebug/cetus.git
git@gitee.com:netdebug/cetus.git
netdebug
cetus
cetus
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /