回精華區
作者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翻