/** * 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)); }
/** * Calcola o ri-calcola l'indice di attività. * Si può specificare il ramo (camera, senato, governo, tutti) e la data * Se sono passati degli ID (argomenti), sono interpretati come ID di politici e il calcolo è fatto solo per loro */ function run_opp_calcola_nuovo_indice($task, $args, $options) { static $loaded; // load application context if (!$loaded) { define('SF_ROOT_DIR', sfConfig::get('sf_root_dir')); define('SF_APP', 'fe'); define('SF_ENVIRONMENT', 'task'); define('SF_DEBUG', false); require_once SF_ROOT_DIR . DIRECTORY_SEPARATOR . 'apps' . DIRECTORY_SEPARATOR . SF_APP . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.php'; sfContext::getInstance(); sfConfig::set('pake', true); error_reporting(E_ALL); $loaded = true; } echo "memory usage: " . memory_get_usage() . "\n"; $start_time = time(); $data = ''; $ramo = ''; $verbose = false; $offset = null; $limit = null; if (array_key_exists('data', $options)) { $data = $options['data']; } if (array_key_exists('ramo', $options)) { $ramo = strtolower($options['ramo']); } if (array_key_exists('verbose', $options)) { $verbose = true; } if (array_key_exists('offset', $options)) { $offset = $options['offset']; } if (array_key_exists('limit', $options)) { $limit = $options['limit']; } $atti_ids = array(); if (array_key_exists('atti', $options)) { $atti_ids = explode(",", $options['atti']); } $emendamenti_ids = array(); if (array_key_exists('emendamenti', $options)) { $emendamenti_ids = explode(",", $options['emendamenti']); } // 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('N'); } $msg = sprintf("calcolo indice di attività - data: %10s, ramo: %10s\n", $data ? $data : '-', $ramo); echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true)); if (count($args) > 0) { try { $parlamentari_rs = OppCaricaPeer::getRSFromIDArray($args); } catch (Exception $e) { throw new Exception("Specificare degli ID validi. \n" . $e); } } else { $parlamentari_rs = OppCaricaPeer::getParlamentariRamoDataRS($ramo, $legislatura_corrente, $data, $offset, $limit); } echo "memory usage: " . memory_get_usage() . "\n"; $cnt = 0; while ($parlamentari_rs->next()) { $cnt++; $p = $parlamentari_rs->getRow(); $nome = $p['nome']; $cognome = $p['cognome']; $tipo_carica_id = $p['tipo_carica_id']; $id = $p['id']; switch ($tipo_carica_id) { case 1: $ramo = 'C'; $prefisso = 'On.'; break; case 4: case 5: $ramo = 'S'; $prefisso = 'Sen.'; break; case 2: case 3: case 6: case 7: $ramo = 'G'; $prefisso = ''; break; default: break; } $politico_stringa = sprintf("%s %s %s", $prefisso, $nome, strtoupper($cognome)); printf("%4d) %40s [%06d] ... ", $cnt, $politico_stringa, $id); $indice = OppIndiceAttivitaPeer::calcola_indice_politico($id, $legislatura_corrente, $data, $verbose, $atti_ids, $emendamenti_ids); // inserimento o aggiornamento del valore in opp_politician_history_cache // uso N come ChiTipo, perché P è preso per il vecchio indice. // una volta fatta la sostituzione, la scrittura qui è ridondante $cache_record = OppPoliticianHistoryCachePeer::retrieveByDataChiTipoChiIdRamo($data_lookup, 'N', $id, $ramo); if ($cache_record === null) { $cache_record = new OppPoliticianHistoryCache(); } $cache_record->setLegislatura($legislatura_corrente); $cache_record->setChiTipo('N'); $cache_record->setChiId($id); $cache_record->setRamo($ramo); $cache_record->setIndice($indice); $cache_record->setData($data); $cache_record->setNumero(1); $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("%7.2f", $indice); echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true)); $msg = sprintf(" [%4d sec] [%10d bytes]\n", time() - $start_time, memory_get_usage()); echo pakeColor::colorize($msg, array('fg' => 'red', 'bold' => false)); } $msg = sprintf("%d parlamentari elaborati\n", $cnt); echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true)); }