Import upstream version 1.5.4
Debian Janitor
2 years ago
72 | 72 | * Justin Mills <justin.mills@utah.edu> |
73 | 73 | * Kamino Hiroki <37243867+4f8p@users.noreply.github.com> |
74 | 74 | * Kit Westneat <kit.westneat@gmail.com> |
75 | * kokke <spam@rowdy.dk> | |
75 | 76 | * kyle sloan <kyle@ifsight.com> |
76 | 77 | * LeoAttn <leo.massonnat@hotmail.fr> |
77 | 78 | * Maksim Losev <mlosev@beget.ru> |
88 | 89 | * mynameiscfed <christopherfederico@gmail.com> |
89 | 90 | * Nicolas Le Manchet <nicolas@lemanchet.fr> |
90 | 91 | * Nicolas <noreply@github.com> |
92 | * Ophir LOJKINE <pere.jobs@gmail.com> | |
91 | 93 | * Otto Kekäläinen <otto.kekalainen@seravo.fi> |
92 | 94 | * Placidina <alanplacidina@gmail.com> |
93 | 95 | * pravdomil <noreply@github.com> |
0 | Changes to GoAccess 1.5.4 - Saturday, December 25, 2021 | |
1 | ||
2 | - Added AWS ALB to the predefined logs format list --log-format=AWSALB. | |
3 | - Ensure we lock our pipe/websocket writer before broadcasting message. | |
4 | - Ensure we require a valid host token even when we're not validating the IP. | |
5 | - Ensure we simply update the TUI once after tailing multiple files. | |
6 | - Ensure we simply update the UI once after tailing multiple files. | |
7 | - Fixed buffer overflow when checking if an HTTP code was a 404 on an empty | |
8 | status code. | |
9 | - Optimized terminal and HTML UI output when tailing multiple files. | |
10 | - Updated DB PATH error message to be more descriptive. | |
11 | ||
12 | Changes to GoAccess 1.5.3 - Thursday, November 25, 2021 | |
13 | ||
14 | - Added additional crawlers to the default list. | |
15 | - Added Italian translation (i18n). | |
16 | - Added 'macOS 12' to the list of OS. | |
17 | - Fixed buffer overflow caused by an excessive number of invalid requests | |
18 | with multiple logs. | |
19 | - Fixed visualization issue on the HTML report for panels with disabled | |
20 | chart. | |
21 | ||
22 | Changes to GoAccess 1.5.2 - Tuesday, September 28, 2021 | |
23 | ||
24 | - Added .avi to the list of static requests/extensions. | |
25 | - Changed label from 'Init. Proc. Time' to 'Log Parsing Time'. | |
26 | - Fixed issue where lengthy static-file extension wouldn't account certain | |
27 | valid requests. | |
28 | - Fixed possible buffer underflow when checking static-file extension. | |
29 | - Fixed segfault when attempting to parse an invalid JSON log while using a | |
30 | JSON log format. | |
31 | - Fixed segfault when ignoring a status code and processing a line > '4096' | |
32 | chars. | |
33 | ||
0 | 34 | Changes to GoAccess 1.5.1 - Wednesday, June 30, 2021 |
1 | 35 | |
2 | 36 | - Changed official deb repo so it now builds '--with-getline' in order to |
1 | 1 | Gerardo Orellana <goaccess@prosoftcorp.com> |
2 | 2 | |
3 | 3 | * Version history: |
4 | - 1.5.4 [Saturday, December 25, 2021] | |
5 | . GoAccess 1.5.4 Released. See ChangeLog for new features/bug-fixes. | |
6 | - 1.5.3 [Thursday, November 25, 2021] | |
7 | . GoAccess 1.5.3 Released. See ChangeLog for new features/bug-fixes. | |
8 | - 1.5.2 [Tuesday, Sep 28, 2021] | |
9 | . GoAccess 1.5.2 Released. See ChangeLog for new features/bug-fixes. | |
4 | 10 | - 1.5.1 [Wednesday, Jun 30, 2021] |
5 | 11 | . GoAccess 1.5.1 Released. See ChangeLog for new features/bug-fixes. |
6 | 12 | - 1.5 [Wednesday, May 26, 2021] |
0 | 0 | #! /bin/sh |
1 | 1 | # Guess values for system-dependent variables and create Makefiles. |
2 | # Generated by GNU Autoconf 2.69 for goaccess 1.5.1. | |
2 | # Generated by GNU Autoconf 2.69 for goaccess 1.5.4. | |
3 | 3 | # |
4 | 4 | # Report bugs to <hello@goaccess.io>. |
5 | 5 | # |
579 | 579 | # Identity of this package. |
580 | 580 | PACKAGE_NAME='goaccess' |
581 | 581 | PACKAGE_TARNAME='goaccess' |
582 | PACKAGE_VERSION='1.5.1' | |
583 | PACKAGE_STRING='goaccess 1.5.1' | |
582 | PACKAGE_VERSION='1.5.4' | |
583 | PACKAGE_STRING='goaccess 1.5.4' | |
584 | 584 | PACKAGE_BUGREPORT='hello@goaccess.io' |
585 | 585 | PACKAGE_URL='https://goaccess.io' |
586 | 586 | |
1332 | 1332 | # Omit some internal or obsolete options to make the list less imposing. |
1333 | 1333 | # This message is too long to be a string in the A/UX 3.1 sh. |
1334 | 1334 | cat <<_ACEOF |
1335 | \`configure' configures goaccess 1.5.1 to adapt to many kinds of systems. | |
1335 | \`configure' configures goaccess 1.5.4 to adapt to many kinds of systems. | |
1336 | 1336 | |
1337 | 1337 | Usage: $0 [OPTION]... [VAR=VALUE]... |
1338 | 1338 | |
1403 | 1403 | |
1404 | 1404 | if test -n "$ac_init_help"; then |
1405 | 1405 | case $ac_init_help in |
1406 | short | recursive ) echo "Configuration of goaccess 1.5.1:";; | |
1406 | short | recursive ) echo "Configuration of goaccess 1.5.4:";; | |
1407 | 1407 | esac |
1408 | 1408 | cat <<\_ACEOF |
1409 | 1409 | |
1513 | 1513 | test -n "$ac_init_help" && exit $ac_status |
1514 | 1514 | if $ac_init_version; then |
1515 | 1515 | cat <<\_ACEOF |
1516 | goaccess configure 1.5.1 | |
1516 | goaccess configure 1.5.4 | |
1517 | 1517 | generated by GNU Autoconf 2.69 |
1518 | 1518 | |
1519 | 1519 | Copyright (C) 2012 Free Software Foundation, Inc. |
2066 | 2066 | This file contains any messages produced by compilers while |
2067 | 2067 | running configure, to aid debugging if configure makes a mistake. |
2068 | 2068 | |
2069 | It was created by goaccess $as_me 1.5.1, which was | |
2069 | It was created by goaccess $as_me 1.5.4, which was | |
2070 | 2070 | generated by GNU Autoconf 2.69. Invocation command line was |
2071 | 2071 | |
2072 | 2072 | $ $0 $@ |
2933 | 2933 | |
2934 | 2934 | # Define the identity of the package. |
2935 | 2935 | PACKAGE='goaccess' |
2936 | VERSION='1.5.1' | |
2936 | VERSION='1.5.4' | |
2937 | 2937 | |
2938 | 2938 | |
2939 | 2939 | cat >>confdefs.h <<_ACEOF |
9657 | 9657 | # report actual input values of CONFIG_FILES etc. instead of their |
9658 | 9658 | # values after options handling. |
9659 | 9659 | ac_log=" |
9660 | This file was extended by goaccess $as_me 1.5.1, which was | |
9660 | This file was extended by goaccess $as_me 1.5.4, which was | |
9661 | 9661 | generated by GNU Autoconf 2.69. Invocation command line was |
9662 | 9662 | |
9663 | 9663 | CONFIG_FILES = $CONFIG_FILES |
9724 | 9724 | cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 |
9725 | 9725 | ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" |
9726 | 9726 | ac_cs_version="\\ |
9727 | goaccess config.status 1.5.1 | |
9727 | goaccess config.status 1.5.4 | |
9728 | 9728 | configured by $0, generated by GNU Autoconf 2.69, |
9729 | 9729 | with options \\"\$ac_cs_config\\" |
9730 | 9730 |
1 | 1 | # Process this file with autoconf to produce a configure script. |
2 | 2 | |
3 | 3 | AC_PREREQ([2.69]) |
4 | AC_INIT([goaccess],[1.5.1],[hello@goaccess.io],[],[https://goaccess.io]) | |
4 | AC_INIT([goaccess],[1.5.4],[hello@goaccess.io],[],[https://goaccess.io]) | |
5 | 5 | AM_INIT_AUTOMAKE |
6 | 6 | AC_CONFIG_SRCDIR([src/goaccess.c]) |
7 | 7 | AC_CONFIG_HEADERS([src/config.h]) |
0 | .TH goaccess 1 "JUNE 2021" GNU+Linux "User Manuals" | |
0 | .TH goaccess 1 "DECEMBER 2021" GNU+Linux "User Manuals" | |
1 | 1 | .SH NAME |
2 | 2 | goaccess \- fast web log analyzer and interactive viewer. |
3 | 3 | .SH SYNOPSIS |
225 | 225 | CLOUDSTORAGE - Google Cloud Storage, |
226 | 226 | AWSELB - Amazon Elastic Load Balancing, |
227 | 227 | AWSS3 - Amazon Simple Storage Service (S3) |
228 | AWSALB - Amazon Application Load Balancer | |
228 | 229 | CADDY - Caddy's JSON Structured format |
229 | 230 | .IP |
230 | 231 | .I Note: |
373 | 374 | Do now show the progress metrics and parsing spinner. |
374 | 375 | .SS |
375 | 376 | SERVER OPTIONS |
377 | .P | |
378 | .I Note | |
379 | This is just a WebSocket server to provide the raw real-time data. | |
380 | It is not a WebServer itself. To access your reports html file, you will | |
381 | still need your own HTTP server, place the generated report in it's document | |
382 | root dir and open the html file in your browser. The browser will then open | |
383 | another WebSocket-connection to the ws-server you may setup here, | |
384 | to keep the dashboard up-to-date. | |
376 | 385 | .TP |
377 | 386 | \fB\-\-addr |
378 | 387 | Specify IP address to bind the server to. Otherwise it binds to 0.0.0.0. |
1195 | 1204 | .I goaccess@prosoftcorp.com |
1196 | 1205 | or use the issue tracker in https://github.com/allinurl/goaccess/issues |
1197 | 1206 | .SH AUTHOR |
1198 | Gerardo Orellana <goaccess@prosoftcorp.com> | |
1207 | Gerardo Orellana <hello@goaccess.io> | |
1199 | 1208 | For more details about it, or new releases, please visit |
1200 | 1209 | https://goaccess.io |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: \n" |
8 | 8 | "Report-Msgid-Bugs-To: hello@goaccess.io\n" |
9 | "POT-Creation-Date: 2021-06-28 17:49-0500\n" | |
9 | "POT-Creation-Date: 2021-12-25 11:25-0600\n" | |
10 | 10 | "PO-Revision-Date: 2019-05-05 16:03+0200\n" |
11 | 11 | "Last-Translator: Axel Wehner <mail@axelwehner.de>\n" |
12 | 12 | "Language: de\n" |
86 | 86 | msgstr "Fehlgeschlagene Anfragen" |
87 | 87 | |
88 | 88 | #: src/labels.h:64 |
89 | msgid "Init. Proc. Time" | |
90 | msgstr "Init. Verarbeitungszeit" | |
89 | msgid "Log Parsing Time" | |
90 | msgstr "" | |
91 | 91 | |
92 | 92 | #: src/labels.h:65 |
93 | 93 | msgid "Log Size" |
841 | 841 | msgstr "417 - Erwartung fehlgeschlagen" |
842 | 842 | |
843 | 843 | #: src/labels.h:468 |
844 | msgid "418 - I’m a teapot" | |
844 | #, fuzzy | |
845 | msgid "418 - I'm a teapot" | |
845 | 846 | msgstr "418 - Ich bin ein Teekännchen" |
846 | 847 | |
847 | 848 | #: src/labels.h:470 |
956 | 957 | msgid "524 - CloudFlare - A timeout occurred" |
957 | 958 | msgstr "524 - CloudFlare - Zeitüberschreitung aufgetreten" |
958 | 959 | |
960 | #~ msgid "Init. Proc. Time" | |
961 | #~ msgstr "Init. Verarbeitungszeit" | |
962 | ||
959 | 963 | #~ msgid "Built using the default in-memory hash database." |
960 | 964 | #~ msgstr "Erstellt in Verwendung der Standard In-Memory Hash-Datenbank." |
961 | 965 |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: Goaccess\n" |
8 | 8 | "Report-Msgid-Bugs-To: hello@goaccess.io\n" |
9 | "POT-Creation-Date: 2021-06-28 17:49-0500\n" | |
9 | "POT-Creation-Date: 2021-12-25 11:25-0600\n" | |
10 | 10 | "PO-Revision-Date: 2017-08-04 13:00-0300\n" |
11 | 11 | "Last-Translator: Enrique Becerra <kabeza@gmail.com>\n" |
12 | 12 | "Language-Team: \n" |
86 | 86 | msgstr "Peticiones Fallidas" |
87 | 87 | |
88 | 88 | #: src/labels.h:64 |
89 | msgid "Init. Proc. Time" | |
90 | msgstr "Hora Inicio Proc." | |
89 | msgid "Log Parsing Time" | |
90 | msgstr "" | |
91 | 91 | |
92 | 92 | #: src/labels.h:65 |
93 | 93 | msgid "Log Size" |
817 | 817 | msgstr "417 - Expectativa Fallida" |
818 | 818 | |
819 | 819 | #: src/labels.h:468 |
820 | msgid "418 - I’m a teapot" | |
820 | #, fuzzy | |
821 | msgid "418 - I'm a teapot" | |
821 | 822 | msgstr "418 - Soy una tetera" |
822 | 823 | |
823 | 824 | #: src/labels.h:470 |
928 | 929 | msgid "524 - CloudFlare - A timeout occurred" |
929 | 930 | msgstr "524 - CloudFlare - Ocurrio cese de tiempo" |
930 | 931 | |
932 | #~ msgid "Init. Proc. Time" | |
933 | #~ msgstr "Hora Inicio Proc." | |
934 | ||
931 | 935 | #~ msgid "Built using the default in-memory hash database." |
932 | 936 | #~ msgstr "Construido usando base de datos hash por defecto en-memoria" |
933 | 937 |
5 | 5 | msgstr "" |
6 | 6 | "Project-Id-Version: goaccess 1.4\n" |
7 | 7 | "Report-Msgid-Bugs-To: hello@goaccess.io\n" |
8 | "POT-Creation-Date: 2021-06-28 17:49-0500\n" | |
8 | "POT-Creation-Date: 2021-12-25 11:25-0600\n" | |
9 | 9 | "PO-Revision-Date: 2020-07-10 11:44+0200\n" |
10 | 10 | "Last-Translator: Coban L. <coban.lebret@nfrance.com>\n" |
11 | 11 | "Language-Team: français\n" |
85 | 85 | msgstr "Requêtes échouées" |
86 | 86 | |
87 | 87 | #: src/labels.h:64 |
88 | msgid "Init. Proc. Time" | |
89 | msgstr "Temps Init. Proc." | |
88 | msgid "Log Parsing Time" | |
89 | msgstr "" | |
90 | 90 | |
91 | 91 | #: src/labels.h:65 |
92 | 92 | msgid "Log Size" |
824 | 824 | msgstr "417 - Attente échouée" |
825 | 825 | |
826 | 826 | #: src/labels.h:468 |
827 | msgid "418 - I’m a teapot" | |
827 | #, fuzzy | |
828 | msgid "418 - I'm a teapot" | |
828 | 829 | msgstr "418 - Je suis une théière" |
829 | 830 | |
830 | 831 | #: src/labels.h:470 |
936 | 937 | #: src/labels.h:520 |
937 | 938 | msgid "524 - CloudFlare - A timeout occurred" |
938 | 939 | msgstr "524 - CloudFlare - Un dépassement du délai s'est produit" |
940 | ||
941 | #~ msgid "Init. Proc. Time" | |
942 | #~ msgstr "Temps Init. Proc." | |
939 | 943 | |
940 | 944 | #~ msgid "Built using the default in-memory hash database." |
941 | 945 | #~ msgstr "" |
5 | 5 | #, fuzzy |
6 | 6 | msgid "" |
7 | 7 | msgstr "" |
8 | "Project-Id-Version: goaccess 1.5.1\n" | |
8 | "Project-Id-Version: goaccess 1.5.4\n" | |
9 | 9 | "Report-Msgid-Bugs-To: hello@goaccess.io\n" |
10 | "POT-Creation-Date: 2021-06-28 17:49-0500\n" | |
10 | "POT-Creation-Date: 2021-12-25 11:25-0600\n" | |
11 | 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
14 | 14 | "Language: \n" |
15 | 15 | "MIME-Version: 1.0\n" |
16 | "Content-Type: text/plain; charset=UTF-8\n" | |
16 | "Content-Type: text/plain; charset=CHARSET\n" | |
17 | 17 | "Content-Transfer-Encoding: 8bit\n" |
18 | 18 | |
19 | 19 | #: src/labels.h:40 |
86 | 86 | msgstr "" |
87 | 87 | |
88 | 88 | #: src/labels.h:64 |
89 | msgid "Init. Proc. Time" | |
89 | msgid "Log Parsing Time" | |
90 | 90 | msgstr "" |
91 | 91 | |
92 | 92 | #: src/labels.h:65 |
809 | 809 | msgstr "" |
810 | 810 | |
811 | 811 | #: src/labels.h:468 |
812 | msgid "418 - I’m a teapot" | |
812 | msgid "418 - I'm a teapot" | |
813 | 813 | msgstr "" |
814 | 814 | |
815 | 815 | #: src/labels.h:470 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | # | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: Goaccess\n" | |
8 | "Report-Msgid-Bugs-To: hello@goaccess.io\n" | |
9 | "POT-Creation-Date: 2021-12-25 11:25-0600\n" | |
10 | "PO-Revision-Date: 2017-08-04 13:00-0300\n" | |
11 | "Last-Translator: Mario Donnarumma <mario.donnarumma.97@gmail.com>\n" | |
12 | "Language-Team: \n" | |
13 | "Language: it\n" | |
14 | "MIME-Version: 1.0\n" | |
15 | "Content-Type: text/plain; charset=UTF-8\n" | |
16 | "Content-Transfer-Encoding: 8bit\n" | |
17 | "X-Generator: Poedit 1.5.4\n" | |
18 | ||
19 | #: src/labels.h:40 | |
20 | msgid "en" | |
21 | msgstr "it" | |
22 | ||
23 | #: src/labels.h:43 | |
24 | msgid "Exp. Panel" | |
25 | msgstr "Exp. Panel" | |
26 | ||
27 | #: src/labels.h:44 | |
28 | msgid "Help" | |
29 | msgstr "Aiuto" | |
30 | ||
31 | #: src/labels.h:45 | |
32 | msgid "Quit" | |
33 | msgstr "Esci" | |
34 | ||
35 | #: src/labels.h:46 | |
36 | msgid "Total" | |
37 | msgstr "Totale" | |
38 | ||
39 | #: src/labels.h:49 | |
40 | msgid "[x] ASC [ ] DESC" | |
41 | msgstr "[x] ASC [ ] DESC" | |
42 | ||
43 | #: src/labels.h:50 | |
44 | msgid "[ ] ASC [x] DESC" | |
45 | msgstr "[ ] ASC [x] DESC" | |
46 | ||
47 | #: src/labels.h:53 | |
48 | #, c-format | |
49 | msgid "[Active Panel: %1$s]" | |
50 | msgstr "[Pannello Attivo: %1$s]" | |
51 | ||
52 | #: src/labels.h:54 | |
53 | msgid "[q]uit GoAccess" | |
54 | msgstr "[q] chiudi GoAccess" | |
55 | ||
56 | #: src/labels.h:55 | |
57 | msgid "[?] Help [Enter] Exp. Panel" | |
58 | msgstr "[?] Aiuto [Enter] Exp. Panel" | |
59 | ||
60 | #: src/labels.h:56 | |
61 | msgid "Dashboard" | |
62 | msgstr "Pannello di Controllo" | |
63 | ||
64 | #: src/labels.h:57 | |
65 | msgid "Dashboard - Overall Analyzed Requests" | |
66 | msgstr "Pannello di Controllo - Richieste Complessive Analizzate" | |
67 | ||
68 | #: src/labels.h:58 | |
69 | msgid "Overall Analyzed Requests" | |
70 | msgstr "Richieste Complessive Analizzate" | |
71 | ||
72 | #: src/labels.h:60 src/labels.h:81 | |
73 | msgid "Tx. Amount" | |
74 | msgstr "Tx. Totale" | |
75 | ||
76 | #: src/labels.h:61 | |
77 | msgid "Date/Time" | |
78 | msgstr "Data/Ora" | |
79 | ||
80 | #: src/labels.h:62 | |
81 | msgid "Excl. IP Hits" | |
82 | msgstr "Accessi IP Esclusi" | |
83 | ||
84 | #: src/labels.h:63 | |
85 | msgid "Failed Requests" | |
86 | msgstr "Richieste Fallite" | |
87 | ||
88 | #: src/labels.h:64 | |
89 | msgid "Log Parsing Time" | |
90 | msgstr "Tempo Parsing Log" | |
91 | ||
92 | #: src/labels.h:65 | |
93 | msgid "Log Size" | |
94 | msgstr "Dimensioni Log" | |
95 | ||
96 | #: src/labels.h:66 | |
97 | msgid "Log Source" | |
98 | msgstr "Sorgente Log" | |
99 | ||
100 | #: src/labels.h:67 src/labels.h:181 | |
101 | msgid "Referrers" | |
102 | msgstr "Referrer" | |
103 | ||
104 | #: src/labels.h:68 | |
105 | msgid "Total Requests" | |
106 | msgstr "Richieste Totali" | |
107 | ||
108 | #: src/labels.h:69 | |
109 | msgid "Static Files" | |
110 | msgstr "File Statici" | |
111 | ||
112 | #: src/labels.h:70 src/labels.h:153 | |
113 | msgid "Not Found" | |
114 | msgstr "Non Trovato" | |
115 | ||
116 | #: src/labels.h:71 | |
117 | msgid "Requested Files" | |
118 | msgstr "File Richiesti" | |
119 | ||
120 | #: src/labels.h:72 | |
121 | msgid "Unique Visitors" | |
122 | msgstr "Visitatori Unici" | |
123 | ||
124 | #: src/labels.h:73 | |
125 | msgid "Valid Requests" | |
126 | msgstr "Richieste Valide" | |
127 | ||
128 | #: src/labels.h:76 | |
129 | msgid "Hits" | |
130 | msgstr "Accessi" | |
131 | ||
132 | #: src/labels.h:77 | |
133 | msgid "h%" | |
134 | msgstr "h%" | |
135 | ||
136 | #: src/labels.h:78 src/labels.h:104 | |
137 | msgid "Visitors" | |
138 | msgstr "Visitatori" | |
139 | ||
140 | #: src/labels.h:79 | |
141 | msgid "Vis." | |
142 | msgstr "Vis." | |
143 | ||
144 | #: src/labels.h:80 | |
145 | msgid "v%" | |
146 | msgstr "v%" | |
147 | ||
148 | #: src/labels.h:82 | |
149 | msgid "Avg. T.S." | |
150 | msgstr "Media T.S." | |
151 | ||
152 | #: src/labels.h:83 | |
153 | msgid "Cum. T.S." | |
154 | msgstr "Cum. T.S." | |
155 | ||
156 | #: src/labels.h:84 | |
157 | msgid "Max. T.S." | |
158 | msgstr "Max. T.S." | |
159 | ||
160 | #: src/labels.h:85 | |
161 | msgid "Method" | |
162 | msgstr "Metodo" | |
163 | ||
164 | #: src/labels.h:86 | |
165 | msgid "Mtd" | |
166 | msgstr "Mtd" | |
167 | ||
168 | #: src/labels.h:87 | |
169 | msgid "Protocol" | |
170 | msgstr "Protocollo" | |
171 | ||
172 | #: src/labels.h:88 | |
173 | msgid "Proto" | |
174 | msgstr "Proto" | |
175 | ||
176 | #: src/labels.h:89 | |
177 | msgid "City" | |
178 | msgstr "Città" | |
179 | ||
180 | #: src/labels.h:90 | |
181 | msgid "Country" | |
182 | msgstr "Paese" | |
183 | ||
184 | #: src/labels.h:91 | |
185 | msgid "Hostname" | |
186 | msgstr "Hostname" | |
187 | ||
188 | #: src/labels.h:92 | |
189 | msgid "Data" | |
190 | msgstr "Dati" | |
191 | ||
192 | #: src/labels.h:94 | |
193 | msgid "Hits/Visitors" | |
194 | msgstr "Acessi/Visitatori" | |
195 | ||
196 | #: src/labels.h:98 | |
197 | msgid "Unique visitors per day" | |
198 | msgstr "Visitatori unici al giorno" | |
199 | ||
200 | #: src/labels.h:100 | |
201 | msgid "Unique visitors per day - Including spiders" | |
202 | msgstr "Visitatori unici al giorno - Inclusi spider" | |
203 | ||
204 | #: src/labels.h:102 | |
205 | msgid "Hits having the same IP, date and agent are a unique visit." | |
206 | msgstr "Accessi con lo stesso IP, data e agent sono una visita unica." | |
207 | ||
208 | #: src/labels.h:107 | |
209 | msgid "Requested Files (URLs)" | |
210 | msgstr "File Richiesti (URL)" | |
211 | ||
212 | #: src/labels.h:109 | |
213 | msgid "Top requests sorted by hits [, avgts, cumts, maxts, mthd, proto]" | |
214 | msgstr "" | |
215 | "Principali richieste ordinate per accessi [, avgts, cumts, maxts, mthd, " | |
216 | "proto]" | |
217 | ||
218 | #: src/labels.h:111 | |
219 | msgid "Requests" | |
220 | msgstr "Richieste" | |
221 | ||
222 | #: src/labels.h:114 src/labels.h:118 | |
223 | msgid "Static Requests" | |
224 | msgstr "Richieste Statiche" | |
225 | ||
226 | #: src/labels.h:116 | |
227 | msgid "Top static requests sorted by hits [, avgts, cumts, maxts, mthd, proto]" | |
228 | msgstr "" | |
229 | "Principali richieste statiche ordinate per accessi [, avgts, cumts, maxts, " | |
230 | "mthd, proto]" | |
231 | ||
232 | #: src/labels.h:121 | |
233 | msgid "Time Distribution" | |
234 | msgstr "Distribuzione Oraria" | |
235 | ||
236 | #: src/labels.h:123 | |
237 | msgid "Data sorted by hour [, avgts, cumts, maxts]" | |
238 | msgstr "Dati ordinati per ore [, avgts, cumts, maxts]" | |
239 | ||
240 | #: src/labels.h:125 | |
241 | msgid "Time" | |
242 | msgstr "Ora" | |
243 | ||
244 | #: src/labels.h:128 src/labels.h:132 | |
245 | msgid "Virtual Hosts" | |
246 | msgstr "Host Virtuali" | |
247 | ||
248 | #: src/labels.h:130 src/labels.h:137 src/labels.h:144 | |
249 | msgid "Data sorted by hits [, avgts, cumts, maxts]" | |
250 | msgstr "Dati ordinati per accessi [, avgts, cumts, maxts]" | |
251 | ||
252 | #: src/labels.h:135 | |
253 | msgid "Remote User (HTTP authentication)" | |
254 | msgstr "Utente Remoto (Autenticazione HTTP)" | |
255 | ||
256 | #: src/labels.h:139 | |
257 | msgid "Remote User" | |
258 | msgstr "Utente Remoto" | |
259 | ||
260 | #: src/labels.h:142 | |
261 | msgid "The cache status of the object served" | |
262 | msgstr "Lo stato della cache dell'oggetto servito" | |
263 | ||
264 | #: src/labels.h:146 | |
265 | msgid "Cache Status" | |
266 | msgstr "Stato Della Cache" | |
267 | ||
268 | #: src/labels.h:149 | |
269 | msgid "Not Found URLs (404s)" | |
270 | msgstr "URL Non Trovati (404)" | |
271 | ||
272 | #: src/labels.h:151 | |
273 | msgid "Top not found URLs sorted by hits [, avgts, cumts, maxts, mthd, proto]" | |
274 | msgstr "" | |
275 | "Principali URL non trovati ordinati per accesso [, avgts, cumts, maxts, " | |
276 | "mthd, proto]" | |
277 | ||
278 | #: src/labels.h:156 | |
279 | msgid "Visitor Hostnames and IPs" | |
280 | msgstr "Hostname e IP dei Visitatori" | |
281 | ||
282 | #: src/labels.h:158 | |
283 | msgid "Top visitor hosts sorted by hits [, avgts, cumts, maxts]" | |
284 | msgstr "" | |
285 | "Principali host dei visitatori ordinati per accessi [, avgts, cumts, maxts]" | |
286 | ||
287 | #: src/labels.h:160 | |
288 | msgid "Hosts" | |
289 | msgstr "Host" | |
290 | ||
291 | #: src/labels.h:163 | |
292 | msgid "Operating Systems" | |
293 | msgstr "Sistemi Operativi" | |
294 | ||
295 | #: src/labels.h:165 | |
296 | msgid "Top Operating Systems sorted by hits [, avgts, cumts, maxts]" | |
297 | msgstr "" | |
298 | "Principali Sistemi Operativi ordinati per accessi [, avgts, cumts, maxts]" | |
299 | ||
300 | #: src/labels.h:167 | |
301 | msgid "OS" | |
302 | msgstr "SO" | |
303 | ||
304 | #: src/labels.h:170 src/labels.h:174 | |
305 | msgid "Browsers" | |
306 | msgstr "Browser" | |
307 | ||
308 | #: src/labels.h:172 | |
309 | msgid "Top Browsers sorted by hits [, avgts, cumts, maxts]" | |
310 | msgstr "Principali Browser ordinati per accessi [, avgts, cumts, maxts]" | |
311 | ||
312 | #: src/labels.h:177 | |
313 | msgid "Referrers URLs" | |
314 | msgstr "URL Referrer" | |
315 | ||
316 | #: src/labels.h:179 | |
317 | msgid "Top Requested Referrers sorted by hits [, avgts, cumts, maxts]" | |
318 | msgstr "" | |
319 | "Principali Referrer Richiesti ordinati per accessi [, avgts, cumts, maxts]" | |
320 | ||
321 | #: src/labels.h:184 src/labels.h:188 | |
322 | msgid "Referring Sites" | |
323 | msgstr "Siti Referrer" | |
324 | ||
325 | #: src/labels.h:186 | |
326 | msgid "Top Referring Sites sorted by hits [, avgts, cumts, maxts]" | |
327 | msgstr "Principali Siti Referrer ordinati per accessi [, avgts, cumts, maxts]" | |
328 | ||
329 | #: src/labels.h:191 | |
330 | msgid "Keyphrases from Google's search engine" | |
331 | msgstr "Frasi chiave dal motore di ricerca di Google" | |
332 | ||
333 | #: src/labels.h:193 | |
334 | msgid "Top Keyphrases sorted by hits [, avgts, cumts, maxts]" | |
335 | msgstr "Principali Frasi Chiave ordinate per accessi [, avgts, cumts, maxts]" | |
336 | ||
337 | #: src/labels.h:195 | |
338 | msgid "Keyphrases" | |
339 | msgstr "Frasi Chiave" | |
340 | ||
341 | #: src/labels.h:198 src/labels.h:202 | |
342 | msgid "Geo Location" | |
343 | msgstr "Posizione Geografica" | |
344 | ||
345 | #: src/labels.h:200 | |
346 | msgid "Continent > Country sorted by unique hits [, avgts, cumts, maxts]" | |
347 | msgstr "Continente > Paese ordinati per accessi unici [, avgts, cumts, maxts]" | |
348 | ||
349 | #: src/labels.h:205 | |
350 | msgid "HTTP Status Codes" | |
351 | msgstr "Codici Di Stato HTTP" | |
352 | ||
353 | #: src/labels.h:207 | |
354 | msgid "Top HTTP Status Codes sorted by hits [, avgts, cumts, maxts]" | |
355 | msgstr "" | |
356 | "Principali Codici Di Stato HTTP ordinati per accessi [, avgts, cumts, maxts]" | |
357 | ||
358 | #: src/labels.h:209 | |
359 | msgid "Status Codes" | |
360 | msgstr "Codici Di Stato" | |
361 | ||
362 | #: src/labels.h:212 src/labels.h:216 | |
363 | msgid "MIME Types" | |
364 | msgstr "Tipi MIME" | |
365 | ||
366 | #: src/labels.h:214 | |
367 | msgid "File types shipped out" | |
368 | msgstr "Tipi di file spediti" | |
369 | ||
370 | #: src/labels.h:219 | |
371 | msgid "Encryption settings" | |
372 | msgstr "Impostazioni di crittografia" | |
373 | ||
374 | #: src/labels.h:221 | |
375 | msgid "TLS version and picked algorithm" | |
376 | msgstr "Versione TLS e algoritmo scelto" | |
377 | ||
378 | #: src/labels.h:223 | |
379 | msgid "TLS Settings" | |
380 | msgstr "Impostazioni TLS" | |
381 | ||
382 | #: src/labels.h:227 | |
383 | msgid "[ ] case sensitive" | |
384 | msgstr "[ ] case sensitive" | |
385 | ||
386 | #: src/labels.h:229 | |
387 | msgid "[x] case sensitive" | |
388 | msgstr "[x] case sensitive" | |
389 | ||
390 | #: src/labels.h:231 | |
391 | msgid "Regex allowed - ^g to cancel - TAB switch case" | |
392 | msgstr "Regex permesse - ^g per annullare - TAB cambia case" | |
393 | ||
394 | #: src/labels.h:233 | |
395 | msgid "Find pattern in all views" | |
396 | msgstr "Trova pattern in tutte le viste" | |
397 | ||
398 | #: src/labels.h:237 | |
399 | msgid "Log Format Configuration" | |
400 | msgstr "Configurazione Formato Log" | |
401 | ||
402 | #: src/labels.h:239 | |
403 | msgid "[SPACE] to toggle - [ENTER] to proceed - [q] to quit" | |
404 | msgstr "[SPAZIO] per alternare - [INVIO] per procedere - [q] per uscire" | |
405 | ||
406 | #: src/labels.h:241 | |
407 | msgid "Log Format - [c] to add/edit format" | |
408 | msgstr "Formato Log - [c] per aggiungere/modificare formato" | |
409 | ||
410 | #: src/labels.h:243 | |
411 | msgid "Date Format - [d] to add/edit format" | |
412 | msgstr "Formato Data - [d] per aggiungere/modificare formato" | |
413 | ||
414 | #: src/labels.h:245 | |
415 | msgid "Time Format - [t] to add/edit format" | |
416 | msgstr "Formato Ora - [t] per aggiungere/modificare formato" | |
417 | ||
418 | #: src/labels.h:247 src/labels.h:251 | |
419 | msgid "[UP/DOWN] to scroll - [q] to close window" | |
420 | msgstr "[SU/GIU] per scorrere - [q] per chiudere la finestra" | |
421 | ||
422 | #: src/labels.h:253 | |
423 | #, c-format | |
424 | msgid "User Agents for %1$s" | |
425 | msgstr "User Agent per %1$s" | |
426 | ||
427 | #: src/labels.h:257 | |
428 | msgid "Scheme Configuration" | |
429 | msgstr "Configurazione Schema" | |
430 | ||
431 | #: src/labels.h:259 | |
432 | msgid "[ENTER] to use scheme - [q]uit" | |
433 | msgstr "[INVIO] per usare lo schema - [q] esci" | |
434 | ||
435 | #: src/labels.h:263 | |
436 | msgid "Sort active module by" | |
437 | msgstr "Ordina moduli attivi per" | |
438 | ||
439 | #: src/labels.h:265 | |
440 | msgid "[ENTER] select - [TAB] sort - [q]uit" | |
441 | msgstr "[INVIO] seleziona - [TAB] ordina - [q] esci" | |
442 | ||
443 | #: src/labels.h:269 | |
444 | msgid "GoAccess Quick Help" | |
445 | msgstr "Aiuto Rapido di GoAccess" | |
446 | ||
447 | #: src/labels.h:271 | |
448 | msgid "[UP/DOWN] to scroll - [q] to quit" | |
449 | msgstr "[SU/GIU] per scorrere - [q] per uscire" | |
450 | ||
451 | #: src/labels.h:275 | |
452 | msgid "In-Memory with On-Disk Persistent Storage." | |
453 | msgstr "In Memoria con Archiviazione Persistente Su Disco." | |
454 | ||
455 | #: src/labels.h:279 | |
456 | msgid "Format Errors - Verify your log/date/time format" | |
457 | msgstr "Errori Formato - Verifica il tuo formato di log/data/ora" | |
458 | ||
459 | #: src/labels.h:281 | |
460 | msgid "No date format was found on your conf file." | |
461 | msgstr "Nessun formato di data trovato nel tuo file di configurazione." | |
462 | ||
463 | #: src/labels.h:283 | |
464 | msgid "No log format was found on your conf file." | |
465 | msgstr "Nessun formato di log trovato nel tuo file di configurazione." | |
466 | ||
467 | #: src/labels.h:285 | |
468 | msgid "No time format was found on your conf file." | |
469 | msgstr "Nessun formato di ora trovato nel tuo file di configurazione." | |
470 | ||
471 | #: src/labels.h:287 | |
472 | msgid "No default config file found." | |
473 | msgstr "Nessuna file di configurazione predefinito trovato." | |
474 | ||
475 | #: src/labels.h:289 | |
476 | msgid "You may specify one with" | |
477 | msgstr "Puoi specificarne uno con" | |
478 | ||
479 | #: src/labels.h:291 | |
480 | msgid "producing the following errors" | |
481 | msgstr "producendo i seguenti errori" | |
482 | ||
483 | #: src/labels.h:293 | |
484 | #, c-format | |
485 | msgid "Parsed %1$d lines" | |
486 | msgstr "Analizzate %1$d righe" | |
487 | ||
488 | #: src/labels.h:295 | |
489 | msgid "Please report it by opening an issue on GitHub" | |
490 | msgstr "Per favore segnalalo aprendo un issue su GitHub" | |
491 | ||
492 | #: src/labels.h:297 | |
493 | msgid "Select a time format." | |
494 | msgstr "Seleziona un formato di ora." | |
495 | ||
496 | #: src/labels.h:299 | |
497 | msgid "Select a date format." | |
498 | msgstr "Seleziona un formato di data." | |
499 | ||
500 | #: src/labels.h:301 | |
501 | msgid "Select a log format." | |
502 | msgstr "Seleziona un formato di log." | |
503 | ||
504 | #: src/labels.h:303 | |
505 | #, c-format | |
506 | msgid "'%1$s' panel is disabled" | |
507 | msgstr "il pannello '%1$s' è disattivato" | |
508 | ||
509 | #: src/labels.h:305 | |
510 | msgid "No input data was provided nor there's data to restore." | |
511 | msgstr "Non sono stati forniti dati in input né ci sono dati da ripristinare." | |
512 | ||
513 | #: src/labels.h:309 | |
514 | msgid "For more details visit" | |
515 | msgstr "Per maggiori dettagli visita" | |
516 | ||
517 | #: src/labels.h:311 | |
518 | msgid "Last Updated" | |
519 | msgstr "Ultimo Aggiornamento" | |
520 | ||
521 | #: src/labels.h:313 | |
522 | msgid "WebSocket server ready to accept new client connections" | |
523 | msgstr "Server WebSocket pronto ad accettare nuove connessioni dai client" | |
524 | ||
525 | #: src/labels.h:316 | |
526 | msgid "The following options can also be supplied to the command" | |
527 | msgstr "Le seguenti opzioni possono anche essere fornite al comando" | |
528 | ||
529 | #: src/labels.h:318 | |
530 | msgid "Examples can be found by running" | |
531 | msgstr "Esempi possono trovati eseguendo" | |
532 | ||
533 | #: src/labels.h:321 | |
534 | msgid "Server Statistics" | |
535 | msgstr "Statistiche Server" | |
536 | ||
537 | #: src/labels.h:323 | |
538 | msgid "Theme" | |
539 | msgstr "Tema" | |
540 | ||
541 | #: src/labels.h:325 | |
542 | msgid "Dark Gray" | |
543 | msgstr "Grigio Scuro" | |
544 | ||
545 | #: src/labels.h:327 | |
546 | msgid "Bright" | |
547 | msgstr "Chiaro" | |
548 | ||
549 | #: src/labels.h:329 | |
550 | msgid "Dark Blue" | |
551 | msgstr "Blu Scuro" | |
552 | ||
553 | #: src/labels.h:331 | |
554 | msgid "Dark Purple" | |
555 | msgstr "Viola Scuro" | |
556 | ||
557 | #: src/labels.h:333 | |
558 | msgid "Panels" | |
559 | msgstr "Pannelli" | |
560 | ||
561 | #: src/labels.h:335 | |
562 | msgid "Items per Page" | |
563 | msgstr "Elementi per Pagina" | |
564 | ||
565 | #: src/labels.h:337 | |
566 | msgid "Tables" | |
567 | msgstr "Tabelle" | |
568 | ||
569 | #: src/labels.h:339 | |
570 | msgid "Display Tables" | |
571 | msgstr "Mostra Tabelle" | |
572 | ||
573 | #: src/labels.h:341 | |
574 | msgid "Auto-Hide on Small Devices" | |
575 | msgstr "Nascondi su Schermi Piccoli" | |
576 | ||
577 | #: src/labels.h:343 | |
578 | msgid "Automatically hide tables on small screen devices" | |
579 | msgstr "Nascondi automaticamente le tabelle su Schermi Piccoli" | |
580 | ||
581 | #: src/labels.h:345 | |
582 | msgid "Layout" | |
583 | msgstr "Layout" | |
584 | ||
585 | #: src/labels.h:347 | |
586 | msgid "Horizontal" | |
587 | msgstr "Orizzontale" | |
588 | ||
589 | #: src/labels.h:349 | |
590 | msgid "Vertical" | |
591 | msgstr "Verticale" | |
592 | ||
593 | #: src/labels.h:351 | |
594 | msgid "WideScreen" | |
595 | msgstr "Panoramico" | |
596 | ||
597 | #: src/labels.h:353 | |
598 | msgid "File Options" | |
599 | msgstr "Opzioni File" | |
600 | ||
601 | #: src/labels.h:355 | |
602 | msgid "Export as JSON" | |
603 | msgstr "Esporta come JSON" | |
604 | ||
605 | #: src/labels.h:357 | |
606 | msgid "Panel Options" | |
607 | msgstr "Opzioni Pannello" | |
608 | ||
609 | #: src/labels.h:359 | |
610 | msgid "Previous" | |
611 | msgstr "Precedente" | |
612 | ||
613 | #: src/labels.h:361 | |
614 | msgid "Next" | |
615 | msgstr "Successivo" | |
616 | ||
617 | #: src/labels.h:363 | |
618 | msgid "First" | |
619 | msgstr "Primo" | |
620 | ||
621 | #: src/labels.h:365 | |
622 | msgid "Last" | |
623 | msgstr "Ultimo" | |
624 | ||
625 | #: src/labels.h:367 | |
626 | msgid "Chart Options" | |
627 | msgstr "Opzioni Grafico" | |
628 | ||
629 | #: src/labels.h:369 | |
630 | msgid "Chart" | |
631 | msgstr "Grafico" | |
632 | ||
633 | #: src/labels.h:371 | |
634 | msgid "Type" | |
635 | msgstr "Tipo" | |
636 | ||
637 | #: src/labels.h:373 | |
638 | msgid "Area Spline" | |
639 | msgstr "Area Spline" | |
640 | ||
641 | #: src/labels.h:375 | |
642 | msgid "Bar" | |
643 | msgstr "Barre" | |
644 | ||
645 | #: src/labels.h:377 | |
646 | msgid "Plot Metric" | |
647 | msgstr "Metriche Grafico" | |
648 | ||
649 | #: src/labels.h:379 | |
650 | msgid "Table Columns" | |
651 | msgstr "Colonne Tabella" | |
652 | ||
653 | #: src/labels.h:383 | |
654 | msgid "1xx Informational" | |
655 | msgstr "1xx Informativo" | |
656 | ||
657 | #: src/labels.h:385 | |
658 | msgid "2xx Success" | |
659 | msgstr "2xx Successo" | |
660 | ||
661 | #: src/labels.h:387 | |
662 | msgid "3xx Redirection" | |
663 | msgstr "3xx Reindirizzamento" | |
664 | ||
665 | #: src/labels.h:389 | |
666 | msgid "4xx Client Errors" | |
667 | msgstr "4xx Errori Client" | |
668 | ||
669 | #: src/labels.h:391 | |
670 | msgid "5xx Server Errors" | |
671 | msgstr "5xx Errori Server" | |
672 | ||
673 | #: src/labels.h:394 | |
674 | msgid "100 - Continue: Server received the initial part of the request" | |
675 | msgstr "" | |
676 | "100 - Continue: Il server ha ricevuto la parte iniziale della richiesta" | |
677 | ||
678 | #: src/labels.h:396 | |
679 | msgid "101 - Switching Protocols: Client asked to switch protocols" | |
680 | msgstr "" | |
681 | "101 - Switching Protocols: Il client ha richiesto di cambiare protocolli" | |
682 | ||
683 | #: src/labels.h:398 | |
684 | msgid "200 - OK: The request sent by the client was successful" | |
685 | msgstr "200 - OK: La richiesta inviata dal client ha avuto successo" | |
686 | ||
687 | #: src/labels.h:400 | |
688 | msgid "201 - Created: The request has been fulfilled and created" | |
689 | msgstr "201 - Created: La richiesta è stata soddisfatta e creata" | |
690 | ||
691 | #: src/labels.h:402 | |
692 | msgid "202 - Accepted: The request has been accepted for processing" | |
693 | msgstr "202 - Accepted: La richiesta è stata accettata per essere elaborata" | |
694 | ||
695 | #: src/labels.h:404 | |
696 | msgid "203 - Non-authoritative Information: Response from a third party" | |
697 | msgstr "203 - Non-authoritative Information: Risposta da terzi" | |
698 | ||
699 | #: src/labels.h:406 | |
700 | msgid "204 - No Content: Request did not return any content" | |
701 | msgstr "204 - No Content: La richiesta non ha restituito nessun contenuto" | |
702 | ||
703 | #: src/labels.h:408 | |
704 | msgid "205 - Reset Content: Server asked the client to reset the document" | |
705 | msgstr "" | |
706 | "205 - Reset Content: Il server ha richiesto al client di ripristinare il " | |
707 | "documento" | |
708 | ||
709 | #: src/labels.h:410 | |
710 | msgid "206 - Partial Content: The partial GET has been successful" | |
711 | msgstr "206 - Partial Content: La GET parziale ha avuto successo" | |
712 | ||
713 | #: src/labels.h:412 | |
714 | msgid "207 - Multi-Status: WebDAV; RFC 4918" | |
715 | msgstr "207 - Multi-Status: WebDAV; RFC 4918" | |
716 | ||
717 | #: src/labels.h:414 | |
718 | msgid "208 - Already Reported: WebDAV; RFC 5842" | |
719 | msgstr "208 - Already Reported: WebDAV; RFC 5842" | |
720 | ||
721 | #: src/labels.h:416 | |
722 | msgid "300 - Multiple Choices: Multiple options for the resource" | |
723 | msgstr "300 - Multiple Choices: Opzioni multiple per la risorsa" | |
724 | ||
725 | #: src/labels.h:418 | |
726 | msgid "301 - Moved Permanently: Resource has permanently moved" | |
727 | msgstr "301 - Moved Permanently: La risorsa è stata spostata permanentemente" | |
728 | ||
729 | #: src/labels.h:420 | |
730 | msgid "302 - Moved Temporarily (redirect)" | |
731 | msgstr "302 - Moved Temporarily (redirect)" | |
732 | ||
733 | #: src/labels.h:422 | |
734 | msgid "303 - See Other Document: The response is at a different URI" | |
735 | msgstr "303 - See Other Document: La risposta si trova ad un URI diverso" | |
736 | ||
737 | #: src/labels.h:424 | |
738 | msgid "304 - Not Modified: Resource has not been modified" | |
739 | msgstr "304 - Not Modified: La risorsa non è stata modificata" | |
740 | ||
741 | #: src/labels.h:426 | |
742 | msgid "305 - Use Proxy: Can only be accessed through the proxy" | |
743 | msgstr "305 - Use Proxy: Può essere acceduta solo tramite proxy" | |
744 | ||
745 | #: src/labels.h:428 | |
746 | msgid "307 - Temporary Redirect: Resource temporarily moved" | |
747 | msgstr "307 - Temporary Redirect: Risorsa spostata temporaneamente" | |
748 | ||
749 | #: src/labels.h:430 | |
750 | msgid "308 - Permanent Redirect" | |
751 | msgstr "308 - Permanent Redirect" | |
752 | ||
753 | #: src/labels.h:432 | |
754 | msgid "400 - Bad Request: The syntax of the request is invalid" | |
755 | msgstr "400 - Bad Request: La sintassi della richiesta non è valida" | |
756 | ||
757 | #: src/labels.h:434 | |
758 | msgid "401 - Unauthorized: Request needs user authentication" | |
759 | msgstr "401 - Unauthorized: La richiesta richiede l'autenticazione dell'utente" | |
760 | ||
761 | #: src/labels.h:436 | |
762 | msgid "402 - Payment Required" | |
763 | msgstr "402 - Payment Required" | |
764 | ||
765 | #: src/labels.h:438 | |
766 | msgid "403 - Forbidden: Server is refusing to respond to it" | |
767 | msgstr "403 - Forbidden: Il server si sta rifiutando di rispondere" | |
768 | ||
769 | #: src/labels.h:440 | |
770 | msgid "404 - Not Found: Requested resource could not be found" | |
771 | msgstr "404 - Not Found: La risorsa richiesta non è stata trovata" | |
772 | ||
773 | #: src/labels.h:442 | |
774 | msgid "405 - Method Not Allowed: Request method not supported" | |
775 | msgstr "405 - Method Not Allowed: Il metodo della richiesta non è supportato" | |
776 | ||
777 | #: src/labels.h:444 | |
778 | msgid "406 - Not Acceptable" | |
779 | msgstr "406 - Not Acceptable" | |
780 | ||
781 | #: src/labels.h:446 | |
782 | msgid "407 - Proxy Authentication Required" | |
783 | msgstr "407 - Proxy Authentication Required" | |
784 | ||
785 | #: src/labels.h:448 | |
786 | msgid "408 - Request Timeout: Server timed out waiting for the request" | |
787 | msgstr "408 - Request Timeout: Il tempo per inviare la richiesta è scaduto" | |
788 | ||
789 | #: src/labels.h:450 | |
790 | msgid "409 - Conflict: Conflict in the request" | |
791 | msgstr "409 - Conflict: Conflitto nella richiesta" | |
792 | ||
793 | #: src/labels.h:452 | |
794 | msgid "410 - Gone: Resource requested is no longer available" | |
795 | msgstr "410 - Gone: La risorsa richiesta non è più disponibile" | |
796 | ||
797 | #: src/labels.h:454 | |
798 | msgid "411 - Length Required: Invalid Content-Length" | |
799 | msgstr "411 - Length Required: Content-Length non valido" | |
800 | ||
801 | #: src/labels.h:456 | |
802 | msgid "412 - Precondition Failed: Server does not meet preconditions" | |
803 | msgstr "412 - Precondition Failed: Il server non soddisfa le precondizioni" | |
804 | ||
805 | #: src/labels.h:458 | |
806 | msgid "413 - Payload Too Large" | |
807 | msgstr "413 - Payload Too Large" | |
808 | ||
809 | #: src/labels.h:460 | |
810 | msgid "414 - Request-URI Too Long" | |
811 | msgstr "414 - Request-URI Too Long" | |
812 | ||
813 | #: src/labels.h:462 | |
814 | msgid "415 - Unsupported Media Type: Media type is not supported" | |
815 | msgstr "415 - Unsupported Media Type: Tipo media non supportato" | |
816 | ||
817 | #: src/labels.h:464 | |
818 | msgid "416 - Requested Range Not Satisfiable: Cannot supply that portion" | |
819 | msgstr "" | |
820 | "416 - Requested Range Not Satisfiable: Impossibile fornire quel frammento" | |
821 | ||
822 | #: src/labels.h:466 | |
823 | msgid "417 - Expectation Failed" | |
824 | msgstr "417 - Expectation Failed" | |
825 | ||
826 | #: src/labels.h:468 | |
827 | #, fuzzy | |
828 | msgid "418 - I'm a teapot" | |
829 | msgstr "418 - I’m a teapot" | |
830 | ||
831 | #: src/labels.h:470 | |
832 | msgid "421 - Misdirected Request" | |
833 | msgstr "421 - Misdirected Request" | |
834 | ||
835 | #: src/labels.h:472 | |
836 | msgid "422 - Unprocessable Entity due to semantic errors: WebDAV" | |
837 | msgstr "422 - Unprocessable Entity" | |
838 | ||
839 | #: src/labels.h:474 | |
840 | msgid "423 - The resource that is being accessed is locked" | |
841 | msgstr "423 - Locked" | |
842 | ||
843 | #: src/labels.h:476 | |
844 | msgid "424 - Failed Dependency: WebDAV" | |
845 | msgstr "424 - Failed Dependency: WebDAV" | |
846 | ||
847 | #: src/labels.h:478 | |
848 | msgid "426 - Upgrade Required: Client should switch to a different protocol" | |
849 | msgstr "" | |
850 | "426 - Upgrade Required: Il cliente dovrebbe utilizzare un protocollo diverso" | |
851 | ||
852 | #: src/labels.h:480 | |
853 | msgid "428 - Precondition Required" | |
854 | msgstr "402 - Precondition Required" | |
855 | ||
856 | #: src/labels.h:482 | |
857 | msgid "429 - Too Many Requests: The user has sent too many requests" | |
858 | msgstr "429 - Too Many Requests: L'utente ha inviato troppe richieste" | |
859 | ||
860 | #: src/labels.h:484 | |
861 | msgid "431 - Request Header Fields Too Large" | |
862 | msgstr "431 - Request Header Fields Too Large" | |
863 | ||
864 | #: src/labels.h:486 | |
865 | msgid "451 - Unavailable For Legal Reasons" | |
866 | msgstr "451 - Unavailable For Legal Reasons" | |
867 | ||
868 | #: src/labels.h:488 | |
869 | msgid "444 - (Nginx) Connection closed without sending any headers" | |
870 | msgstr "444 - (Nginx) Connection closed without sending any headers" | |
871 | ||
872 | #: src/labels.h:490 | |
873 | msgid "494 - (Nginx) Request Header Too Large" | |
874 | msgstr "494 - (Nginx) Request Header Too Large" | |
875 | ||
876 | #: src/labels.h:492 | |
877 | msgid "495 - (Nginx) SSL client certificate error" | |
878 | msgstr "495 - (Nginx) SSL client certificate error" | |
879 | ||
880 | #: src/labels.h:494 | |
881 | msgid "496 - (Nginx) Client didn't provide certificate" | |
882 | msgstr "496 - (Nginx) Client didn't provide certificate" | |
883 | ||
884 | #: src/labels.h:496 | |
885 | msgid "497 - (Nginx) HTTP request sent to HTTPS port" | |
886 | msgstr "497 - (Nginx) HTTP request sent to HTTPS port" | |
887 | ||
888 | #: src/labels.h:498 | |
889 | msgid "499 - (Nginx) Connection closed by client while processing request" | |
890 | msgstr "499 - (Nginx) Connection closed by client while processing request" | |
891 | ||
892 | #: src/labels.h:500 | |
893 | msgid "500 - Internal Server Error" | |
894 | msgstr "500 - Internal Server Error" | |
895 | ||
896 | #: src/labels.h:502 | |
897 | msgid "501 - Not Implemented" | |
898 | msgstr "501 - Not Implemented" | |
899 | ||
900 | #: src/labels.h:504 | |
901 | msgid "502 - Bad Gateway: Received an invalid response from the upstream" | |
902 | msgstr "502 - Bad Gateway: Risposta non valida dal server di upstream" | |
903 | ||
904 | #: src/labels.h:506 | |
905 | msgid "503 - Service Unavailable: The server is currently unavailable" | |
906 | msgstr "503 - Service Unavailable: Il server non è attualmente disponibile" | |
907 | ||
908 | #: src/labels.h:508 | |
909 | msgid "504 - Gateway Timeout: The upstream server failed to send request" | |
910 | msgstr "" | |
911 | "504 - Gateway Timeout: Il server di upstream non è riuscito ad inviare la " | |
912 | "richiesta" | |
913 | ||
914 | #: src/labels.h:510 | |
915 | msgid "505 - HTTP Version Not Supported" | |
916 | msgstr "505 - HTTP Version Not Supported" | |
917 | ||
918 | #: src/labels.h:512 | |
919 | msgid "520 - CloudFlare - Web server is returning an unknown error" | |
920 | msgstr "520 - CloudFlare - Web server is returning an unknown error" | |
921 | ||
922 | #: src/labels.h:514 | |
923 | msgid "521 - CloudFlare - Web server is down" | |
924 | msgstr "521 - CloudFlare - Web server is down" | |
925 | ||
926 | #: src/labels.h:516 | |
927 | msgid "522 - CloudFlare - Connection timed out" | |
928 | msgstr "522 - CloudFlare - Connection timed out" | |
929 | ||
930 | #: src/labels.h:518 | |
931 | msgid "523 - CloudFlare - Origin is unreachable" | |
932 | msgstr "523 - CloudFlare - Origin is unreachable" | |
933 | ||
934 | #: src/labels.h:520 | |
935 | msgid "524 - CloudFlare - A timeout occurred" | |
936 | msgstr "524 - CloudFlare - A timeout occurred" | |
937 | ||
938 | #~ msgid "Init. Proc. Time" | |
939 | #~ msgstr "Ora Inizio Proc." | |
940 | ||
941 | #~ msgid "Built using the default in-memory hash database." | |
942 | #~ msgstr "Built using the default in-memory hash database." | |
943 | ||
944 | #~ msgid "Built using Tokyo Cabinet on-disk B+ Tree." | |
945 | #~ msgstr "Built using Tokyo Cabinet on-disk B+ Tree." | |
946 | ||
947 | #~ msgid "Built using Tokyo Cabinet in-memory hash database." | |
948 | #~ msgstr "Built using Tokyo Cabinet in-memory hash database." | |
949 | ||
950 | #~ msgid "Bandwidth" | |
951 | #~ msgstr "Larghezza Di Banda" | |
952 | ||
953 | #~ msgid "Unique Files" | |
954 | #~ msgstr "File Unici" | |
955 | ||
956 | #~ msgid "Unique 404" | |
957 | #~ msgstr "404 Unico" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: goaccess 1.3\n" |
8 | 8 | "Report-Msgid-Bugs-To: hello@goaccess.io\n" |
9 | "POT-Creation-Date: 2021-06-28 17:49-0500\n" | |
9 | "POT-Creation-Date: 2021-12-25 11:25-0600\n" | |
10 | 10 | "PO-Revision-Date: 2020-08-19 06:27+0900\n" |
11 | 11 | "Last-Translator: Kamino <67395018+err931@users.noreply.github.com>\n" |
12 | 12 | "Language-Team: Japanese\n" |
86 | 86 | msgstr "無効リクエスト数" |
87 | 87 | |
88 | 88 | #: src/labels.h:64 |
89 | msgid "Init. Proc. Time" | |
90 | msgstr "解析にかかった時間" | |
89 | msgid "Log Parsing Time" | |
90 | msgstr "" | |
91 | 91 | |
92 | 92 | #: src/labels.h:65 |
93 | 93 | msgid "Log Size" |
828 | 828 | msgstr "417 - 拡張ステータスコードが使えません" |
829 | 829 | |
830 | 830 | #: src/labels.h:468 |
831 | msgid "418 - I’m a teapot" | |
831 | #, fuzzy | |
832 | msgid "418 - I'm a teapot" | |
832 | 833 | msgstr "418 - 私はティーポットです" |
833 | 834 | |
834 | 835 | #: src/labels.h:470 |
937 | 938 | #: src/labels.h:520 |
938 | 939 | msgid "524 - CloudFlare - A timeout occurred" |
939 | 940 | msgstr "524 - CloudFlare - タイムアウトが発生しました" |
941 | ||
942 | #~ msgid "Init. Proc. Time" | |
943 | #~ msgstr "解析にかかった時間" |
Binary diff not shown
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: Goaccess\n" |
8 | 8 | "Report-Msgid-Bugs-To: hello@goaccess.io\n" |
9 | "POT-Creation-Date: 2021-06-28 17:49-0500\n" | |
9 | "POT-Creation-Date: 2021-12-25 11:25-0600\n" | |
10 | 10 | "PO-Revision-Date: 2019-04-25 20:34-0300\n" |
11 | 11 | "Last-Translator: Alan Placidina Maria <alanplacidina@gmail.com>\n" |
12 | 12 | "Language-Team: \n" |
86 | 86 | msgstr "Req. Inválidas" |
87 | 87 | |
88 | 88 | #: src/labels.h:64 |
89 | msgid "Init. Proc. Time" | |
90 | msgstr "Hora Inicio Proc." | |
89 | msgid "Log Parsing Time" | |
90 | msgstr "" | |
91 | 91 | |
92 | 92 | #: src/labels.h:65 |
93 | 93 | msgid "Log Size" |
828 | 828 | msgstr "417 - Falha na Expectativa" |
829 | 829 | |
830 | 830 | #: src/labels.h:468 |
831 | msgid "418 - I’m a teapot" | |
831 | msgid "418 - I'm a teapot" | |
832 | 832 | msgstr "" |
833 | 833 | |
834 | 834 | #: src/labels.h:470 |
942 | 942 | msgid "524 - CloudFlare - A timeout occurred" |
943 | 943 | msgstr "524 - CloudFlare - Ocorreu tempo limite" |
944 | 944 | |
945 | #~ msgid "Init. Proc. Time" | |
946 | #~ msgstr "Hora Inicio Proc." | |
947 | ||
945 | 948 | #~ msgid "Built using the default in-memory hash database." |
946 | 949 | #~ msgstr "Construído usando base de datos hash por defecto en-memoria" |
947 | 950 |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: goaccess 1.4\n" |
8 | 8 | "Report-Msgid-Bugs-To: hello@goaccess.io\n" |
9 | "POT-Creation-Date: 2021-06-28 17:49-0500\n" | |
9 | "POT-Creation-Date: 2021-12-25 11:25-0600\n" | |
10 | 10 | "PO-Revision-Date: 2020-06-25 17:14+0300\n" |
11 | 11 | "Last-Translator: Artyom Karlov <artyom.karlov@gmail.com>\n" |
12 | 12 | "Language-Team: \n" |
88 | 88 | msgstr "Неудачных запросов" |
89 | 89 | |
90 | 90 | #: src/labels.h:64 |
91 | msgid "Init. Proc. Time" | |
92 | msgstr "Время обработки лога" | |
91 | msgid "Log Parsing Time" | |
92 | msgstr "" | |
93 | 93 | |
94 | 94 | #: src/labels.h:65 |
95 | 95 | msgid "Log Size" |
835 | 835 | msgstr "417 - Expectation Failed" |
836 | 836 | |
837 | 837 | #: src/labels.h:468 |
838 | msgid "418 - I’m a teapot" | |
838 | #, fuzzy | |
839 | msgid "418 - I'm a teapot" | |
839 | 840 | msgstr "418 - I’m a teapot" |
840 | 841 | |
841 | 842 | #: src/labels.h:470 |
943 | 944 | #: src/labels.h:520 |
944 | 945 | msgid "524 - CloudFlare - A timeout occurred" |
945 | 946 | msgstr "524 - CloudFlare - A timeout occurred" |
947 | ||
948 | #~ msgid "Init. Proc. Time" | |
949 | #~ msgstr "Время обработки лога" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: goaccess 1.3\n" |
8 | 8 | "Report-Msgid-Bugs-To: hello@goaccess.io\n" |
9 | "POT-Creation-Date: 2021-06-28 17:49-0500\n" | |
9 | "POT-Creation-Date: 2021-12-25 11:25-0600\n" | |
10 | 10 | "PO-Revision-Date: 2018-12-13 22:48-0600\n" |
11 | 11 | "Last-Translator: Anders Johansson <johansson@aljmedia.se>\n" |
12 | 12 | "Language-Team: none\n" |
86 | 86 | msgstr "Misslyckade förfrågningar" |
87 | 87 | |
88 | 88 | #: src/labels.h:64 |
89 | msgid "Init. Proc. Time" | |
90 | msgstr "Init. proc. Tid" | |
89 | msgid "Log Parsing Time" | |
90 | msgstr "" | |
91 | 91 | |
92 | 92 | #: src/labels.h:65 |
93 | 93 | msgid "Log Size" |
821 | 821 | msgstr "417 - Förväntning misslyckades" |
822 | 822 | |
823 | 823 | #: src/labels.h:468 |
824 | msgid "418 - I’m a teapot" | |
824 | #, fuzzy | |
825 | msgid "418 - I'm a teapot" | |
825 | 826 | msgstr "Jag är en tekanna" |
826 | 827 | |
827 | 828 | #: src/labels.h:470 |
931 | 932 | msgid "524 - CloudFlare - A timeout occurred" |
932 | 933 | msgstr "524 - CloudFlare - En timeout inträffade" |
933 | 934 | |
935 | #~ msgid "Init. Proc. Time" | |
936 | #~ msgstr "Init. proc. Tid" | |
937 | ||
934 | 938 | #~ msgid "Built using the default in-memory hash database." |
935 | 939 | #~ msgstr "Byggd med standard in-memory hash databas" |
936 | 940 |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: goaccess 1.4\n" |
8 | 8 | "Report-Msgid-Bugs-To: hello@goaccess.io\n" |
9 | "POT-Creation-Date: 2021-06-28 17:49-0500\n" | |
9 | "POT-Creation-Date: 2021-12-25 11:25-0600\n" | |
10 | 10 | "PO-Revision-Date: 2020-06-25 17:12+0300\n" |
11 | 11 | "Last-Translator: Artyom Karlov <artyom.karlov@gmail.com>\n" |
12 | 12 | "Language-Team: \n" |
88 | 88 | msgstr "Невдалих запитів" |
89 | 89 | |
90 | 90 | #: src/labels.h:64 |
91 | msgid "Init. Proc. Time" | |
92 | msgstr "Час обробки лога" | |
91 | msgid "Log Parsing Time" | |
92 | msgstr "" | |
93 | 93 | |
94 | 94 | #: src/labels.h:65 |
95 | 95 | msgid "Log Size" |
835 | 835 | msgstr "417 - Expectation Failed" |
836 | 836 | |
837 | 837 | #: src/labels.h:468 |
838 | msgid "418 - I’m a teapot" | |
838 | #, fuzzy | |
839 | msgid "418 - I'm a teapot" | |
839 | 840 | msgstr "418 - I’m a teapot" |
840 | 841 | |
841 | 842 | #: src/labels.h:470 |
943 | 944 | #: src/labels.h:520 |
944 | 945 | msgid "524 - CloudFlare - A timeout occurred" |
945 | 946 | msgstr "524 - CloudFlare - A timeout occurred" |
947 | ||
948 | #~ msgid "Init. Proc. Time" | |
949 | #~ msgstr "Час обробки лога" |
Binary diff not shown
4 | 4 | msgstr "" |
5 | 5 | "Project-Id-Version: goaccess 1.2\n" |
6 | 6 | "Report-Msgid-Bugs-To: hello@goaccess.io\n" |
7 | "POT-Creation-Date: 2021-06-28 17:49-0500\n" | |
7 | "POT-Creation-Date: 2021-12-25 11:25-0600\n" | |
8 | 8 | "PO-Revision-Date: 2017-04-03 09:43+0200\n" |
9 | 9 | "Last-Translator: Ai<hello@goaccess.io>\n" |
10 | 10 | "Language-Team: Ai\n" |
85 | 85 | msgstr "失败的请求" |
86 | 86 | |
87 | 87 | #: src/labels.h:64 |
88 | msgid "Init. Proc. Time" | |
89 | msgstr "第一次处理耗时" | |
88 | msgid "Log Parsing Time" | |
89 | msgstr "" | |
90 | 90 | |
91 | 91 | #: src/labels.h:65 |
92 | 92 | msgid "Log Size" |
815 | 815 | msgstr "417 - 未满足期望值" |
816 | 816 | |
817 | 817 | #: src/labels.h:468 |
818 | msgid "418 - I’m a teapot" | |
818 | msgid "418 - I'm a teapot" | |
819 | 819 | msgstr "" |
820 | 820 | |
821 | 821 | #: src/labels.h:470 |
922 | 922 | msgid "524 - CloudFlare - A timeout occurred" |
923 | 923 | msgstr "524 - CloudFlare - 服务器响应超时" |
924 | 924 | |
925 | #~ msgid "Init. Proc. Time" | |
926 | #~ msgstr "第一次处理耗时" | |
927 | ||
925 | 928 | #~ msgid "Built using the default in-memory hash database." |
926 | 929 | #~ msgstr "使用默认的在内存中的哈希表来构建" |
927 | 930 |
382 | 382 | .wrap-panel table.table-hover>tbody>tr:hover { |
383 | 383 | background-color: #EEE; |
384 | 384 | } |
385 | .wrap-panel .row:nth-child(2)>.col-md-12 { | |
385 | .wrap-panel .row:nth-child(2):not(.table-wrapper)>.col-md-12 { | |
386 | 386 | padding: 0; |
387 | 387 | } |
388 | 388 |
126 | 126 | {"okhttp", "Others"}, |
127 | 127 | {"node", "Others"}, |
128 | 128 | {"PrivacyBrowser", "Others"}, |
129 | {"Transmission", "Others"}, | |
130 | {"libmpv", "Others"}, | |
131 | {"aria2", "Others"}, | |
129 | 132 | |
130 | 133 | /* Feed-reader-as-a-service */ |
131 | 134 | {"AppleNewsBot", "Feeds"}, |
235 | 238 | {"Googlebot-Image", "Crawlers"}, |
236 | 239 | {"ZmEu", "Crawlers"}, |
237 | 240 | {"DowntimeDetector", "Crawlers"}, |
241 | {"MauiBot", "Crawlers"}, | |
242 | {"Cloud", "Crawlers"}, | |
243 | {"stagefright", "Crawlers"}, | |
238 | 244 | |
239 | 245 | |
240 | 246 | /* Podcast fetchers */ |
42 | 42 | #define __attribute__(x) /**/ |
43 | 43 | #endif |
44 | 44 | #define GO_UNUSED __attribute__((unused)) |
45 | #define GO_VERSION "1.5.1" | |
45 | #define GO_VERSION "1.5.4" | |
46 | 46 | #define GO_WEBSITE "https://goaccess.io/" |
47 | 47 | extern struct tm now_tm; |
48 | 48 |
199 | 199 | * 1 -> Debian APT-HTTP/1.3 (1.0.9.8.5) |
200 | 200 | * 2 -> Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0) |
201 | 201 | */ |
202 | /*khash_t(is32) MTRC_AGENT_KEYS */ | |
202 | /*khash_t(is32) MTRC_AGENT_VALS */ | |
203 | 203 | |
204 | 204 | /* Maps a single numeric key (usually 1) to an autoincremented hits value. |
205 | 205 | * |
709 | 709 | if (json == NULL) |
710 | 710 | return; |
711 | 711 | |
712 | pthread_mutex_lock (&gwswriter->mutex); | |
712 | 713 | broadcast_holder (gwswriter->fd, json, strlen (json)); |
714 | pthread_mutex_unlock (&gwswriter->mutex); | |
713 | 715 | free (json); |
714 | 716 | } |
715 | 717 | |
803 | 805 | |
804 | 806 | /* Process appended log data |
805 | 807 | * |
806 | * If nothing changed, 1 is returned. | |
807 | * If log file changed, 0 is returned. */ | |
808 | * If nothing changed, 0 is returned. | |
809 | * If log file changed, 1 is returned. */ | |
808 | 810 | static int |
809 | 811 | perform_tail_follow (GLog * glog) { |
810 | 812 | FILE *fp = NULL; |
816 | 818 | parse_tail_follow (glog, glog->pipe); |
817 | 819 | /* did we read something from the pipe? */ |
818 | 820 | if (0 == glog->bytes) |
819 | return 1; | |
821 | return 0; | |
820 | 822 | |
821 | 823 | glog->length += glog->bytes; |
822 | 824 | goto out; |
828 | 830 | /* ###NOTE: This assumes the log file being read can be of smaller size, e.g., |
829 | 831 | * rotated/truncated file or larger when data is appended */ |
830 | 832 | if (length == glog->length) |
831 | return 1; | |
833 | return 0; | |
832 | 834 | |
833 | 835 | if (!(fp = fopen (glog->filename, "r"))) |
834 | 836 | FATAL ("Unable to read the specified log file '%s'. %s", glog->filename, strerror (errno)); |
863 | 865 | |
864 | 866 | out: |
865 | 867 | |
866 | if (!conf.output_stdout) { | |
867 | tail_term (); | |
868 | } else { | |
869 | tail_html (); | |
870 | } | |
871 | ||
872 | return 0; | |
868 | return 1; | |
873 | 869 | } |
874 | 870 | |
875 | 871 | /* Loop over and perform a follow for the given logs */ |
879 | 875 | .tv_sec = conf.html_refresh ? conf.html_refresh : HTML_REFRESH, |
880 | 876 | .tv_nsec = 0, |
881 | 877 | }; |
882 | int i = 0; | |
878 | int i = 0, ret = 0; | |
883 | 879 | |
884 | 880 | while (1) { |
885 | 881 | if (conf.stop_processing) |
886 | 882 | break; |
887 | 883 | |
888 | for (i = 0; i < logs->size; ++i) | |
889 | perform_tail_follow (&logs->glog[i]); /* 0.2 secs */ | |
884 | for (i = 0, ret = 0; i < logs->size; ++i) | |
885 | ret |= perform_tail_follow (&logs->glog[i]); /* 0.2 secs */ | |
886 | ||
887 | if (1 == ret) | |
888 | tail_html (); | |
889 | ||
890 | 890 | if (nanosleep (&refresh, NULL) == -1 && errno != EINTR) |
891 | 891 | FATAL ("nanosleep: %s", strerror (errno)); |
892 | 892 | } |
982 | 982 | term_tail_logs (Logs * logs) { |
983 | 983 | struct timespec ts = {.tv_sec = 0,.tv_nsec = 200000000 }; /* 0.2 seconds */ |
984 | 984 | uint32_t offset = 0; |
985 | int i; | |
986 | ||
987 | for (i = 0; i < logs->size; ++i) { | |
988 | if (perform_tail_follow (&logs->glog[i]) != 0) | |
989 | continue; | |
990 | ||
985 | int i, ret; | |
986 | ||
987 | for (i = 0, ret = 0; i < logs->size; ++i) | |
988 | ret |= perform_tail_follow (&logs->glog[i]); | |
989 | ||
990 | if (1 == ret) { | |
991 | tail_term (); | |
991 | 992 | offset = *logs->processed - logs->offset; |
992 | 993 | render_screens (offset); |
993 | if (nanosleep (&ts, NULL) == -1 && errno != EINTR) { | |
994 | FATAL ("nanosleep: %s", strerror (errno)); | |
995 | } | |
994 | } | |
995 | if (nanosleep (&ts, NULL) == -1 && errno != EINTR) { | |
996 | FATAL ("nanosleep: %s", strerror (errno)); | |
996 | 997 | } |
997 | 998 | } |
998 | 999 |
550 | 550 | LOG_INVALID (("%s", line)); |
551 | 551 | } |
552 | 552 | |
553 | if (glog->items->errstr && glog->invalid < MAX_LOG_ERRORS) { | |
553 | if (glog->items->errstr && glog->log_erridx < MAX_LOG_ERRORS) { | |
554 | 554 | glog->errors[glog->log_erridx++] = xstrdup (glog->items->errstr); |
555 | 555 | } |
556 | 556 | } |
809 | 809 | /* inserted in datamap */ |
810 | 810 | kdata->data = data; |
811 | 811 | /* inserted in keymap */ |
812 | kdata->dhash = djb2 ((unsigned char *) data_key); | |
812 | kdata->dhash = djb2 ((const unsigned char *) data_key); | |
813 | 813 | } |
814 | 814 | |
815 | 815 | /* A wrapper to assign the given data key and the data item to the key |
819 | 819 | /* inserted in datamap */ |
820 | 820 | kdata->root = root; |
821 | 821 | /* inserted in keymap */ |
822 | kdata->rhash = djb2 ((unsigned char *) root_key); | |
822 | kdata->rhash = djb2 ((const unsigned char *) root_key); | |
823 | 823 | } |
824 | 824 | |
825 | 825 | /* Generate a visitor's key given the date specificity. For instance, |
1114 | 1114 | (lookfor = "TLSv1.1", !strncmp (token, lookfor, 7)) || |
1115 | 1115 | (lookfor = "TLSv1.2", !strncmp (token, lookfor, 7)) || |
1116 | 1116 | (lookfor = "TLSv1.3", !strncmp (token, lookfor, 7)) || |
1117 | (lookfor = "TLS1.1", !strncmp (token, lookfor, 6)) || | |
1118 | (lookfor = "TLS1.2", !strncmp (token, lookfor, 6)) || | |
1119 | (lookfor = "TLS1.3", !strncmp (token, lookfor, 6)) || | |
1117 | 1120 | /* Nope, it's not 1.0 */ |
1118 | (lookfor = "TLSv1", !strncmp (token, lookfor, 5))) | |
1121 | (lookfor = "TLSv1", !strncmp (token, lookfor, 5)) || | |
1122 | (lookfor = "TLS1", !strncmp (token, lookfor, 4))) | |
1119 | 1123 | return lookfor; |
1120 | 1124 | return NULL; |
1121 | 1125 | } |
60 | 60 | #define T_DATETIME _( "Date/Time") |
61 | 61 | #define T_EXCLUDE_IP _( "Excl. IP Hits") |
62 | 62 | #define T_FAILED _( "Failed Requests") |
63 | #define T_GEN_TIME _( "Init. Proc. Time") | |
63 | #define T_GEN_TIME _( "Log Parsing Time") | |
64 | 64 | #define T_LOG _( "Log Size") |
65 | 65 | #define T_LOG_PATH _( "Log Source") |
66 | 66 | #define T_REFERRER _( "Referrers") |
464 | 464 | #define STATUS_CODE_417 \ |
465 | 465 | N_("417 - Expectation Failed") |
466 | 466 | #define STATUS_CODE_418 \ |
467 | N_("418 - I’m a teapot") | |
467 | N_("418 - I'm a teapot") | |
468 | 468 | #define STATUS_CODE_421 \ |
469 | 469 | N_("421 - Misdirected Request") |
470 | 470 | #define STATUS_CODE_422 \ |
212 | 212 | * returned. */ |
213 | 213 | static char * |
214 | 214 | get_real_mac_osx (const char *osx) { |
215 | if (strstr (osx, "11.0")) | |
216 | return alloc_string ("macOS 11.0 Big Sur"); | |
215 | if (strstr (osx, "12.0")) | |
216 | return alloc_string ("macOS 12 Monterey"); | |
217 | else if (strstr (osx, "11.0")) | |
218 | return alloc_string ("macOS 11 Big Sur"); | |
217 | 219 | else if (strstr (osx, "10.15")) |
218 | 220 | return alloc_string ("macOS 10.15 Catalina"); |
219 | 221 | else if (strstr (osx, "10.14")) |
433 | 433 | * On success, the 1 is returned. */ |
434 | 434 | static int |
435 | 435 | verify_static_content (const char *req) { |
436 | const char *nul = req + strlen (req); | |
436 | const char *nul = NULL; | |
437 | 437 | const char *ext = NULL, *pch = NULL; |
438 | 438 | int elen = 0, i; |
439 | 439 | |
440 | if (strlen (req) < conf.static_file_max_len) | |
440 | if ((req == NULL) || (*req == '\0')) | |
441 | 441 | return 0; |
442 | ||
443 | nul = req + strlen (req); | |
442 | 444 | |
443 | 445 | for (i = 0; i < conf.static_file_idx; ++i) { |
444 | 446 | ext = conf.static_files[i]; |
453 | 455 | continue; |
454 | 456 | } |
455 | 457 | |
456 | if (!strncasecmp (nul - elen, ext, elen)) | |
458 | if (nul - req > elen && !strncasecmp (nul - elen, ext, elen)) | |
457 | 459 | return 1; |
458 | 460 | } |
459 | 461 | |
945 | 947 | free (tkn); |
946 | 948 | return 1; |
947 | 949 | } |
950 | /* require a valid host token (e.g., ord38s18-in-f14.1e100.net) even when we're | |
951 | * not validating the IP */ | |
952 | if (conf.no_ip_validation && *tkn == '\0') { | |
953 | spec_err (logitem, SPEC_TOKN_INV, *p, tkn); | |
954 | free (tkn); | |
955 | return 1; | |
956 | } | |
948 | 957 | logitem->host = tkn; |
949 | 958 | break; |
950 | 959 | /* request method */ |
1493 | 1502 | * If the status code is within the ignore-array, 1 is returned. */ |
1494 | 1503 | static int |
1495 | 1504 | ignore_status_code (const char *status) { |
1496 | if (conf.ignore_status_idx == 0) | |
1505 | if (!status || conf.ignore_status_idx == 0) | |
1497 | 1506 | return 0; |
1498 | 1507 | |
1499 | 1508 | if (str_inarray (status, conf.ignore_status, conf.ignore_status_idx) != -1) |
1518 | 1527 | * If the request is a 404, 1 is returned. */ |
1519 | 1528 | static int |
1520 | 1529 | is_404 (GLogItem * logitem) { |
1530 | if (!logitem->status || *logitem->status == '\0') | |
1531 | return 0; | |
1521 | 1532 | /* is this a 404? */ |
1522 | if (logitem->status && !memcmp (logitem->status, "404", 3)) | |
1533 | if (!memcmp (logitem->status, "404", 3)) | |
1523 | 1534 | return 1; |
1524 | 1535 | /* treat 444 as 404? */ |
1525 | else if (logitem->status && !memcmp (logitem->status, "444", 3) && conf.code444_as_404) | |
1536 | else if (!memcmp (logitem->status, "444", 3) && conf.code444_as_404) | |
1526 | 1537 | return 1; |
1527 | 1538 | return 0; |
1528 | 1539 | } |
1699 | 1710 | char *spec = NULL; |
1700 | 1711 | int ret = 0; |
1701 | 1712 | |
1702 | if (!str) | |
1713 | if (!key || !str) | |
1703 | 1714 | return 0; |
1704 | 1715 | /* empty JSON value, e.g., {method: ""} */ |
1705 | 1716 | if (0 == strlen (str)) |
63 | 63 | |
64 | 64 | rpath = realpath (dbpath, NULL); |
65 | 65 | if (rpath == NULL) |
66 | FATAL ("Unable to open the specified config file. %s", strerror (errno)); | |
66 | FATAL ("Unable to open the specified db path/file '%s'. %s", dbpath, strerror (errno)); | |
67 | 67 | |
68 | 68 | /* sanity check: Is db_path accessible and a directory? */ |
69 | 69 | if (stat (rpath, &info) != 0) |
55 | 55 | {"COMMON" , COMMON} , |
56 | 56 | {"VCOMMON" , VCOMMON} , |
57 | 57 | {"W3C" , W3C} , |
58 | {"SQUID" , SQUID} , | |
59 | 58 | {"CLOUDFRONT" , CLOUDFRONT} , |
60 | 59 | {"CLOUDSTORAGE" , CLOUDSTORAGE} , |
61 | 60 | {"AWSELB" , AWSELB} , |
61 | {"SQUID" , SQUID} , | |
62 | 62 | {"AWSS3" , AWSS3} , |
63 | 63 | {"CADDY" , CADDY} , |
64 | {"AWSALB" , AWSALB} , | |
64 | 65 | }; |
65 | 66 | |
66 | 67 | static const GPreConfLog logs = { |
80 | 81 | "\"%H\", \"method\": \"%m\", \"host\": \"%v\", \"uri\": \"%U\", \"headers\": {" |
81 | 82 | "\"User-Agent\": [\"%u\"], \"Referer\": [\"%R\"] }, \"tls\": { \"cipher_suite\":" |
82 | 83 | "\"%k\", \"proto\": \"%K\" } }, \"duration\": \"%T\", \"size\": \"%b\"," |
83 | "\"status\": \"%s\", \"resp_headers\": { \"Content-Type\": [\"%M\"] } }" | |
84 | "\"status\": \"%s\", \"resp_headers\": { \"Content-Type\": [\"%M\"] } }", | |
85 | ||
86 | "%^ %dT%t.%^ %v %h:%^ %^ %^ %T %^ %s %^ %^ %b \"%r\" \"%u\" %k %K %^" /* Amazon ALB */ | |
84 | 87 | }; |
85 | 88 | |
86 | 89 | static const GPreConfTime times = { |
202 | 205 | ".tif ", |
203 | 206 | ".ttf ", |
204 | 207 | ".flv ", |
208 | ".avi", | |
205 | 209 | }; |
206 | 210 | |
207 | 211 | if (conf.static_file_idx > 0) |
386 | 390 | return AWSS3; |
387 | 391 | else if (strcmp (conf.log_format, logs.caddy) == 0) |
388 | 392 | return CADDY; |
393 | else if (strcmp (conf.log_format, logs.awsalb) == 0) | |
394 | return AWSALB; | |
389 | 395 | else |
390 | 396 | return (size_t) -1; |
391 | 397 | } |
399 | 405 | get_selected_format_str (size_t idx) { |
400 | 406 | char *fmt = NULL; |
401 | 407 | switch (idx) { |
408 | case COMBINED: | |
409 | fmt = alloc_string (logs.combined); | |
410 | break; | |
411 | case VCOMBINED: | |
412 | fmt = alloc_string (logs.vcombined); | |
413 | break; | |
402 | 414 | case COMMON: |
403 | 415 | fmt = alloc_string (logs.common); |
404 | 416 | break; |
405 | 417 | case VCOMMON: |
406 | 418 | fmt = alloc_string (logs.vcommon); |
407 | 419 | break; |
408 | case COMBINED: | |
409 | fmt = alloc_string (logs.combined); | |
410 | break; | |
411 | case VCOMBINED: | |
412 | fmt = alloc_string (logs.vcombined); | |
413 | break; | |
414 | 420 | case W3C: |
415 | 421 | fmt = alloc_string (logs.w3c); |
416 | 422 | break; |
431 | 437 | break; |
432 | 438 | case CADDY: |
433 | 439 | fmt = alloc_string (logs.caddy); |
440 | break; | |
441 | case AWSALB: | |
442 | fmt = alloc_string (logs.awsalb); | |
434 | 443 | break; |
435 | 444 | } |
436 | 445 | |
454 | 463 | fmt = alloc_string (dates.apache); |
455 | 464 | break; |
456 | 465 | case AWSELB: |
466 | case AWSALB: | |
457 | 467 | case CLOUDFRONT: |
458 | 468 | case W3C: |
459 | 469 | fmt = alloc_string (dates.w3c); |
480 | 490 | char *fmt = NULL; |
481 | 491 | switch (idx) { |
482 | 492 | case AWSELB: |
493 | case AWSALB: | |
483 | 494 | case CLOUDFRONT: |
484 | 495 | case COMBINED: |
485 | 496 | case COMMON: |
753 | 764 | break; |
754 | 765 | case JSON_TRUE: |
755 | 766 | val = xstrdup ("true"); |
756 | if ((ret = (*cb) (ptr_data, key, val))) | |
767 | if (!key || (ret = (*cb) (ptr_data, key, val))) | |
757 | 768 | goto clean; |
758 | 769 | ctx = json_get_context (&json, &level); |
759 | 770 | if (ctx != JSON_ARRAY) |
763 | 774 | break; |
764 | 775 | case JSON_FALSE: |
765 | 776 | val = xstrdup ("false"); |
766 | if ((ret = (*cb) (ptr_data, key, val))) | |
777 | if (!key || (ret = (*cb) (ptr_data, key, val))) | |
767 | 778 | goto clean; |
768 | 779 | ctx = json_get_context (&json, &level); |
769 | 780 | if (ctx != JSON_ARRAY) |
773 | 784 | break; |
774 | 785 | case JSON_NULL: |
775 | 786 | val = xstrdup ("-"); |
776 | if ((ret = (*cb) (ptr_data, key, val))) | |
787 | if (!key || (ret = (*cb) (ptr_data, key, val))) | |
777 | 788 | goto clean; |
778 | 789 | ctx = json_get_context (&json, &level); |
779 | 790 | if (ctx != JSON_ARRAY) |
793 | 804 | /* val */ |
794 | 805 | else if (key && (ctx == JSON_ARRAY || ((level % 2) == 0 && ctx != JSON_ARRAY))) { |
795 | 806 | val = xstrdup (json_get_string (&json, &len)); |
796 | if ((ret = (*cb) (ptr_data, key, val))) | |
807 | if (!key || (ret = (*cb) (ptr_data, key, val))) | |
797 | 808 | goto clean; |
798 | 809 | if (ctx != JSON_ARRAY) |
799 | 810 | dec_json_key (key); |
49 | 49 | COMMON, |
50 | 50 | VCOMMON, |
51 | 51 | W3C, |
52 | SQUID, | |
53 | 52 | CLOUDFRONT, |
54 | 53 | CLOUDSTORAGE, |
55 | 54 | AWSELB, |
55 | SQUID, | |
56 | 56 | AWSS3, |
57 | 57 | CADDY, |
58 | AWSALB, | |
58 | 59 | } GLogType; |
59 | 60 | |
60 | 61 | /* predefined log times */ |
85 | 86 | const char *squid; |
86 | 87 | const char *awss3; |
87 | 88 | const char *caddy; |
89 | const char *awsalb; | |
88 | 90 | } GPreConfLog; |
89 | 91 | |
90 | 92 | /* *INDENT-OFF* */ |
870 | 870 | GAgents *agents = NULL; |
871 | 871 | GSLList *keys = NULL, *list = NULL; |
872 | 872 | void *data = NULL; |
873 | uint32_t items = 4, key = djb2 ((unsigned char *) addr); | |
873 | uint32_t items = 4, key = djb2 ((const unsigned char *) addr); | |
874 | 874 | |
875 | 875 | keys = ht_get_keymap_list_from_key (HOSTS, key); |
876 | 876 | if (!keys) |
1296 | 1296 | "Common Log Format (CLF)", |
1297 | 1297 | "Common Log Format (CLF) with Virtual Host", |
1298 | 1298 | "W3C", |
1299 | "Squid Native Format", | |
1300 | 1299 | "CloudFront (Download Distribution)", |
1301 | 1300 | "Google Cloud Storage", |
1302 | 1301 | "AWS Elastic Load Balancing (HTTP/S)", |
1302 | "Squid Native Format", | |
1303 | 1303 | "AWS Simple Storage Service (S3)", |
1304 | 1304 | "CADDY JSON Structured", |
1305 | "AWS Application Load Balancer", | |
1305 | 1306 | }; |
1306 | 1307 | n = ARRAY_SIZE (choices); |
1307 | 1308 | getmaxyx (stdscr, y, x); |
216 | 216 | #endif |
217 | 217 | #endif |
218 | 218 | uint32_t |
219 | djb2 (unsigned char *str) { | |
219 | djb2 (const unsigned char *str) { | |
220 | 220 | uint32_t hash = 5381; |
221 | 221 | int c; |
222 | 222 |
98 | 98 | int valid_output_type (const char *filename); |
99 | 99 | off_t file_size (const char *filename); |
100 | 100 | size_t append_str (char **dest, const char *src); |
101 | uint32_t djb2(unsigned char *str); | |
101 | uint32_t djb2(const unsigned char *str); | |
102 | 102 | uint32_t ip_to_binary (const char *ip); |
103 | 103 | void genstr(char *dest, size_t len); |
104 | 104 | void strip_newlines (char *str); |
688 | 688 | OpenSSL_add_ssl_algorithms (); |
689 | 689 | |
690 | 690 | /* ssl context */ |
691 | #if OPENSSL_VERSION_NUMBER < 0x10100000L | |
691 | 692 | if (!(ctx = SSL_CTX_new (SSLv23_server_method ()))) |
693 | #else | |
694 | if (!(ctx = SSL_CTX_new (TLS_server_method ()))) | |
695 | #endif | |
692 | 696 | goto out; |
693 | 697 | /* set certificate */ |
694 | 698 | if (!SSL_CTX_use_certificate_file (ctx, wsconfig.sslcert, SSL_FILETYPE_PEM)) |