Skip to content

Instantly share code, notes, and snippets.

@markphi2013
Last active December 19, 2015 15:18
Show Gist options
  • Save markphi2013/5974974 to your computer and use it in GitHub Desktop.
Save markphi2013/5974974 to your computer and use it in GitHub Desktop.
hello, Can you help me out with the loop for the rediskey in the public function getProgramStats($program)
StatsComponent<?php
App::uses('Component', 'Controller');
App::uses('Program', 'Model');
class StatsComponent extends Component {
public function getRedis()
{
$redis = new Redis();
$redis->connect('127.0.0.1');
return $redis;
}
protected function _getProgramStats($program)
{
$database = $program['Program']['database'];
$redis = $this->getRedis();
$redisKey = 'vusion:programs:'.$database.':stats';
$tempParticipant = new Participant(array('database' => $database));
$activeParticipantCount = $tempParticipant->find(
'count', array(
'conditions' => array('session-id' => array(
'$ne' => null)
)
)
);
$participantCount = $tempParticipant->find('count');
$tempHistory = new History(array('database' => $database));
$AllReceivedMessagesCount = $tempHistory->find(
'count',array(
'conditions' => array('message-direction' => 'incoming'))
);
$AllSentMessagesCount = $tempHistory->find(
'count',array(
'conditions' => array('message-direction' => 'outgoing'))
);
$historyCount = $tempHistory->find(
'count', array(
'conditions' => array('object-type' => array('$in' => $tempHistory->messageType))));
$tempSchedule = new Schedule(array('database' => $database));
$now = new DateTime('now');
$todayScheduleCount = $tempSchedule->find(
'count',array(
'conditions' => array('date-time' => $now)
));
$scheduleCount = $tempSchedule->find('count');
$programStats = array(
'active-participant-count' => $activeParticipantCount,
'participant-count' => $participantCount,
'all-received-messages-count'=> $AllReceivedMessagesCount,
'all-sent-messages-count' => $AllSentMessagesCount,
'history-count' => $historyCount,
'today-schedule-count' => $todayScheduleCount,
'schedule-count' => $scheduleCount);
$program['Program']['active-participant-count'] = $programStats['active-participant-count'];
$program['Program']['participant-count'] = $programStats['participant-count'];
$program['Program']['all-received-messages-count'] = $programStats['all-received-messages-count'];
$program['Program']['all-sent-messages-count'] = $programStats['all-sent-messages-count'];
$program['Program']['history-count'] = $programStats['history-count'];
$program['Program']['today-schedule-count'] = $programStats['today-schedule-count'];
$program['Program']['schedule-count'] = $programStats['schedule-count'];
$redis->setex($redisKey, 60000, $program['Program']['active-participant-count']);
$redis->setex($redisKey, 60000, $program['Program']['participant-count']);
$redis->setex($redisKey, 60000, $program['Program']['all-received-messages-count']);
$redis->setex($redisKey, 60000, $program['Program']['history-count']);
$redis->setex($redisKey, 60000, $program['Program']['today-schedule-count']);
$redis->setex($redisKey, 60000, $program['Program']['schedule-count']);
return $program;
}
public function getProgramStats($program)
{
$database = $program['Program']['database'];
$redis = $this->getRedis();
$redisKey = 'vusion:programs:'.$database.':stats';
Need aloop for the $redisStored;
$redisStored = $redis->get($redisKey);
$stats = $this->_getProgramStats($program);
if(!isset($redisStored)){
return $stats;
}
return $redisStored;
}
}
?>
@overnin
Copy link

overnin commented Jul 11, 2013

public function getProgramStats($program)
{   
    $database           = $program['Program']['database'];
    $redis = $this->getRedis();
     //explicit naming is important $statsKey  and not $redisKey
     $statsKey = 'vusion:programs:'.$database.':stats'; 

     $stats = $redis->get($statsKey);
      if isset($stats) {
           //mean some stats are still cached no need to get from mongo
           return json_decode($stats)
      } else {
           //means no stats is cache, need to get them from mongo
           $stats = $this->_getProgramStats($program)
           $redis->setex($statsKey, json_encode($stats))
      }
 }

@markphi2013
Copy link
Author

$program['Program']['active-participant-count'] = $programStats['active-participant-count'];
$program['Program']['participant-count'] = $programStats['participant-count'];
$program['Program']['all-received-messages-count'] = $programStats['all-received-messages-count'];
$program['Program']['all-sent-messages-count'] = $programStats['all-sent-messages-count'];
$program['Program']['history-count'] = $programStats['history-count'];
$program['Program']['today-schedule-count'] = $programStats['today-schedule-count'];
$program['Program']['schedule-count'] = $programStats['schedule-count'];

@markphi2013
Copy link
Author

connect('127.0.0.1'); return $redis; } protected function _getProgramStats($program) { $database = $program['Program']['database']; $tempParticipant = new Participant(array('database' => $database)); $activeParticipantCount = $tempParticipant->find( 'count', array( 'conditions' => array('session-id' => array( '$ne' => null) ) ) ); $participantCount = $tempParticipant->find('count'); $tempHistory = new History(array('database' => $database)); $AllReceivedMessagesCount = $tempHistory->find( 'count',array( 'conditions' => array('message-direction' => 'incoming')) ); $AllSentMessagesCount = $tempHistory->find( 'count',array( 'conditions' => array('message-direction' => 'outgoing')) ); $historyCount = $tempHistory->find( 'count', array( 'conditions' => array('object-type' => array('$in' => $tempHistory->messageType)))); $tempSchedule = new Schedule(array('database' => $database)); $now = new DateTime('now'); $todayScheduleCount = $tempSchedule->find( 'count',array( 'conditions' => array('date-time' => $now) )); $scheduleCount = $tempSchedule->find('count'); $programStats = array( 'active-participant-count' => $activeParticipantCount, 'participant-count' => $participantCount, 'all-received-messages-count'=> $AllReceivedMessagesCount, 'all-sent-messages-count' => $AllSentMessagesCount, 'history-count' => $historyCount, 'today-schedule-count' => $todayScheduleCount, 'schedule-count' => $scheduleCount); return $programStats; } public function getProgramStats($program) { $programStats = $this->_getProgramStats($program); $program['Program']['stats'] = $this->_getProgramStats($programStats); $program['Program']['stats']['active-participant-count'] = $programStats['active-participant-count']; $program['Program']['stats']['participant-count'] = $programStats['participant-count']; $program['Program']['stats']['all-received-messages-count'] = $programStats['all-received-messages-count']; $program['Program']['stats']['all-sent-messages-count'] = $programStats['all-sent-messages-count']; $program['Program']['stats']['history-count'] = $programStats['history-count']; $program['Program']['stats']['today-schedule-count'] = $programStats['today-schedule-count']; $program['Program']['stats']['schedule-count'] = $programStats['schedule-count']; $database = $program['Program']['database']; $redis = $this->getRedis(); $statsKey = 'vusion:programs:'.$database.':stats'; $stats = $redis->get($statsKey); if(isset($stats)){ return json_decode($stats); }else{ $redis->setex($statsKey, 100,json_encode($programStats)); //return $r; } } ``` } ?>

@markphi2013
Copy link
Author

$program['Program']['stats'] = $this->_getProgramStats($program);
it's ok i changed $programstats to $program

@markphi2013
Copy link
Author

connect('127.0.0.1'); return $redis; } protected function _getProgramStats($program) { $database = $program['Program']['database']; $tempParticipant = new Participant(array('database' => $database)); $activeParticipantCount = $tempParticipant->find( 'count', array( 'conditions' => array('session-id' => array( '$ne' => null) ) ) ); $participantCount = $tempParticipant->find('count'); ``` $tempHistory = new History(array('database' => $database)); $AllReceivedMessagesCount = $tempHistory->find( 'count',array( 'conditions' => array('message-direction' => 'incoming')) ); $AllSentMessagesCount = $tempHistory->find( 'count',array( 'conditions' => array('message-direction' => 'outgoing')) ); $historyCount = $tempHistory->find( 'count', array( 'conditions' => array('object-type' => array('$in' => $tempHistory->messageType)))); $tempSchedule = new Schedule(array('database' => $database)); $now = new DateTime('now'); $todayScheduleCount = $tempSchedule->find( 'count',array( 'conditions' => array('date-time' => $now) )); $scheduleCount = $tempSchedule->find('count'); $programStats = array( 'active-participant-count' => $activeParticipantCount, 'participant-count' => $participantCount, 'all-received-messages-count'=> $AllReceivedMessagesCount, 'all-sent-messages-count' => $AllSentMessagesCount, 'history-count' => $historyCount, 'today-schedule-count' => $todayScheduleCount, 'schedule-count' => $scheduleCount); return $programStats; ``` } public function getProgramStats($program) { $programStats = $this->_getProgramStats($program); $program['Program']['stats'] = $this->_getProgramStats($program); $program['Program']['stats']['active-participant-count'] = $programStats['active-participant-count']; $program['Program']['stats']['participant-count'] = $programStats['participant-count']; $program['Program']['stats']['all-received-messages-count'] = $programStats['all-received-messages-count']; $program['Program']['stats']['all-sent-messages-count'] = $programStats['all-sent-messages-count']; $program['Program']['stats']['history-count'] = $programStats['history-count']; $program['Program']['stats']['today-schedule-count'] = $programStats['today-schedule-count']; $program['Program']['stats']['schedule-count'] = $programStats['schedule-count']; ``` $database = $program['Program']['database']; $redis = $this->getRedis(); $statsKey = 'vusion:programs:'.$database.':stats'; $stats = $redis->get($statsKey); if(isset($stats)){ return json_decode($stats); }else{ $redis->setex($statsKey, 100,json_encode($programStats)); //return $r; } ``` } } ?>

@markphi2013
Copy link
Author

connect('127.0.0.1'); return $redis; } protected function _getProgramStats($program) { $database = $program['Program']['database']; $tempParticipant = new Participant(array('database' => $database)); $activeParticipantCount = $tempParticipant->find( 'count', array( 'conditions' => array('session-id' => array( '$ne' => null) ) ) ); $participantCount = $tempParticipant->find('count'); ``` $tempHistory = new History(array('database' => $database)); $AllReceivedMessagesCount = $tempHistory->find( 'count',array( 'conditions' => array('message-direction' => 'incoming')) ); $AllSentMessagesCount = $tempHistory->find( 'count',array( 'conditions' => array('message-direction' => 'outgoing')) ); $historyCount = $tempHistory->find( 'count', array( 'conditions' => array('object-type' => array('$in' => $tempHistory->messageType)))); $tempSchedule = new Schedule(array('database' => $database)); $now = new DateTime('now'); $todayScheduleCount = $tempSchedule->find( 'count',array( 'conditions' => array('date-time' => $now) )); $scheduleCount = $tempSchedule->find('count'); $programStats = array( 'active-participant-count' => $activeParticipantCount, 'participant-count' => $participantCount, 'all-received-messages-count'=> $AllReceivedMessagesCount, 'all-sent-messages-count' => $AllSentMessagesCount, 'history-count' => $historyCount, 'today-schedule-count' => $todayScheduleCount, 'schedule-count' => $scheduleCount); return $programStats; ``` } public function getProgramStats($program) { $programStats = $this->_getProgramStats($program); $program['Program']['stats'] = $this->_getProgramStats($program); $program['Program']['stats']['active-participant-count'] = $programStats['active-participant-count']; $program['Program']['stats']['participant-count'] = $programStats['participant-count']; $program['Program']['stats']['all-received-messages-count'] = $programStats['all-received-messages-count']; $program['Program']['stats']['all-sent-messages-count'] = $programStats['all-sent-messages-count']; $program['Program']['stats']['history-count'] = $programStats['history-count']; $program['Program']['stats']['today-schedule-count'] = $programStats['today-schedule-count']; $program['Program']['stats']['schedule-count'] = $programStats['schedule-count']; ``` $database = $program['Program']['database']; $redis = $this->getRedis(); $statsKey = 'vusion:programs:'.$database.':stats'; $stats = $redis->get($statsKey); if(isset($stats)){ return json_decode($stats); }else{ $redis->setex($statsKey, 100,json_encode($programStats)); //return $r; } ``` } } ?>

@overnin
Copy link

overnin commented Jul 12, 2013

isn't it sufficient?

public function getProgramStats($program)
{
 $database           = $program['Program']['database'];
 $redis = $this->getRedis();
 $statsKey = 'vusion:programs:'.$database.':stats';
 $stats = $redis->get($statsKey);
 if(isset($stats)){
      return json_decode($stats);
 }else{
       // only in the case that it is not cache u need to calculate a again the stats
      $programStats = $this->_getProgramStats($program);
      $redis->setex($statsKey, 100,json_encode($programStats));
      return $programStats;
 }
 }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment