summaryrefslogtreecommitdiffstats
path: root/openbsc/tools/hlrstat.pl
blob: 668fc9a4a4a3d3dc3c1524b4722a48bb1829be1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/perl

use strict;
use DBI;
my $dbh = DBI->connect("dbi:SQLite:dbname=hlr.sqlite3","","");


my %mcc_names;
my %mcc_mnc_names;

sub get_mcc_mnc_name($)
{
	my $mcc_mnc = shift;
	my $ret = $mcc_mnc;

	if ($mcc_mnc_names{$mcc_mnc} ne '') {
		$ret = $mcc_mnc_names{$mcc_mnc};
	}

	return $ret;
}

sub read_networks($)
{
	my $filename = shift;
	my $cur_name;

	open(INFILE, $filename);
	while (my $l = <INFILE>) {
		chomp($l);
		if ($l =~ /^#/) {
			next;
		}
		if ($l =~ /^\t/) {
			my ($mcc, $mnc, $brand, $r) = split(' ', $l, 4);
			#printf("%s|%s|%s\n", $mcc, $mnc, $brand);
			$mcc_mnc_names{"$mcc-$mnc"} = $brand;
			$mcc_names{$mcc} = $cur_name;
		} elsif ($l =~ /^(\w\w)\t(.*)/) {
			#printf("%s|%s\n", $1, $2);
			$cur_name = $2;
		}
	}
	close(INFILE);
}

read_networks("networks.tab");

my %oper_count;
my %country_count;

#my $sth = $dbh->prepare("SELECT imsi FROM subscriber where authorized=1");
my $sth = $dbh->prepare("SELECT imsi FROM subscriber");

$sth->execute();

while (my $href = $sth->fetchrow_hashref) {
	my ($mcc, $mnc) = $$href{imsi} =~ /(\d{3})(\d{2}).*/;
	#printf("%s %s-%s \n", $$href{imsi}, $mcc, $mnc);
	$oper_count{"$mcc-$mnc"}++;
	$country_count{$mcc}++;
}


foreach my $c (sort{$country_count{$b} <=> $country_count{$a}} keys %country_count) {
	printf("%s: %d\n", $mcc_names{$c}, $country_count{$c});

	foreach my $k (sort{$oper_count{$b} <=> $oper_count{$a}} keys %oper_count) {
		if ($k =~ /^$c-/) {
			printf("\t%s: %d\n", get_mcc_mnc_name($k), $oper_count{$k});
		}
	}
}