Skip to content

Perl db script

#!/usr/bin/perl -w
#Jason Thomas
use strict;
use lib "/home/jthomas/lib/perl5/site_perl/5.8.8/";
use Mysql;
use Statistics::Descriptive;


my $host = "hostname";
my $database = "keytest";
my $user = "admin";
my $pw = "admin";
my $beginDate = "2009-07-01";
my $endDate = "2009-07-31";
my @slotId = ("731147","731148","799084","799086","799088","799090","799091","698549");

my $connect = Mysql -> connect ($host, $database, $user, $pw);

    findTextId($beginDate, $endDate);


sub findTextId{
    my ($beginDate, $endDate) = @_; 

    for ( my $i = 0; $i < scalar @slotId; $i++){

    my @textId;

    my $findTextIdQuery = "SELECT 
    a.slot_id,
    concat(c.trans_element_conn,
    b.trans_element_text) full_element_name,
    a.text_id,
    a.coverage,
    a.response_time,
    a.conn_id
    FROM 
        (SELECT element_text_id text_id,slot_id,
        count(element_text_id)/(SELECT count(*) c FROM base_trans WHERE date_time>=\'$beginDate\' AND date_time<=\'$endDate\' AND slot_id=\'$slotId[$i]\')*100 coverage, 
    avg(measurement_element+time_to_first_byte+base_page_or_content_download+client_time) response_time,
        max(element_conn_id) conn_id
    FROM base_element
    WHERE measurement_element>0
    AND date_time >= \'$beginDate\' and date_time <=\'$endDate\'
    AND slot_id = \'$slotId[$i]\'
    GROUP BY element_text_id) a,
    global_trans_element_text b,
    global_trans_element_conn c
    WHERE a.text_id = b.trans_element_text_id
    AND a.conn_id = c.trans_element_conn_id
    AND a.coverage > 95
    ORDER BY a.response_time desc 
    LIMIT 12;";

    print $findTextIdQuery."\n";
    my $execute = $connect->query($findTextIdQuery); 
##  print $execute."test";
        while (my @results = $execute->fetchrow()){
                   print $results[2]."\n";
            push(@textId, $results[2]);
        }
    getDataSet($slotId[$i], @textId);
    }
}

sub getDataSet{

    my ($slotIdSingle, @textId) = @_;
    my @dataSet;
    for ( my $i = 0; $i < scalar @textId; $i++){

    my $selectElements = "SELECT a.responsetime 
    FROM (select avg(base_page_or_content_download+measurement_element+time_to_first_byte+client_time) responsetime
    FROM base_element
    WHERE date_time>=\'$beginDate\'
    AND date_time<\'$endDate\' AND element_text_id=\'$textId[$i]\'
    AND slot_id = \'$slotIdSingle\'
    GROUP BY trans_id) a;";
    print $selectElements."\n";
    my $execute = $connect->query($selectElements);
    while (my @results = $execute->fetchrow()){
##      print $results[0]."\n";
        push(@dataSet, $results[0]);
    }

    my $responseTime85 = calc85th(@dataSet);
    writeDB($slotIdSingle, $textId[$i], "85", $responseTime85);
    my $responseTime95 = calc95th(@dataSet);
    writeDB($slotIdSingle, $textId[$i], "95", $responseTime95);
    }

}

sub calc85th{

    my (@dataSet) = @_;
    my $stat = Statistics::Descriptive::Full->new();
    $stat->add_data (@dataSet);
    ##print $stat->percentile(85)."\n";
    return $stat->percentile(85);

}


sub calc95th{

    my (@dataSet) = @_;
    my $stat = Statistics::Descriptive::Full->new();
    $stat->add_data (@dataSet);
    ##print $stat->percentile(95)."\n";
    return $stat->percentile(95)."\n";

}

sub writeDB{

    my $connectNew = Mysql -> connect ($host, $database, $user, $pw);
    my ($slotId, $textId, $percentile, $responseTime) = @_; 
    my $tableName = "percentile_tmp"; 

    my $writeQuery = "INSERT INTO $tableName (slot_id, element_text_id, percentile, response_time)
        VALUES (\'$slotId\', \'$textId\', \'$percentile\', \'$responseTime\');";
    my $execute = $connectNew->query($writeQuery);


}