Skip to content

Commit

Permalink
Criado consumidor do serviço getTabelaLinha
Browse files Browse the repository at this point in the history
  • Loading branch information
luizvnasc committed Sep 22, 2019
1 parent a51b3e4 commit 7edf140
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 2 deletions.
1 change: 1 addition & 0 deletions model/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ type Linha struct {
CriadoEm int64 `json:"criado_em" bson:"criado_em"` //Data de criação do registro
AtualizadoEm int64 `json:"atualizado_em" bson:"atualizado_em"` // Data de atualização do registro
Pontos Pontos `json:"pontos" bson:"pontos"` // Pontos da Linha
Tabela Tabela `json:"tabela" bson:"tabela"` // Tabela da linha
}

// Linhas é um slice de linhas. Criado apenas para melhorar a leitura do código
Expand Down
47 changes: 45 additions & 2 deletions scheduler/urbs.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,14 @@ func (us *UrbsScheduler) getLinhas() {
return
}

us.getPontosLinhas(linhas)
linhas, err = us.getPontosLinhas(linhas)
if err != nil {
log.Printf("Erro ao obter os pontos das linhas: %q", err)
}
linhas, err = us.getTabelaLinhas(linhas)
if err != nil {
log.Printf("Erro ao obter a tabela das linhas: %q", err)
}

if err := us.store.SaveLinhas(linhas); err != nil {
log.Printf("Erro ao salvar linhas no banco: %q", err)
Expand Down Expand Up @@ -83,7 +90,7 @@ func (us *UrbsScheduler) getPontosLinhas(linhas model.Linhas) (model.Linhas, err
select {
case err := <-errChannels[i]:
log.Printf("Erro ao obter pontos da linha %s: %q", linhas[i].Codigo, err)
return model.Linhas{}, nil
return model.Linhas{}, err
case pontos := <-dataChannels[i]:
linhas[i].Pontos = pontos
}
Expand Down Expand Up @@ -115,6 +122,42 @@ func (us *UrbsScheduler) getPontos(wg *sync.WaitGroup, errChan chan error, dataC

}

// getTabelaLinhas recebe como parâmetro uma lista de linhas e armazena suas respectivas tabelas.
// Esta função chama a função getTabelaLinha de forma concorrente e caso ocorra um erro ele ignora
// os resultados corretos e não atualiza a tabela da linha.
func (us *UrbsScheduler) getTabelaLinhas(linhas model.Linhas) (model.Linhas, error) {

errChannels := make([]chan error, len(linhas))
dataChannels := make([]chan model.Tabela, len(linhas))

for i := range errChannels {
errChannels[i] = make(chan error, 1)
dataChannels[i] = make(chan model.Tabela, 1)
defer close(errChannels[i])
defer close(dataChannels[i])
}

var wg sync.WaitGroup
wg.Add(len(linhas))

for i, linha := range linhas {
go us.getTabelaLinha(&wg, errChannels[i], dataChannels[i], linha.Codigo)
time.Sleep(3 * time.Millisecond) //evita reset de conexão
}
wg.Wait()

for i := range linhas {
select {
case err := <-errChannels[i]:
log.Printf("Erro ao obter Tabela da linha %s: %q", linhas[i].Codigo, err)
return model.Linhas{}, err
case tab := <-dataChannels[i]:
linhas[i].Tabela = tab
}
}
return linhas, nil
}

func (us *UrbsScheduler) getTabelaLinha(wg *sync.WaitGroup, errChan chan error, dataChan chan model.Tabela, codigo string) {
defer wg.Done()

Expand Down
13 changes: 13 additions & 0 deletions scheduler/urbs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,19 @@ func TestUrbsScheduler(t *testing.T) {

})

t.Run("getTabelaLinhas", func(t *testing.T) {
scheduler, _ := NewUrbsScheduler(s)
linhas, _ := scheduler.store.Linhas()
//Reinicia os pontos das linhas
for i := range linhas {
linhas[i].Tabela = model.Tabela{}
}
linhas, err := scheduler.getTabelaLinhas(linhas)
if err != nil {
t.Errorf("Erro ao obter as tabelas das linhas: %q", err)
}
})

}

func AssertNumberOfDocuments(ctx context.Context, t *testing.T, coll *mongo.Collection, want int64) {
Expand Down
1 change: 1 addition & 0 deletions store/mongo.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ func (ms *MongoStore) SaveLinhas(linhas model.Linhas) (err error) {
if linhaCadastrada.Codigo == linha.Codigo {
l = &linhaCadastrada
l.Pontos = linha.Pontos
l.Tabela = linha.Tabela
break
}
}
Expand Down

0 comments on commit 7edf140

Please sign in to comment.