Utente:FixBot/DeletionBot/main2.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.
// La variabile contiene i messaggi di log del bot
var messages = [];
var currentAppStatus;
if (wgTitle == "FixBot/TestBot2")
{
// Il bot viene eseguito quando l'intera pagina è stata caricata
$(window).load(startDeletionBot);
}
function startDeletionBot()
{
var appStatusRouter;
appStatusRouter = generaTabellaRouting('execAggiornaLog');
mainDeletionBot2(new Date(), 8, appStatusRouter, 5);
}
function generaTabellaRouting(state)
{
r = {start:'', gestioneCategorieGiornaliere:'', gestioneCategorieMensili:'', gestioneCategorieAnnuali:'', letturaPDC:''};
switch( state )
{
// Gestione delle sole categorie annuali
case 'execCategorieAnnuali':
r.start = 'gestioneCategorieAnnuali';
r.gestioneCategorieAnnuali = 'finish';
break;
// Gestione delle sole categorie mensili
case 'execCategorieMensili':
r.start = 'gestioneCategorieMensili';
r.gestioneCategorieMensili = 'finish';
break;
// Gestione delle sole categorie giornaliere
case 'execCategorieGiornaliere':
r.start = 'gestioneCategorieGiornaliere';
r.gestioneCategorieGiornaliere = 'finish';
break;
// Aggiornamento delle tabelle
case 'execAggiornaLog':
r.start = 'gestioneCategorieGiornaliere';
r.gestioneCategorieGiornaliere = 'letturaPDC';
r.letturaPDC = 'finish';
break;
// Aggiornamento delle categorie mensili e delle tabelle
case 'execCategorieMensiliLog':
r.start = 'gestioneCategorieMensili';
r.gestioneCategorieMensili = 'gestioneCategorieGiornaliere';
r.gestioneCategorieGiornaliere = 'letturaPDC';
r.letturaPDC = 'finish';
break;
// Aggiornamento completo (categorie annuali, mensili, log)
case 'execCompleta':
r.start = 'gestioneCategorieAnnuali';
r.gestioneCategorieAnnuali = 'gestioneCategorieMensili';
r.gestioneCategorieMensili = 'gestioneCategorieGiornaliere';
r.gestioneCategorieGiornaliere = 'letturaPDC';
r.letturaPDC = 'finish';
break;
}
return r;
}
/*=================================================================================================
*
* Funzione mainDeletionBot()
*
* Funzione principale del bot
*
* ================================================================================================
*/
function mainDeletionBot2(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 nextAppStatus;
currentAppStatus = appStatusRouter.start;
botTimeout = setTimeout(function(){ currentAppStatus='timeout'; }, timeout*60*1000 );
//token = 0;
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 'gestioneCategorieGiornaliere':
// Avvio la gestione delle categorie giornaliere
messages.push('['+d.toISOString()+'] *** Gestione delle categorie giornaliere ***');
catStatus = [];
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 = appStatusRouter.gestioneCategorieGiornaliere;
// 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])
summary = 'Bot: creazione/aggiornamento categorie di servizio';
currentAppStatus = 'runningCategorie';
nextAppStatus = appStatusRouter.gestioneCategorieMensili;
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])
summary = 'Bot: creazione/aggiornamento categorie di servizio';
currentAppStatus = 'runningCategorie';
nextAppStatus = appStatusRouter.gestioneCategorieAnnuali;
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 = [];
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 = [];
PDC_Errors = [];
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 )
{
if( PDC_Errors.length > 0 )
messages = messages.concat(PDC_Errors);
else
{
procedure = [];
for(var i=0; i < tipologie.length; i++)
procedure[tipologie[i]] = processLetturaCategoriaPDC(tipologie[i], PDC_Status[i].rawData);
processPDCErrate(procedure);
txt = generaTabellaConteggio(Running_PDC_date, procedure);
//txt = generaLogGiornaliero(PDC_Date, procedure);
writeData = [];
//console.log(Conta_Prefix+convertiDateToLogTxt(Running_PDC_date));
writeData.push( {'title':Conta_Prefix+convertiDateToLogTxt(Running_PDC_date), 'text':txt, 'summary':'Bot: aggiorno tabella di conteggio'} );
// Gestione del giorno successivo
daysCnt--;
if( daysCnt == 0)
{
nextAppStatus = appStatusRouter.letturaPDC;
currentAppStatus = 'scrittura';
}
else
{
Running_PDC_date.setDate(Running_PDC_date.getDate()-1);
nextAppStatus = 'iniziaLetturaPDC';
currentAppStatus = 'scrittura';
}
}
}
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() );
messages.push('['+d.toISOString()+'] *** ESECUZIONE COMPLETATA in '+runningTime/60+' minuti e '+runningTime%60+' secondi ***');
clearTimeout(botTimeout);
clearInterval(interval);
console.log(messages);
}
},100);
}