1 package Yaala::Data::Convert;
8 use Yaala::Config qw#get_config#;
9 use Yaala::Data::Setup qw#%DATAFIELDS#;
11 @Yaala::Data::Convert::ISA = ('Exporter');
12 @Yaala::Data::Convert::EXPORT_OK = qw#convert#;
14 my $VERSION = '$Id: Convert.pm,v 1.7 2003/12/07 14:52:22 octo Exp $';
15 print STDERR $/, __FILE__, ": $VERSION" if ($::DEBUG);
18 our $DO_REV_LOOKUP = 0;
20 our $URL_FORMAT = 'host';
22 if (get_config ('reverse_lookup'))
24 my $conf = get_config ('reverse_lookup');
25 if ($conf =~ m/^(true|yes|on)$/i)
27 print STDERR $/, __FILE__, ': Will try to do reverse lookups' if ($::DEBUG & 0x40);
33 my $conf = get_config ('host_width');
41 if (get_config ('url_format'))
43 my $conf = get_config ('url_format');
48 elsif ($conf =~ m/full/)
63 if (defined ($CACHE->{$key}{$val}))
65 return ($CACHE->{$key}{$val});
68 if (defined ($DATAFIELDS{$key}))
70 my ($class, $type) = split (m/:/, $DATAFIELDS{$key});
72 if (!defined ($type) or !$type)
74 $CACHE->{$key}{$val} = $retval if ($class eq 'key');
80 $retval = sprintf ("%.1f kByte", $val / 1024) if ($val)
82 # elsif ($type eq 'numeric')
87 # $retval = int ($val);
94 elsif ($type eq 'host')
96 if ($DO_REV_LOOKUP and $val =~ m/^[\d\.]+$/)
98 $retval = do_reverse_lookup ($val);
103 if ($retval =~ m/^[\d\.]+$/)
107 $retval = '*UNRESOLVED*';
111 my ($c, $d, $e, $f) = split (m/\./, $retval, 4);
112 if ($HOST_WIDTH == 1)
114 $retval = "$c.0.0.0/8";
116 elsif ($HOST_WIDTH == 2)
118 $retval = "$c.$d.0.0/16";
120 elsif ($HOST_WIDTH == 3)
122 $retval = "$c.$d.$e.0/24";
126 $retval = "$c.$d.$e.$f/32";
132 my @parts = split (m/\./, $retval);
133 while (scalar (@parts) > ($HOST_WIDTH + 1))
137 $retval = join ('.', @parts);
141 elsif ($type eq 'url')
144 $tmpval =~ s#^[a-z]+://##i;
146 if ($tmpval =~ m#^([^:/]+)(?::\d+)?(/[^\?]*)(.*)#)
152 if ($DO_REV_LOOKUP and $host =~ m/^[\d\.]+$/)
154 $host = do_reverse_lookup ($host);
157 if ($HOST_WIDTH and $host =~ m/[^\d\.]/)
159 my @parts = split (m/\./, $host);
160 while (scalar (@parts) > ($HOST_WIDTH + 1))
164 $host = join ('.', @parts);
167 if ($URL_FORMAT eq 'host')
171 elsif ($URL_FORMAT eq 'url')
173 $retval = $host . $path;
175 elsif ($URL_FORMAT eq 'full')
177 $retval = $host . $path . $params;
182 print STDERR $/, __FILE__, ": Unable to parse URL: '$val'";
185 elsif ($type eq 'date')
189 elsif ($type eq 'time' and $class eq 'agg')
195 $hour = int ($val / 3600000); $val %= 3600000;
196 $minute = int ($val / 60000); $val %= 60000;
197 $second = $val / 1000;
199 $retval = sprintf ("%02u:%02u:%02.1f", $hour, $minute, $second);
204 $CACHE->{$key}{$val} = $retval;
211 sub do_reverse_lookup
215 return ($ip) if ($ip !~ m/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/);
217 print STDERR $/, __FILE__, ": Reverse lookup for $ip" if ($::DEBUG & 0x40);
219 my $iaddr = inet_aton ($ip);
220 if (!defined ($iaddr))
222 print STDERR ': Failed (not a valid IP)' if ($::DEBUG & 0x40);
226 my $host = gethostbyaddr ($iaddr, AF_INET ());
230 print STDERR ": Success ($host)" if ($::DEBUG & 0x40);
235 print STDERR ': Failed (unknown)' if ($::DEBUG & 0x40);