Jump to content

Recommended Posts

Posted

Вот тут вчера наваял может кому интерестно.

На релкоме можно брать свою статистику, но она в таком непотребном виде (видели наверно). Вот она ее и разгребает немного.

Работает немного медленно, но просто у меня база большая была, да и сервачок так себе. Под виндой работает, только подправить надо немного.

Комментарии:

Использую DB_File что бы в память все не грузить (у меня база была 42Мб, 528000 строк!!!).

Я еще сваял из кусков других своих старых программ, так что не обращайте внимание на разные места и т.д. Времени не было.

 

 

#! /usr/bin/perl

# Writen By XiBlue 04.06.2003 (xiblue@usm.ur.ru)

use DB_File;

 

$dir="/root/r";

$file="$dir/traf-200305";

$trafdb="$dir/traf-200305.db";

$DB_RECNO= new DB_File::RECNOINFO;

$DBTRAF_RECNO= new DB_File::RECNOINFO;

$DB=tie(@BASE,"DB_File","$file",O_RDWR|O_CREAT,0666,$DB_RECNO);

$DBTRAF=tie(@TRAFBASE,"DB_File","$trafdb",O_RDWR|O_CREAT,0666,$DBTRAF_RECNO);

$sizedb=$DB->length;

print "$sizedbn";

$newi=0;

for ($i=0;$i<$sizedb;$i++) {

($ipfrom,$ipto,$p,$bytes,$s,$t)=split(/s+/,$BASE[$i]);

if ($newi eq $i) {

print "$in";$newi=$newi+1000;

if ($i>0) {

untie(@TRAFBASE);

$DBTRAF=tie(@TRAFBASE,"DB_File","$trafdb",O_RDWR|O_CREAT,0666,$DBTRAF_RECNO);

}

}

&line_oper($BASE[$i]);

}

untie(@BASE);

untie(@TRAFBASE);

exit;

 

sub line_oper {

my ($self)=shift;$line=$self;

$tmp=substr($line,0,1);if ($tmp eq '#') {return;}

($ipfrom,$ipto,$p,$bytes,$s,$t)=split(/s+/,$line);

($m,$scheme)=split(/=/,$s);

if ($scheme eq 'city') {base_oper($ipto,$bytes,0,0);}

if ($scheme eq 'game') {base_oper($ipto,0,$bytes,0);}

if ($scheme eq 'ext') {base_oper($ipto,0,0,$bytes);}

return;

}

 

sub base_oper {

my ($ip,$city,$game,$world,$sizedb,$i,$markdb);

my ($self)=shift;$ip=$self;

my ($self)=shift;$city=$self;

my ($self)=shift;$game=$self;

my ($self)=shift;$world=$self;

$sizedb=$DBTRAF->length;$markdb=0;

for ($i=0;$i<$sizedb;$i++) {

($db_ip,$db_city,$db_game,$db_world)=split(/ /,$TRAFBASE[$i]);

if ($db_ip eq $ip) {

$db_city+=$city;

$db_game+=$game;

$db_world+=$world;

$TRAFBASE[$i]="$db_ip $db_city $db_game $db_world";

} else {$markdb++;}

}

if ($markdb == $sizedb) {$TRAFBASE[$sizedb]="$ip $city $game $world";}

return;

}

  • 2 months later...
  • 3 weeks later...
Posted

Я же говорю, машинка под линухом была так себе. 300 целерон, 256 памяти. Нагрузка постоянная около 40%. Нагружать нехотелось. Я чуть позже еще считал, другой месяц. Только уже на 2000 целероне, 256 памяти, под виндой. Просчитало в 10 раз быстрее. Ту машинку сколько угодно можно было нагружать....

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.