calcolo se i tempi di servizio sono soddisfatti

2

Per uno strumento di segnalazione dei ticket, voglio calcolare se sono soddisfatte determinate ore di livello di servizio (slt). Questo è (un po 'semplificato): era il periodo di tempo tra l'apertura e la chiusura del biglietto all'interno di un certo slt. Ora c'è anche qualcosa chiamato una finestra di servizio (SW), come mo-fr, 9: 00-17: 00. Ora per calcolare se è stata soddisfatta una soglia, i tempi non all'interno del SW devono essere esclusi. Anche se non è previsto, i biglietti possono essere aperti o chiusi al di fuori del SW, dal momento che ci sono altri sla che consentono il servizio 24x7. Un ingegnere potrebbe lavorare su un biglietto al di fuori del SW, dal momento che potrebbe essere più facile per lui chiudere un biglietto mentre lo sta facendo. Forse stava lavorando su un biglietto correlato.

Per determinare il tempo impiegato da un ticket tra l'apertura e la chiusura, ho pensato a due algoritmi:

1) Distinguere tutte le possibili combinazioni di start_date e end_date all'interno o all'esterno del SW, in giorni diversi e così via (vedo 8 combinazioni). Quindi, per ciascuna combinazione, imposta una formula separata per calcolare il tempo impiegato dal ticket.

Inoltre: piccolo sovraccarico computazionale

Meno: piuttosto complesso, molto codice

2) Decidi per un'unità il più piccola possibile (i minuti sembrano essere appropriati), quindi per ogni unità tra start_date e end_date, decidi se questa unità è dentro o fuori dal SW. Se all'interno, aggiungi il tempo richiesto per il ticket.

Inoltre: molto semplice

Meno: grande overhead computazionale.

Sono inclinato verso 2) poiché la computazione è economica, il codice semplice è da preferire e il resto del programma contiene molte query in db che richiedono molto tempo, quindi un piccolo calcolo non sarà notevole.

Tuttavia, entrambe le soluzioni sembrano non molto eleganti per me. Qualcuno vede una terza via?

    
posta Isaac 18.11.2013 - 07:18
fonte

1 risposta

2

Ecco come probabilmente risolverei il problema:

  • se la data di inizio è esterna alla finestra del servizio, sostituirla con la successiva combinazione di data / ora che si trova all'interno. Nota che questa modifica non influirà sul risultato finale.
  • stesso per la data di fine
  • Sia T1 l'intervallo di tempo tra la data di inizio e di fine (in un'unità arbitraria)
  • Sia T2 la somma di tutti gli intervalli di tempo non di servizio tra la data di inizio e di fine. Tieni presente che questo calcolo è ora molto semplice a causa del cambiamento nei primi due passaggi
  • T1-T2 è il risultato che stai cercando
risposta data 18.11.2013 - 07:41
fonte

Leggi altre domande sui tag