Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
  #1  
Old 06-19-2009, 10:29 AM
OcR Envy's Avatar
OcR Envy OcR Envy is offline
 
Join Date: May 2008
Location: Boston
Posts: 248
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Extremely High CPU Usage

The following cron job script has been reported to me by my host as using a lot of CPU. To the point where our site has started to return error messages while it is running. I am looking for suggestions on how to optimize any way possible.

PHP Code:
// ---------------------------------------------------
// Start Set PHP Environment
// ---------------------------------------------------

error_reporting(E_ALL & ~E_NOTICE);
if (!
is_object($vbulletin->db))
{
    echo 
"No vBulletin Found!";
    exit;
}

// ---------------------------------------------------
// Start Cronjob
// ---------------------------------------------------

global $vbulletin;
global 
$db;


$updatetime=time(); 
$usersoffline=0;
putenv("TZ=US/Eastern");
$checktime=date("h:i A"time());
$checkdate=date("m/d/y"time());

$vbulletin->db->query_write("UPDATE xblusers SET time='$checktime', date='$checkdate' WHERE title='checked'");

if (
$xml simplexml_load_file("http://xboxapi.duncanmackenzie.net/gamertag.ashx?GamerTag=outcast%20reborn")) {
    
$account=$xml->AccountStatus;
    if(
$account=="Gold") {
        
$vbulletin->db->query_write("UPDATE xblusers SET time='00:00PM', date='00/00/00' WHERE title='crashed'");
        
$logmsg "Whos on XBL Updated";

    } else {
        
$offline="true";
    }
} else {
        
$offline="true";
}

if(
$offline=="true") {

    
$grabchecked $vbulletin->db->query("SELECT time, date FROM xblusers WHERE title='crashed'");
    
$gchecked=$vbulletin->db->fetch_array($grabchecked);
    
$checkedt=$gchecked['time'];
    
    
    if(
$checkedt=="00:00PM") {
        
$vbulletin->db->query_write("UPDATE xblusers SET time='$checktime', date='$checkdate' WHERE title='crashed'");
    }
    
$logmsg "Whos on XBL Not Updated: Stream Down<br />";
    
log_cron_action($logmsg$nextitem0);
    die;
}


$gamertaggrab=$vbulletin->db->query("SELECT userfield.field5, userfield.field11, userfield.userid FROM userfield INNER JOIN user ON user.userid = userfield.userid AND userfield.field5 > '' WHERE usergroupid IN (6,48,52,51,26,58,60,55,46)");
while(
$userrow $vbulletin->db->fetch_array($gamertaggrab)) {    
    
$gamertag=$userrow['field5'];
        
    if (
$gamertag) {
        if (
$xml = @simplexml_load_file("http://xboxapi.duncanmackenzie.net/gamertag.ashx?GamerTag="urlencode($gamertag))) {
            
$coretag=$xml->Gamertag;                
            
$tagvalid=$xml->PresenceInfo->Valid;        
            
$onlinestatus=$xml->PresenceInfo->Online;        
            
$statustext=$xml->PresenceInfo->StatusText;        
            
$title=$xml->PresenceInfo->Title;        
            
$info=$xml->PresenceInfo->Info;        
            
$info2=$xml->PresenceInfo->Info2;        
            
$lastseen=$xml->PresenceInfo->LastSeen;                
                    
            
$statustext=addslashes($statustext);        
            
$title=addslashes($title);        
            
$info=addslashes($info);        
            
$info2=addslashes($info2);
            
            if (
$onlinestatus=="true") {            
                
$online=1;
                
$logmsg $logmsg "<li><a href='http://www.outcastreborn.com/member.php?u=" .$userrow['userid']. "'>" $gamertag "</a>: " " " $statustext " " $title " " $info2 " </li>";        
                
$sms_string $sms_string $gamertag " ";
            } else {            
                
$online=0;
                
$usersoffline $usersoffline 1;
            }                    
                
            foreach (
$xml->xpath('//Game') as $gameset) {  
                
$gamename=$gameset->Name;            
                
$gametile=$gameset->Image32url;                        
                
$gamename=addslashes($gamename);

                
$vbulletin->db->query_write("INSERT IGNORE INTO xblgames (name,tile) VALUES ('".$gamename."','".$gametile."')");                                        
            }    

            if (
$tagvalid=="true")    {
                
$vbulletin->db->query_write("INSERT INTO xblstatus (userid,gamertag,online,statustext,title,info,info2,lastseen,updatetime)             
                VALUES ('"
.$userrow['userid']."','$coretag','$online','$statustext','$title','$info','$info2','$lastseen',FROM_UNIXTIME($updatetime)) ON DUPLICATE KEY             
                UPDATE userid='"
.$userrow['userid']."',gamertag='$coretag',online='$online',statustext='$statustext',title='$title',info='$info',info2='$info2',
                lastseen='
$lastseen',updatetime=FROM_UNIXTIME($updatetime)");                                    
                        
                
$vbulletin->db->query_write("UPDATE userfield SET field12='$statustext',field13='$title',field14='$info2' WHERE userid=".$userrow['userid']);
            }
        }    
    }

    
$gamertag=$userrow['field11'];    
        
    if (
$gamertag) {

        if (
$xml = @simplexml_load_file("http://xboxapi.duncanmackenzie.net/gamertag.ashx?GamerTag="urlencode($gamertag))) {
            
$coretag=$xml->Gamertag;                
            
$tagvalid=$xml->PresenceInfo->Valid;        
            
$onlinestatus=$xml->PresenceInfo->Online;        
            
$statustext=$xml->PresenceInfo->StatusText;        
            
$title=$xml->PresenceInfo->Title;        
            
$info=$xml->PresenceInfo->Info;        
            
$info2=$xml->PresenceInfo->Info2;        
            
$lastseen=$xml->PresenceInfo->LastSeen;    
                
            
$statustext=addslashes($statustext);        
            
$title=addslashes($title);        
            
$info=addslashes($info);        
            
$info2=addslashes($info2);                            
                    
            if (
$onlinestatus=="true") {            
                
$online=1;
                
$logmsg $logmsg "<li><a href='http://www.outcastreborn.com/member.php?u=" .$userrow['userid']. "'>" $gamertag "</a>: " " " $statustext " " $title " " $info2 " </li>";        
                
$sms_string $sms_string $gamertag " ";
            } else {            
                
$online=0;
                
$usersoffline $usersoffline 1;
            }                
                        
            if (
$tagvalid=="true")    {
                
$vbulletin->db->query_write("INSERT INTO sxblstatus (userid,gamertag,online,statustext,title,info,info2,lastseen,updatetime)             
                VALUES ('"
.$userrow['userid']."','$coretag','$online','$statustext','$title','$info','$info2','$lastseen',FROM_UNIXTIME($updatetime)) ON DUPLICATE KEY             
                UPDATE userid='"
.$userrow['userid']."',gamertag='$coretag',online='$online',statustext='$statustext',title='$title',info='$info',info2='$info2',
                lastseen='
$lastseen',updatetime=FROM_UNIXTIME($updatetime)");
                    
                
$vbulletin->db->query("UPDATE userfield SET field15='$statustext',field16='$title',field17='$info2' WHERE userid=".$userrow['userid']);                                                            
            }                        
        }
    }
}
$logmsg $logmsg "<li> Users offline: " $usersoffline ."</li></ul>";
log_cron_action($logmsg$nextitem0); 
The main SQL
PHP Code:
SELECT userfield.field5userfield.field11userfield.userid FROM userfield INNER JOIN user ON user.userid userfield.userid AND userfield.field5 '' WHERE usergroupid IN (6,48,52,51,26,58,60,55,46
Returns 87 Results. The while statement runs 87 times.


I am not giving permission to reuse any of this code at this time.
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 10:36 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.03444 seconds
  • Memory Usage 2,325KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (2)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)showthread_list
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_threadedmode.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids_threaded
  • showthread_threaded_construct_link
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete