< -->
Program Modem_Sessions_Shower;
{$D+,E-,N+,G+}
type
Ttar = record
_08_18_ : Extended;
_18_00_ : Extended;
_00_08_ : Extended;
_holid_ : Extended;
end;
var
f, fr : Text;
S, S1 : String;
fname : String;
ModemName : String;
Dolr_Rub : Extended;
TarifZ : Ttar;
Connect_Ok, Inet_Ok : Boolean;
NCount, NCount_Ok, NCount_Inet : Longint;
CurBytesRead, CurBytesWrite, BytesRead, BytesWrite, AllBytesRead, AllBytesWrite : Longint;
TimeCon, TimeHang, InetTime, SumTime : Extended;
Hours : Word;
Minutes, Secunds: Extended;
Money, MoneyRight : Extended;
Code : Integer;
const
begSession = ' in use.';
endSession = ' closed';
SessStat = 'Session Statistics:';
Connect = 'Connection established at ';
HangUp = 'Hanging up the modem.';
Reads = 'Reads :';
Writes = 'Writes:';
configfile = 'modemss.cfg';
Outfile : String = 'modem.nfo';{default}
Function UpString(Sra : String) : String;
var
i : Byte;
Sr : String;
begin
Sr := Sra;
for i := 1 to Length(Sr) do
Sr[i] := UpCase(Sr[i]);
UpString := Sr
end;
Procedure ShowNFO;
begin
WriteLn('Формат файла:');
WriteLn('Первая строка - имя модема, каким оно пишется в логе (ТОЧНОЕ!)');
WriteLn('Вторая строка - имя файла для вывода информации (если пустая - вывод будет');
WriteLn('производиться в файл ', Outfile);
WriteLn('Третья строка - соотношение руб./долл.');
WriteLn('Четвёртая - седьмая строки - тарифы:');
WriteLn('будни: 4\8ч.-18ч.; 5\18ч.-0ч.; 6\0ч.-8ч.; 7\выходные и праздники в любое время.');
end;
Function RusDate(xS : String) : String;
begin
RusDate := Copy(xS, Pos('-', S)+1, 3)+Copy(xS, 1, Pos('-', S))+Copy(xS, Pos('-', S)+4, 4);
end;
begin
CurBytesRead := 0;
CurBytesWrite := 0;
BytesRead := 0;
BytesWrite := 0;
AllBytesRead := 0;
AllBytesWrite := 0;
TimeCon := 0;
TimeHang := 0;
InetTime := 0;
SumTime := 0;
Dolr_Rub := 0;
NCount := 0;
NCount_Ok := 0;
NCount_Inet := 0;
Money := 0;
MoneyRight := 0;
with TarifZ do
begin
_08_18_ := 0;
_18_00_ := 0;
_00_08_ := 0;
_holid_ := 0;
end;
Connect_Ok := False;
Inet_Ok := False;
WriteLn('================================================');
if ParamCount<1 then
begin
WriteLn('Modem''s Sessions Shower-Convertor');
WriteLn(' Укажите имя файла, содержащего ЛОГ работы модема');
Halt($FFFF);
end;
{$I-}
Assign(f, configfile);
Reset(f);
{$I+}
if IOResult<>0 then
begin
WriteLn('Не найден файл конфигурации ', configfile);
ShowNFO;
Halt;
end;
ReadLn(f, ModemName);
ReadLn(f, S);
ReadLn(f, Dolr_Rub);
ReadLn(f, tarifZ._08_18_);
ReadLn(f, tarifZ._18_00_);
ReadLn(f, tarifZ._00_08_);
ReadLn(f, tarifZ._holid_);
Close(f);
if ModemName='' then
begin
WriteLn('Отсутствует название модема в файле конфигурации ', configfile,' !');
ShowNFO;
Halt;
end;
if (Dolr_Rub=0) or (tarifZ._08_18_=0) or (tarifZ._18_00_=0) or
(tarifZ._00_08_=0) or (tarifZ._holid_=0) then
begin
WriteLn('Отсутствует описание для тарифов Инета в файле конфигурации ', configfile, '!');
ShowNFO;
Halt;
end;
if S<>'' then OutFile := S;
WriteLn('Файл конфигурации успешно прочитан.');
WriteLn('Имя модема: ', ModemName);
WriteLn('Вывод производится в файл ', OutFile);
fname := ParamStr(1);
WriteLn('Обрабатывается файл '+fname);
WriteLn('================================================');
WriteLn('Руб./долл.: ', Dolr_Rub:1:2);
WriteLn('Тариф 8ч. - 18ч.: $', tarifZ._08_18_:1:3, ' = ', Dolr_Rub*tarifZ._08_18_:1:2, ' руб./минуту');
WriteLn('Тариф 18ч. - 0ч. : $', tarifZ._18_00_:1:3, ' = ', Dolr_Rub*tarifZ._18_00_:1:2, ' руб./минуту');
WriteLn('Тариф 0ч. - 8ч. : $', tarifZ._00_08_:1:3, ' = ', Dolr_Rub*tarifZ._00_08_:1:2, ' руб./минуту');
WriteLn('Тариф выходные и праздники: $', tarifZ._holid_:1:3, ' = ', Dolr_Rub*tarifZ._holid_:1:2, ' руб./минуту');
WriteLn('================================================');
Assign(f, fname);
Assign(fr, outfile);
Reset(f);
Rewrite(fr);
WriteLn(fr, '-=Список дозвона в Инет=-');
WriteLn(fr, '================================================');
WriteLn(fr, 'Имя модема: ', ModemName);
WriteLn(fr, 'Обрабатывается файл '+fname);
WriteLn(fr, 'Руб./долл.: ', Dolr_Rub:1:2);
WriteLn(fr, 'Тариф 8ч. - 18ч.: $', tarifZ._08_18_:1:3, ' = ', Dolr_Rub*tarifZ._08_18_:1:2, ' руб./минуту');
WriteLn(fr, 'Тариф 18ч. - 0ч. : $', tarifZ._18_00_:1:3, ' = ', Dolr_Rub*tarifZ._18_00_:1:2, ' руб./минуту');
WriteLn(fr, 'Тариф 0ч. - 8ч. : $', tarifZ._00_08_:1:3, ' = ', Dolr_Rub*tarifZ._00_08_:1:2, ' руб./минуту');
WriteLn(fr, 'Тариф выходные и праздники: $', tarifZ._holid_:1:3, ' = ', Dolr_Rub*tarifZ._holid_:1:2, ' руб./минуту');
WriteLn(fr);
While not EOF(f) do
begin
ReadLn(f, S);
if Pos(begSession, S)<>0 then
begin
WriteLn(fr, '================================================');
Connect_Ok := False;
Inet_Ok := False;
WriteLn(fr, 'Дата дозвона: ', RusDate(Copy(S, 1, Pos(' ', S)-1)));
S1 := Copy(S, Pos(' ', S)+1, 11);
WriteLn(fr, 'Время начала дозвона: ', S1);
inc(NCount);
end;
if Pos(Connect, S)<>0 then
begin
Inet_Ok := False;
Connect_Ok := True;
S1 := Copy(S, Pos(' ', S)+1, 11);
Val(Copy(S1, 1, 2), Hours, Code);
Val(Copy(S1, 4, 2), Minutes, Code);
Val(Copy(S1, 7, 5), Secunds, Code);
TimeCon := Minutes+60.0*Hours+Secunds/60;
WriteLn(fr, 'Время начала соединения: ', S1);
Delete(S, 1, Pos('at', S)+2);
WriteLn(fr, 'Скорость соединения: ', Copy(S, 1, Pos('.', S)));
inc(NCount_Ok);
end;
if Pos(HangUp, S)<>0 then
begin
S1 := Copy(S, Pos(' ', S)+1, 11);
Val(Copy(S1, 1, 2), Hours, Code);
Val(Copy(S1, 4, 2), Minutes, Code);
Val(Copy(S1, 7, 5), Secunds, Code);
TimeHang := Minutes+60.0*Hours+Secunds/60;
if Connect_Ok then
begin
if (TimeHang-TimeCon)<0 then
begin
TimeHang := TimeHang+60.0*24.0;
SumTime := SumTime + (TimeHang-TimeCon)
end
else
SumTime := SumTime + (TimeHang-TimeCon);
if (TimeHang-TimeCon) >= 160 then
begin
InetTime := InetTime + (TimeHang-TimeCon);
Inet_Ok := True;
end;
end;
WriteLn(fr, 'Время окончания соединения: ', S1);
Hours := Round((TimeHang-TimeCon)/60);
Minutes := int(TimeHang - TimeCon - int((TimeHang-TimeCon)/60)*60);
Secunds := (TimeHang - TimeCon - int((TimeHang-TimeCon)/60)*60)*60-Minutes*60.0;
if Connect_Ok then
WriteLn(fr, 'Время соединения: ', Hours, ' ч. ', Minutes:1:0, ' мин. ',Secunds:1:2, ' сек.');
Connect_Ok := False;
end;
if Pos(SessStat, S)<>0 then
begin
WriteLn(fr, '/\/\/|:===--->>> Итоги <<<---===:|\/\/\');
ReadLn(f, S);
Delete(S, 1, Pos(Reads, S)+7);
Delete(S, Pos(' ', S), 6);
Val(S, CurBytesRead, Code);
WriteLn(fr, 'Получено байт: ', S);
ReadLn(f, S);
Delete(S, 1, Pos(Writes, S)+7);
Delete(S, Pos(' ', S), 6);
Val(S, CurBytesWrite, Code);
WriteLn(fr, 'Отправлено байт: ', S);
AllBytesRead := AllBytesRead + CurBytesRead;
AllBytesWrite := AllBytesWrite + CurBytesWrite;
if Inet_Ok then
begin
BytesRead := BytesRead + CurBytesRead;
BytesWrite := BytesWrite + CurBytesWrite;
inc(NCount_Inet);
end;
end;
end;
WriteLn(fr);
WriteLn(fr, '######################');
WriteLn(fr, '-=/\| Статистика |\/=-');
WriteLn(fr, '######################');
WriteLn(fr);
WriteLn(fr, 'Попыток соединения: ', NCount);
WriteLn(fr, 'Удачных соединений: ', NCount_Ok);
WriteLn(fr, 'Удачных выходов в Инет: ', NCount_Inet);
WriteLn(fr);
WriteLn(fr, 'Получено байт за все сеансы связи: ', AllBytesRead);
WriteLn(fr, 'Отправлено байт за все сеансы связи: ', AllBytesWrite);
WriteLn(fr, 'Всего времени за все сеансы: ', SumTime:1:2, ' минут');
WriteLn(fr);
WriteLn(fr, 'Получено байт за сеансы подключения к Инету: ', BytesRead);
WriteLn(fr, 'Отправлено байт за сеансы подключения к Инету: ', BytesWrite);
WriteLn(fr, 'Время в Инете: ', InetTime:1:2, ' минут');
WriteLn(fr, 'На сумму (не учтены переходы между тарифами): ', Money:1:2, ' рублей');
WriteLn(fr, 'На сумму (учтены переходы между тарифами для разного времени): ', MoneyRight:1:2, ' рублей');
Close(fr);
Close(f);
end.
Назад