public static async Task ReadFromKinesis() { dicPrefixo = new Dictionary <string, string>(); var file = "last_iterator_id.txt"; _client = new AmazonKinesisClient(workConfig["AccessKeyAWS"], workConfig["SecretKeyAWS"], RegionEndpoint.USEast1); try { var describer = await _client.DescribeStreamAsync(new DescribeStreamRequest { StreamName = workConfig["QueueNamedAWS"] }); var shards = describer.StreamDescription.Shards; foreach (var shard in shards) { var iterator_request = new GetShardIteratorRequest { StreamName = workConfig["QueueNamedAWS"], ShardId = shard.ShardId, ShardIteratorType = ShardIteratorType.LATEST, Timestamp = DateTime.MinValue }; var iterator = await _client.GetShardIteratorAsync(iterator_request); string curr_iterator_id = iterator.ShardIterator; string last_iterator_id = File.Exists(file) ? File.ReadAllText(file) : string.Empty; if (!string.IsNullOrEmpty(last_iterator_id)) { curr_iterator_id = last_iterator_id; } while (!string.IsNullOrEmpty(curr_iterator_id)) { var response = await _client.GetRecordsAsync(new GetRecordsRequest { ShardIterator = curr_iterator_id, Limit = 1 }); var next_iterator_id = response.NextShardIterator; var records = response.Records; //Console.Write("\r\n" + "Sequencial: " + curr_iterator_id + "\r\n"); if (records.Count > 0) { foreach (var record in records) { var strData = Encoding.UTF8.GetString(record.Data.ToArray()); var words = strData.Split(new string[] { "\\n" }, StringSplitOptions.None); foreach (var item in words) { Console.Write(item); var lines = item.Split('\n'); for (int i = 0; i < lines.Count() - 1; i++) { //GravaLog.GravaLogInformacao("Split linha registro - ServiceReader Linha: 194"); var msg_partes = lines[i].Split(','); //GravaLog.GravaLogInformacao("msg_partes - ServiceReader Linha: 197"); var addressAndTag = msg_partes[0].Replace("ns=2;s=", ""); //GravaLog.GravaLogInformacao("addressAndTag - ServiceReader Linha: 200"); string prefixoTagAtual; //como o codigo para ler o numero fila do tipo 1 foi separado do tipo 2 então agora o separador é constante. char separator = '.'; //Configuracoes.NumeroFila == "1" ? '\\' : '.'; if (addressAndTag.IndexOf(separator) == -1) { continue; } else { var tagPartes = addressAndTag.Split(separator); //GravaLog.GravaLogInformacao("tagPartes - ServiceReader Linha: 214"); var tagPartesPrefixo = tagPartes[0].Split(separator); //GravaLog.GravaLogInformacao("tagPartesPrefixo - ServiceReader Linha: 217"); prefixoTagAtual = tagPartes[3]; //GravaLog.GravaLogInformacao("prefixoTagAtual - ServiceReader Linha: 220"); nomeTagAtual = tagPartes[4].Split('\\').LastOrDefault(); //GravaLog.GravaLogInformacao("nomeTagAtual - ServiceReader Linha: 223"); } string strTagCombinada = prefixoTagAtual + "." + nomeTagAtual; CultureInfo culture = new CultureInfo("en-US"); DateTime dtRegistro; //GravaLog.GravaLogInformacao("dtRegistro - ServiceReader Linha: 231"); dtRegistro = Convert.ToDateTime(msg_partes[2].TrimEnd(), new CultureInfo("en-US")); //Grava Registro //GravaLog.GravaLogInformacao("Data.SetFila_Tabela - Grava fila completa - ServiceReader Linha: 236"); Data.SetFila_Tabela(Conexao.GetConnectionHist(workConfig), lines[i], dtRegistro, workConfig["QueueNamedAWS"], nomeTagAtual, msg_partes[1].TrimEnd(), prefixoTagAtual, curr_iterator_id); Int32 id_t_bitola = 0; GravaLog.GravaLogInformacao("Verifica se há nome da bitola no dicionario - ServiceReader Linha: 242"); if (dicPrefixo.TryGetValue(prefixoTagAtual + ".SP_BITOLA", out string valueTagBitola)) { GravaLog.GravaLogInformacao("Retorna nome da bitola - ServiceReader Linha: 245"); id_t_bitola = Data.GetIdBitola(Conexao.GetConnectionProd(workConfig), valueTagBitola); } //Grava na Tabela de Mudança if (dicPrefixo.TryGetValue(strTagCombinada, out string valueTag)) { GravaLog.GravaLogInformacao("Verifica mudança de valores - ServiceReader Linha: 253"); if (valueTag != null && valueTag != String.Empty) { GravaLog.GravaLogInformacao("Troca o valor da Tag no dicionario - ServiceReader Linha: 256"); dicPrefixo.Remove(strTagCombinada); dicPrefixo.Add(strTagCombinada, msg_partes[1].TrimEnd()); if (msg_partes[1].TrimEnd() != valueTag) { GravaLog.GravaLogInformacao("Data.SetFila_Tabela_Mudanca - Grava mudanca na tabela - Tag: " + nomeTagAtual + " Valor Anterior: " + valueTag + " Valor Atual: " + msg_partes[1].TrimEnd() + " - ServiceReader Linha: 263"); Data.SetFila_Tabela_Mudanca(Conexao.GetConnectionHist(workConfig), workConfig["QueueNamedAWS"], nomeTagAtual, msg_partes[1].TrimEnd(), prefixoTagAtual, valueTag); GravaLog.GravaLogInformacao("Identificada Tag que retorna posicao do canal - ServiceReader Linha: 268"); if (nomeTagAtual == "GRVATUAL" || nomeTagAtual == "CC_CURPGVNB") { if (dicPrefixo.TryGetValue(prefixoTagAtual + ".SS_BD1OUT", out string valueTagBD1OUT)) { GravaLog.GravaLogInformacao("BD1 desligada - ServiceReader Linha: 276"); if (valueTagBD1OUT == "1") { continue; } } GravaLog.GravaLogInformacao("Retorna ID da gaiola - ServiceReader Linha: 281"); Gaiola gaiola = null; if (prefixoTagAtual == "HH113") { if (dicPrefixo.TryGetValue(prefixoTagAtual + ".TB_Z13", out string valueBD2)) { if (Convert.ToInt32(valueBD2) == 0) { gaiola = RetornaGaiola("HF113"); } else { gaiola = RetornaGaiola(prefixoTagAtual); } } } else { gaiola = RetornaGaiola(prefixoTagAtual); } if (gaiola != null && gaiola.Num_Bloco > 0) { id_t_bitola = Data.GetIdBitolaNumBloco(Conexao.GetConnectionProd(workConfig), gaiola.Num_Bloco); if (id_t_bitola > 0) { GravaLog.GravaLogInformacao("Data.SetLaminacaoCambio_Canal - Grava dados do canal - " + "ID Bitola: - " + id_t_bitola + " ID Gaiola: " + gaiola.Id + " Posicao: " + Convert.ToInt32(msg_partes[1].TrimEnd()) + " - ServiceReader Linha: 288"); Data.SetLaminacaoCambio_Canal(Conexao.GetConnectionProd(workConfig), id_t_bitola, Convert.ToInt32(msg_partes[1].TrimEnd()), gaiola.Id, gaiola.Num_Bloco); } } } } } } else { dicPrefixo.Add(strTagCombinada, msg_partes[1].TrimEnd()); GravaLog.GravaLogInformacao("Identificada Tag que retorna posicao do canal - dicionario limpo - ServiceReader Linha: 320"); if (nomeTagAtual == "GRVATUAL" || nomeTagAtual == "CC_CURPGVNB") { if (dicPrefixo.TryGetValue(prefixoTagAtual + ".SS_BD1OUT", out string valueTagBD1OUT)) { if (valueTagBD1OUT == "1") { continue; } } Gaiola gaiola = null; if (prefixoTagAtual == "HH113") { if (dicPrefixo.TryGetValue(prefixoTagAtual + ".TB_Z13", out string valueBD2)) { if (Convert.ToInt32(valueBD2) == 0) { gaiola = RetornaGaiola("HF113"); } else { gaiola = RetornaGaiola(prefixoTagAtual); } } } else { gaiola = RetornaGaiola(prefixoTagAtual); } if (gaiola != null && gaiola.Num_Bloco > 0) { id_t_bitola = Data.GetIdBitolaNumBloco(Conexao.GetConnectionProd(workConfig), gaiola.Num_Bloco); if (id_t_bitola > 0) { GravaLog.GravaLogInformacao("Data.SetLaminacaoCambio_Canal - Grava dados do canal - " + "ID Bitola: - " + id_t_bitola + " ID Gaiola: " + gaiola.Id + " Posicao: " + Convert.ToInt32(msg_partes[1].TrimEnd()) + " - ServiceReader Linha: 319"); Data.SetLaminacaoCambio_Canal(Conexao.GetConnectionProd(workConfig), id_t_bitola, Convert.ToInt32(msg_partes[1].TrimEnd()), gaiola.Id, gaiola.Num_Bloco); } } } } } } } } //GravaLog.GravaLogInformacao("Novo registro da fila"); File.WriteAllText(file, next_iterator_id); curr_iterator_id = next_iterator_id; } } } catch (Exception ex) { logger.LogCritical($"KinesisWorker.ServiceReader exceção em {DateTimeOffset.Now:dd/MM/yyy HH:mm:ss} ... {ex.Message}"); GravaLog.GravaLogErro(ex.Message); if (!stoppingToken.IsCancellationRequested) { await ReadFromKinesis(); } } finally { if (!stoppingToken.IsCancellationRequested) { await ReadFromKinesis(); } } }
private static Gaiola RetornaGaiola(string pPrefixo) { //int retorno = 0; Gaiola retorno = new Gaiola(); try { if (pPrefixo.IndexOf("HF113") > -1) { if (dicPrefixo.TryGetValue(pPrefixo + ".TB_Z8", out string valueBD1)) { if (Convert.ToInt32(valueBD1) > 0) { retorno.Num_Bloco = Convert.ToInt32(valueBD1); } } if (retorno.Num_Bloco > 0) { retorno.Id = (int)eGaiola.BD1; retorno.Tipo = "BD1"; } } if (pPrefixo.IndexOf("HH113") > -1) { if (dicPrefixo.TryGetValue(pPrefixo + ".TB_Z13", out string valueBD2)) { if (Convert.ToInt32(valueBD2) > 0) { retorno.Num_Bloco = Convert.ToInt32(valueBD2); } } if (retorno.Num_Bloco > 0) { retorno.Id = (int)eGaiola.BD2; retorno.Tipo = "BD2"; } } if (pPrefixo.IndexOf("JN112") > -1) { if (dicPrefixo.TryGetValue(pPrefixo + ".TB_Z19", out string valueTANDEM)) { if (Convert.ToInt32(valueTANDEM) > 0) { retorno.Num_Bloco = Convert.ToInt32(valueTANDEM); } } if (retorno.Num_Bloco > 0) { if (dicPrefixo.TryGetValue(pPrefixo + ".CS_HRT2HD", out string valueUR2)) { if (valueUR2 != null) { retorno.Id = (int)eGaiola.UR2; retorno.Tipo = "UR2"; } } if (dicPrefixo.TryGetValue(pPrefixo + ".CS_HRTEHD", out string valueE3)) { if (valueE3 != null) { retorno.Id = (int)eGaiola.EDGE; retorno.Tipo = "EDGE"; } } if (dicPrefixo.TryGetValue(pPrefixo + ".CS_HRTNHD", out string valueUR2N)) { if (valueUR2N != null) { retorno.Id = (int)eGaiola.UR2N; retorno.Tipo = "UR2N"; } } if (dicPrefixo.TryGetValue(pPrefixo + ".CC_HRT2_1", out string valueC2)) { if (valueC2 != null) { retorno.Id = (int)eGaiola.C2; retorno.Tipo = "C2"; } } if (dicPrefixo.TryGetValue(pPrefixo + ".CC_HRTE_1", out string valueC2N)) { if (valueC2N != null) { retorno.Id = (int)eGaiola.C2N; retorno.Tipo = "C2N"; } } } } } catch (Exception ex) { GravaLog.GravaLogErro(ex.Message); } return(retorno); }