/** * Calcola o ri-calcola i dati da cachare per i politici * - 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) * Se sono passati degli ID (argomenti), sono interpretati come ID di politici e il calcolo è fatto solo per loro * L'opzione --verbose, permette di visualizzare il dettaglio dei calcoli svolti */ function run_opp_build_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 = 'tutti'; $tipo = 'P'; $verbose = false; $dry_run = false; if (array_key_exists('data', $options)) { $data = $options['data']; } if (array_key_exists('ramo', $options)) { $ramo = strtoupper($options['ramo'][0]); } if (array_key_exists('verbose', $options)) { $verbose = true; } if (array_key_exists('dry_run', $options)) { $dry_run = true; } // restrizione su un subset di atti/emendamenti per eventuale debug $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'); if ($ramo == 'tutti') { $data_lookup = OppPoliticianHistoryCachePeer::fetchLastData('P'); } else { $data_lookup = OppPoliticianHistoryCachePeer::fetchLastData('P', $ramo); } } $msg = sprintf("calcolo cache per politici 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); } echo "memory usage: " . memory_get_usage() . "\n"; $start_time = time(); $cnt = 0; $indice_ar = array(); $presenze_ar = array(); $missioni_ar = array(); $assenze_ar = array(); 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']; list($mio_ramo, $prefisso) = OppTipoCaricaPeer::getRamoPrefisso($tipo_carica_id); $gruppo = OppCaricaPeer::getGruppo($id, $data); $politico_stringa = sprintf("%s %s %s", $prefisso, $nome, strtoupper($cognome)); printf("%4d) %40s %7s [%06d] ... ", $cnt, $politico_stringa, "(" . $gruppo['acronimo'] . ")", $id); $indice = OppIndiceAttivitaPeer::calcola_indice_politico($id, $legislatura_corrente, $data, $verbose, $atti_ids); list($presenze, $assenze, $missioni) = OppVotazioneHasCaricaPeer::getDatiPresenzaCaricaData($id, $legislatura_corrente, $data); $ribellioni = OppVotazioneHasCaricaPeer::countRibellioniCaricaData($id, $legislatura_corrente, $data); // inserimento o aggiornamento del valore in opp_politician_history_cache if (!$dry_run) { $cache_record = OppPoliticianHistoryCachePeer::retrieveByDataChiTipoChiIdRamo($data_lookup, 'P', $id, $mio_ramo); if (!$cache_record) { $cache_record = new OppPoliticianHistoryCache(); } $cache_record->setLegislatura($legislatura_corrente); $cache_record->setChiTipo('P'); $cache_record->setChiId($id); $cache_record->setRamo($mio_ramo); $cache_record->setGruppoId($gruppo['id']); $cache_record->setIndice($indice); $cache_record->setPresenze($presenze); $cache_record->setAssenze($assenze); $cache_record->setMissioni($missioni); $cache_record->setRibellioni($ribellioni); $cache_record->setData($data); $cache_record->setNumero(1); // il dato riguarda un solo soggetto $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:%4d a:%4d m:%4d, r:%4d", $indice, $presenze, $assenze, $missioni, $ribellioni); 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("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 e mostra lo storico dell'interesse dei politici su determinati argomenti * Si deve specificare gli ID dei politici e l'ID degli argomenti */ function run_opp_get_storico_interesse($task, $args, $options) { static $loaded; // load application context if (!$loaded) { _loader(); } echo "memory usage: " . memory_get_usage() . "\n"; $start_time = time(); // parameteri obbligatori if (array_key_exists('tags', $options)) { $tags = $options['tags']; $tags_ids = split(",", $tags); } else { throw new Exception("E' obbligatorio specificare i tags, ad esempio: 845,3487,123"); } // specificare la data fino alla quale estrarre lo storico $data = ''; if (array_key_exists('data', $options)) { // verifica che si tratti di una data (evita sql-injection) $data = date('Y-m-d', strtotime($options['data'])); $data_condition = " data < {$data} "; } else { $data_condition = null; } $msg = sprintf("calcolo storico interesse su tag: %s\n", $tags); 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 dei carica_id validi. \n" . $e); } } else { throw new Exception("Specificare almeno un carica_id valido. \n" . $e); } echo "memory usage: " . memory_get_usage() . "\n"; $cnt = 0; while ($parlamentari_rs->next()) { $cnt++; $p = $parlamentari_rs->getRow(); $msg = sprintf("%d %s %s\n", $cnt, $p['tipo_carica_id'] == '1' ? 'On.' : 'Sen.', ucfirst($p['nome']) . ' ' . strtoupper($p['cognome'])); echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true)); $storico = OppCaricaPeer::getStoricoInteressePoliticoArgomenti($p['id'], $tags_ids, $data_condition); foreach ($storico as $key => $value) { $msg = sprintf("\t %s => %7.2f\n", $key, round($value, 2)); echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true)); } } $msg = sprintf("%d parlamentari elaborati\n", $cnt); echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true)); }