作者itoc, 信區: itoc
標題[功能] nouse_brd.c 統計使用率不高的看板
時間04/05/21
作者: itoc (League) 看板: plan
標題: [功能] 統計使用率不高的看板
時間: 2003/12/07 Sun 10:23:58 Updated: 2005/05/25
: src/util/Makefile
EXE = ... nouse-brd
: crontab -e 加入
10 4 * * * bin/nouse-brd > /dev/null 2>&1
: src/util/nouse-brd.c 新增程式如下
/*-------------------------------------------------------*/
/* util/nouse_brd.c ( NTHU CS MapleBBS Ver 3.10 ) */
/*-------------------------------------------------------*/
/* target : 統計使用率不高的看板 */
/* create : 03/12/06 */
/* update : / / */
/* author : itoc.bbs@bbs.tnfsh.tn.edu.tw */
/*-------------------------------------------------------*/
#include "bbs.h"
static char *Title = "使用率不高的看板";
static char *Brdname = "sysop"; // 看板自定
static char *ftmp = "tmp/nouse-board"; /* 暫存檔 */
static void
add_post() /* 發文到看板 */
{
HDR hdr;
char folder[64];
brd_fpath(folder, Brdname, FN_DIR);
hdr_stamp(folder, HDR_LINK | 'A', &hdr, ftmp);
strcpy(hdr.owner, STR_SYSOP);
strcpy(hdr.nick, SYSOPNICK);
strcpy(hdr.title, Title);
rec_add(folder, &hdr, sizeof(HDR));
}
static time_t now;
static time_t delta; /* 最後一篇文章距目前幾天 */
static int page; /* 有幾篇文章 */
static void
expire(brd)
BRD *brd;
{
int fd, fsize;
char folder[64];
HDR hdr;
struct stat st;
brd_fpath(folder, brd->brdname, FN_DIR);
if ((fd = open(folder, O_RDONLY)) >= 0 && !fstat(fd, &st))
{
fsize = st.st_size;
page = fsize / sizeof(HDR);
if (page <= 0) /* 沒有文章則看開板時間 */
{
delta = brd->bstamp;
}
else
{
delta = brd->bstamp; /* 避免所有文章都是置底文 */
while ((fsize -= sizeof(HDR)) >= 0) /* 找最後一篇不是置底文的時間 */
{
lseek(fd, fsize, SEEK_SET);
read(fd, &hdr, sizeof(HDR));
if (!(hdr.xmode & POST_BOTTOM))
{
delta = hdr.chrono;
break;
}
}
}
delta = (now - delta) / 86400;
close(fd);
}
}
int
main()
{
int score;
FILE *fpr, *fpw;
BRD brd;
chdir(BBSHOME);
if (!(fpr = fopen(FN_BRD, "r")) || !(fpw = fopen(ftmp, "w")))
return -1;
time(&now);
fprintf(fpw, "%s %s (%s) %s %s\n",
STR_AUTHOR1, STR_SYSOP, SYSOPNICK, STR_POST2, Brdname);
fprintf(fpw, "標題: %s\n時間: %s\n\n", Title, Btime(&now));
while (fread(&brd, sizeof(BRD), 1, fpr) == 1)
{
if (!*brd.brdname) /* 此板已被刪除 */
continue;
expire(&brd);
score = page / 5 - delta; // 公式自定
if (score <= -200)
{
fprintf(fpw, "%-12s 板 %4d 分,最後一篇文章於 %3d 天前,"
"總共有 %4d 篇文章\n",
brd.brdname, score, delta, page);
}
}
fprintf(fpw, "\n--\n※ 本文由自動發文系統所發表\n");
fclose(fpr);
fclose(fpw);
add_post();
unlink(ftmp);
return 0;
}
--
□ 本文章由 itoc 從 three.Dorm11.NCTU.edu.tw 發表精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻