Files
C2P/C2P_CronJob/C2P_service.cs
Samuele E. Locatelli 9c128bedf6 vers 2.3.206
nuovo installer x cron
update C2P generale
2015-06-11 12:36:10 +02:00

193 lines
8.3 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using SteamWare;
using C2P_Data;
namespace C2P_CronJob
{
public partial class C2P_service : ServiceBase
{
public C2P_service()
{
InitializeComponent();
eventLog1 = new System.Diagnostics.EventLog();
if (!System.Diagnostics.EventLog.SourceExists("C2P_Source"))
{
System.Diagnostics.EventLog.CreateEventSource("C2P_Source", "C2P_CronjobLog");
}
eventLog1.Source = "C2P_Source";
eventLog1.Log = "C2P_CronjobLog";
}
protected override void OnStart(string[] args)
{
eventLog1.WriteEntry("C2P_Cronjob: servizio in OnStart");
// Set up a timer to trigger every minute.
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = memLayer.ML.confReadInt("timerShortSec") * 1000;
timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);
timer.Start();
}
protected override void OnStop()
{
eventLog1.WriteEntry("C2P_Cronjob: servizio in OnStop");
}
protected override void OnContinue()
{
eventLog1.WriteEntry("C2P_Cronjob: servizio in OnContinue.");
}
public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
{
// se modalità auto insert richieste quotidiane...
if (memLayer.ML.confReadBool("AutoMode"))
{
// verifico se ci sia una richiesta di processing quotidiana (o meno) e nel caso NON ci fosse la inserisco
if (!checkDailyReq)
{
creaRichiesteImport();
eventLog1.WriteEntry("Inserite richieste import quotidiane", EventLogEntryType.Information);
}
}
// verifico se ci siano nuove righe da processare...
if (checkPendingTicketReq)
{
eventLog1.WriteEntry("Trovate richieste pendenti, inizio processing...", EventLogEntryType.Information);
processTicketlist();
eventLog1.WriteEntry("Completato processing richieste pendenti", EventLogEntryType.Information);
}
// se richiesto registro timer short...
if (memLayer.ML.confReadInt("_logLevel") > 6) eventLog1.WriteEntry("Verifiche timer", EventLogEntryType.Information);
}
/// <summary>
/// verifica se ci siano o meno delle richeiste quotidiane di import già registrate
/// </summary>
protected bool checkDailyReq
{
get
{
bool answ = true;
// controllo se non sia già oltre l'ora "critica", altrimenti restituisce "ok" comunque... (x non continuare a creare altri record dalle 22 in poi)
if (DateTime.Now < DateTime.Now.Date.AddHours(memLayer.ML.confReadInt("importStartHour")))
{
try
{
// in questo caso cerco se ci siano pending all'ora configurata x avvio + 5 minuti
DateTime oraRif = DateTime.Now.Date.AddHours(memLayer.ML.confReadInt("importStartHour")).AddMinutes(5);
answ = (DtProxy.man.taImpTL.getPending(oraRif).Count > 0);
}
catch
{ }
}
return answ;
}
}
/// <summary>
/// verifica se ci siano richieste inevase e non scadute in tabella TicketList
/// </summary>
protected bool checkPendingTicketReq
{
get
{
bool answ = false;
try
{
answ = (DtProxy.man.taImpTL.getPending(DateTime.Now).Count > 0);
}
catch
{ }
return answ;
}
}
/// <summary>
/// chiama le procedure per il processing della ticket list
/// </summary>
protected void processTicketlist()
{
DtProxy.man.taImpTL.processQueue(memLayer.ML.confReadInt("maxTimeProcessOld"));
}
/// <summary>
/// aggiungo step 01...
/// </summary>
/// <param name="adesso"></param>
private int addStep01(DateTime adesso)
{
int answ = 0;
// effettuo spostamento file A PRIORI...
string importDataFolder = memLayer.ML.confReadString("importDataFolder");
string archiveDataFolder = memLayer.ML.confReadString("archiveDataFolder");
string uplDir = memLayer.ML.confReadString("uplDir");
string archDir = memLayer.ML.confReadString("archDir");
// calcolo nuova cartella archivio (anno/mese/gg_ora)
archiveDataFolder = string.Format(@"{0}{1:yyyy}\{1:MM}\{1:dd}\{1:HHmmss}\", archiveDataFolder, adesso);
archDir = string.Format(@"{0}{1:yyyy}\{1:MM}\{1:dd}\{1:HHmmss}\", archDir, adesso);
// sposto i files da TEMP a cartella archive
string[] file2move = memLayer.ML.confReadString("elencoFileImportAll").Split(memLayer.ML.confReadString("strSep").ToCharArray()[0]);
foreach (string fileName in file2move)
{
fileMover.obj.muoviFile(importDataFolder, archiveDataFolder, fileName);
}
answ = insertStepTicket("step01", 0, DateTime.Now, archDir);
return answ;
}
/// <summary>
/// fa la chiamata di inserimento step richeisto e aggiorna
/// </summary>
/// <param name="stepCode"></param>
/// <param name="prevNumTicket"></param>
/// <param name="dataRich"></param>
/// <returns>NumTicket generato</returns>
private int insertStepTicket(string stepCode, int prevNumTicket, DateTime dataRich, string filePath)
{
int answ = 0;
DS_Utility.Import_TicketListRow riga;
try
{
string param = string.Format(memLayer.ML.confReadString(stepCode + "_par"), prevNumTicket, filePath);
riga = (DS_Utility.Import_TicketListRow)DtProxy.man.taImpTL.InsertQuery(memLayer.ML.confReadString(stepCode + "_stp"), param, dataRich)[0];
answ = riga.NumTicket;
}
catch
{ }
return answ;
}
/// <summary>
/// inserisce le richieste quotidiane per processare import
/// </summary>
protected void creaRichiesteImport()
{
DateTime oraStart = DateTime.Now.Date.AddHours(memLayer.ML.confReadInt("importStartHour"));
// inserisco le richieste x la data odierna, ora da web.config, spostate di 1 min tra i vari step
//DS_Utility.Import_TicketListRow riga;
try
{
int NumTicket = 0;
DateTime adesso = DateTime.Now;
NumTicket = addStep01(adesso);
NumTicket = insertStepTicket("step02", NumTicket, adesso.AddMinutes(1), "");
NumTicket = insertStepTicket("step03", NumTicket, adesso.AddMinutes(2), "");
//// vecchia versione...
//// primo step
//string param = string.Format(memLayer.ML.confReadString("step01_par"), "0");
//riga = (DS_Utility.Import_TicketListRow)DtProxy.man.taImpTL.InsertQuery(memLayer.ML.confReadString("step01_stp"), param, oraStart)[0];
//// secondo step
//param = string.Format(memLayer.ML.confReadString("step02_par"), riga.NumTicket);
//riga = (DS_Utility.Import_TicketListRow)DtProxy.man.taImpTL.InsertQuery(memLayer.ML.confReadString("step02_stp"), param, oraStart.AddMinutes(1))[0];
//// terzo step!
//param = string.Format(memLayer.ML.confReadString("step03_par"), riga.NumTicket);
//riga = (DS_Utility.Import_TicketListRow)DtProxy.man.taImpTL.InsertQuery(memLayer.ML.confReadString("step03_stp"), param, oraStart.AddMinutes(2))[0];
}
catch
{ }
}
}
}