/** * Calcola o ri-calcola gli indici di posizionamento per: * - presenze, assenze, missioni * - indice di attività (nuovo) * - ribellioni * Si può specificare: * - il ramo (camera, senato, governo, parlamento, tutti*) * - la data (da inizio legislatura a quella data) */ function run_opp_build_pos_cache_politici($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 = ''; $ramo = ''; $tipo = 'P'; if (array_key_exists('data', $options)) { $data = $options['data']; } if (array_key_exists('ramo', $options)) { $ramo = substr(strtolower($options['ramo']), 0, 1); } if ($ramo != 'c' && $ramo != 's') { throw new Exception("I valori per il ramo possono essere: camera o senato"); } // 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'); if ($ramo == 'tutti') { $data_lookup = OppPoliticianHistoryCachePeer::fetchLastData($tipo); } else { $data_lookup = OppPoliticianHistoryCachePeer::fetchLastData($tipo, $ramo); } } $msg = sprintf("calcolo indici posizionamento per politici data: %10s, ramo: %10s\n", $data ? $data : '-', $ramo); echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true)); $parlamentari_rs = OppCaricaPeer::getParlamentariRamoDataRS($ramo, $legislatura_corrente, $data); echo "memory usage: " . memory_get_usage() . "\n"; $start_time = time(); $cnt = 0; $indice_ar = array(); $presenze_ar = array(); $assenze_ar = array(); $missioni_ar = array(); $ribellioni_ar = array(); while ($parlamentari_rs->next()) { $cnt++; $p = $parlamentari_rs->getRow(); $id = $p['id']; // inserimento o aggiornamento del valore in opp_politician_history_cache $cache_record = OppPoliticianHistoryCachePeer::retrieveByDataChiTipoChiIdRamo($data_lookup, $tipo, $id, $ramo); if (!$cache_record) { throw new Exception("Record {$id} mancante: data: {$data_lookup}, tipo: {$tipo}, ramo: {$ramo}!"); } $record_id = $cache_record->getId(); $indice_ar[$record_id] = $cache_record->getIndice(); $presenze_ar[$record_id] = $cache_record->getPresenze(); $assenze_ar[$record_id] = $cache_record->getAssenze(); $missioni_ar[$record_id] = $cache_record->getMissioni(); $ribellioni_ar[$record_id] = $cache_record->getRibellioni(); unset($cache_record); $msg = sprintf("%d) i: %7.2f p:%4d a:%4d m:%4d, r:%4d", $cnt, $indice_ar[$record_id], $presenze_ar[$record_id], $assenze_ar[$record_id], $missioni_ar[$record_id], $ribellioni_ar[$record_id]); 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)); } # update positions arsort($indice_ar); compute_posizioni($indice_ar, 'indice'); arsort($presenze_ar); compute_posizioni($presenze_ar, 'presenze'); arsort($assenze_ar); compute_posizioni($assenze_ar, 'assenze'); arsort($missioni_ar); compute_posizioni($missioni_ar, 'missioni'); arsort($ribellioni_ar); compute_posizioni($ribellioni_ar, 'ribellioni'); $msg = sprintf("id: indexing positions generated\n"); echo pakeColor::colorize($msg, array('fg' => 'green', 'bold' => true)); $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)); $msg = sprintf("%d parlamentari elaborati\n", $cnt); echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true)); }
/** * 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)); }