def __init__(self, geradorDeChegadasDeEntidades, geradorDeTempoEntreFalhasServidorUm, geradorDeTempoEntreFalhasServidorDois, geradorDeTempoDeFalhaServidorUm, geradorDeTempoDeFalhaServidorDois, geradorDeTempoDeServicoServidorUm, geradorDeTempoDeServicoServidorDois, filaDoServidorUm, filaDoServidorDois, loglist): init_sistema.iniciarContadores(self) init_sistema.iniciarCalculadoresDeMedia(self) init_sistema.iniciarSomadoresDeTempoTotal(self) init_sistema.iniciarComponentesDosServidores(self, filaDoServidorUm, filaDoServidorDois) self._relogio = Relogio() self._listaDeEventosFuturos = ListaDeEventosFuturos() self._historicoDeChegadaDeEntidades = [] self._historicoDeSaidaDeEntidades = [] self._tempoRestanteDeSimulacao = 0 self._geradorDeChegadasDeEntidades = geradorDeChegadasDeEntidades self._geradorDeTempoEntreFalhasServidorUm = geradorDeTempoEntreFalhasServidorUm self._geradorDeTempoEntreFalhasServidorDois = geradorDeTempoEntreFalhasServidorDois self._geradorDeTempoDeServicoServidorUm = geradorDeTempoDeServicoServidorUm self._geradorDeTempoDeServicoServidorDois = geradorDeTempoDeServicoServidorDois self._geradorDeTempoDeFalhaServidorUm = geradorDeTempoDeFalhaServidorUm self._geradorDeTempoDeFalhaServidorDois = geradorDeTempoDeFalhaServidorDois self._loglist = loglist self._simulacaoAcabou = True self._tempoTotalDeSimulacao = 0
class Simulador(): def __init__(self, geradorDeChegadasDeEntidades, geradorDeTempoEntreFalhasServidorUm, geradorDeTempoEntreFalhasServidorDois, geradorDeTempoDeFalhaServidorUm, geradorDeTempoDeFalhaServidorDois, geradorDeTempoDeServicoServidorUm, geradorDeTempoDeServicoServidorDois, filaDoServidorUm, filaDoServidorDois, loglist): init_sistema.iniciarContadores(self) init_sistema.iniciarCalculadoresDeMedia(self) init_sistema.iniciarSomadoresDeTempoTotal(self) init_sistema.iniciarComponentesDosServidores(self, filaDoServidorUm, filaDoServidorDois) self._relogio = Relogio() self._listaDeEventosFuturos = ListaDeEventosFuturos() self._historicoDeChegadaDeEntidades = [] self._historicoDeSaidaDeEntidades = [] self._tempoRestanteDeSimulacao = 0 self._geradorDeChegadasDeEntidades = geradorDeChegadasDeEntidades self._geradorDeTempoEntreFalhasServidorUm = geradorDeTempoEntreFalhasServidorUm self._geradorDeTempoEntreFalhasServidorDois = geradorDeTempoEntreFalhasServidorDois self._geradorDeTempoDeServicoServidorUm = geradorDeTempoDeServicoServidorUm self._geradorDeTempoDeServicoServidorDois = geradorDeTempoDeServicoServidorDois self._geradorDeTempoDeFalhaServidorUm = geradorDeTempoDeFalhaServidorUm self._geradorDeTempoDeFalhaServidorDois = geradorDeTempoDeFalhaServidorDois self._loglist = loglist self._simulacaoAcabou = True self._tempoTotalDeSimulacao = 0 def iniciarSimulacao(self, tempoTotalDeSimulacao): listaDeChegadas = self._geradorDeChegadasDeEntidades.obterListaDeChegadasDasEntidades(tempoTotalDeSimulacao, 0) self._simulacaoAcabou = False while (listaDeChegadas.possuiEvento()): evento = listaDeChegadas.obterProximoEvento() self._listaDeEventosFuturos.adcionarEvento(evento) self._tempoRestanteDeSimulacao += tempoTotalDeSimulacao self._tempoTotalDeSimulacao += tempoTotalDeSimulacao self.simulaUmPasso() def simulaUmPasso(self): if(self._simulacaoAcabou): return False proximoEvento = self._listaDeEventosFuturos.obterProximoEvento() avancoDeTempo = 0 if(proximoEvento != None): if(proximoEvento.obterTempoQueOcorre() > self._relogio.obterEmMinutos()): avancoDeTempo = proximoEvento.obterTempoQueOcorre() - self._relogio.obterEmMinutos() checa_servidores.checarSeServidorUmEntraEmFalha(self, avancoDeTempo) checa_servidores.checarSeServidorDoisEntraEmFalha(self, avancoDeTempo) checa_servidores.checarSeAlgumServidorSaiDaFalha(self, avancoDeTempo) checa_servidores.checarSeServidorUmTerminouOServico(self, avancoDeTempo) checa_servidores.checarSeServidorDoisTerminouOServico(self, avancoDeTempo) if(proximoEvento != None): if(proximoEvento.obterTipo() == TipoDoEvento.ENTRADA): self._historicoDeChegadaDeEntidades.append(proximoEvento) trata_eventos.tratarEventoDeEntrada(self, proximoEvento) elif(proximoEvento.obterTipo() == TipoDoEvento.SAIDA): trata_eventos.tratarEventoDeSaida(self, proximoEvento) elif(proximoEvento.obterTipo() == TipoDoEvento.FIM_DA_SIMULACAO): self._relogio.adiantarMinutos(avancoDeTempo) self._loglist.append(self._obterTempoFormatado() + 'Simulacao terminou.') self._simulacaoAcabou = True self._relogio.adiantarMinutos(avancoDeTempo) if(proximoEvento == None): self._tempoRestanteDeSimulacao -= 1 self._tempoRestanteDeSimulacao -= avancoDeTempo if(self._tempoRestanteDeSimulacao < 0): self._listaDeEventosFuturos.adcionarEvento(Evento(TipoDoEvento.FIM_DA_SIMULACAO, self._relogio.obterEmMinutos())) self._amostrasEntidadesEsperandoNaFilaUm.append(self._filaDoServidorUm.obterQuantasEntidadesPossui()) self._amostrasEntidadesEsperandoNaFilaDois.append(self._filaDoServidorDois.obterQuantasEntidadesPossui()) return True def _obterTempoFormatado(self): return 'Tempo no relogio: '+ str(self._relogio.obterEmMinutos()) + ' min ' def gerarRelatorioDaSimulacao(self, nomeDoArquivoDoRelatorio): relatorio_sistema.gerarRelatorio(self, nomeDoArquivoDoRelatorio) def gerarRelatorioParcialDaSimulacao(self, nomeDoArquivoDoRelatorio): relatorio_sistema.gerarRelatorioParcial(self, nomeDoArquivoDoRelatorio)
class TesteRelogio(unittest.TestCase): def setUp(self): self.relogioEmZero = Relogio() self.umDiaEmMinutos = 1440.0 self.umDiaEmHoras = 24.0 self.umDiaEmSegundos = 86400.0 def testSeNaoForPassadoUmTempoInicialIniciaEmZero(self): relogioInicial = Relogio() self.assertEqual(0.0, relogioInicial.obterEmMinutos()) self.assertEqual(0.0, relogioInicial.obterEmDias()) self.assertEqual(0.0, relogioInicial.obterEmHoras()) self.assertEqual(0.0, relogioInicial.obterEmSegundos()) def testAposAdiantadoOTempoAtualSeraOTempoAtualMaisOAdiantamento(self): self.relogioEmZero.adiantarMinutos(15.0) self.assertEqual(15.0, self.relogioEmZero.obterEmMinutos()) self.relogioEmZero.adiantarMinutos(15.0) self.assertEqual(30.0, self.relogioEmZero.obterEmMinutos()) self.relogioEmZero.adiantarMinutos(10.0) self.assertEqual(40.0, self.relogioEmZero.obterEmMinutos()) self.relogioEmZero.adiantarMinutos(5.5) self.assertEqual(45.5, self.relogioEmZero.obterEmMinutos()) def testPodeAdiantarEmMinutosEObterEmSegundos(self): self.relogioEmZero.adiantarMinutos(self.umDiaEmMinutos) self.assertEqual(self.umDiaEmSegundos, self.relogioEmZero.obterEmSegundos()) def testPodeAdiantarEmMinutosEObterEmHoras(self): self.relogioEmZero.adiantarMinutos(self.umDiaEmMinutos) self.assertEqual(self.umDiaEmHoras, self.relogioEmZero.obterEmHoras()) def testPodeAdiantarEmMinutosEObterEmDias(self): self.relogioEmZero.adiantarMinutos(self.umDiaEmMinutos) self.assertEqual(1.0, self.relogioEmZero.obterEmDias()) def testPodeAdiantarEmSegundosEObterEmMinutos(self): self.relogioEmZero.adiantarSegundos(self.umDiaEmSegundos) self.assertEqual(self.umDiaEmMinutos, self.relogioEmZero.obterEmMinutos()) def testPodeAdiantarEmSegundosEObterEmHoras(self): self.relogioEmZero.adiantarSegundos(self.umDiaEmSegundos) self.assertEqual(self.umDiaEmHoras, self.relogioEmZero.obterEmHoras()) def testPodeAdiantarEmSegundosEObterEmDias(self): self.relogioEmZero.adiantarSegundos(self.umDiaEmSegundos) self.assertEqual(1.0, self.relogioEmZero.obterEmDias()) def testPodeAdiantarEmHorasEObterEmMinutos(self): self.relogioEmZero.adiantarHoras(self.umDiaEmHoras) self.assertEqual(self.umDiaEmMinutos, self.relogioEmZero.obterEmMinutos()) def testPodeAdiantarEmHorasEObterEmSegundos(self): self.relogioEmZero.adiantarHoras(self.umDiaEmHoras) self.assertEqual(self.umDiaEmSegundos, self.relogioEmZero.obterEmSegundos()) def testPodeAdiantarEmHorasEObterEmDias(self): self.relogioEmZero.adiantarHoras(self.umDiaEmHoras) self.assertEqual(1.0, self.relogioEmZero.obterEmDias()) def testPodeAdiantarEmDiasEObterEmMinutos(self): self.relogioEmZero.adiantarDias(1.0) self.assertEqual(self.umDiaEmMinutos, self.relogioEmZero.obterEmMinutos()) def testPodeAdiantarEmDiasEObterEmSegundos(self): self.relogioEmZero.adiantarDias(1.0) self.assertEqual(self.umDiaEmSegundos, self.relogioEmZero.obterEmSegundos()) def testPodeAdiantarEmDiasEObterEmHoras(self): self.relogioEmZero.adiantarDias(1.0) self.assertEqual(self.umDiaEmHoras, self.relogioEmZero.obterEmHoras())
def setUp(self): self.relogioEmZero = Relogio() self.umDiaEmMinutos = 1440.0 self.umDiaEmHoras = 24.0 self.umDiaEmSegundos = 86400.0
def testSeNaoForPassadoUmTempoInicialIniciaEmZero(self): relogioInicial = Relogio() self.assertEqual(0.0, relogioInicial.obterEmMinutos()) self.assertEqual(0.0, relogioInicial.obterEmDias()) self.assertEqual(0.0, relogioInicial.obterEmHoras()) self.assertEqual(0.0, relogioInicial.obterEmSegundos())