Switched Server Performance report to Graph.js from ploticus, converted to HTML

Rare bug fix for Stereo Recordings
Changed install.pl to use Asterisk 18.X as default

git-svn-id: svn://192.168.202.10@3947 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
mattf
2025-10-02 01:57:46 +00:00
parent 8df6951cdc
commit f175fc0450
6 changed files with 615 additions and 697 deletions
+25 -30
View File
@@ -267,6 +267,7 @@
# 250325-1724 - Fix for possible daily_limit issue # 250325-1724 - Fix for possible daily_limit issue
# 250825-1824 - Added stereo_recording code # 250825-1824 - Added stereo_recording code
# 250924-2147 - Added code for deprecation of "Monitor" application after Asterisk 20 # 250924-2147 - Added code for deprecation of "Monitor" application after Asterisk 20
# 251001-1836 - Fix for rare Stereo recording filename issue
# #
$script = 'agi-VDAD_ALL_inbound.agi'; $script = 'agi-VDAD_ALL_inbound.agi';
@@ -3404,21 +3405,7 @@ while ( ($drop_timer <= $DROP_TIME) && ($wait_in_queue > 0) && ($MCdrop_override
$sthA->finish(); $sthA->finish();
# get date/time # get date/time
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); &get_date_time;
$year = ($year + 1900);
$Tyear = ($year - 2000);
$mon++;
if ($mon < 10) {$mon = "0$mon";}
if ($mday < 10) {$mday = "0$mday";}
if ($hour < 10) {$hour = "0$hour";}
if ($min < 10) {$min = "0$min";}
if ($sec < 10) {$sec = "0$sec";}
$now_date_epoch = time();
$now_date = "$year-$mon-$mday $hour:$min:$sec";
$recdate = "$year$mon$mday-$hour$min$sec";
$tinydate = "$Tyear$mon$mday$hour$min$sec";
$campaign_rec_filename =~ s/CAMPAIGN/$log_campaign/gi; $campaign_rec_filename =~ s/CAMPAIGN/$log_campaign/gi;
$campaign_rec_filename =~ s/INGROUP/$channel_group/gi; $campaign_rec_filename =~ s/INGROUP/$channel_group/gi;
$campaign_rec_filename =~ s/CUSTPHONE/$phone_number/gi; $campaign_rec_filename =~ s/CUSTPHONE/$phone_number/gi;
@@ -3483,6 +3470,7 @@ while ( ($drop_timer <= $DROP_TIME) && ($wait_in_queue > 0) && ($MCdrop_override
### BEGIN stereo call recording for ALLCALLS/ALLFORCE and for all parallel stereo recording in-groups ### ### BEGIN stereo call recording for ALLCALLS/ALLFORCE and for all parallel stereo recording in-groups ###
if ( ($stereo_recording =~ /CUSTOMER|BOTH/i) && ($conf_engine eq "CONFBRIDGE") && ($SSstereo_recording > 0) ) if ( ($stereo_recording =~ /CUSTOMER|BOTH/i) && ($conf_engine eq "CONFBRIDGE") && ($SSstereo_recording > 0) )
{ {
&get_date_time;
$stereo_rec_filename =~ s/CAMPAIGN/$log_campaign/gi; $stereo_rec_filename =~ s/CAMPAIGN/$log_campaign/gi;
$stereo_rec_filename =~ s/INGROUP/$channel_group/gi; $stereo_rec_filename =~ s/INGROUP/$channel_group/gi;
$stereo_rec_filename =~ s/CUSTPHONE/$phone_number/gi; $stereo_rec_filename =~ s/CUSTPHONE/$phone_number/gi;
@@ -5003,21 +4991,7 @@ while ( ($drop_timer <= $DROP_TIME) && ($wait_in_queue > 0) && ($MCdrop_override
$sthA->finish(); $sthA->finish();
# get date/time # get date/time
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); &get_date_time;
$year = ($year + 1900);
$Tyear = ($year - 2000);
$mon++;
if ($mon < 10) {$mon = "0$mon";}
if ($mday < 10) {$mday = "0$mday";}
if ($hour < 10) {$hour = "0$hour";}
if ($min < 10) {$min = "0$min";}
if ($sec < 10) {$sec = "0$sec";}
$now_date_epoch = time();
$now_date = "$year-$mon-$mday $hour:$min:$sec";
$recdate = "$year$mon$mday-$hour$min$sec";
$tinydate = "$Tyear$mon$mday$hour$min$sec";
$campaign_rec_filename =~ s/CAMPAIGN/$log_campaign/gi; $campaign_rec_filename =~ s/CAMPAIGN/$log_campaign/gi;
$campaign_rec_filename =~ s/INGROUP/$channel_group/gi; $campaign_rec_filename =~ s/INGROUP/$channel_group/gi;
$campaign_rec_filename =~ s/CUSTPHONE/$phone_number/gi; $campaign_rec_filename =~ s/CUSTPHONE/$phone_number/gi;
@@ -5089,6 +5063,7 @@ while ( ($drop_timer <= $DROP_TIME) && ($wait_in_queue > 0) && ($MCdrop_override
### BEGIN stereo call recording for ALLCALLS/ALLFORCE and for all parallel stereo recording in-groups ### ### BEGIN stereo call recording for ALLCALLS/ALLFORCE and for all parallel stereo recording in-groups ###
if ( ($stereo_recording =~ /CUSTOMER|BOTH/i) && ($conf_engine eq "CONFBRIDGE") && ($SSstereo_recording > 0) ) if ( ($stereo_recording =~ /CUSTOMER|BOTH/i) && ($conf_engine eq "CONFBRIDGE") && ($SSstereo_recording > 0) )
{ {
&get_date_time;
$stereo_rec_filename =~ s/CAMPAIGN/$log_campaign/gi; $stereo_rec_filename =~ s/CAMPAIGN/$log_campaign/gi;
$stereo_rec_filename =~ s/INGROUP/$channel_group/gi; $stereo_rec_filename =~ s/INGROUP/$channel_group/gi;
$stereo_rec_filename =~ s/CUSTPHONE/$phone_number/gi; $stereo_rec_filename =~ s/CUSTPHONE/$phone_number/gi;
@@ -10405,6 +10380,26 @@ sub parse_asterisk_version
} }
sub get_date_time
{
# get date/time, for recording filenames
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year = ($year + 1900);
$Tyear = ($year - 2000);
$mon++;
if ($mon < 10) {$mon = "0$mon";}
if ($mday < 10) {$mday = "0$mday";}
if ($hour < 10) {$hour = "0$hour";}
if ($min < 10) {$min = "0$min";}
if ($sec < 10) {$sec = "0$sec";}
$now_date_epoch = time();
$now_date = "$year-$mon-$mday $hour:$min:$sec";
$recdate = "$year$mon$mday-$hour$min$sec";
$tinydate = "$Tyear$mon$mday$hour$min$sec";
}
sub trigger_transfer_process sub trigger_transfer_process
{ {
# $DS='--'; # $DS='--';
+30 -75
View File
@@ -134,6 +134,7 @@
# 241020-1928 - Added khomp campaign settings options # 241020-1928 - Added khomp campaign settings options
# 250827-1556 - Added stereo_recording code # 250827-1556 - Added stereo_recording code
# 250924-2150 - Added code for deprecation of "Monitor" application after Asterisk 20 # 250924-2150 - Added code for deprecation of "Monitor" application after Asterisk 20
# 251001-1837 - Fix for rare Stereo recording filename issue
# #
$script = 'agi-VDAD_ALL_outbound.agi'; $script = 'agi-VDAD_ALL_outbound.agi';
@@ -1178,21 +1179,7 @@ if ($VDACaffected_rows > 0)
$sthA->finish(); $sthA->finish();
# get date/time # get date/time
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); &get_date_time;
$year = ($year + 1900);
$Tyear = ($year - 2000);
$mon++;
if ($mon < 10) {$mon = "0$mon";}
if ($mday < 10) {$mday = "0$mday";}
if ($hour < 10) {$hour = "0$hour";}
if ($min < 10) {$min = "0$min";}
if ($sec < 10) {$sec = "0$sec";}
$now_date_epoch = time();
$now_date = "$year-$mon-$mday $hour:$min:$sec";
$recdate = "$year$mon$mday-$hour$min$sec";
$tinydate = "$Tyear$mon$mday$hour$min$sec";
$campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi;
$campaign_rec_filename =~ s/INGROUP/$VDADcampaign/gi; $campaign_rec_filename =~ s/INGROUP/$VDADcampaign/gi;
$campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/gi; $campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/gi;
@@ -3197,21 +3184,7 @@ while ($drop_timer <= $DROP_TIME)
$sthA->finish(); $sthA->finish();
# get date/time # get date/time
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); &get_date_time;
$year = ($year + 1900);
$Tyear = ($year - 2000);
$mon++;
if ($mon < 10) {$mon = "0$mon";}
if ($mday < 10) {$mday = "0$mday";}
if ($hour < 10) {$hour = "0$hour";}
if ($min < 10) {$min = "0$min";}
if ($sec < 10) {$sec = "0$sec";}
$now_date_epoch = time();
$now_date = "$year-$mon-$mday $hour:$min:$sec";
$recdate = "$year$mon$mday-$hour$min$sec";
$tinydate = "$Tyear$mon$mday$hour$min$sec";
$campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi;
$campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/gi; $campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/gi;
$campaign_rec_filename =~ s/FULLDATE/$recdate/gi; $campaign_rec_filename =~ s/FULLDATE/$recdate/gi;
@@ -3286,6 +3259,7 @@ while ($drop_timer <= $DROP_TIME)
### BEGIN stereo call recording for ALLCALLS/ALLFORCE and for all parallel stereo recording campaigns for remote agents ### ### BEGIN stereo call recording for ALLCALLS/ALLFORCE and for all parallel stereo recording campaigns for remote agents ###
if ( ($stereo_recording =~ /CUSTOMER|BOTH/i) && ($conf_engine eq "CONFBRIDGE") && ($SSstereo_recording > 0) ) if ( ($stereo_recording =~ /CUSTOMER|BOTH/i) && ($conf_engine eq "CONFBRIDGE") && ($SSstereo_recording > 0) )
{ {
&get_date_time;
$stereo_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $stereo_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi;
$stereo_rec_filename =~ s/INGROUP/$VDADcampaign/gi; $stereo_rec_filename =~ s/INGROUP/$VDADcampaign/gi;
$stereo_rec_filename =~ s/CUSTPHONE/$VDADphone/gi; $stereo_rec_filename =~ s/CUSTPHONE/$VDADphone/gi;
@@ -3637,21 +3611,7 @@ while ($drop_timer <= $DROP_TIME)
$sthA->finish(); $sthA->finish();
# get date/time # get date/time
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); &get_date_time;
$year = ($year + 1900);
$Tyear = ($year - 2000);
$mon++;
if ($mon < 10) {$mon = "0$mon";}
if ($mday < 10) {$mday = "0$mday";}
if ($hour < 10) {$hour = "0$hour";}
if ($min < 10) {$min = "0$min";}
if ($sec < 10) {$sec = "0$sec";}
$now_date_epoch = time();
$now_date = "$year-$mon-$mday $hour:$min:$sec";
$recdate = "$year$mon$mday-$hour$min$sec";
$tinydate = "$Tyear$mon$mday$hour$min$sec";
$campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi;
$campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/gi; $campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/gi;
$campaign_rec_filename =~ s/FULLDATE/$recdate/gi; $campaign_rec_filename =~ s/FULLDATE/$recdate/gi;
@@ -3717,6 +3677,7 @@ while ($drop_timer <= $DROP_TIME)
### BEGIN stereo call recording for ALLCALLS/ALLFORCE and for all parallel stereo recording campaigns ### ### BEGIN stereo call recording for ALLCALLS/ALLFORCE and for all parallel stereo recording campaigns ###
if ( ($stereo_recording =~ /CUSTOMER|BOTH/i) && ($conf_engine eq "CONFBRIDGE") && ($SSstereo_recording > 0) ) if ( ($stereo_recording =~ /CUSTOMER|BOTH/i) && ($conf_engine eq "CONFBRIDGE") && ($SSstereo_recording > 0) )
{ {
&get_date_time;
$stereo_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $stereo_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi;
$stereo_rec_filename =~ s/INGROUP/$VDADcampaign/gi; $stereo_rec_filename =~ s/INGROUP/$VDADcampaign/gi;
$stereo_rec_filename =~ s/CUSTPHONE/$VDADphone/gi; $stereo_rec_filename =~ s/CUSTPHONE/$VDADphone/gi;
@@ -4619,21 +4580,7 @@ while ($drop_timer <= $DROP_TIME)
$sthA->finish(); $sthA->finish();
# get date/time # get date/time
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); &get_date_time;
$year = ($year + 1900);
$Tyear = ($year - 2000);
$mon++;
if ($mon < 10) {$mon = "0$mon";}
if ($mday < 10) {$mday = "0$mday";}
if ($hour < 10) {$hour = "0$hour";}
if ($min < 10) {$min = "0$min";}
if ($sec < 10) {$sec = "0$sec";}
$now_date_epoch = time();
$now_date = "$year-$mon-$mday $hour:$min:$sec";
$recdate = "$year$mon$mday-$hour$min$sec";
$tinydate = "$Tyear$mon$mday$hour$min$sec";
$campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi;
$campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/gi; $campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/gi;
$campaign_rec_filename =~ s/FULLDATE/$recdate/gi; $campaign_rec_filename =~ s/FULLDATE/$recdate/gi;
@@ -4707,6 +4654,7 @@ while ($drop_timer <= $DROP_TIME)
### BEGIN stereo call recording for ALLCALLS/ALLFORCE and for all parallel stereo recording campaigns for remote agents ### ### BEGIN stereo call recording for ALLCALLS/ALLFORCE and for all parallel stereo recording campaigns for remote agents ###
if ( ($stereo_recording =~ /CUSTOMER|BOTH/i) && ($conf_engine eq "CONFBRIDGE") && ($SSstereo_recording > 0) ) if ( ($stereo_recording =~ /CUSTOMER|BOTH/i) && ($conf_engine eq "CONFBRIDGE") && ($SSstereo_recording > 0) )
{ {
&get_date_time;
$stereo_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $stereo_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi;
$stereo_rec_filename =~ s/INGROUP/$VDADcampaign/gi; $stereo_rec_filename =~ s/INGROUP/$VDADcampaign/gi;
$stereo_rec_filename =~ s/CUSTPHONE/$VDADphone/gi; $stereo_rec_filename =~ s/CUSTPHONE/$VDADphone/gi;
@@ -5058,21 +5006,7 @@ while ($drop_timer <= $DROP_TIME)
$sthA->finish(); $sthA->finish();
# get date/time # get date/time
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); &get_date_time;
$year = ($year + 1900);
$Tyear = ($year - 2000);
$mon++;
if ($mon < 10) {$mon = "0$mon";}
if ($mday < 10) {$mday = "0$mday";}
if ($hour < 10) {$hour = "0$hour";}
if ($min < 10) {$min = "0$min";}
if ($sec < 10) {$sec = "0$sec";}
$now_date_epoch = time();
$now_date = "$year-$mon-$mday $hour:$min:$sec";
$recdate = "$year$mon$mday-$hour$min$sec";
$tinydate = "$Tyear$mon$mday$hour$min$sec";
$campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi;
$campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/gi; $campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/gi;
$campaign_rec_filename =~ s/FULLDATE/$recdate/gi; $campaign_rec_filename =~ s/FULLDATE/$recdate/gi;
@@ -5136,6 +5070,7 @@ while ($drop_timer <= $DROP_TIME)
### BEGIN stereo call recording for ALLCALLS/ALLFORCE and for all parallel stereo recording campaigns ### ### BEGIN stereo call recording for ALLCALLS/ALLFORCE and for all parallel stereo recording campaigns ###
if ( ($stereo_recording =~ /CUSTOMER|BOTH/i) && ($conf_engine eq "CONFBRIDGE") && ($SSstereo_recording > 0) ) if ( ($stereo_recording =~ /CUSTOMER|BOTH/i) && ($conf_engine eq "CONFBRIDGE") && ($SSstereo_recording > 0) )
{ {
&get_date_time;
$stereo_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $stereo_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi;
$stereo_rec_filename =~ s/INGROUP/$VDADcampaign/gi; $stereo_rec_filename =~ s/INGROUP/$VDADcampaign/gi;
$stereo_rec_filename =~ s/CUSTPHONE/$VDADphone/gi; $stereo_rec_filename =~ s/CUSTPHONE/$VDADphone/gi;
@@ -6632,6 +6567,26 @@ sub tts_num_var_test
} }
sub get_date_time
{
# get date/time, for recording filenames
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year = ($year + 1900);
$Tyear = ($year - 2000);
$mon++;
if ($mon < 10) {$mon = "0$mon";}
if ($mday < 10) {$mday = "0$mday";}
if ($hour < 10) {$hour = "0$hour";}
if ($min < 10) {$min = "0$min";}
if ($sec < 10) {$sec = "0$sec";}
$now_date_epoch = time();
$now_date = "$year-$mon-$mday $hour:$min:$sec";
$recdate = "$year$mon$mday-$hour$min$sec";
$tinydate = "$Tyear$mon$mday$hour$min$sec";
}
sub trigger_transfer_process sub trigger_transfer_process
{ {
# $DS='--'; # $DS='--';
+2 -2
View File
@@ -1,7 +1,7 @@
VICIDIAL STEREO CALL RECORDINGS Started: 2025-06-18 Updated: 2025-09-25 VICIDIAL STEREO CALL RECORDINGS Started: 2025-06-18 Updated: 2025-10-01
TO USE THESE FEATURES, YOU WILL NEED TO HAVE ALL SERVERS IN YOUR CLUSTER USING SVN/TRUNK REVISION 3945(2025-09-25) CODE OR HIGHER!!! TO USE THESE FEATURES, YOU WILL NEED TO HAVE ALL SERVERS IN YOUR CLUSTER USING SVN/TRUNK REVISION 3947(2025-10-01) CODE OR HIGHER!!!
This project was designed to allow for additional stereo recording of phone calls at the agent and server levels directly on VICIdial Asterisk servers, with the customer always on one channel(the Right channel) and the agent and all other parties on the other channel(the Left channel). If you are looking for the VICI Gateway Recording Server documentation, please see the GATEWAY_RECORDING_SERVER.txt document. This project was designed to allow for additional stereo recording of phone calls at the agent and server levels directly on VICIdial Asterisk servers, with the customer always on one channel(the Right channel) and the agent and all other parties on the other channel(the Left channel). If you are looking for the VICI Gateway Recording Server documentation, please see the GATEWAY_RECORDING_SERVER.txt document.
+1 -1
View File
@@ -944,7 +944,7 @@ realtime_agent_time_stats ENUM('DISABLED','WAIT_CUST_ACW','WAIT_CUST_ACW_PAUSE',
use_auto_hopper ENUM('Y','N') default 'Y', use_auto_hopper ENUM('Y','N') default 'Y',
auto_hopper_multi VARCHAR(6) default '1', auto_hopper_multi VARCHAR(6) default '1',
auto_hopper_level MEDIUMINT(8) UNSIGNED default '0', auto_hopper_level MEDIUMINT(8) UNSIGNED default '0',
auto_trim_hopper ENUM('Y','N') default 'Y', auto_trim_hopper ENUM('Y','N') default 'N',
api_manual_dial ENUM('STANDARD','QUEUE','QUEUE_AND_AUTOCALL') default 'STANDARD', api_manual_dial ENUM('STANDARD','QUEUE','QUEUE_AND_AUTOCALL') default 'STANDARD',
manual_dial_call_time_check ENUM('DISABLED','ENABLED') default 'DISABLED', manual_dial_call_time_check ENUM('DISABLED','ENABLED') default 'DISABLED',
display_leads_count ENUM('Y','N') default 'N', display_leads_count ENUM('Y','N') default 'N',
+2 -1
View File
@@ -97,7 +97,7 @@ $VARCS_port = '3306';
# default keepalive processes: # default keepalive processes:
$VARactive_keepalives = '1234568'; $VARactive_keepalives = '1234568';
# default Asterisk version: # default Asterisk version:
$VARasterisk_version = '16.X'; $VARasterisk_version = '18.X';
# default recording FTP archive variables: # default recording FTP archive variables:
$VARFTP_host = '10.0.0.4'; $VARFTP_host = '10.0.0.4';
$VARFTP_user = 'cron'; $VARFTP_user = 'cron';
@@ -2099,6 +2099,7 @@ else
print " 11.X\n"; print " 11.X\n";
print " 13.X\n"; print " 13.X\n";
print " 16.X\n"; print " 16.X\n";
print " 18.X\n";
print "Enter asterisk version or press enter for default: [$VARasterisk_version] "; print "Enter asterisk version or press enter for default: [$VARasterisk_version] ";
$PROMPTasterisk_version = <STDIN>; $PROMPTasterisk_version = <STDIN>;
chomp($PROMPTasterisk_version); chomp($PROMPTasterisk_version);
+153 -186
View File
@@ -30,6 +30,7 @@
# 180223-1541 - Fixed blank default date/time ranges # 180223-1541 - Fixed blank default date/time ranges
# 191013-0842 - Fixes for PHP7 # 191013-0842 - Fixes for PHP7
# 220302-0841 - Added allow_web_debug system setting # 220302-0841 - Added allow_web_debug system setting
# 251001-1700 - Switched graph to Graph.js from ploticus, converted to HTML
# #
$startMS = microtime(); $startMS = microtime();
@@ -271,6 +272,8 @@ while ($i < $servers_to_print)
$NWB = "<IMG SRC=\"help.png\" onClick=\"FillAndShowHelpDiv(event, '"; $NWB = "<IMG SRC=\"help.png\" onClick=\"FillAndShowHelpDiv(event, '";
$NWE = "')\" WIDTH=20 HEIGHT=20 BORDER=0 ALT=\"HELP\" ALIGN=TOP>"; $NWE = "')\" WIDTH=20 HEIGHT=20 BORDER=0 ALT=\"HELP\" ALIGN=TOP>";
require("screen_colors.php");
?> ?>
<HTML> <HTML>
@@ -287,10 +290,17 @@ $NWE = "')\" WIDTH=20 HEIGHT=20 BORDER=0 ALT=\"HELP\" ALIGN=TOP>";
<?php <?php
echo "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=utf-8\">\n"; echo "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=utf-8\">\n";
echo "<TITLE>"._QXZ("$report_name")."</TITLE></HEAD><BODY BGCOLOR=WHITE marginheight=0 marginwidth=0 leftmargin=0 topmargin=0></TITLE>\n"; echo "<TITLE>"._QXZ("$report_name")."</TITLE></HEAD><BODY BGCOLOR=WHITE marginheight=0 marginwidth=0 leftmargin=0 topmargin=0></TITLE>\n";
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"vicidial_stylesheet.php\">\n";
echo "<script language=\"JavaScript\" src=\"help.js\"></script>\n";
echo "<div id='HelpDisplayDiv' class='help_info' style='display:none;'></div>"; require("chart_button.php");
# echo "<script type=\"text/javascript\" src='chart/Chart.js'></script>\n";
echo "<script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.bundle.js\"></script>";
echo "<script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.bundle.min.js\"></script>";
echo "<script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.js\"></script>";
echo "<script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js\"></script>";
echo "<script type=\"text/javascript\" src='chart/xlsx.full.min.js'></script>\n";
echo "<script src=\"https://cdn.jsdelivr.net/npm/chartjs-plugin-datasource\"></script>\n";
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"vicidial_stylesheet.php\">\n";
echo "</head>"; echo "</head>";
$short_header=1; $short_header=1;
@@ -299,7 +309,7 @@ echo "</head>";
echo "<b>"._QXZ("$report_name")."</b> $NWB#serverperformance$NWE\n"; echo "<b>"._QXZ("$report_name")."</b> $NWB#serverperformance$NWE\n";
echo "<TABLE CELLPADDING=4 CELLSPACING=0><TR><TD>"; echo "<TABLE CELLPADDING=4 CELLSPACING=0><TR><TD colspan='2' align='left'><font class='standard'>";
echo "<FORM ACTION=\"$PHP_SELF\" METHOD=GET>\n"; echo "<FORM ACTION=\"$PHP_SELF\" METHOD=GET>\n";
@@ -316,17 +326,14 @@ while ($servers_to_print > $o)
$o++; $o++;
} }
echo "</SELECT> \n"; echo "</SELECT> \n";
echo "<INPUT TYPE=SUBMIT NAME=SUBMIT VALUE='"._QXZ("SUBMIT")."'\n"; echo "<INPUT TYPE=SUBMIT NAME=SUBMIT VALUE='"._QXZ("SUBMIT")."'>\n";
echo "<FONT FACE=\"ARIAL,HELVETICA\" COLOR=BLACK SIZE=2> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"./admin.php?ADD=999999\">"._QXZ("REPORTS")."</a> </FONT>\n"; echo " &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"./admin.php?ADD=999999\">"._QXZ("REPORTS")."</a>\n";
echo "</FORM>\n\n"; echo "</FORM>\n\n";
echo "<BR></font></TD></TR>";
echo "<PRE><FONT SIZE=2>\n";
if (!$group) if (!$group)
{ {
echo "\n"; echo "<tr><td colspan='2' align='left'><font class='standard'>"._QXZ("PLEASE SELECT A SERVER AND DATE/TIME RANGE ABOVE AND CLICK SUBMIT")."</td></tr>\n";
echo _QXZ("PLEASE SELECT A SERVER AND DATE/TIME RANGE ABOVE AND CLICK SUBMIT")."\n";
} }
else else
@@ -334,11 +341,10 @@ else
$query_date_BEGIN = $begin_query_time; $query_date_BEGIN = $begin_query_time;
$query_date_END = $end_query_time; $query_date_END = $end_query_time;
echo "<tr bgcolor='#".$SSstd_row1_background."'><td align='right' width='280'><font class='standard'>"._QXZ("Server Performance Report").": </font></td><td align='left'><font class='standard_bold'>$NOW_TIME</font></td></tr>\n";
echo _QXZ("Server Performance Report",53)." $NOW_TIME\n"; echo "<tr bgcolor='#".$SSstd_row1_background."'><td align='right' width='280'><font class='standard'>"._QXZ("Time range").": </font></td><td align='left'><font class='standard_bold'>$query_date_BEGIN "._QXZ("to")." $query_date_END</font></td></tr>\n\n";
echo "<tr><td colspan='2' align='center'><font class='standard_bold'>"._QXZ("TOTALS, PEAKS and AVERAGES")."</font></td></tr>\n";
echo _QXZ("Time range").": $query_date_BEGIN "._QXZ("to")." $query_date_END\n\n";
echo "---------- "._QXZ("TOTALS, PEAKS and AVERAGES")."\n";
$stmt="select AVG(sysload),AVG(channels_total),MAX(sysload),MAX(channels_total),MAX(processes) from server_performance where start_time <= '" . mysqli_real_escape_string($link, $query_date_END) . "' and start_time >= '" . mysqli_real_escape_string($link, $query_date_BEGIN) . "' and server_ip='" . mysqli_real_escape_string($link, $group) . "';"; $stmt="select AVG(sysload),AVG(channels_total),MAX(sysload),MAX(channels_total),MAX(processes) from server_performance where start_time <= '" . mysqli_real_escape_string($link, $query_date_END) . "' and start_time >= '" . mysqli_real_escape_string($link, $query_date_BEGIN) . "' and server_ip='" . mysqli_real_escape_string($link, $group) . "';";
$rslt=mysql_to_mysqli($stmt, $link); $rslt=mysql_to_mysqli($stmt, $link);
@@ -362,7 +368,7 @@ else
$AVGcpuSYSTEM = sprintf("%10s", $row[1]); $AVGcpuSYSTEM = sprintf("%10s", $row[1]);
$AVGcpuIDLE = sprintf("%10s", $row[2]); $AVGcpuIDLE = sprintf("%10s", $row[2]);
$stmt="select count(*),SUM(length_in_min) from call_log where extension NOT IN('8365','8366','8367') and start_time <= '" . mysqli_real_escape_string($link, $query_date_END) . "' and start_time >= '" . mysqli_real_escape_string($link, $query_date_BEGIN) . "' and server_ip='" . mysqli_real_escape_string($link, $group) . "';"; $stmt="select count(*),if(SUM(length_in_min) is null, 0, SUM(length_in_min)) from call_log where extension NOT IN('8365','8366','8367') and start_time <= '" . mysqli_real_escape_string($link, $query_date_END) . "' and start_time >= '" . mysqli_real_escape_string($link, $query_date_BEGIN) . "' and server_ip='" . mysqli_real_escape_string($link, $group) . "';";
$rslt=mysql_to_mysqli($stmt, $link); $rslt=mysql_to_mysqli($stmt, $link);
if ($DB) {echo "$stmt\n";} if ($DB) {echo "$stmt\n";}
$row=mysqli_fetch_row($rslt); $row=mysqli_fetch_row($rslt);
@@ -370,38 +376,91 @@ else
$OFFHOOKtime = sprintf("%10s", $row[1]); $OFFHOOKtime = sprintf("%10s", $row[1]);
echo _QXZ("Total Calls in/out on this server:",42)." $TOTALcalls\n"; echo "<tr bgcolor='#".$SSstd_row2_background."'><td align='left' width='280'><font class='standard'>"._QXZ("Total Calls in/out on this server:")."</font></td><td align='left'><font class='standard_bold'>$TOTALcalls</font></td></tr>\n";
echo _QXZ("Total Off-Hook time on this server (min):",42)." $OFFHOOKtime\n"; echo "<tr bgcolor='#".$SSstd_row3_background."'><td align='left' width='280'><font class='standard'>"._QXZ("Total Off-Hook time on this server (min):")."</font></td><td align='left'><font class='standard_bold'>$OFFHOOKtime</font></td></tr>\n";
echo _QXZ("Average/Peak channels in use for server:",42)." $AVGchannels / $HIGHchannels\n"; echo "<tr bgcolor='#".$SSstd_row2_background."'><td align='left' width='280'><font class='standard'>"._QXZ("Average/Peak channels in use for server:")."</font></td><td align='left'><font class='standard_bold'>$AVGchannels / $HIGHchannels</font></td></tr>\n";
echo _QXZ("Average/Peak load for server:",42)." $AVGload / $HIGHload\n"; echo "<tr bgcolor='#".$SSstd_row3_background."'><td align='left' width='280'><font class='standard'>"._QXZ("Average/Peak load for server:")."</font></td><td align='left'><font class='standard_bold'>$AVGload / $HIGHload</font></td></tr>\n";
echo _QXZ("Average USER process cpu percentage:",42)." $AVGcpuUSER %\n"; echo "<tr bgcolor='#".$SSstd_row2_background."'><td align='left' width='280'><font class='standard'>"._QXZ("Average USER process cpu percentage:")."</font></td><td align='left'><font class='standard_bold'>$AVGcpuUSER %</font></td></tr>\n";
echo _QXZ("Average SYSTEM process cpu percentage:",42)." $AVGcpuSYSTEM %\n"; echo "<tr bgcolor='#".$SSstd_row3_background."'><td align='left' width='280'><font class='standard'>"._QXZ("Average SYSTEM process cpu percentage:")."</font></td><td align='left'><font class='standard_bold'>$AVGcpuSYSTEM %</font></td></tr>\n";
echo _QXZ("Average IDLE process cpu percentage:",42)." $AVGcpuIDLE %\n"; echo "<tr bgcolor='#".$SSstd_row2_background."'><td align='left' width='280'><font class='standard'>"._QXZ("Average IDLE process cpu percentage:")."</font></td><td align='left'><font class='standard_bold'>$AVGcpuIDLE %</font></td></tr>\n";
echo "\n"; $stmt="select DATE_FORMAT(start_time,'%Y-%m-%d %H:%i:%s') as timex,sysload,processes,channels_total,live_recordings,cpu_user_percent,cpu_system_percent, start_time from server_performance where server_ip='" . mysqli_real_escape_string($link, $group) . "' and start_time <= '" . mysqli_real_escape_string($link, $query_date_END) . "' and start_time >= '" . mysqli_real_escape_string($link, $query_date_BEGIN) . "' order by timex limit 99999;";
echo "---------- "._QXZ("LINE GRAPH").":\n";
##############################
######### Graph stats
$DAT = '.dat';
$HTM = '.htm';
$PNG = '.png';
$filedate = date("Y-m-d_His");
$DATfile = "$group$query_date$shift$filedate$DAT";
$HTMfile = "$group$query_date$shift$filedate$HTM";
$PNGfile = "$group$query_date$shift$filedate$PNG";
$HTMfp = fopen ("$DOCroot/$HTMfile", "a");
$DATfp = fopen ("$DOCroot/$DATfile", "a");
$stmt="select DATE_FORMAT(start_time,'%Y-%m-%d.%H:%i:%s') as timex,sysload,processes,channels_total,live_recordings,cpu_user_percent,cpu_system_percent from server_performance where server_ip='" . mysqli_real_escape_string($link, $group) . "' and start_time <= '" . mysqli_real_escape_string($link, $query_date_END) . "' and start_time >= '" . mysqli_real_escape_string($link, $query_date_BEGIN) . "' order by timex limit 99999;";
$rslt=mysql_to_mysqli($stmt, $link); $rslt=mysql_to_mysqli($stmt, $link);
if ($DB) {echo "$stmt\n";} if ($DB) {echo "$stmt\n";}
$rows_to_print = mysqli_num_rows($rslt); $rows_to_print = mysqli_num_rows($rslt);
$i=0; $i=0;
$linewidth=1; $radius=1; $mod=1;
switch (true)
{
case ($rows_to_print <= 50):
$linewidth=3;
$radius=3;
case ($rows_to_print <= 100):
$linewidth=2;
$radius=2;
case ($rows_to_print <= 9999):
$mod=1;
break;
case ($rows_to_print <= 19999):
$mod=2;
break;
case ($rows_to_print <= 49999):
$mod=5;
break;
case ($rows_to_print <= 99999):
$mod=10;
break;
}
$labels="\t\tlabels: [";
$datasets="\t\tdatasets: [\n";
$SYSLOAD_dataset.="\t\t\t{\n";
$SYSLOAD_dataset.="\t\t\t\tlabel: \"System load\",\n";
$SYSLOAD_dataset.="\t\t\t\tradius: $radius,\n";
$SYSLOAD_dataset.="\t\t\t\tborderWidth: \"$linewidth\",\n";
$SYSLOAD_dataset.="\t\t\t\tborderColor: \"#FF0000\",\n";
$SYSLOAD_dataset.="\t\t\t\tbackgroundColor: \"#FF0000\",\n";
$SYSLOAD_dataset.="\t\t\t\tfill: false,\n";
$SYSLOAD_dataset.="\t\t\t\tdata: [";
$PROCESSES_dataset.="\t\t\t{\n";
$PROCESSES_dataset.="\t\t\t\tlabel: \"Processes\",\n";
$PROCESSES_dataset.="\t\t\t\tradius: $radius,\n";
$PROCESSES_dataset.="\t\t\t\tborderWidth: \"$linewidth\",\n";
$PROCESSES_dataset.="\t\t\t\tfill: false,\n";
$PROCESSES_dataset.="\t\t\t\tborderColor: \"#0000FF\",\n";
$PROCESSES_dataset.="\t\t\t\tbackgroundColor: \"#0000FF\",\n";
$PROCESSES_dataset.="\t\t\t\tdata: [";
$CHANNELS_dataset.="\t\t\t{\n";
$CHANNELS_dataset.="\t\t\t\tlabel: \"Channels\",\n";
$CHANNELS_dataset.="\t\t\t\tradius: $radius,\n";
$CHANNELS_dataset.="\t\t\t\tborderWidth: \"$linewidth\",\n";
$CHANNELS_dataset.="\t\t\t\tfill: false,\n";
$CHANNELS_dataset.="\t\t\t\tborderColor: \"#FF9900\",\n";
$CHANNELS_dataset.="\t\t\t\tbackgroundColor: \"#FF9900\",\n";
$CHANNELS_dataset.="\t\t\t\tdata: [";
$CPU_USER_dataset.="\t\t\t{\n";
$CPU_USER_dataset.="\t\t\t\tlabel: \"CPU - User\",\n";
$CPU_USER_dataset.="\t\t\t\tradius: $radius,\n";
$CPU_USER_dataset.="\t\t\t\tborderWidth: \"$linewidth\",\n";
$CPU_USER_dataset.="\t\t\t\tfill: false,\n";
$CPU_USER_dataset.="\t\t\t\tborderColor: \"#00FF00\",\n";
$CPU_USER_dataset.="\t\t\t\tbackgroundColor: \"#00FF00\",\n";
$CPU_USER_dataset.="\t\t\t\tdata: [\n";
$CPU_SYS_dataset.="\t\t\t{\n";
$CPU_SYS_dataset.="\t\t\t\tlabel: \"CPU - System\",\n";
$CPU_SYS_dataset.="\t\t\t\tradius: $radius,\n";
$CPU_SYS_dataset.="\t\t\t\tborderWidth: \"$linewidth\",\n";
$CPU_SYS_dataset.="\t\t\t\tfill: false,\n";
$CPU_SYS_dataset.="\t\t\t\tborderColor: \"#FF00FF\",\n";
$CPU_SYS_dataset.="\t\t\t\tbackgroundColor: \"#FF00FF\",\n";
$CPU_SYS_dataset.="\t\t\t\tdata: [";
while ($i < $rows_to_print) while ($i < $rows_to_print)
{ {
$row=mysqli_fetch_row($rslt); $row=mysqli_fetch_row($rslt);
@@ -409,157 +468,60 @@ else
$time_END = $row[0]; $time_END = $row[0];
$row[5] = intval(($row[5] + $row[6]) * $HIGHmulti); $row[5] = intval(($row[5] + $row[6]) * $HIGHmulti);
$row[6] = intval($row[6] * $HIGHmulti); $row[6] = intval($row[6] * $HIGHmulti);
if ($rows_to_print > 9999)
if ($i%$mod==0)
{ {
if ($rows_to_print <= 19999) $labels.="\"$row[0]\",";
{ $SYSLOAD_dataset.="\"$row[1]\",";
if (preg_match("/0$|2$|4$|6$|8$/",$i)) $PROCESSES_dataset.="\"$row[2]\",";
{ $CHANNELS_dataset.="\"$row[3]\",";
fwrite ($DATfp, "$row[5]\t$row[6]\t$row[0]\t$row[1]\t$row[2]\t$row[3]\n"); $CPU_USER_dataset.="\"$row[5]\",";
} $CPU_SYS_dataset.="\"$row[6]\",";
}
if ( ($rows_to_print > 19999) and ($rows_to_print <= 49999) )
{
if (preg_match("/0$|5$/",$i))
{
fwrite ($DATfp, "$row[5]\t$row[6]\t$row[0]\t$row[1]\t$row[2]\t$row[3]\n");
}
}
if ( ($rows_to_print > 49999) and ($rows_to_print <= 99999) )
{
if (preg_match("/0$/",$i))
{
fwrite ($DATfp, "$row[5]\t$row[6]\t$row[0]\t$row[1]\t$row[2]\t$row[3]\n");
}
}
}
else
{
fwrite ($DATfp, "$row[5]\t$row[6]\t$row[0]\t$row[1]\t$row[2]\t$row[3]\n");
} }
$i++; $i++;
} }
fclose($DATfp);
$rows_to_max = ($rows_to_print + 100); $labels=preg_replace('/,$/', "", $labels)."],\n";
$SYSLOAD_dataset=preg_replace('/,$/', "", $SYSLOAD_dataset)."]\n";
$PROCESSES_dataset=preg_replace('/,$/', "", $PROCESSES_dataset)."]\n";
$CHANNELS_dataset=preg_replace('/,$/', "", $CHANNELS_dataset)."]\n";
$CPU_USER_dataset=preg_replace('/,$/', "", $CPU_USER_dataset)."]\n";
$CPU_SYS_dataset=preg_replace('/,$/', "", $CPU_SYS_dataset)."]\n";
$time_scale_abb = '5 '._QXZ("minutes"); $SYSLOAD_dataset.="\t\t\t}\n";
$time_scale_tick = '1 minute'; $PROCESSES_dataset.="\t\t\t}\n";
if ($i > 1000) {$time_scale_abb = '10 '._QXZ("minutes"); $time_scale_tick = '2 '._QXZ("minutes");} $CHANNELS_dataset.="\t\t\t}\n";
if ($i > 1500) {$time_scale_abb = '15 '._QXZ("minutes"); $time_scale_tick = '3 '._QXZ("minutes");} $CPU_USER_dataset.="\t\t\t}\n";
if ($i > 2000) {$time_scale_abb = '20 '._QXZ("minutes"); $time_scale_tick = '4 '._QXZ("minutes");} $CPU_SYS_dataset.="\t\t\t}\n";
if ($i > 3000) {$time_scale_abb = '30 '._QXZ("minutes"); $time_scale_tick = '5 '._QXZ("minutes");} ?>
if ($i > 4000) {$time_scale_abb = '40 '._QXZ("minutes"); $time_scale_tick = '10 '._QXZ("minutes");}
if ($i > 5000) {$time_scale_abb = '60 '._QXZ("minutes"); $time_scale_tick = '15 '._QXZ("minutes");}
if ($i > 6000) {$time_scale_abb = '90 '._QXZ("minutes"); $time_scale_tick = '15 '._QXZ("minutes");}
if ($i > 7000) {$time_scale_abb = '120 '._QXZ("minutes"); $time_scale_tick = '30 '._QXZ("minutes");}
print _QXZ("rows").": $i "._QXZ("tick").": $time_scale_abb "._QXZ("scale").": $time_scale_tick\n"; <tr>
<td colspan='2'><BR>
$HTMcontent = ''; <canvas id="performanceChart"></canvas>
$HTMcontent .= "#proc page\n"; <script language="Javascript">
$HTMcontent .= "#if @DEVICE in png,gif\n"; var pf_ctx = document.getElementById("performanceChart");
$HTMcontent .= " scale: 0.6\n"; var ctx = document.getElementById('performanceChart').getContext('2d');
$HTMcontent .= "\n"; var performance_data = {
$HTMcontent .= "#endif\n"; <?php
$HTMcontent .= "#proc getdata\n"; echo $labels;
$HTMcontent .= "file: $DOCroot/$DATfile\n"; echo "\t\t\tdatasets: [\n";
$HTMcontent .= "fieldnames: userproc sysproc datetime load processes channels\n"; echo $SYSLOAD_dataset.",";
$HTMcontent .= "\n"; echo $PROCESSES_dataset.",";
$HTMcontent .= "#proc areadef\n"; echo $CHANNELS_dataset.",";
$HTMcontent .= "title: Server $group $query_date_BEGIN to $query_date_END\n"; echo $CPU_USER_dataset.",";
$HTMcontent .= "titledetails: size=14 align=C\n"; echo $CPU_SYS_dataset;
$HTMcontent .= "rectangle: 1 1 12 7\n"; echo "\t\t\t]\n";
$HTMcontent .= "xscaletype: datetime yyyy-mm-dd.hh:mm:ss\n"; ?>
$HTMcontent .= "xrange: $time_BEGIN $time_END\n";
$HTMcontent .= "yrange: 0 $HIGHlimit\n";
$HTMcontent .= "\n";
$HTMcontent .= "#proc xaxis\n";
$HTMcontent .= "stubs: inc $time_scale_abb\n";
$HTMcontent .= "minorticinc: $time_scale_tick\n";
$HTMcontent .= "stubformat: hh:mma\n";
$HTMcontent .= "\n";
$HTMcontent .= "#proc yaxis\n";
$HTMcontent .= "stubs: inc 50\n";
$HTMcontent .= "grid: color=yellow\n";
$HTMcontent .= "gridskip: min\n";
$HTMcontent .= "ticincrement: 100 1000\n";
$HTMcontent .= "\n";
$HTMcontent .= "#proc lineplot\n";
$HTMcontent .= "xfield: datetime\n";
$HTMcontent .= "yfield: userproc\n";
$HTMcontent .= "linedetails: color=purple width=.5\n";
$HTMcontent .= "fill: lavender\n";
$HTMcontent .= "legendlabel: user proc%\n";
$HTMcontent .= "maxinpoints: $rows_to_max\n";
$HTMcontent .= "\n";
$HTMcontent .= "#proc lineplot\n";
$HTMcontent .= "xfield: datetime\n";
$HTMcontent .= "yfield: sysproc\n";
$HTMcontent .= "linedetails: color=yelloworange width=.5\n";
$HTMcontent .= "fill: dullyellow\n";
$HTMcontent .= "legendlabel: system proc%\n";
$HTMcontent .= "maxinpoints: $rows_to_max\n";
$HTMcontent .= "\n";
$HTMcontent .= "#proc curvefit\n";
$HTMcontent .= "xfield: datetime\n";
$HTMcontent .= "yfield: load\n";
$HTMcontent .= "linedetails: color=blue width=.5\n";
$HTMcontent .= "legendlabel: load\n";
$HTMcontent .= "maxinpoints: $rows_to_max\n";
$HTMcontent .= "\n";
$HTMcontent .= "#proc curvefit\n";
$HTMcontent .= "xfield: datetime\n";
$HTMcontent .= "yfield: processes\n";
$HTMcontent .= "linedetails: color=red width=.5\n";
$HTMcontent .= "legendlabel: processes\n";
$HTMcontent .= "maxinpoints: $rows_to_max\n";
$HTMcontent .= "\n";
$HTMcontent .= "#proc curvefit\n";
$HTMcontent .= "xfield: datetime\n";
$HTMcontent .= "yfield: channels\n";
$HTMcontent .= "linedetails: color=green width=.5\n";
$HTMcontent .= "legendlabel: channels\n";
$HTMcontent .= "maxinpoints: $rows_to_max\n";
$HTMcontent .= "\n";
$HTMcontent .= "#proc legend\n";
$HTMcontent .= "location: max-1 max\n";
$HTMcontent .= "seglen: 0.2\n";
$HTMcontent .= "\n";
fwrite ($HTMfp, "$HTMcontent");
fclose($HTMfp);
if (file_exists("/usr/local/bin/pl"))
{
passthru("/usr/local/bin/pl -png $DOCroot/$HTMfile -o $DOCroot/$PNGfile");
} }
else
{
if (file_exists("/usr/bin/pl"))
{
passthru("/usr/bin/pl -png $DOCroot/$HTMfile -o $DOCroot/$PNGfile");
}
else
{
if (file_exists("/usr/bin/ploticus"))
{
passthru("/usr/bin/ploticus -png $DOCroot/$HTMfile -o $DOCroot/$PNGfile");
}
else
{
echo "ERROR: ploticus not found\n";
}
}
}
sleep(1);
echo "</PRE>"; var performance_chart = new Chart(pf_ctx, {type: 'line', options: { scales: { xAxes: [{ ticks: {maxRotation: 82, minRotation: 45}}] } }, data: performance_data});
echo "\n";
echo "<IMG SRC=\"/$PLOTroot/$PNGfile\">\n";
#echo "<!-- /usr/local/bin/pl -png $DOCroot/$HTMfile -o $DOCroot/$PNGfile -->";
} </script>
</td>
<tr><td colspan='2'>
<?php
if ($db_source == 'S') if ($db_source == 'S')
{ {
@@ -576,6 +538,8 @@ $runS = ($endMSary[0] - $startMSary[0]);
$runM = ($endMSary[1] - $startMSary[1]); $runM = ($endMSary[1] - $startMSary[1]);
$TOTALrun = ($runS + $runM); $TOTALrun = ($runS + $runM);
echo "<BR><BR><font class='standard'>Total run time: </font><font class='standard_bold'>$TOTALrun seconds</font>";
$stmt="UPDATE vicidial_report_log set run_time='$TOTALrun' where report_log_id='$report_log_id';"; $stmt="UPDATE vicidial_report_log set run_time='$TOTALrun' where report_log_id='$report_log_id';";
if ($DB) {echo "|$stmt|\n";} if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_to_mysqli($stmt, $link); $rslt=mysql_to_mysqli($stmt, $link);
@@ -583,6 +547,9 @@ $rslt=mysql_to_mysqli($stmt, $link);
?> ?>
</TD></TR></TABLE> </TD></TR></TABLE>
<BR> <?php
<?php echo "$db_source"; ?> echo "<BR><BR><font class='standard'>$db_source</font>";
}
?>
</BODY></HTML> </BODY></HTML>