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?