#!/usr/bin/perl use Data::Dumper; use DBI; use File::Basename; #use warnings; open(FH,"<",$ARGV[0]); open(AH,"<",$ARGV[1]); open(OUT,">",$ARGV[2]); open(LOG,">",$ARGV[3]); ####################################################################################################################### #Conneting to database my $dbExt = "db"; my $driver = "SQLite"; my $file = basename($ARGV[1]); my @fileName = split(/\./, $file); $file = $fileName[0].".$dbExt"; my $dbFileName = dirname($ARGV[1])."/". $file; if(-e $dbFileName) { unlink ($dbFileName); } my $database = "$dbFileName"; my $dsn = "DBI:$driver:dbname=$database"; my $userid = ""; my $password = ""; my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1, AutoCommit => 0 }) or die $DBI::errstr; my $stmt = qq(CREATE TABLE ACCU_USAGE (MOBILE VARCHAR2(50), PLANNAME VARCHAR2(50), PLANUSAGE CHAR(50), COUNTER CHAR(20), STATUS VARCHAR2(20), EXPIRY_DATE CHAR( 20), PREEXP_TIME CHAR(20), PREEXP_VOLUME CHAR(20)); ); my $rv = $dbh->do($stmt); if($rv < 0){ unlink($dbFileName) if(-e $dbFileName); $dbh->disconnect(); print LOG $DBI::errstr; exit(1); } ####################################################################################################################### my $SubsSize= -s $ARGV[0]; my $AccuSize= -s $ARGV[1]; my $SubsCount=0; my $AccuCount=0; my $finalCount=0; #my $AccUsg; my $rowCount = 0; while() { chomp; my $line=$_; $AccuCount++; my $MobileNumber; if( $line =~ /subscriberId:(\w+)\(\"(\d+)\"\)/ ) { $MobileNumber=$2; } else { $MobileNumber="''"; } my $plan=$line; $plan =~s/\\//g; my @AccVolume; if ( $plan =~ /usageControlAccum:(\w+)\(\"(.*)\"\)/ ) { my $p=$2; $p=~s/:\{/ => {/g; $p=~s/:\[/ => [/g; $p=~s/\"/\'/g; $p=~s/\':/\'=>/g; $p=~s/\}n/\}/g; #print $p,"\n"; my $e=eval($p); if ( @$ ) { push (@AccVolume,"error"); } else { #print Dumper($e); foreach my $value ( @{$e->{'reportingGroups'}} ) { if ( exists ( $value->{'absoluteAccumulated'}->{'counters'} ) ) { $stmt = qq(INSERT INTO ACCU_USAGE VALUES ($MobileNumber, \'$value->{'subscriberGroupName'}\', $value->{'absoluteAccumulated'}->{'counters'}->[0]- >{'bidirVolume'}, \'$value->{'absoluteAccumulated'}->{'counters'}->[0]->{'name'}\', \'$value->{'selected'}\', \'$value->{'absoluteAccumulated'}->{'expiryDate'}->{ 'volume'}\', \'$value->{'absoluteAccumulated'}->{'previousExpiryDate'}->{'time'}\', \'$value->{'absoluteAccumulated'}->{'previousExpiryDate'}->{'volume'}\' );); } elsif ( exists ( $value->{'absoluteAccumulated'}->{'bidirVolume'} ) ) { $stmt = qq(INSERT INTO ACCU_USAGE VALUES ($MobileNumber, \'$value->{'subscriberGroupName'}\', $value->{'absoluteAccumulated'}->{'bidirVolume'}, \ '$value->{'absoluteAccumulated'}->{'name'}\', \'$value->{'selected'}\', \'$value->{'absoluteAccumulated'}->{'expiryDate'}->{'volume'}\', \'$value->{'absoluteAccum ulated'}->{'previousExpiryDate'}->{'time'}\', \'$value->{'absoluteAccumulated'}->{'previousExpiryDate'}->{'volume'}\' );); } ################################################################################################################################## $rv = $dbh->do($stmt) or die $DBI::errstr; if($rv < 0) { print LOG "Failed to insert $stmt query. Exiting...\n"; unlink($dbFileName) if(-e $dbFileName); print LOG $DBI::errstr; $dbh->disconnect(); exit(1); } else { $rowCount++; if($rowCount == 5000) { $dbh->commit(); $rowCount = 0; } } ################################################################################################################################### } } } } close(AH); ############################################################################################################3 $dbh->commit();