作者BioStar.bbs@micro.bio.ncue.edu.tw (澎湖小雲雀) 看板: plan
標題[文件] (五分鐘累積)登入與登出人數 MRTG 圖表
時間擎天崗 (Sat, 01 Nov 2003 01:41:28 +0800 (CST)) Updated: 2003/11/01
如果弄一個檔案記錄登入的序號... 每一次有使用者登入就累加上去...
如果我想知道現在 A 時間到 B 時間中有多少次登入 I ......
那就是登入的序號的差距: I = SB - SA ......
A 時間到 B 時間線上人數差距 D = LB - LA ......
線上人數差距等入登入次數 I 減掉登出次數 O: L = I - O ......
O = I - L ...... 有點複雜......
下面程式碼如果有不恰當... 還請各位前輩不吝指正...
: include/struct.h:新增 LOGNUM 結構
typedef struct
{
int online; /* 線上人數 */
int log_serial; /* 登入序號 */
} LOGNUM;
: include/struct.h:
#define FN_BRD ".BRD" /* board list */
#define FN_SCHEMA ".USR" /* userid schema */
+ #define FN_LOGNUM ".LOGNUM"
: util/showLOGNUM.c:新增這個檔案
#include "bbs.h"
static UCACHE *ushm;
static inline void
init_ushm()
{
ushm = shm_new(UTMPSHM_KEY, sizeof(UCACHE));
}
int
main()
{
int login, logout, diff;
LOGNUM log_a, log_b;
chdir(BBSHOME);
memset(&log_a, 0, sizeof(log_a));
memset(&log_b, 0, sizeof(log_b));
if (rec_get(FN_LOGNUM, &log_a, sizeof(LOGNUM), 0))
rec_add(FN_LOGNUM, &log_a, sizeof(log_a));
if (rec_get(FN_LOGNUM, &log_b, sizeof(LOGNUM), 1))
rec_add(FN_LOGNUM, &log_b, sizeof(log_b));
init_ushm();
log_a.online = ushm->count;
login = log_a.log_serial - log_b.log_serial;
diff = log_a.online - log_b.online;
logout = login - diff;
log_b.online = log_a.online;
log_b.log_serial = log_a.log_serial;
rec_put(FN_LOGNUM, &log_b, sizeof(LOGNUM), 1, NULL);
printf("%d\n%d\n0\n0\n", login, logout);
exit (0);
}
先跑一次 showLOGNUM 以生成 .LOGNUM 檔案......
: maple/bbsd.c:utmp_setup()
UTMP utmp;
uschar *addr;
+ LOGNUM lognum;
: maple/bbsd.c:utmp_setup()
if (!utmp_new(&utmp))
login_abort("\n您剛剛選的位子已經被人捷足先登了,請下次再來吧");
+ rec_get(FN_LOGNUM, &lognum, sizeof(LOGNUM), 0);
+ lognum.online = ushm->count;
+ lognum.log_serial++;
+ rec_put(FN_LOGNUM, &lognum, sizeof(LOGNUM), 0, NULL);
mrtg 與 apache 要先安裝好......
編輯一個 mrtg 的 cfg 檔案... 內容如下...
Target[BBS]: `/usr/home/bbs/bin/showLOGNUM`
MaxBytes[BBS]: 2500 # 通常用 MAXACTIVE
Title[BBS]: BBS 登入與登出 MRTG 圖(最近五分鐘內)
PageTop[BBS]: BBS 登入與登出 MRTG 圖(最近五分鐘內)
Options[BBS]: gauge, growright
YLegend[BBS]: BBS OnLine
ShortLegend[BBS]: 人
WorkDir: /usr/home/mrtg/www/lognum # 自訂...
LegendO[BBS]: 登出人數
LegendI[BBS]: 登入人數
Language: big5
寫入系統 crontab 中...... 內容視情況而定......
*/5 * * * * root /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg_bbslog.cfg
範例:
http://bbs.bio.ncue.edu.tw/mrtg/lognum/bbs.html
--
┌┼ Origin: 彰化師大生物系˙吟風‧眺月‧擎天崗 micro.bio.ncue.edu.tw
┼┘ Author: BioStar 從 163.23.212.18 發表精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻