xferlog anlaysis

2004/10/25 14:25
xferlog 파일을 분석하여서 어떠한 릴리즈를 가장 많이 다운받았는지 리스트를 제공하는 스크립트이다.

(@|SITE|) SITE^TOPTRAFFIC + toptraffic today in SITE (2004/10/25 00:00 - 2004/10/25 05:10)
(@|SITE|) SITE^TOPTRAFFIC ... [1] 1415 megaB ./!. Desperate.Housewives.S01E04.HDTV.XviD-LOL ^_
(@|SITE|) SITE^TOPTRAFFIC ... [2] 1001 megaB ./!. Scaler_USA_XBOX ^_
(@|SITE|) SITE^TOPTRAFFIC ... [3] 776 megaB ./!. Cold.Case.S02E04.HDTV.XviD-LOL ^_
(@|SITE|) SITE^TOPTRAFFIC ... [4] 716 megaB ./!. Steve.Harveys.Big.Time.S02E07.PDTV.XviD-LOL ^_
(@|SITE|) SITE^TOPTRAFFIC ... [5] 712 megaB ./!. Han.Kang.Soo.Ta.Ryeong.E08.KOR.2004.SDTVRiP.XViD-iCEDRAMA ^_

#!/bin/sh

[ -e /glftpd/bin/releasetr.tmp ] && /glftpd/bin/rm -f /glftpd/bin/releasetr.tmp
[ -e /glftpd/bin/releasetr.tmp1 ] && /glftpd/bin/rm -f /glftpd/bin/releasetr.tmp1

/glftpd/bin/grep " o " /glftpd/ftp-data/logs/xferlog | tr -s ' ' | cut -d ' ' -f8-9 > /glftpd/bin/releasetr.tmp

IFS='
'
for line in `/glftpd/bin/cat /glftpd/bin/releasetr.tmp`; do
temp1=`/glftpd/bin/echo $line | /glftpd/bin/cut -d ' ' -f1`
temp2=`/glftpd/bin/echo $line | /glftpd/bin/cut -d ' ' -f2`
temp2=`echo "$temp2" | sed -e "s%/[cC][dD].%%"`
temp2=`echo "$temp2" | sed -e "s%/[dD][iI][sS][cCkK].%%"`
temp2=`echo "$temp2" | sed -e "s%/[sS][aA][mM][pP][lL][eE]%%"`
temp3=`/glftpd/bin/dirname $temp2`
temp4=`/glftpd/bin/basename $temp3`
echo "$temp4" "$temp1" >> /glftpd/bin/releasetr.tmp1
done

/glftpd/bin/cat /glftpd/bin/releasetr.tmp1 | /glftpd/bin/sort > /glftpd/bin/releasetr.tmp
rm -f /glftpd/bin/releasetr.tmp1
relnameold=""
sizeold=0
for line in `/glftpd/bin/cat /glftpd/bin/releasetr.tmp`; do
relname=`/glftpd/bin/echo $line | /glftpd/bin/cut -d ' ' -f1`
size=`/glftpd/bin/echo $line | /glftpd/bin/cut -d ' ' -f2`
if [ "$relnameold" = "$relname" ]; then
sizeold=$(expr "$sizeold" + "$size")
else
#echo "$sizeold $relnameold" >> /glftpd/bin/releasetr.tmp1
#echo "$sizeold $relnameold"
printf "%s %s\n" "$sizeold" "$relnameold" >> /glftpd/bin/releasetr.tmp1
sizeold=0
fi
relnameold="$relname"
done
/glftpd/bin/cat /glftpd/bin/releasetr.tmp1 | /glftpd/bin/sort -gr > /glftpd/bin/releasetr.tmp
echo `date "+%a %b %e %T %Y"` "TOPTR: \"+ toptraffic today in this site (`date "+%Y/%m/%d"` 00:00 - `date "+%Y/%m/%d %H:%M"`)\"" >> /glftpd/ftp-data/logs/glftpd.log
pos=1
for toprel in `/glftpd/bin/cat /glftpd/bin/releasetr.tmp | /glftpd/bin/sort -gr | /glftpd/bin/head -5`; do
size=`/glftpd/bin/echo $toprel | /glftpd/bin/cut -d ' ' -f1`
sizegb=$(expr "$size" / 1024 / 1024)
relname=`/glftpd/bin/echo $toprel | /glftpd/bin/cut -d ' ' -f2`
echo "$size $relname"
echo `date "+%a %b %e %T %Y"` "TOPTR: \"... \[^B$pos^B\] ^B$sizegb^B megaB ./!. ^B$relname^B ^_\"" >> /glftpd/ftp-data/logs/glftpd.log
pos=$[++pos]
done



*CAUTION*

이 쉘프로그램은 서버에 약간의 영향을 줄 수 있으며
xferlog 파일이 너무 클 경우에는 상당한 시간이 걸릴수 있다.
권장하는 것은 logcleaner 를 이용하여
매일 0시에 xferlog 파일을 정리하도록 권한다.
2004/10/25 14:25 2004/10/25 14:25
Posted by 마누
트랙백 0 : 댓글 2 댓글을 작성하시려면 클릭하세요

Backfill AutoNUKE!!

2004/10/14 12:41
싸이트 운영중에 백필을 하는 유저들이 간혹있다.
누커들이 자리를 비운사이 백필을 하게 되는 경우가 비일비재한데
이것을 막을만한 좋은 스크립이다 :)
일단 전제조건이 있다.
1. BackFill 을 알려주는 봇이 있어야 한다.
이것만 충족된다면 할수 있다. :D


사용을 하기 위해선 많은 수정작업이 필요하다
1. 4라인의 "|SITE|" 를 현재 프리타임을 알려주는 봇의 닉으로 바꾼다.
2. 5라인의 백필 단어를 프리봇이 말해주는것과 같게 고친다
3. 7라인부터 10라인까지 백필시에 프리봇이 말하는 text 에서 릴리즈 명만을 가져올수 있게끔 파싱한다.
4. 12라인부터 30 라인까지 자신의 싸이트에 맞게끔 수정한다
if 문 안에 있는 섹션 이름은 어나운싱시에 나오는 섹션명
set 문에는 실제 폴더명을 적어주면 된다.
5. 33라인 -N SITE 를 -N 누커아디 를 적어주면 된다.
여기까지 수정했으면 설정은 완료 되었다
사용해보고 작동하지 않을경우 나에게 메세지를 주세요~ =3=3
1 bind pubm - * pub:anouncemonitor
2
3 proc pub:anouncemonitor {nick output binary chan text} {
4 if {$nick=="|SITE|"} {
5 if {[string match *BACKFILL* $text]} {
6 set backfilldir [lindex $text 1]
7 regsub -all {^B|^_} $text "" backfilldir
8 regsub -all {.*BACKFILL.} $backfilldir "" backfilldir
9 regsub -all {.released.*} $backfilldir "" backfilldir
10 regsub -all { } $backfilldir "" backfilldir
11 set section [lindex $text 0]
12 if {[string match *MP3* $section]} {
13 set date [exec date +%m%d]
14 set secdir "/site/mp3/$date/"
15 } elseif {[string match *DIVX* $section]} {
16 set secdir "/site/divx/"
17 } elseif {[string match *DVDR* $section]} {
18 set secdir "/site/dvdr/"
19 } elseif {[string match *GAME* $section]} {
20 set secdir "/site/game/"
21 } elseif {[string match *PS2* $section]} {
22 set secdir "/site/ps2/"
23 } elseif {[string match *TV* $section]} {
24 set secdir "/site/tv/"
25 } elseif {[string match *UTIL* $section]} {
26 set secdir "/site/util/"
27 } elseif {[string match *VCD* $section]} {
28 set secdir "/site/vcd/"
29 } elseif {[string match *XBOX* $section]} {
30 set secdir "/site/xbox/"
31 } else { }
32 putlog "backfill release : $secdir$backfilldir"
33 set nuked [exec /glftpd/bin/nuker -N SITE -n $secdir$backfilldir 3 backfill.autonuke]
34 putlog "$nuked"
35
36
37 }
38 }
39 }
40 putlog "backfill autonuke v1.0 by Manu loaded"
2004/10/14 12:41 2004/10/14 12:41
Posted by 마누
트랙백 0 : 댓글 2 댓글을 작성하시려면 클릭하세요
이 스크립은 ioFTPD 에 있는 !quotas 기능과 같은것이라고 보면 된다.

(@Manu) !quota
(@|SITE|) SITE^QUOTA + QUOTA STAT + (up to date of October)
(@|SITE|) SITE^QUOTA ... 4 already delled. ^ 81 group excluded. ^ 39 didn't passed. ^ 27 passed.
(@|SITE|) SITE^QUOTA + PASSED USER LIST (up to date of October)
(@|SITE|) SITE^QUOTA ... a, B, C, D, E, F ,


위를 보시면 아는 분은 대충 이해하실거라고 본다....
설치 방법은 아주 간단하다.

tur-trial 2.6 은 깔려 있다고 가정하고 설정도 완료 했으며 현재 사용중이라는 전제아래에 설명한다.

bind pub - !quota pub:quotacheck

proc pub:quotacheck {nick output binary chan text} {
set binary {/glftpd/bin/tur-trial.sh}
set datebin {date}

set output [exec $binary dummy quota test]
set month [exec $datebin +%B]

set addedtm 0
set delled 0
set gexcluded 0
set nopass 0
set pass 0

foreach line [split $output \n] {
if {[string match *User*added*this*month* $line]} {
incr addedtm
} elseif {[string match *Already*delled*though* $line]} {
incr delled
} elseif {[string match *Group*Exclude*Match* $line]} {
incr gexcluded
} elseif {[string match *Putting*flag*6*on*him!* $line]} {
incr nopass
} elseif {[string match *Safe*\(4096\)* $line]} {
incr pass
set passuser [lindex $line 0]
append userlist "$passuser, "
} else { }
}
putserv "PRIVMSG $chan :QUOTA + QUOTA STAT + (up to date of $month)"
putserv "PRIVMSG $chan :QUOTA ... $delled already delled. ^ $gexcluded group excluded. ^ $nopass didn't passed. ^ $pass passed."
putserv "PRIVMSG $chan :QUOTA + PASSED USER LIST (up to date of $month)"
putserv "PRIVMSG $chan :QUOTA ... $userlist"
}

putlog "tur-trial addon v1.0 by Manu loaded"

tcl 소스이다 tur-trial-addon.tcl 이라고 저장한후
봇에다 로드한다 :)
Site channel 에서 !quota 를 입력해보자

PS. 다른 서버에서는 전혀 테스트 해보지 않았으며 나혼자 사용하기 위해 만든 스크립이니 에러가 발생한다면 필자에게 물어보던지 아니면.. 직접 고쳐서 사용하길 바란다..

추가로 서버의 quota 양이 4096이 아니라면
} elseif {[string match *Safe*\(4096\)* $line]} {

이 라인의 4096을 현재 설정해둔 양으로 고쳐서 사용하길 바란다.
2004/10/14 12:06 2004/10/14 12:06
Posted by 마누
트랙백 0 : 댓글 0 댓글을 작성하시려면 클릭하세요
TV 물만 들어오는 서버를 관리 하고 있다.
서버의 규칙상 온전한 릴리즈가 아닌 압축이 풀린 상태로 받고 있었다.
허나 압축을 풀어서 올리는게 너무나도 힘들다는 유저들의 의견때문에 하나의 스크립을 만들어 보게 되었다.
project-zs 의 complete script 에 넣어 보았지만 작동하지 않았다.
어떻게 사용하는 것인지 내가 모르는 것일 수도 있다 -_-;;

그리하여 고안한 방법..
crontab 을 이용하여 3분마다 서버를 체킹
완료된 릴리즈가 있다면 그 릴리즈의 nfo 를 옮기고 rar 압축을 풀기 시작
완료 되면 avi 를 nfo 을 옮겨둔 자리로 옮긴후
원본 폴더 삭제..
이러한 방법을 생각했다.
아래는 그 source 이다.

#!/bin/sh
# Manu's rar autoextract shell program..
# this is not stable.
# so it will makes some buggy. heh.
# bug reporting to manu (manu@manuz.net)
# homepage : http://Manuz.NET (only for KOREAN)
locate -U /glftpd/site/ -e /glftpd/site/+Manu/,/glftpd/site/+Site/,/glftpd/site/Request/
COMPLETEFILE="$(locate -n 1 *\ COMPLETE\ * )"
if [ "$COMPLETEFILE" ]; then
EXTRACTFOLDER="$(locate -n 1 *\ COMPLETE\ * | sed -e "s/\[ds\].*//")"
REALNAME="$(locate -n 1 *\ COMPLETE\ * | sed -e "s/\/glftpd\/site\///g" | sed -e "s/\[ds\].*//")"
echo `date "+%a %b %e %T %Y"` AUTOEXTRACT: \""start extracting...\"" >> /glftpd/ftp-data/logs/glftpd.log
/bin/rm -f "$COMPLETEFILE"
cd "$EXTRACTFOLDER"
/bin/mv -f *.nfo ../
/usr/local/bin/rar e "$EXTRACTFOLDER/*.rar" "$EXTRACTFOLDER/../"
cd ..
rm -rf "$EXTRACTFOLDER"
echo `date "+%a %b %e %T %Y"` AUTOEXTRACT: \""extracting $REALNAME has completed... :P manu...\"" >> /glftpd/ftp-data/logs/glftpd.log
fi



사전준비
* rar 패키지가 깔려 있어야 한다.

설치방법
1. 위의 소스를 복사하여 auto_extract.sh 로 서버에 저장

가장 중요한 것이 있다.
locate -U /glftpd/site/ -e /glftpd/site/+Manu/,/glftpd/site/+Site/,/glftpd/site/Request/
locate -U 기본검색폴더 -e 제외할폴더,제외할폴더,제외할폴더
제외할 폴더는 띄워쓰기 없이 , 로 구분한다.

sed -e "s/\[ds\].*//" 여기서 이부분은 Project-zs 의 컴플릿태그이다 알맞게 수정하자

2. chmod +x auto_extract.sh 를 하여 실행 가능하게 permission 수정
3. 파일을 /glftpd/bin 폴더로 이동
4. dZSbot.tcl 파일을 수정
set msgtypes(DEFAULT) 의 끝에 AUTOEXTRACT 삽입
------------------------------------------------------
set chanlist(AUTOEXTRACT) "#channel"
set disable(AUTOEXTRACT) 0
set variables(AUTOEXTRACT) "%r"
set announce(AUTOEXTRACT) "\002AUTOEXTRACT...\002 - %r
------------------------------------------------------

위의 4줄을 추가 한다.
5. crontab -e 를 친후
*/3 * * * * /glftpd/bin/auto_extract.sh >/dev/null

를 추가한다. */3 은 3분마다 한번씩 실행 하게 한다.

PS. 이 스크립에 대한 피드백은 꼬리글로 받습니다 :P...
2004/09/24 21:42 2004/09/24 21:42
Posted by 마누
트랙백 0 : 댓글 6 댓글을 작성하시려면 클릭하세요

RANK 출력 스크립

2004/09/14 03:05
GLFTPD 를 사용하며
EGGDROP 을 이용하여 어나운싱을 하는 서버에서 사용할수 있는 스크립트 이다

GL 서버에서의 자신의 월업로드랭킹 주업로드랭킹 일업로드랭킹을 보여준다
사용방법은 아래의 소스를 복사하여 tcl 로 저장후에
eggdrop 에서 로드하여 주면 된다.

/glftpd/bin/stats 파일이 실행 가능한 퍼미션이어야 한다.
가능하지 않다면 고치길 바란다.
bind pub - !rank pub:rank

proc pub:rank {nick output binary chan text} {
set binary {/glftpd/bin/stats}

set mooutput [exec $binary -umx 100]
set weoutput [exec $binary -uwx 100]
set daoutput [exec $binary -utx 100]

set ranktitle "$text RANK :"
set rankout ""
set activate 0
set moactivate 0
set weactivate 0
set daavtivate 0
set rank 0
foreach line [split $mooutput \n] {
regsub -all {\[|\]} $line "" line
if {[string match *\[01\]* $line]} {
set activate 1
}
if {$activate==1} {
incr rank
set user [lindex $line 1]
if {$user==$text} {
set speed [lindex $line end]
regsub -all $speed $line "" line
set size [lindex $line end]
append rankout " Month Up #$rank. \[ $size \]"
set moactivate 1
set activate 0
break
}
}
}

foreach line [split $weoutput \n] {
regsub -all {\[|\]} $line "" line
if {[string match *\[01\]* $line]} {
set activate 1
}
if {$activate==1} {
incr rank
set user [lindex $line 1]
if {$user==$text} {
set speed [lindex $line end]
regsub -all $speed $line "" line
set size [lindex $line end]
append rankout " Week Up #$rank. \[ $size \]"
set weactivate 1
set activate 0
break
}
}
}

foreach line [split $daoutput \n] {
regsub -all {\[|\]} $line "" line
if {[string match *\[01\]* $line]} {
set activate 1
}
if {$activate==1} {
incr rank
set user [lindex $line 1]
if {$user==$text} {
set speed [lindex $line end]
regsub -all $speed $line "" line
set size [lindex $line end]
append rankout " Day Up #$rank. \[ $size \]"
set daactivate 1
set activate 0
break
}
}
}
if {$rankout==""} {
putserv "PRIVMSG $chan :RANK : $text is not our user. :P"
return 0
}
putserv "PRIVMSG $chan :$ranktitle $rankout"
}

putlog "RANKCHECK v1.0 by Manu loaded"

이 스크립은 서버유저가 100 명 이하일 경우를 생각해서 만들었다
100 명을 넘는다면
set mooutput [exec $binary -umx 100]
set weoutput [exec $binary -uwx 100]
set daoutput [exec $binary -utx 100]

위 부분의 숫자 100 을 서버유저보다 많게 고쳐서 사용하면 된다.
2004/09/14 03:05 2004/09/14 03:05
Posted by 마누
트랙백 0 : 댓글 3 댓글을 작성하시려면 클릭하세요
GLFTPD 를 사용하며
EGGDROP 을 이용하여 어나운싱을 하는 서버에서 사용할수 있는 스크립트 이다

DAYTOP 하루의 업로드 등수를 보여준다
사용방법은 아래의 소스를 복사하여 tcl 로 저장후에
eggdrop 에서 로드하여 주면 된다.

/glftpd/bin/stats 파일이 실행 가능한 퍼미션이어야 한다.
가능하지 않다면 고치길 바란다.
bind pub - !daytop pub:daytop

proc pub:daytop {nick output binary chan text} {
set binary {/glftpd/bin/stats}
set output [exec $binary -uwx 10]
set daytopout "DAYTOP :"
set activate 0
set rank 0
foreach line [split $output \n] {
regsub -all {\[|\]} $line "" line
if {[string match *\[01\]* $line]} {
set activate 1
}
if {$activate==1} {
incr rank
set user [lindex $line 1]
set speed [lindex $line end]
regsub -all $speed $line "" line
set size [lindex $line end]
append daytopout " #$rank. \[ $user / $size / $speed \]"
}
}
putserv "PRIVMSG $chan :$daytopout"
}

putlog "DAYTOP v1.0 by Manu loaded"


기본적으로 10명을 출력하게 끔 만들었으며
수정하고 싶다면
set output [exec $binary -uwx 10]
여기의 숫자 10을 변경하면 된다.

PS. 매우 허접한 스크립이니 보고나서 욕하지 말아주셨으면 합니다 ㅋㅋ
2004/09/14 02:50 2004/09/14 02:50
Posted by 마누
트랙백 0 : 댓글 0 댓글을 작성하시려면 클릭하세요
GLFTPD 를 설정할 때 마누가 주로 이용하는 파일들입니다.


GLFTPD

glFPTD-LNX ver.1.32



GLFTPD Script

Project-ZS patched by DAX v0.3

NiCON AutoDelete v1.62

FOOTOOLS v.20030906

TUR-TRIAL v2.6



EGGDROP

EGGDROP v1.6.15

TCL v8.0.5
2004/03/28 22:43 2004/03/28 22:43
Posted by 마누
트랙백 0 : 댓글 1 댓글을 작성하시려면 클릭하세요

행복합니다^^
행복합니다. 김형원이 운영하는 블로그 입니다. 제가 쓴 글과 영상들이 있고 웹관련 정보들이 있습니다.

카테고리

전체 (159)
Life Story.. (46)
Love Story.. (2)
Meditation with Life (41)
Web Accesiblity (1)
Writing (2)
Meditation (15)
WEB (11)
IT (31)
Movie Clip (UCC) (8)

글 보관함

달력

«   2012/02   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      
Total : 300797
Today : 42 Yesterday : 232