diff --git a/agc_2-X/branches/agc_2.0.4/extras/GMT_USA_zip.txt b/agc_2-X/branches/agc_2.0.4/extras/GMT_USA_zip.txt index cd9c54c7..9c7bb879 100644 --- a/agc_2-X/branches/agc_2.0.4/extras/GMT_USA_zip.txt +++ b/agc_2-X/branches/agc_2.0.4/extras/GMT_USA_zip.txt @@ -498,6 +498,7 @@ 01821 MA -5.0 Y 01822 MA -5.0 Y 01824 MA -5.0 Y +01825 MA -5.0 Y 01826 MA -5.0 Y 01827 MA -5.0 Y 01830 MA -5.0 Y @@ -3335,6 +3336,7 @@ 09178 AE 1.0 Y 09179 AE 1.0 Y 09180 AE 1.0 Y +09181 AE 1.0 Y 09186 AE 1.0 Y 09201 AE 1.0 Y 09203 AE 1.0 Y @@ -3385,6 +3387,7 @@ 09299 AE 1.0 Y 09301 AE 1.0 Y 09302 AE 1.0 Y +09303 AE 1.0 Y 09304 AE 1.0 Y 09305 AE 1.0 Y 09306 AE 1.0 Y @@ -3503,6 +3506,7 @@ 09514 AE 1.0 Y 09516 AE 1.0 Y 09517 AE 1.0 Y +09518 AE 1.0 Y 09520 AE 1.0 Y 09522 AE 1.0 Y 09523 AE 1.0 Y @@ -4411,6 +4415,7 @@ 11802 NY -5.0 Y 11803 NY -5.0 Y 11804 NY -5.0 Y +11805 NY -5.0 Y 11815 NY -5.0 Y 11819 NY -5.0 Y 11853 NY -5.0 Y @@ -7431,6 +7436,7 @@ 18001 PA -5.0 Y 18002 PA -5.0 Y 18003 PA -5.0 Y +18005 PA -5.0 Y 18010 PA -5.0 Y 18011 PA -5.0 Y 18012 PA -5.0 Y @@ -7718,6 +7724,7 @@ 18765 PA -5.0 Y 18766 PA -5.0 Y 18767 PA -5.0 Y +18768 PA -5.0 Y 18769 PA -5.0 Y 18773 PA -5.0 Y 18801 PA -5.0 Y @@ -15067,6 +15074,7 @@ 33991 FL -5.0 Y 33993 FL -5.0 Y 33994 FL -5.0 Y +34000 AA -4.0 Y 34001 AA -4.0 Y 34002 AA -4.0 Y 34004 AA -4.0 Y @@ -15077,6 +15085,7 @@ 34010 AA -4.0 Y 34011 AA -4.0 Y 34012 AA -4.0 Y +34013 AA -4.0 Y 34020 AA -4.0 Y 34021 AA -4.0 Y 34022 AA -4.0 Y @@ -15104,12 +15113,15 @@ 34055 AA -4.0 Y 34058 AA -4.0 Y 34060 AA -4.0 Y +34061 AA -4.0 Y 34066 AA -4.0 Y 34067 AA -4.0 Y 34068 AA -4.0 Y 34069 AA -4.0 Y +34070 AA -4.0 Y 34071 AA -4.0 Y 34072 AA -4.0 Y +34073 AA -4.0 Y 34078 AA -4.0 Y 34080 AA -4.0 Y 34081 AA -4.0 Y @@ -18682,6 +18694,7 @@ 43162 OH -5.0 Y 43163 OH -5.0 Y 43164 OH -5.0 Y +43165 OH -5.0 Y 43194 OH -5.0 Y 43195 OH -5.0 Y 43196 OH -5.0 Y @@ -18780,6 +18793,7 @@ 43360 OH -5.0 Y 43402 OH -5.0 Y 43403 OH -5.0 Y +43405 OH -5.0 Y 43406 OH -5.0 Y 43407 OH -5.0 Y 43408 OH -5.0 Y @@ -20165,6 +20179,7 @@ 46241 IN -5.0 Y 46242 IN -5.0 Y 46244 IN -5.0 Y +46245 IN -5.0 Y 46247 IN -5.0 Y 46249 IN -5.0 Y 46250 IN -5.0 Y @@ -21047,6 +21062,7 @@ 48050 MI -5.0 Y 48051 MI -5.0 Y 48054 MI -5.0 Y +48055 MI -5.0 Y 48059 MI -5.0 Y 48060 MI -5.0 Y 48061 MI -5.0 Y @@ -22061,29 +22077,29 @@ 49796 MI -5.0 Y 49797 MI -5.0 Y 49799 MI -5.0 Y -49801 MI -6.0 Y -49802 MI -6.0 Y +49801 MI -5.0 Y +49802 MI -5.0 Y 49805 MI -5.0 Y 49806 MI -5.0 Y 49807 MI -5.0 Y 49808 MI -5.0 Y -49812 MI -6.0 Y +49812 MI -5.0 Y 49814 MI -5.0 Y -49815 MI -6.0 Y +49815 MI -5.0 Y 49816 MI -5.0 Y 49817 MI -5.0 Y 49818 MI -5.0 Y 49819 MI -5.0 Y 49820 MI -5.0 Y -49821 MI -6.0 Y +49821 MI -5.0 Y 49822 MI -5.0 Y 49825 MI -5.0 Y 49826 MI -5.0 Y 49827 MI -5.0 Y 49829 MI -5.0 Y -49831 MI -6.0 Y +49831 MI -5.0 Y 49833 MI -5.0 Y -49834 MI -6.0 Y +49834 MI -5.0 Y 49835 MI -5.0 Y 49836 MI -5.0 Y 49837 MI -5.0 Y @@ -22091,89 +22107,89 @@ 49839 MI -5.0 Y 49840 MI -5.0 Y 49841 MI -5.0 Y -49845 MI -6.0 Y -49847 MI -6.0 Y -49848 MI -6.0 Y +49845 MI -5.0 Y +49847 MI -5.0 Y +49848 MI -5.0 Y 49849 MI -5.0 Y -49852 MI -6.0 Y +49852 MI -5.0 Y 49853 MI -5.0 Y 49854 MI -5.0 Y 49855 MI -5.0 Y -49858 MI -6.0 Y +49858 MI -5.0 Y 49861 MI -5.0 Y 49862 MI -5.0 Y -49863 MI -6.0 Y +49863 MI -5.0 Y 49864 MI -5.0 Y 49865 MI -5.0 Y 49866 MI -5.0 Y 49868 MI -5.0 Y -49870 MI -6.0 Y +49870 MI -5.0 Y 49871 MI -5.0 Y 49872 MI -5.0 Y -49873 MI -6.0 Y -49874 MI -6.0 Y -49876 MI -6.0 Y -49877 MI -6.0 Y +49873 MI -5.0 Y +49874 MI -5.0 Y +49876 MI -5.0 Y +49877 MI -5.0 Y 49878 MI -5.0 Y 49879 MI -5.0 Y 49880 MI -5.0 Y -49881 MI -6.0 Y +49881 MI -5.0 Y 49883 MI -5.0 Y 49884 MI -5.0 Y 49885 MI -5.0 Y -49886 MI -6.0 Y -49887 MI -6.0 Y +49886 MI -5.0 Y +49887 MI -5.0 Y 49891 MI -5.0 Y -49892 MI -6.0 Y -49893 MI -6.0 Y +49892 MI -5.0 Y +49893 MI -5.0 Y 49894 MI -5.0 Y 49895 MI -5.0 Y -49896 MI -6.0 Y +49896 MI -5.0 Y 49901 MI -5.0 Y -49902 MI -6.0 Y -49903 MI -6.0 Y +49902 MI -5.0 Y +49903 MI -5.0 Y 49905 MI -5.0 Y 49908 MI -5.0 Y 49910 MI -5.0 Y -49911 MI -6.0 Y +49911 MI -5.0 Y 49912 MI -5.0 Y 49913 MI -5.0 Y -49915 MI -6.0 Y +49915 MI -5.0 Y 49916 MI -5.0 Y 49917 MI -5.0 Y 49918 MI -5.0 Y 49919 MI -5.0 Y -49920 MI -6.0 Y +49920 MI -5.0 Y 49921 MI -5.0 Y 49922 MI -5.0 Y 49925 MI -5.0 Y -49927 MI -6.0 Y +49927 MI -5.0 Y 49929 MI -5.0 Y 49930 MI -5.0 Y 49931 MI -5.0 Y 49934 MI -5.0 Y -49935 MI -6.0 Y -49938 MI -6.0 Y +49935 MI -5.0 Y +49938 MI -5.0 Y 49942 MI -5.0 Y 49945 MI -5.0 Y 49946 MI -5.0 Y -49947 MI -6.0 Y +49947 MI -5.0 Y 49948 MI -5.0 Y 49950 MI -5.0 Y 49952 MI -5.0 Y 49953 MI -5.0 Y 49955 MI -5.0 Y 49958 MI -5.0 Y -49959 MI -6.0 Y +49959 MI -5.0 Y 49960 MI -5.0 Y 49961 MI -5.0 Y 49962 MI -5.0 Y 49963 MI -5.0 Y -49964 MI -6.0 Y +49964 MI -5.0 Y 49965 MI -5.0 Y 49967 MI -5.0 Y -49968 MI -6.0 Y -49969 MI -6.0 Y +49968 MI -5.0 Y +49969 MI -5.0 Y 49970 MI -5.0 Y 49971 MI -5.0 Y 50001 IA -6.0 Y @@ -25853,7 +25869,7 @@ 58521 ND -6.0 Y 58523 ND -6.0 Y 58524 ND -6.0 Y -58528 ND -6.0 Y +58528 ND -7.0 Y 58529 ND -7.0 Y 58530 ND -6.0 Y 58531 ND -6.0 Y @@ -25878,7 +25894,7 @@ 58564 ND -7.0 Y 58565 ND -6.0 Y 58566 ND -6.0 Y -58568 ND -6.0 Y +58568 ND -7.0 Y 58569 ND -7.0 Y 58570 ND -6.0 Y 58571 ND -6.0 Y @@ -32147,6 +32163,7 @@ 73170 OK -6.0 Y 73172 OK -6.0 Y 73173 OK -6.0 Y +73175 OK -6.0 Y 73178 OK -6.0 Y 73179 OK -6.0 Y 73184 OK -6.0 Y @@ -36367,7 +36384,7 @@ 83544 ID -8.0 Y 83545 ID -8.0 Y 83546 ID -8.0 Y -83547 ID -7.0 Y +83547 ID -8.0 Y 83548 ID -8.0 Y 83549 ID -8.0 Y 83552 ID -8.0 Y @@ -36574,6 +36591,7 @@ 84045 UT -7.0 Y 84046 UT -7.0 Y 84047 UT -7.0 Y +84048 UT -7.0 Y 84049 UT -7.0 Y 84050 UT -7.0 Y 84051 UT -7.0 Y @@ -38206,7 +38224,7 @@ 89833 NV -8.0 Y 89834 NV -8.0 Y 89835 NV -8.0 Y -89883 NV -7.0 Y +89883 NV -8.0 Y 90001 CA -8.0 Y 90002 CA -8.0 Y 90003 CA -8.0 Y @@ -38291,6 +38309,7 @@ 90082 CA -8.0 Y 90083 CA -8.0 Y 90084 CA -8.0 Y +90085 CA -8.0 Y 90086 CA -8.0 Y 90087 CA -8.0 Y 90088 CA -8.0 Y @@ -40142,6 +40161,7 @@ 95021 CA -8.0 Y 95023 CA -8.0 Y 95024 CA -8.0 Y +95025 CA -8.0 Y 95026 CA -8.0 Y 95030 CA -8.0 Y 95031 CA -8.0 Y diff --git a/agc_2-X/branches/agc_2.0.4/extras/phone_codes_GMT.txt b/agc_2-X/branches/agc_2.0.4/extras/phone_codes_GMT.txt index ec407117..1de81dd0 100644 --- a/agc_2-X/branches/agc_2.0.4/extras/phone_codes_GMT.txt +++ b/agc_2-X/branches/agc_2.0.4/extras/phone_codes_GMT.txt @@ -51,6 +51,7 @@ code country areacode state GMT DST DST_RANGE GEOGRAPHIC DESCRIPTION TZ_CODE PHP 1 USA 269 MI -5 Y SSM-FSN Michigan EST America/New_York 1 USA 270 KY -6 Y SSM-FSN Kentucky CST America/Chicago 1 USA 272 PA -5 Y SSM-FSN Pennsylvania EST America/New_York +1 CAN 273 QC -5 Y SSM-FSN Quebec EST America/Toronto 1 USA 274 WI -6 Y SSM-FSN Wisconsin CST America/Chicago 1 USA 276 VA -5 Y SSM-FSN Virginia EST America/New_York 1 USA 278 MI -5 Y SSM-FSN Michigan EST America/New_York @@ -209,6 +210,7 @@ code country areacode state GMT DST DST_RANGE GEOGRAPHIC DESCRIPTION TZ_CODE PHP 1 USA 562 CA -8 Y SSM-FSN California PST America/Los_Angeles 1 USA 563 IA -6 Y SSM-FSN Iowa CST America/Chicago 1 USA 564 WA -8 Y SSM-FSN Washington PST America/Los_Angeles +1 USA 565 GA -5 Y SSM-FSN Georgia EST America/New_York 1 USA 567 OH -5 Y SSM-FSN Ohio EST America/New_York 1 USA 570 PA -5 Y SSM-FSN Pennsylvania EST America/New_York 1 USA 571 VA -5 Y SSM-FSN Virginia EST America/New_York @@ -329,6 +331,7 @@ code country areacode state GMT DST DST_RANGE GEOGRAPHIC DESCRIPTION TZ_CODE PHP 1 USA 757 VA -5 Y SSM-FSN Virginia EST America/New_York 1 LCA 758 -4 N St. Lucia AST America/St_Lucia 1 USA 760 CA -8 Y SSM-FSN California PST America/Los_Angeles +1 USA 761 KY -5 Y SSM-FSN Kentucky EST America/New_York 1 USA 762 GA -5 Y SSM-FSN Georgia EST America/New_York 1 USA 763 MN -6 Y SSM-FSN Minnesota CST America/Chicago 1 USA 764 CA -8 Y SSM-FSN California PST America/Los_Angeles @@ -388,6 +391,7 @@ code country areacode state GMT DST DST_RANGE GEOGRAPHIC DESCRIPTION TZ_CODE PHP 1 USA 848 NJ -5 Y SSM-FSN New Jersey EST America/New_York 1 DOM 849 -4 N Dominican Republic AST America/Santo_Domingo 1 USA 850 FL -6 Y SSM-FSN Florida CST America/Chicago +1 CAN 851 NS -4 Y SSM-FSN Nova Scotia AST America/Moncton 1 USA 854 SC -5 Y SSM-FSN South Carolina EST America/New_York 1 USA 856 NJ -5 Y SSM-FSN New Jersey EST America/New_York 1 USA 857 MA -5 Y SSM-FSN Massachusetts EST America/New_York diff --git a/agc_2-X/trunk/agi/agi-VDAD_ALL_inbound.agi b/agc_2-X/trunk/agi/agi-VDAD_ALL_inbound.agi index d07a2eb2..8baef744 100644 --- a/agc_2-X/trunk/agi/agi-VDAD_ALL_inbound.agi +++ b/agc_2-X/trunk/agi/agi-VDAD_ALL_inbound.agi @@ -267,6 +267,7 @@ # 250325-1724 - Fix for possible daily_limit issue # 250825-1824 - Added stereo_recording code # 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'; @@ -3404,21 +3405,7 @@ while ( ($drop_timer <= $DROP_TIME) && ($wait_in_queue > 0) && ($MCdrop_override $sthA->finish(); # get date/time - ($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"; - + &get_date_time; $campaign_rec_filename =~ s/CAMPAIGN/$log_campaign/gi; $campaign_rec_filename =~ s/INGROUP/$channel_group/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 ### 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/INGROUP/$channel_group/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(); # get date/time - ($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"; - + &get_date_time; $campaign_rec_filename =~ s/CAMPAIGN/$log_campaign/gi; $campaign_rec_filename =~ s/INGROUP/$channel_group/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 ### 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/INGROUP/$channel_group/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 { # $DS='--'; diff --git a/agc_2-X/trunk/agi/agi-VDAD_ALL_outbound.agi b/agc_2-X/trunk/agi/agi-VDAD_ALL_outbound.agi index b796786f..ec87a376 100644 --- a/agc_2-X/trunk/agi/agi-VDAD_ALL_outbound.agi +++ b/agc_2-X/trunk/agi/agi-VDAD_ALL_outbound.agi @@ -134,6 +134,7 @@ # 241020-1928 - Added khomp campaign settings options # 250827-1556 - Added stereo_recording code # 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'; @@ -1178,21 +1179,7 @@ if ($VDACaffected_rows > 0) $sthA->finish(); # get date/time - ($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"; - + &get_date_time; $campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $campaign_rec_filename =~ s/INGROUP/$VDADcampaign/gi; $campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/gi; @@ -3197,21 +3184,7 @@ while ($drop_timer <= $DROP_TIME) $sthA->finish(); # get date/time - ($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"; - + &get_date_time; $campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/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 ### 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/INGROUP/$VDADcampaign/gi; $stereo_rec_filename =~ s/CUSTPHONE/$VDADphone/gi; @@ -3637,21 +3611,7 @@ while ($drop_timer <= $DROP_TIME) $sthA->finish(); # get date/time - ($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"; - + &get_date_time; $campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/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 ### 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/INGROUP/$VDADcampaign/gi; $stereo_rec_filename =~ s/CUSTPHONE/$VDADphone/gi; @@ -4619,21 +4580,7 @@ while ($drop_timer <= $DROP_TIME) $sthA->finish(); # get date/time - ($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"; - + &get_date_time; $campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/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 ### 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/INGROUP/$VDADcampaign/gi; $stereo_rec_filename =~ s/CUSTPHONE/$VDADphone/gi; @@ -5058,21 +5006,7 @@ while ($drop_timer <= $DROP_TIME) $sthA->finish(); # get date/time - ($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"; - + &get_date_time; $campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi; $campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/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 ### 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/INGROUP/$VDADcampaign/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 { # $DS='--'; diff --git a/agc_2-X/trunk/docs/STEREO_CALL_RECORDINGS.txt b/agc_2-X/trunk/docs/STEREO_CALL_RECORDINGS.txt index 15f84055..c0ef3ce9 100644 --- a/agc_2-X/trunk/docs/STEREO_CALL_RECORDINGS.txt +++ b/agc_2-X/trunk/docs/STEREO_CALL_RECORDINGS.txt @@ -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. diff --git a/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql b/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql index 22bfb302..b7ad14d5 100644 --- a/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql +++ b/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql @@ -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', auto_hopper_multi VARCHAR(6) default '1', 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', manual_dial_call_time_check ENUM('DISABLED','ENABLED') default 'DISABLED', display_leads_count ENUM('Y','N') default 'N', diff --git a/agc_2-X/trunk/install.pl b/agc_2-X/trunk/install.pl index d4a67b2f..b9a65e37 100644 --- a/agc_2-X/trunk/install.pl +++ b/agc_2-X/trunk/install.pl @@ -97,7 +97,7 @@ $VARCS_port = '3306'; # default keepalive processes: $VARactive_keepalives = '1234568'; # default Asterisk version: -$VARasterisk_version = '16.X'; +$VARasterisk_version = '18.X'; # default recording FTP archive variables: $VARFTP_host = '10.0.0.4'; $VARFTP_user = 'cron'; @@ -2099,6 +2099,7 @@ else print " 11.X\n"; print " 13.X\n"; print " 16.X\n"; + print " 18.X\n"; print "Enter asterisk version or press enter for default: [$VARasterisk_version] "; $PROMPTasterisk_version = ; chomp($PROMPTasterisk_version); diff --git a/agc_2-X/trunk/www/vicidial/AST_server_performance.php b/agc_2-X/trunk/www/vicidial/AST_server_performance.php index 6c5a26ab..5dceb93c 100644 --- a/agc_2-X/trunk/www/vicidial/AST_server_performance.php +++ b/agc_2-X/trunk/www/vicidial/AST_server_performance.php @@ -1,588 +1,555 @@ - LICENSE: AGPLv2 -# -# CHANGES -# -# 60619-1732 - Added variable filtering to eliminate SQL injection attack threat -# - Added required user/pass to gain access to this page -# 70417-1106 - Changed time frame to be definable per time range on a single day -# - Fixed vertical scaling issues -# 80118-1508 - Fixed horizontal scale marking issues -# 90310-2151 - Added admin header -# 90508-0644 - Changed to PHP long tags -# 100214-1421 - Sort menu alphabetically -# 100712-1324 - Added system setting slave server option -# 100802-2347 - Added User Group Allowed Reports option validation -# 100914-1326 - Added lookup for user_level 7 users to set to reports only which will remove other admin links -# 130414-0157 - Added report logging -# 130610-0959 - Finalized changing of all ereg instances to preg -# 130621-0726 - Added filtering of input to prevent SQL injection attacks and new user auth -# 130901-2012 - Changed to mysqli PHP functions -# 130926-0658 - Added check for several different ploticus bin paths -# 140108-0716 - Added webserver and hostname to report logging -# 140328-0005 - Converted division calculations to use MathZDC function -# 141114-0730 - Finalized adding QXZ translation to all admin files -# 141230-1440 - Added code for on-the-fly language translations display -# 170409-1550 - Added IP List validation code -# 170422-0750 - Added input variable filtering -# 180223-1541 - Fixed blank default date/time ranges -# 191013-0842 - Fixes for PHP7 -# 220302-0841 - Added allow_web_debug system setting -# - -$startMS = microtime(); - -require("dbconnect_mysqli.php"); -require("functions.php"); - -$PHP_AUTH_USER=$_SERVER['PHP_AUTH_USER']; -$PHP_AUTH_PW=$_SERVER['PHP_AUTH_PW']; -$PHP_SELF=$_SERVER['PHP_SELF']; -$PHP_SELF = preg_replace('/\.php.*/i','.php',$PHP_SELF); -if (isset($_GET["begin_query_time"])) {$begin_query_time=$_GET["begin_query_time"];} - elseif (isset($_POST["begin_query_time"])) {$begin_query_time=$_POST["begin_query_time"];} -if (isset($_GET["end_query_time"])) {$end_query_time=$_GET["end_query_time"];} - elseif (isset($_POST["end_query_time"])) {$end_query_time=$_POST["end_query_time"];} -if (isset($_GET["group"])) {$group=$_GET["group"];} - elseif (isset($_POST["group"])) {$group=$_POST["group"];} -if (isset($_GET["DB"])) {$DB=$_GET["DB"];} - elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];} -if (isset($_GET["submit"])) {$submit=$_GET["submit"];} - elseif (isset($_POST["submit"])) {$submit=$_POST["submit"];} -if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];} - elseif (isset($_POST["SUBMIT"])) {$SUBMIT=$_POST["SUBMIT"];} - -$DB=preg_replace("/[^0-9a-zA-Z]/","",$DB); - -$NOW_DATE = date("Y-m-d"); -$NOW_TIME = date("Y-m-d H:i:s"); -$STARTtime = date("U"); -if (strlen($begin_query_time) < 10) {$begin_query_time = "$NOW_DATE 09:00:00";} -if (strlen($end_query_time) < 10) {$end_query_time = "$NOW_DATE 15:30:00";} -if (!isset($group)) {$group = '';} - -$report_name = 'Server Performance Report'; -$db_source = 'M'; - -############################################# -##### START SYSTEM_SETTINGS LOOKUP ##### -$stmt = "SELECT use_non_latin,outbound_autodial_active,slave_db_server,reports_use_slave_db,enable_languages,language_method,allow_web_debug FROM system_settings;"; -$rslt=mysql_to_mysqli($stmt, $link); -#if ($DB) {echo "$stmt\n";} -$qm_conf_ct = mysqli_num_rows($rslt); -if ($qm_conf_ct > 0) - { - $row=mysqli_fetch_row($rslt); - $non_latin = $row[0]; - $outbound_autodial_active = $row[1]; - $slave_db_server = $row[2]; - $reports_use_slave_db = $row[3]; - $SSenable_languages = $row[4]; - $SSlanguage_method = $row[5]; - $SSallow_web_debug = $row[6]; - } -if ($SSallow_web_debug < 1) {$DB=0;} -##### END SETTINGS LOOKUP ##### -########################################### - -$begin_query_time = preg_replace('/[^- \:_0-9a-zA-Z]/', '', $begin_query_time); -$end_query_time = preg_replace('/[^- \:_0-9a-zA-Z]/', '', $end_query_time); -$group = preg_replace('/[^- \.\:\_0-9a-zA-Z]/', '', $group); -$submit = preg_replace('/[^-_0-9a-zA-Z]/', '', $submit); -$SUBMIT = preg_replace('/[^-_0-9a-zA-Z]/', '', $SUBMIT); - -if ($non_latin < 1) - { - $PHP_AUTH_USER = preg_replace('/[^-_0-9a-zA-Z]/', '', $PHP_AUTH_USER); - $PHP_AUTH_PW = preg_replace('/[^-_0-9a-zA-Z]/', '', $PHP_AUTH_PW); - } -else - { - $PHP_AUTH_USER = preg_replace('/[^-_0-9\p{L}]/u', '', $PHP_AUTH_USER); - $PHP_AUTH_PW = preg_replace('/[^-_0-9\p{L}]/u', '', $PHP_AUTH_PW); - } - -$stmt="SELECT selected_language from vicidial_users where user='$PHP_AUTH_USER';"; -if ($DB) {echo "|$stmt|\n";} -$rslt=mysql_to_mysqli($stmt, $link); -$sl_ct = mysqli_num_rows($rslt); -if ($sl_ct > 0) - { - $row=mysqli_fetch_row($rslt); - $VUselected_language = $row[0]; - } - -$auth=0; -$reports_auth=0; -$admin_auth=0; -$auth_message = user_authorization($PHP_AUTH_USER,$PHP_AUTH_PW,'REPORTS',1,0); -if ($auth_message == 'GOOD') - {$auth=1;} - -if ($auth > 0) - { - $stmt="SELECT count(*) from vicidial_users where user='$PHP_AUTH_USER' and user_level > 7 and view_reports='1';"; - if ($DB) {echo "|$stmt|\n";} - $rslt=mysql_to_mysqli($stmt, $link); - $row=mysqli_fetch_row($rslt); - $admin_auth=$row[0]; - - $stmt="SELECT count(*) from vicidial_users where user='$PHP_AUTH_USER' and user_level > 6 and view_reports='1';"; - if ($DB) {echo "|$stmt|\n";} - $rslt=mysql_to_mysqli($stmt, $link); - $row=mysqli_fetch_row($rslt); - $reports_auth=$row[0]; - - if ($reports_auth < 1) - { - $VDdisplayMESSAGE = _QXZ("You are not allowed to view reports"); - Header ("Content-type: text/html; charset=utf-8"); - echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; - exit; - } - if ( ($reports_auth > 0) and ($admin_auth < 1) ) - { - $ADD=999999; - $reports_only_user=1; - } - } -else - { - $VDdisplayMESSAGE = _QXZ("Login incorrect, please try again"); - if ($auth_message == 'LOCK') - { - $VDdisplayMESSAGE = _QXZ("Too many login attempts, try again in 15 minutes"); - Header ("Content-type: text/html; charset=utf-8"); - echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; - exit; - } - if ($auth_message == 'IPBLOCK') - { - $VDdisplayMESSAGE = _QXZ("Your IP Address is not allowed") . ": $ip"; - Header ("Content-type: text/html; charset=utf-8"); - echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; - exit; - } - Header("WWW-Authenticate: Basic realm=\"CONTACT-CENTER-ADMIN\""); - Header("HTTP/1.0 401 Unauthorized"); - echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$PHP_AUTH_PW|$auth_message|\n"; - exit; - } - -##### BEGIN log visit to the vicidial_report_log table ##### -$LOGip = getenv("REMOTE_ADDR"); -$LOGbrowser = getenv("HTTP_USER_AGENT"); -$LOGscript_name = getenv("SCRIPT_NAME"); -$LOGserver_name = getenv("SERVER_NAME"); -$LOGserver_port = getenv("SERVER_PORT"); -$LOGrequest_uri = getenv("REQUEST_URI"); -$LOGhttp_referer = getenv("HTTP_REFERER"); -$LOGbrowser=preg_replace("/<|>|\'|\"|\\\\/","",$LOGbrowser); -$LOGrequest_uri=preg_replace("/<|>|\'|\"|\\\\/","",$LOGrequest_uri); -$LOGhttp_referer=preg_replace("/<|>|\'|\"|\\\\/","",$LOGhttp_referer); -if (preg_match("/443/i",$LOGserver_port)) - {$HTTPprotocol = 'https://';} -else - {$HTTPprotocol = 'http://';} -if (($LOGserver_port == '80') or ($LOGserver_port == '443') ) - {$LOGserver_port='';} -else - {$LOGserver_port = ":$LOGserver_port";} -$LOGfull_url = "$HTTPprotocol$LOGserver_name$LOGserver_port$LOGrequest_uri"; - -$LOGhostname = php_uname('n'); -if (strlen($LOGhostname)<1) {$LOGhostname='X';} -if (strlen($LOGserver_name)<1) {$LOGserver_name='X';} - -$stmt="SELECT webserver_id FROM vicidial_webservers where webserver='$LOGserver_name' and hostname='$LOGhostname' LIMIT 1;"; -$rslt=mysql_to_mysqli($stmt, $link); -if ($DB) {echo "$stmt\n";} -$webserver_id_ct = mysqli_num_rows($rslt); -if ($webserver_id_ct > 0) - { - $row=mysqli_fetch_row($rslt); - $webserver_id = $row[0]; - } -else - { - ##### insert webserver entry - $stmt="INSERT INTO vicidial_webservers (webserver,hostname) values('$LOGserver_name','$LOGhostname');"; - if ($DB) {echo "$stmt\n";} - $rslt=mysql_to_mysqli($stmt, $link); - $affected_rows = mysqli_affected_rows($link); - $webserver_id = mysqli_insert_id($link); - } - -$stmt="INSERT INTO vicidial_report_log set event_date=NOW(), user='$PHP_AUTH_USER', ip_address='$LOGip', report_name='$report_name', browser='$LOGbrowser', referer='$LOGhttp_referer', notes='$LOGserver_name:$LOGserver_port $LOGscript_name |$group, $query_date, $end_date, $shift, $file_download, $report_display_type|', url='$LOGfull_url', webserver='$webserver_id';"; -if ($DB) {echo "|$stmt|\n";} -$rslt=mysql_to_mysqli($stmt, $link); -$report_log_id = mysqli_insert_id($link); -##### END log visit to the vicidial_report_log table ##### - -if ( (strlen($slave_db_server)>5) and (preg_match("/$report_name/",$reports_use_slave_db)) ) - { - mysqli_close($link); - $use_slave_server=1; - $db_source = 'S'; - require("dbconnect_mysqli.php"); - echo "\n"; - } - -$stmt="SELECT user_group from vicidial_users where user='$PHP_AUTH_USER';"; -if ($DB) {echo "|$stmt|\n";} -$rslt=mysql_to_mysqli($stmt, $link); -$row=mysqli_fetch_row($rslt); -$LOGuser_group = $row[0]; - -$stmt="SELECT allowed_campaigns,allowed_reports from vicidial_user_groups where user_group='$LOGuser_group';"; -if ($DB) {echo "|$stmt|\n";} -$rslt=mysql_to_mysqli($stmt, $link); -$row=mysqli_fetch_row($rslt); -$LOGallowed_campaigns = $row[0]; -$LOGallowed_reports = $row[1]; - -if ( (!preg_match("/$report_name/",$LOGallowed_reports)) and (!preg_match("/ALL REPORTS/",$LOGallowed_reports)) ) - { - Header("WWW-Authenticate: Basic realm=\"CONTACT-CENTER-ADMIN\""); - Header("HTTP/1.0 401 Unauthorized"); - echo _QXZ("You are not allowed to view this report").": |$PHP_AUTH_USER|$report_name|\n"; - exit; - } - -# path from root to where ploticus files will be stored -$PLOTroot = "vicidial/ploticus"; -$DOCroot = "$WeBServeRRooT/$PLOTroot/"; - -$stmt="select server_ip from servers order by server_ip;"; -$rslt=mysql_to_mysqli($stmt, $link); -if ($DB) {echo "$stmt\n";} -$servers_to_print = mysqli_num_rows($rslt); -$i=0; -$groups=array(); -while ($i < $servers_to_print) - { - $row=mysqli_fetch_row($rslt); - $groups[$i] =$row[0]; - $i++; - } - -$NWB = "\"HELP\""; - -?> - - - - - -\n"; -echo ""._QXZ("$report_name")."\n"; -echo "\n"; -echo "\n"; - -echo ""; -echo ""; - - $short_header=1; - - require("admin_header.php"); - -echo ""._QXZ("$report_name")." $NWB#serverperformance$NWE\n"; - -echo "
"; - - -echo "
\n"; -echo _QXZ("Date/Time Range").": \n"; -echo _QXZ("to")." \n"; -echo _QXZ("Server").": \n"; -echo "             "._QXZ("REPORTS")." \n"; -echo "
\n\n"; - -echo "
\n";
-
-
-if (!$group)
-	{
-	echo "\n";
-	echo _QXZ("PLEASE SELECT A SERVER AND DATE/TIME RANGE ABOVE AND CLICK SUBMIT")."\n";
-	}
-
-else
-	{
-	$query_date_BEGIN = $begin_query_time;   
-	$query_date_END = $end_query_time;
-
-
-	echo _QXZ("Server Performance Report",53)." $NOW_TIME\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) . "';";
-	$rslt=mysql_to_mysqli($stmt, $link);
-	if ($DB) {echo "$stmt\n";}
-	$row=mysqli_fetch_row($rslt);
-	$AVGload =	sprintf("%10s", $row[0]);
-	$AVGchannels =	sprintf("%10s", $row[1]);
-	$HIGHload =	$row[2];
-		$HIGHmulti = intval(MathZDC($HIGHload, 100));
-	$HIGHchannels =	$row[3];
-	$HIGHprocesses =$row[4];
-	if ($row[2] > $row[3]) {$HIGHlimit = $row[2];}
-	else {$HIGHlimit = $row[3];}
-	if ($HIGHlimit < $row[4]) {$HIGHlimit = $row[4];}
-
-	$stmt="select AVG(cpu_user_percent),AVG(cpu_system_percent),AVG(cpu_idle_percent) 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);
-	if ($DB) {echo "$stmt\n";}
-	$row=mysqli_fetch_row($rslt);
-	$AVGcpuUSER =	sprintf("%10s", $row[0]);
-	$AVGcpuSYSTEM =	sprintf("%10s", $row[1]);
-	$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) . "';";
-	$rslt=mysql_to_mysqli($stmt, $link);
-	if ($DB) {echo "$stmt\n";}
-	$row=mysqli_fetch_row($rslt);
-	$TOTALcalls =	sprintf("%10s", $row[0]);
-	$OFFHOOKtime =	sprintf("%10s", $row[1]);
-
-
-	echo _QXZ("Total Calls in/out on this server:",42)."  $TOTALcalls\n";
-	echo _QXZ("Total Off-Hook time on this server (min):",42)." $OFFHOOKtime\n";
-	echo _QXZ("Average/Peak channels in use for server:",42)." $AVGchannels / $HIGHchannels\n";
-	echo _QXZ("Average/Peak load for server:",42)." $AVGload / $HIGHload\n";
-	echo _QXZ("Average USER process cpu percentage:",42)." $AVGcpuUSER %\n";
-	echo _QXZ("Average SYSTEM process cpu percentage:",42)." $AVGcpuSYSTEM %\n";
-	echo _QXZ("Average IDLE process cpu percentage:",42)." $AVGcpuIDLE %\n";
-
-	echo "\n";
-	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);
-	if ($DB) {echo "$stmt\n";}
-	$rows_to_print = mysqli_num_rows($rslt);
-	$i=0;
-	while ($i < $rows_to_print)
-		{
-		$row=mysqli_fetch_row($rslt);
-		if ($i<1) {$time_BEGIN = $row[0];}
-		$time_END = $row[0];
-		$row[5] = intval(($row[5] + $row[6]) * $HIGHmulti);
-		$row[6] = intval($row[6] * $HIGHmulti);
-		if ($rows_to_print > 9999)
-			{
-			if ($rows_to_print <= 19999)
-				{
-				if (preg_match("/0$|2$|4$|6$|8$/",$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 > 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++;
-		}
-	fclose($DATfp);
-
-	$rows_to_max = ($rows_to_print + 100);
-
-	$time_scale_abb = '5 '._QXZ("minutes");
-	$time_scale_tick = '1 minute';
-	if ($i > 1000) {$time_scale_abb = '10 '._QXZ("minutes");   $time_scale_tick = '2 '._QXZ("minutes");}
-	if ($i > 1500) {$time_scale_abb = '15 '._QXZ("minutes");   $time_scale_tick = '3 '._QXZ("minutes");}
-	if ($i > 2000) {$time_scale_abb = '20 '._QXZ("minutes");   $time_scale_tick = '4 '._QXZ("minutes");}
-	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";
-
-	$HTMcontent  = '';
-	$HTMcontent .= "#proc page\n";
-	$HTMcontent .= "#if @DEVICE in png,gif\n";
-	$HTMcontent .= "   scale: 0.6\n";
-	$HTMcontent .= "\n";
-	$HTMcontent .= "#endif\n";
-	$HTMcontent .= "#proc getdata\n";
-	$HTMcontent .= "file: $DOCroot/$DATfile\n";
-	$HTMcontent .= "fieldnames: userproc sysproc datetime load processes channels\n";
-	$HTMcontent .= "\n";
-	$HTMcontent .= "#proc areadef\n";
-	$HTMcontent .= "title: Server $group   $query_date_BEGIN to $query_date_END\n";
-	$HTMcontent .= "titledetails: size=14  align=C\n";
-	$HTMcontent .= "rectangle: 1 1 12 7\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 "
"; - echo "\n"; - echo "\n"; - - #echo ""; - } - -if ($db_source == 'S') - { - mysqli_close($link); - $use_slave_server=0; - $db_source = 'M'; - require("dbconnect_mysqli.php"); - } - -$endMS = microtime(); -$startMSary = explode(" ",$startMS); -$endMSary = explode(" ",$endMS); -$runS = ($endMSary[0] - $startMSary[0]); -$runM = ($endMSary[1] - $startMSary[1]); -$TOTALrun = ($runS + $runM); - -$stmt="UPDATE vicidial_report_log set run_time='$TOTALrun' where report_log_id='$report_log_id';"; -if ($DB) {echo "|$stmt|\n";} -$rslt=mysql_to_mysqli($stmt, $link); - -?> - -
-
- - + LICENSE: AGPLv2 +# +# CHANGES +# +# 60619-1732 - Added variable filtering to eliminate SQL injection attack threat +# - Added required user/pass to gain access to this page +# 70417-1106 - Changed time frame to be definable per time range on a single day +# - Fixed vertical scaling issues +# 80118-1508 - Fixed horizontal scale marking issues +# 90310-2151 - Added admin header +# 90508-0644 - Changed to PHP long tags +# 100214-1421 - Sort menu alphabetically +# 100712-1324 - Added system setting slave server option +# 100802-2347 - Added User Group Allowed Reports option validation +# 100914-1326 - Added lookup for user_level 7 users to set to reports only which will remove other admin links +# 130414-0157 - Added report logging +# 130610-0959 - Finalized changing of all ereg instances to preg +# 130621-0726 - Added filtering of input to prevent SQL injection attacks and new user auth +# 130901-2012 - Changed to mysqli PHP functions +# 130926-0658 - Added check for several different ploticus bin paths +# 140108-0716 - Added webserver and hostname to report logging +# 140328-0005 - Converted division calculations to use MathZDC function +# 141114-0730 - Finalized adding QXZ translation to all admin files +# 141230-1440 - Added code for on-the-fly language translations display +# 170409-1550 - Added IP List validation code +# 170422-0750 - Added input variable filtering +# 180223-1541 - Fixed blank default date/time ranges +# 191013-0842 - Fixes for PHP7 +# 220302-0841 - Added allow_web_debug system setting +# 251001-1700 - Switched graph to Graph.js from ploticus, converted to HTML +# + +$startMS = microtime(); + +require("dbconnect_mysqli.php"); +require("functions.php"); + +$PHP_AUTH_USER=$_SERVER['PHP_AUTH_USER']; +$PHP_AUTH_PW=$_SERVER['PHP_AUTH_PW']; +$PHP_SELF=$_SERVER['PHP_SELF']; +$PHP_SELF = preg_replace('/\.php.*/i','.php',$PHP_SELF); +if (isset($_GET["begin_query_time"])) {$begin_query_time=$_GET["begin_query_time"];} + elseif (isset($_POST["begin_query_time"])) {$begin_query_time=$_POST["begin_query_time"];} +if (isset($_GET["end_query_time"])) {$end_query_time=$_GET["end_query_time"];} + elseif (isset($_POST["end_query_time"])) {$end_query_time=$_POST["end_query_time"];} +if (isset($_GET["group"])) {$group=$_GET["group"];} + elseif (isset($_POST["group"])) {$group=$_POST["group"];} +if (isset($_GET["DB"])) {$DB=$_GET["DB"];} + elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];} +if (isset($_GET["submit"])) {$submit=$_GET["submit"];} + elseif (isset($_POST["submit"])) {$submit=$_POST["submit"];} +if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];} + elseif (isset($_POST["SUBMIT"])) {$SUBMIT=$_POST["SUBMIT"];} + +$DB=preg_replace("/[^0-9a-zA-Z]/","",$DB); + +$NOW_DATE = date("Y-m-d"); +$NOW_TIME = date("Y-m-d H:i:s"); +$STARTtime = date("U"); +if (strlen($begin_query_time) < 10) {$begin_query_time = "$NOW_DATE 09:00:00";} +if (strlen($end_query_time) < 10) {$end_query_time = "$NOW_DATE 15:30:00";} +if (!isset($group)) {$group = '';} + +$report_name = 'Server Performance Report'; +$db_source = 'M'; + +############################################# +##### START SYSTEM_SETTINGS LOOKUP ##### +$stmt = "SELECT use_non_latin,outbound_autodial_active,slave_db_server,reports_use_slave_db,enable_languages,language_method,allow_web_debug FROM system_settings;"; +$rslt=mysql_to_mysqli($stmt, $link); +#if ($DB) {echo "$stmt\n";} +$qm_conf_ct = mysqli_num_rows($rslt); +if ($qm_conf_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $non_latin = $row[0]; + $outbound_autodial_active = $row[1]; + $slave_db_server = $row[2]; + $reports_use_slave_db = $row[3]; + $SSenable_languages = $row[4]; + $SSlanguage_method = $row[5]; + $SSallow_web_debug = $row[6]; + } +if ($SSallow_web_debug < 1) {$DB=0;} +##### END SETTINGS LOOKUP ##### +########################################### + +$begin_query_time = preg_replace('/[^- \:_0-9a-zA-Z]/', '', $begin_query_time); +$end_query_time = preg_replace('/[^- \:_0-9a-zA-Z]/', '', $end_query_time); +$group = preg_replace('/[^- \.\:\_0-9a-zA-Z]/', '', $group); +$submit = preg_replace('/[^-_0-9a-zA-Z]/', '', $submit); +$SUBMIT = preg_replace('/[^-_0-9a-zA-Z]/', '', $SUBMIT); + +if ($non_latin < 1) + { + $PHP_AUTH_USER = preg_replace('/[^-_0-9a-zA-Z]/', '', $PHP_AUTH_USER); + $PHP_AUTH_PW = preg_replace('/[^-_0-9a-zA-Z]/', '', $PHP_AUTH_PW); + } +else + { + $PHP_AUTH_USER = preg_replace('/[^-_0-9\p{L}]/u', '', $PHP_AUTH_USER); + $PHP_AUTH_PW = preg_replace('/[^-_0-9\p{L}]/u', '', $PHP_AUTH_PW); + } + +$stmt="SELECT selected_language from vicidial_users where user='$PHP_AUTH_USER';"; +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$sl_ct = mysqli_num_rows($rslt); +if ($sl_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $VUselected_language = $row[0]; + } + +$auth=0; +$reports_auth=0; +$admin_auth=0; +$auth_message = user_authorization($PHP_AUTH_USER,$PHP_AUTH_PW,'REPORTS',1,0); +if ($auth_message == 'GOOD') + {$auth=1;} + +if ($auth > 0) + { + $stmt="SELECT count(*) from vicidial_users where user='$PHP_AUTH_USER' and user_level > 7 and view_reports='1';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + $admin_auth=$row[0]; + + $stmt="SELECT count(*) from vicidial_users where user='$PHP_AUTH_USER' and user_level > 6 and view_reports='1';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + $reports_auth=$row[0]; + + if ($reports_auth < 1) + { + $VDdisplayMESSAGE = _QXZ("You are not allowed to view reports"); + Header ("Content-type: text/html; charset=utf-8"); + echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; + exit; + } + if ( ($reports_auth > 0) and ($admin_auth < 1) ) + { + $ADD=999999; + $reports_only_user=1; + } + } +else + { + $VDdisplayMESSAGE = _QXZ("Login incorrect, please try again"); + if ($auth_message == 'LOCK') + { + $VDdisplayMESSAGE = _QXZ("Too many login attempts, try again in 15 minutes"); + Header ("Content-type: text/html; charset=utf-8"); + echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; + exit; + } + if ($auth_message == 'IPBLOCK') + { + $VDdisplayMESSAGE = _QXZ("Your IP Address is not allowed") . ": $ip"; + Header ("Content-type: text/html; charset=utf-8"); + echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; + exit; + } + Header("WWW-Authenticate: Basic realm=\"CONTACT-CENTER-ADMIN\""); + Header("HTTP/1.0 401 Unauthorized"); + echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$PHP_AUTH_PW|$auth_message|\n"; + exit; + } + +##### BEGIN log visit to the vicidial_report_log table ##### +$LOGip = getenv("REMOTE_ADDR"); +$LOGbrowser = getenv("HTTP_USER_AGENT"); +$LOGscript_name = getenv("SCRIPT_NAME"); +$LOGserver_name = getenv("SERVER_NAME"); +$LOGserver_port = getenv("SERVER_PORT"); +$LOGrequest_uri = getenv("REQUEST_URI"); +$LOGhttp_referer = getenv("HTTP_REFERER"); +$LOGbrowser=preg_replace("/<|>|\'|\"|\\\\/","",$LOGbrowser); +$LOGrequest_uri=preg_replace("/<|>|\'|\"|\\\\/","",$LOGrequest_uri); +$LOGhttp_referer=preg_replace("/<|>|\'|\"|\\\\/","",$LOGhttp_referer); +if (preg_match("/443/i",$LOGserver_port)) + {$HTTPprotocol = 'https://';} +else + {$HTTPprotocol = 'http://';} +if (($LOGserver_port == '80') or ($LOGserver_port == '443') ) + {$LOGserver_port='';} +else + {$LOGserver_port = ":$LOGserver_port";} +$LOGfull_url = "$HTTPprotocol$LOGserver_name$LOGserver_port$LOGrequest_uri"; + +$LOGhostname = php_uname('n'); +if (strlen($LOGhostname)<1) {$LOGhostname='X';} +if (strlen($LOGserver_name)<1) {$LOGserver_name='X';} + +$stmt="SELECT webserver_id FROM vicidial_webservers where webserver='$LOGserver_name' and hostname='$LOGhostname' LIMIT 1;"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {echo "$stmt\n";} +$webserver_id_ct = mysqli_num_rows($rslt); +if ($webserver_id_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $webserver_id = $row[0]; + } +else + { + ##### insert webserver entry + $stmt="INSERT INTO vicidial_webservers (webserver,hostname) values('$LOGserver_name','$LOGhostname');"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $affected_rows = mysqli_affected_rows($link); + $webserver_id = mysqli_insert_id($link); + } + +$stmt="INSERT INTO vicidial_report_log set event_date=NOW(), user='$PHP_AUTH_USER', ip_address='$LOGip', report_name='$report_name', browser='$LOGbrowser', referer='$LOGhttp_referer', notes='$LOGserver_name:$LOGserver_port $LOGscript_name |$group, $query_date, $end_date, $shift, $file_download, $report_display_type|', url='$LOGfull_url', webserver='$webserver_id';"; +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$report_log_id = mysqli_insert_id($link); +##### END log visit to the vicidial_report_log table ##### + +if ( (strlen($slave_db_server)>5) and (preg_match("/$report_name/",$reports_use_slave_db)) ) + { + mysqli_close($link); + $use_slave_server=1; + $db_source = 'S'; + require("dbconnect_mysqli.php"); + echo "\n"; + } + +$stmt="SELECT user_group from vicidial_users where user='$PHP_AUTH_USER';"; +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$LOGuser_group = $row[0]; + +$stmt="SELECT allowed_campaigns,allowed_reports from vicidial_user_groups where user_group='$LOGuser_group';"; +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$LOGallowed_campaigns = $row[0]; +$LOGallowed_reports = $row[1]; + +if ( (!preg_match("/$report_name/",$LOGallowed_reports)) and (!preg_match("/ALL REPORTS/",$LOGallowed_reports)) ) + { + Header("WWW-Authenticate: Basic realm=\"CONTACT-CENTER-ADMIN\""); + Header("HTTP/1.0 401 Unauthorized"); + echo _QXZ("You are not allowed to view this report").": |$PHP_AUTH_USER|$report_name|\n"; + exit; + } + +# path from root to where ploticus files will be stored +$PLOTroot = "vicidial/ploticus"; +$DOCroot = "$WeBServeRRooT/$PLOTroot/"; + +$stmt="select server_ip from servers order by server_ip;"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {echo "$stmt\n";} +$servers_to_print = mysqli_num_rows($rslt); +$i=0; +$groups=array(); +while ($i < $servers_to_print) + { + $row=mysqli_fetch_row($rslt); + $groups[$i] =$row[0]; + $i++; + } + +$NWB = "\"HELP\""; + +require("screen_colors.php"); + +?> + + + + + +\n"; +echo ""._QXZ("$report_name")."\n"; + +require("chart_button.php"); +# echo "\n"; +echo ""; +echo ""; +echo ""; +echo ""; +echo "\n"; +echo "\n"; + +echo "\n"; +echo ""; + + $short_header=1; + + require("admin_header.php"); + +echo ""._QXZ("$report_name")." $NWB#serverperformance$NWE\n"; + +echo ""; + +if (!$group) + { + echo "\n"; + } + +else + { + $query_date_BEGIN = $begin_query_time; + $query_date_END = $end_query_time; + + echo "\n"; + + echo "\n\n"; + echo "\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) . "';"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {echo "$stmt\n";} + $row=mysqli_fetch_row($rslt); + $AVGload = sprintf("%10s", $row[0]); + $AVGchannels = sprintf("%10s", $row[1]); + $HIGHload = $row[2]; + $HIGHmulti = intval(MathZDC($HIGHload, 100)); + $HIGHchannels = $row[3]; + $HIGHprocesses =$row[4]; + if ($row[2] > $row[3]) {$HIGHlimit = $row[2];} + else {$HIGHlimit = $row[3];} + if ($HIGHlimit < $row[4]) {$HIGHlimit = $row[4];} + + $stmt="select AVG(cpu_user_percent),AVG(cpu_system_percent),AVG(cpu_idle_percent) 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); + if ($DB) {echo "$stmt\n";} + $row=mysqli_fetch_row($rslt); + $AVGcpuUSER = sprintf("%10s", $row[0]); + $AVGcpuSYSTEM = sprintf("%10s", $row[1]); + $AVGcpuIDLE = sprintf("%10s", $row[2]); + + $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); + if ($DB) {echo "$stmt\n";} + $row=mysqli_fetch_row($rslt); + $TOTALcalls = sprintf("%10s", $row[0]); + $OFFHOOKtime = sprintf("%10s", $row[1]); + + + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\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;"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {echo "$stmt\n";} + $rows_to_print = mysqli_num_rows($rslt); + $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) + { + $row=mysqli_fetch_row($rslt); + if ($i<1) {$time_BEGIN = $row[0];} + $time_END = $row[0]; + $row[5] = intval(($row[5] + $row[6]) * $HIGHmulti); + $row[6] = intval($row[6] * $HIGHmulti); + + if ($i%$mod==0) + { + $labels.="\"$row[0]\","; + $SYSLOAD_dataset.="\"$row[1]\","; + $PROCESSES_dataset.="\"$row[2]\","; + $CHANNELS_dataset.="\"$row[3]\","; + $CPU_USER_dataset.="\"$row[5]\","; + $CPU_SYS_dataset.="\"$row[6]\","; + } + $i++; + } + + $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"; + + $SYSLOAD_dataset.="\t\t\t}\n"; + $PROCESSES_dataset.="\t\t\t}\n"; + $CHANNELS_dataset.="\t\t\t}\n"; + $CPU_USER_dataset.="\t\t\t}\n"; + $CPU_SYS_dataset.="\t\t\t}\n"; +?> + + + +
"; + + +echo "
\n"; +echo _QXZ("Date/Time Range").": \n"; +echo _QXZ("to")." \n"; +echo _QXZ("Server").": \n"; +echo "\n"; +echo "             "._QXZ("REPORTS")."\n"; +echo "
\n\n"; +echo "
"._QXZ("PLEASE SELECT A SERVER AND DATE/TIME RANGE ABOVE AND CLICK SUBMIT")."
"._QXZ("Server Performance Report").": $NOW_TIME
"._QXZ("Time range").": $query_date_BEGIN "._QXZ("to")." $query_date_END
"._QXZ("TOTALS, PEAKS and AVERAGES")."
"._QXZ("Total Calls in/out on this server:")."$TOTALcalls
"._QXZ("Total Off-Hook time on this server (min):")."$OFFHOOKtime
"._QXZ("Average/Peak channels in use for server:")."$AVGchannels / $HIGHchannels
"._QXZ("Average/Peak load for server:")."$AVGload / $HIGHload
"._QXZ("Average USER process cpu percentage:")."$AVGcpuUSER %
"._QXZ("Average SYSTEM process cpu percentage:")."$AVGcpuSYSTEM %
"._QXZ("Average IDLE process cpu percentage:")."$AVGcpuIDLE %

+ + +
+ +
Total run time: $TOTALrun seconds"; + +$stmt="UPDATE vicidial_report_log set run_time='$TOTALrun' where report_log_id='$report_log_id';"; +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); + +?> + +
+
$db_source"; +} +?> + +