Utente:MauroBot/BotCancellazioni/main.js
Questa pagina definisce alcuni parametri di aspetto e comportamento generale di tutte le pagine. Per personalizzarli vedi Aiuto:Stile utente.
Nota: dopo aver salvato è necessario pulire la cache del proprio browser per vedere i cambiamenti (per le pagine globali è comunque necessario attendere qualche minuto). Per Mozilla / Firefox / Safari: fare clic su Ricarica tenendo premuto il tasto delle maiuscole, oppure premere Ctrl-F5 o Ctrl-R (Command-R su Mac); per Chrome: premere Ctrl-Shift-R (Command-Shift-R su un Mac); per Konqueror: premere il pulsante Ricarica o il tasto F5; per Opera può essere necessario svuotare completamente la cache dal menù Strumenti → Preferenze; per Internet Explorer: mantenere premuto il tasto Ctrl mentre si preme il pulsante Aggiorna o premere Ctrl-F5.
// <nowiki>
/*=================================================================================================
*
* main.js
*
* La funzione si occupa dell'avvio e della gestione del bot
*
* ================================================================================================
*/
// La variabile contiene i messaggi di log del bot
var messages = [];
var currentAppStatus;
/*=================================================================================================
*
* Funzione startDeletionBot()
*
* La funzione avvia l'esecuzione del bot
*
* ================================================================================================
*/
function startDeletionBot()
{
var appStatusRouter = [];
r = {gestioneCategorieGiornaliere:false, gestioneCategorieMensili:false, gestioneCategorieAnnuali:false, letturaPDC:false, leggiStatoCatInCorso:false};
d = new Date();
// Selezione delle funzione da eseguire durante il run del bot
// Il primo giorno di ogni mese attivo la gestione delle categorie mensili
if( d.getDate() == 1 )
{
r['gestioneCategorieMensili'] = true;
// A gennaio attivo la gestione delle categorie annuali
if( d.getMonth() == 0 )
r['gestioneCategorieAnnuali'] = true;
}
// Alle 12 gestisco l'aggiornamento della categoria Procedure di cancellazione in corso
//if( d.getHours() == 12 )
// r['leggiStatoCatInCorso'] = true;
// Funzioni eseguite ad ogni run
r['gestioneCategorieGiornaliere'] = true;
r['letturaPDC'] = true;
for( key in r )
{
if( r[key] )
appStatusRouter.push(key);
}
mainDeletionBot(new Date(), days, appStatusRouter, 15);
}
/*=================================================================================================
*
* Funzione mainDeletionBot()
*
* Funzione principale del bot
*
* ================================================================================================
*/
function mainDeletionBot(PDC_date, days, appStatusRouter, timeout)
{
var catStatus = [];
var PDC_Status = [];
var PDC_Errors = [];
var iw = 0, ic = 0;
var writeData = [];
var writeStatus;
var daysCnt=0;
var statusCnt=0;
var nextAppStatus;
currentAppStatus = 'selectStatus';
botTimeout = setTimeout(function(){ currentAppStatus='timeout'; }, timeout*60*1000 );
token = mw.user.tokens.get( 'editToken' );
startDate = new Date();
// Il codice viene eseguito ogni 100 ms fino alla conclusione
interval = setInterval(function() {
d = new Date();
switch( currentAppStatus )
{
case 'selectStatus':
if( statusCnt == appStatusRouter.length )
currentAppStatus = 'finish';
else
{
currentAppStatus = appStatusRouter[statusCnt];
statusCnt++;
}
break;
case 'gestioneCategorieGiornaliere':
// Avvio la gestione delle categorie giornaliere
messages.push('['+d.toISOString()+'] *** Gestione delle categorie giornaliere ***');
catStatus.length = 0;
for(var i=0; i < tipologie.length; i++)
{
catStatus.push( new catStatusObj() );
creazioneCategorie(tipologie[i], new Date(PDC_date.getTime()), days, catStatus[i]);
}
currentAppStatus = 'runningCategorie';
// Stato da eseguire quando le categorie giornaliere saranno processate
nextAppStatus = 'selectStatus';
// ic è il numero delle sessioni in parallelo
ic = tipologie.length;
break;
case 'gestioneCategorieMensili':
// Avviso la gestione delle categorie
messages.push('['+d.toISOString()+'] *** Gestione delle categorie mensili ***');
catStatus.push( new catStatusObj() );
creazioneCategorieMese(PDC_date.getFullYear(), catStatus[0])
currentAppStatus = 'runningCategorie';
nextAppStatus = 'selectStatus';
ic = 1;
break;
case 'gestioneCategorieAnnuali':
// Avviso la gestione delle categorie
messages.push('['+d.toISOString()+'] *** Gestione delle categorie annuali ***');
catStatus.push( new catStatusObj() );
creazioneCategorieAnno(PDC_date.getFullYear(), catStatus[0])
currentAppStatus = 'runningCategorie';
nextAppStatus = 'selectStatus';
ic = 1;
break;
case 'runningCategorie':
// Attendo la lettura delle categorie
var n;
for( n=0; n < ic; n++)
{
if( !catStatus[n].done )
break;
}
if( n < ic )
break;
// Lettura completata
writeData.length = 0;
for( var n=0; n < ic; n++)
{
if( catStatus[n].ok )
writeData = writeData.concat(catStatus[n].writeData);
else
messages.push( catStatus[n].error );
}
// Stato successivo alla scrittura
currentAppStatus = 'scrittura';
break;
case 'scrittura':
if( writeData.length > 0 )
{
iw = 0;
writeStatus = new writeStatusObj();
scriviPagina(writeData[0].title, writeData[0].text, writeData[0].summary, token, writeStatus);
currentAppStatus = 'runningScrittura';
}
else
{
messages.push('['+d.toISOString()+'] Nessuna pagina da scrivere');
currentAppStatus = nextAppStatus;
}
break;
case 'runningScrittura':
if( writeStatus.done )
{
d = new Date();
if( !writeStatus.ok )
messages.push(writeStatus.error);
else
messages.push('['+d.toISOString()+'] Pagina creata/modificata: '+writeData[iw].title);
iw++;
if( iw < writeData.length )
{
writeStatus = new writeStatusObj();
scriviPagina(writeData[iw].title, writeData[iw].text, writeData[iw].summary, token, writeStatus);
}
else
currentAppStatus = nextAppStatus;
}
break;
case 'letturaPDC':
Running_PDC_date = new Date(PDC_date.getTime());
daysCnt = days;
messages.push('['+d.toISOString()+'] *** Lettura delle procedure di cancellazione ***');
case 'iniziaLetturaPDC':
messages.push('['+d.toISOString()+'] Lettura procedure del '+convertiDateToCategoria(Running_PDC_date) );
currentAppStatus = 'leggiGiorno';
PDC_Status.length = 0;
PDC_Errors.length = 0;
for(var i=0; i < tipologie.length; i++)
{
PDC_Status.push( new readPDCStatusObj() );
iniziaLetturaCategoriaPDC(tipologie[i], Running_PDC_date, PDC_Status[i]);
}
break;
case 'leggiGiorno':
finishCnt = 0;
for(var i=0; i < tipologie.length; i++)
{
if( PDC_Status[i].done && !PDC_Status[i].finish) // Lettura completata?
{
if( PDC_Status[i].ok )
{
// Gestione del query continue
if( PDC_Status[i].qcontinue )
iniziaLetturaCategoriaPDC(tipologie[i], Running_PDC_date, PDC_Status[i]);
else
PDC_Status[i].finish = true;
}
else
{
// errore!!
PDC_Status[i].finish = true;
PDC_Errors.push( PDC_Status[i].error );
}
}
if( PDC_Status[i].finish )
finishCnt++;
}
if( finishCnt == tipologie.length )
{
daysCnt--;
if( PDC_Errors.length > 0 )
{
messages = messages.concat(PDC_Errors);
// Gestione del giorno successivo
if( daysCnt == 0)
currentAppStatus = 'selectStatus';
else
{
Running_PDC_date.setDate(Running_PDC_date.getDate()-1);
currentAppStatus = 'iniziaLetturaPDC';
}
}
else
{
procedure = [];
for(var i=0; i < tipologie.length; i++)
procedure[tipologie[i]] = processLetturaCategoriaPDC(tipologie[i], PDC_Status[i].rawData);
processPDCErrate(procedure);
txt_conta = generaTabellaConteggio(Running_PDC_date, procedure);
txt_log = generaLogGiornaliero(Running_PDC_date, procedure);
writeData.length = 0;
writeData.push( {'title':Conta_Prefix+convertiDateToLogTxt(Running_PDC_date), 'text':txt_conta, 'summary':'Bot: aggiorno tabella di conteggio'} );
writeData.push( {'title':Log_Prefix+convertiDateToLogTxt(Running_PDC_date), 'text':txt_log, 'summary':'Bot: aggiorno log giornaliero'} );
// Gestione del giorno successivo
if( daysCnt == 0)
{
nextAppStatus = 'selectStatus';
currentAppStatus = 'scrittura';
}
else
{
Running_PDC_date.setDate(Running_PDC_date.getDate()-1);
nextAppStatus = 'iniziaLetturaPDC';
currentAppStatus = 'scrittura';
}
}
}
break;
case 'leggiStatoCatInCorso':
statusReq = {timestamp:false, done:false, ok:false, error:''};
statusLastUpd = {timestamp:false, done:false, ok:false, error:''};
leggiStatoCatInCorso(statusReq, statusLastUpd);
currentAppStatus = 'runningLeggiStatoCatInCorso';
break;
case 'runningLeggiStatoCatInCorso':
if( statusReq.done && statusLastUpd.done )
{
t1 = statusReq.timestamp.getTime();
t2 = statusLastUpd.timestamp.getTime();
t3 = d.getTime();
if( ( (t1 == t2) || ( (t1-t2) > 5*24*3600*1000 && (t3-t1) > 5*24*3600*1000 ) ) && ( (t3-t1) > 23*3600*1000 ) )
{
writeData.length = 0;
writeData.push( {'title':Page_LastCatUpd, 'text':'{{subst:#timel:YmdHis}}', 'summary':'Bot: aggiornamento'} );
nextAppStatus = 'selectStatus';
currentAppStatus = 'scrittura';
}
else
currentAppStatus = 'selectStatus';
}
break;
case 'timeout':
messages.push('['+d.toISOString()+'] *** TIMEOUT: esecuzione interrotta per il superamento del tempo limite ***');
case 'finish':
finishDate = new Date();
runningTime = Math.floor( (finishDate.getTime()-startDate.getTime())/1000 );
messages.push('['+d.toISOString()+'] *** ESECUZIONE COMPLETATA in '+Math.floor(runningTime/60)+' minuti e '+runningTime%60+' secondi ***');
clearTimeout(botTimeout);
clearInterval(interval);
currentAppStatus = 'finished';
}
},100);
}
// </nowiki>