The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Фильтр для перевода в наглядный вид времени в логе squid (squid log filter time)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: squid, log, filter, time,  (найти похожие документы)
From: Александр <sasha@toroid.net.ru.> Newsgroups: email Date: Mon, 12 Jun 2005 18:21:07 +0000 (UTC) Subject: Фильтр для перевода в наглядный вид времени в логе squid Squid (proxy squid log time) Изменение времени в секундах в понятное время Не нашёл ничего подходящего, кроме как сделать свою программу для изменения записанного времени в лог файле программы SQUID. Программа нахождения строк, начинающихся со времени в секундах, и изменения их на понятное время для оператора. Программа принимает строки или из файла, указанного в командной строке, или из стандартного ввода. Выводит результат в стандартный вывод. Программа находит пробел после числа в секундах и превращвет его в интервал времени, прошедший с 01.10.1970 "1117906805.123 abcd...", при этом увеличивает строку на один символ. Использование: cat File.txt | ThisProgram > OutFile.txt или ThisProgram File.txt > OutFile.txt перестроить исходник в FreeBSD или Linux можно командой: cc -o logtime logtime.c logtime - исполняемая программа для Unix logtime.c - Исходняй текст программы. 40.txt - файл для проверки работы Можно взять архив программы тут #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> char *strToTime(char *strIn,char a); int strInA(char const *strA,char a); int Go(FILE *ff); int main(int argv,char* args[]) { int ret=0; FILE *f; switch(argv) { case 1: ret = Go(stdin); return(ret); break; case 2: printf("Файл %s",args[1]); f = fopen(args[1],"r"); if(f==NULL) break; ret = Go(f); return(ret); fclose(f); break; default: printf("\nМного параметров\n"); } printf("Nikitushkin Alexandr sasha@toroid.net.ru\nЯ принимаю строки, max 512b\n и печатаю переведя номер, до пробела, во время, типа:\n\"1117906805.123 abcd...\"\n\ Examples:\ncat File.txt | ThisProg > OutFile.txt\nor\nThisProg File.txt > OutFile.txt\n\n"); return(-1); } int Go(FILE *ff) { char str[512],a,*sstr; fgets(str,512,ff); while(!feof(ff)) { sstr = strToTime(str,' '); printf("%s",sstr); if(sstr!=str) free(sstr); fgets(str,512,ff); } return(0); } char *strToTime(char *strIn,char a) { char ss[128]; int istrP,i; long l=0; double dA; time_t t,t1; char *str; struct tm *tma; istrP=strInA(strIn,a); //получаю номер появления символа в строке if(istrP==0) return(strIn); strncpy(ss,strIn,istrP); //Копирую строку для даты в ss ss[istrP]='\0'; // Устанавливаю конец строки t1=atof(ss); //"1117906485.847"); str = (char*) malloc(strlen(strIn)-istrP+16); tma=localtime(&t1); //Сделал структуру с временем. sprintf(str,"%02d%02d%02d-%02d:%02d:%02d%c%s", tma->tm_mday,tma->tm_mon+1,tma->tm_year-100,tma->tm_hour,tma->tm_min,tma->tm_sec,a,strIn+istrP); return (str); } int strInA(char const *strA,char a) { char *sstr; int istrP; sstr=strchr(strA,a); if(sstr==NULL) return(0); istrP = (int)(sstr-strA+1); return(istrP); } }

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, naquad (??), 13:09, 16/06/2005 [ответить]  
  • +/
    perl -MPOSIX -ne 'if(/^(\d+)\.(\d+)\s+/){print POSIX::strftime("[%H:%M:%S.$2-%d.%m.%Y]: ",localtime $1);s/^$1\.$2//;}print $_' < 40.txt > out
    head -3 out
    [20:46:13.397-18.05.2005]:       0 172.20.4.10 TCP_HIT/200 2478 GET http://img.yandex.ru/i/fp2_morda.js - NONE/- application/x-javascript
    [20:46:13.889-18.05.2005]:     731 172.20.4.10 TCP_MISS/200 25050 GET http://yandex.ru/ - DIRECT/213.180.204.11 text/html
    [20:46:58.601-18.05.2005]:       2 172.20.4.10 TCP_HIT/200 7725 GET http://css.yandex.ru/css/optim.css - NONE/- text/css
     
     
  • 3, Andrey Mitrofanov (?), 18:43, 07/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > perl -MPOSIX -ne 'if(/^(\d+)\.(\d+)\s+/){print POSIX::strftime("[%H:%M:%S.$2-%d.%m.%Y]: ",localtime $1);s/^$1\.$2//;}print $_' < 40.txt > out

    С приветом из 2013-го! :))

    [CODE]# awk -F. -v OFS=. '{if($1!=p)t=strftime("%F_%T",p=$1);$1=t;print}' <33.txt
    2013-03-07_18:40:29.717      0 127.0.0.1 TCP_DENIED/403 1649 GET http //www.opennet.ru/img/runnet.gif - NONE/- text/html
    2013-03-07_18:40:29.718      0 127.0.0.1 TCP_DENIED/403 1641 GET http //www.opennet.ru/banner.gif - NONE/- text/html
    2013-03-07_18:40:29.718      0 127.0.0.1 TCP_DENIED/403 1643 GET http //www.opennet.ru/adv_ibm.htm - NONE/- text/html[/CODE]

     

  • 2, naquad (??), 13:49, 16/06/2005 [ответить]  
  • +/
    Tщё пару замечаний:
    1. *** glibc detected *** double free or corruption (!prev): 0x09ecf008 ***
    Aborted - Аккуратней с памятью!
    2. Это простая задача, которую я решал на сях лет 5 назад. Не имеет смысла писать это на С - больше геммора, как видите однострочник на perl'e всё решил.
    3. sprintf(str,"%02d%02d%02d-%02d:%02d:%02d%c%s",           tma->tm_mday,tma->tm_mon+1,tma->tm_year-100,tma->tm_hour,tma->tm_min,tma->tm_sec,a,strIn+istrP);
        Шо це було? Чёрт с ними миллисекундами! strftime и вперед.
    4. Строка 27: return(ret);
            fclose(f);
        Выходим из программы, а потом закрываем файл :) - круто.
    5. Что за код возврата (-1) ?
    6. Зачем эта консрукция:
           ret = Go(f);
            return(ret);
    если функция Go(FILE* ff) в любом случае возвращает 0?
    7. Если это первая программа, то не спорю, нормально: есть идея и реализация, она прихрамывает, но всё же.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру