/** * Calcola o ri-calcola i dati aggregati da cachare per i rami * Si può specificare: * - la data (da inizio legislatura a quella data) */ function run_opp_build_cache_rami($task, $args, $options) { static $loaded; // load application context if (!$loaded) { task_loader(); $loaded = true; } echo "memory usage: " . memory_get_usage() . "\n"; $msg = sprintf("start time: %s\n", date('H:i:s')); echo $msg; $data = ''; $verbose = false; if (array_key_exists('data', $options)) { $data = $options['data']; } if (array_key_exists('verbose', $options)) { $verbose = true; } // definisce la data fino alla quale vanno fatti i calcoli // data_lookup serve per controllare se i record già esistono if ($data != '') { $legislatura_corrente = OppLegislaturaPeer::getCurrent($data); $data_lookup = $data; } else { $legislatura_corrente = OppLegislaturaPeer::getCurrent(); $data = date('Y-m-d'); $data_lookup = OppPoliticianHistoryCachePeer::fetchLastData('R'); } foreach (array('C', 'S') as $ramo) { $msg = sprintf("calcolo aggregazione per intero ramo - data: %s, ramo: %s\n", $data, $ramo); echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true)); $numero = OppPoliticianHistoryCachePeer::countRecordsRamoData($ramo, $data); if ($numero > 0) { $dati = OppPoliticianHistoryCachePeer::aggregaDatiRamoData($ramo, $data); // inserimento o aggiornamento del valore in opp_politician_history_cache $cache_record = OppPoliticianHistoryCachePeer::retrieveByDataChiTipoRamo($data_lookup, 'R', $ramo); if (!$cache_record) { $cache_record = new OppPoliticianHistoryCache(); } $cache_record->setLegislatura($legislatura_corrente); $cache_record->setChiTipo('R'); $cache_record->setRamo($ramo); $cache_record->setIndice($dati['indice']); $cache_record->setPresenze($dati['presenze']); $cache_record->setAssenze($dati['assenze']); $cache_record->setMissioni($dati['missioni']); $cache_record->setRibellioni($dati['ribellioni']); $cache_record->setData($data); $cache_record->setNumero($numero); // serve per ricostruire la somma aggregata $cache_record->setUpdatedAt(date('Y-m-d H:i')); // forza riscrittura updated_at, per tenere traccia esecuzioni $cache_record->save(); unset($cache_record); $msg = sprintf("i: %7.2f p:%7.2f a:%7.2f m:%7.2f r:%7.2f (su %d membri)", $dati['indice'], $dati['presenze'], $dati['assenze'], $dati['missioni'], $dati['ribellioni'], $numero); echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true)); } else { $msg = sprintf("nessun dato da aggregare per questo ramo!"); echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true)); } echo "\n"; } $msg = sprintf("end time: %s\n", date('H:i:s')); echo $msg; $msg = sprintf("memory usage: %10d\n", memory_get_usage()); echo pakeColor::colorize($msg, array('fg' => 'red', 'bold' => false)); }