private static void WavesofPulses(object sender, ElapsedEventArgs e) { for (int i = 0; i < 750000; i++) { PulsesRQ request; PulsesRQ pulses = new PulsesRQ(); //var demoProcessedPulses = DemoProcessedPulses(pulses); var demoPruebas = DemoPruebasCLientes(pulses); List <AttributeDto> attributedto = new List <AttributeDto>(); List <string> listAttrb = new List <string>(); listAttrb.Add("attrLong"); listAttrb.Add("newattrLong"); AttributeDto adto = new AttributeDto("bpulse_demo_PruebasClientes", listAttrb); attributedto.Add(adto); List <string> listAttrb2 = new List <string>(); listAttrb2.Add("Long"); listAttrb2.Add("newLong"); AttributeDto adto2 = new AttributeDto("bpulse_bpulse_processedPulses", listAttrb2); attributedto.Add(adto2); request = demoPruebas; BPulseCsharpClient client = new BPulseCsharpClient().GetInstance(); client.SendPulseWithLong(pulses, attributedto); } }
/// <summary> /// Metodo para enviar los pulsos al serivico rest /// </summary> /// <param name="user">usuario configurado en app.config</param> /// <param name="pass">password configurado en app.config</param> /// <param name="pulse">pulso a enviar.</param> /// <returns>retorna un string de respuesta en arreglo de bytes.</returns> public bool SendByRestService(string user, string pass, PulsesRQ pulse) { var url = ConfigurationManager.AppSettings[BPulsesConstants.BPULSE_PROPERTY_URL_REST_SERVICE]; var basicAuth = Convert.ToBase64String(Encoding.UTF8.GetBytes(user + ":" + pass)); byte[] data = pulse.ToByteArray(); #region metodo actual que funciona using (var client = new WebClient()) { // Request configuration client.Headers.Add("Authorization", "Basic " + basicAuth); client.Headers[HttpRequestHeader.ContentType] = "application/x-protobuf"; client.Headers[HttpRequestHeader.Accept] = "application/x-protobuf"; // Request execution try { var response = client.UploadData(url, data); var stringResponse = client.Encoding.GetString(response); // TODO Probar que esto devuelva algo legible return(true); } catch (Exception e) { logger.Error(e.Message); return(false); } } #endregion }
/// <summary> /// Constructor de la clase para iniciar el proceso de envio /// </summary> /// <param name="pulseToSendByRest">Pulso a enviar</param> /// <param name="pulseRepository">repositorio de pulsos</param> /// <param name="pKeysToDelete">lista de guid de los pulsos a eliminar</param> /// <param name="tabindex"></param> /// <param name="dbMode">modo de bd por defecto MEMoria</param> public PulsesRestSenderThread(PulsesRQ pulseToSendByRest, IRepository pulseRepository, List <string> pKeysToDelete, int tabindex, string dbMode) { _pulseToSendByRest = pulseToSendByRest; _PulsesRepository = pulseRepository; _keysToDelete = pKeysToDelete; _tableIndex = tabindex; _dbMode = dbMode; Run(); }
/// <summary> /// Metodo para enviar pulsos. este metodo almacena los pulsos a enviar en memoria hasta llenar el maximo programado. /// </summary> /// <param name="pulse">Pulso construido por el cliente</param> /// <returns>regresa un string de exitoso o no exitoso.</returns> public string SendPulse(PulsesRQ pulse) { if (isStarted) { return(bpulseSender.SendPulse(pulse)); } else { throw new Exception("Error sending pulses: BPulseCsharpClient is not started yet. Please invoke the start() method."); } }
/// <summary> /// MEtodo que ejecuta el serivico REST del pulso /// </summary> /// <param name="summarizedPulsesRQToSend"></param> /// <param name="keysToDelete"></param> /// <param name="tableIndex"></param> /// <param name="_dbMode"></param> internal void executeBPulseRestService(PulsesRQ summarizedPulsesRQToSend, List <string> keysToDelete, int tableIndex, string _dbMode) { try { var restInvoker = new PulsesRestSenderThread(summarizedPulsesRQToSend, pulsesRepository, keysToDelete, tableIndex, _dbMode); } catch (Exception ex) { logger.Error("No se pudo realizar el envio de Pulso " + ex.Message); } }
/// <summary> /// metodo para enviar los pulsos con atributos attrLong, de tipo long /// </summary> /// <param name="pulse">Pulso construido por el client</param> /// <param name="listLong">lista de atributos a ser convertido.</param> public void SendPulseWithLong(PulsesRQ pulse, List <AttributeDto> listLong) { if (isStarted) { pulse = rebuildValue(pulse, listLong, false); SendPulse(pulse); } else { throw new Exception("Error sending pulses: BPulseJavaClient is not started yet. Please invoke the start() method."); } }
public void SavePulse(PulsesRQ pPulsesRQ) { var initTime = Calendar.EpochinMilis; string key = Guid.NewGuid().ToString(); bpulseRQMap.Add(key, pPulsesRQ); insertedRecords++; var epoch = Calendar.EpochinMilis; insertTimeMillisAverage = insertTimeMillisAverage + (epoch - initTime); }
public PulsesRQ getBpulseRQByKey(string pKey) { PulsesRQ resp = null; long initTime = Calendar.EpochinMilis; try { resp = bpulseRQMap[pKey]; getTimeMillisAverage = getTimeMillisAverage + (Calendar.EpochinMilis - initTime); } catch (Exception e) { logger.Error("FAILED TO GET THE PULSE BY KEY: ", e); throw e; } return(resp); }
public static PulsesRQ DemoProcessedPulses(PulsesRQ pulses) { pulses.Version = "0.1"; Pulse pulse = new Pulse(); pulse.InstanceId = "1"; pulse.TypeId = "bpulse_bpulse_processedPulses"; var epoch = Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds); pulse.Time = Calendar.EpochinMilis; Value value = new Value(); value.Name = "nErrors"; value.Values.Add("0"); pulse.Values.Add(value); value = new Value(); value.Name = "nPulses"; value.Values.Add("1"); pulse.Values.Add(value); value = new Value(); value.Name = "rsInstance"; value.Values.Add("gerardo"); pulse.Values.Add(value); value = new Value(); value.Name = "clientId"; value.Values.Add("demo"); pulse.Values.Add(value); value = new Value(); value.Name = "rsTime"; value.Values.Add("1200"); pulse.Values.Add(value); pulses.Pulse.Add(pulse); return(pulses); }
internal string SendPulse(PulsesRQ pulse) { Random random = new Random(); long additionalPulseId = random.Next(); long maxRepositorySize = 0; if (propDBMode.Equals(BPulsesConstants.BPULSE_MEM_PULSES_REPOSITORY)) { maxRepositorySize = maxMemNumPulses; } if (maxRepositorySize > pulsesRepository.getDBSize()) { BPulseSenderThread thread = new BPulseSenderThread(pulse, pulsesRepository); return(BPulsesConstants.BPULSE_SUCCESSFUL_RESPONSE); } else { logger.Error("FAILED SEND PULSE: THE MAX PULSESDB SIZE WAS REACHED, MAXIMUM: " + maxRepositorySize + ", CURRENT SIZE: " + this.pulsesRepository.getDBSize()); return(BPulsesConstants.BPULSE_FAILED_RESPONSE); } }
/// <summary> /// Metodo que reconstruye el valor del pulso en base al atributo de tipo long /// </summary> /// <param name="pulse">pulso</param> /// <param name="listAttr">lista de atributo</param> /// <param name="isTrace"></param> /// <returns></returns> private PulsesRQ rebuildValue(PulsesRQ pulse, List <AttributeDto> listLong, bool isTrace) { if (listLong == null || listLong.Count == 0) { return(pulse); } //var mapAttr = listAttrtoMap(listAttr); var rqbuilder = pulse; Dictionary <string, List <string> > mapAttr = listAttrtoMap(listLong); foreach (var pulseValue in rqbuilder.Pulse) { //get the list of attributes from the map if (!mapAttr.ContainsKey(pulseValue.TypeId)) { throw new Exception("El TypeId del pulso seleccionado no existe en la lista de pulsos de tipo Long"); } var listAttributes = mapAttr[pulseValue.TypeId]; if (listAttributes != null && listAttributes.Count > 0) { for (int i = 0; i < pulseValue.Values.Count; i++) { var value = pulseValue.Values[i]; if (listAttributes.Contains(value.Name) && value.Values.Count > 0) { for (int j = 0; j < value.Values.Count; j++) { var newValue = Convert.ToBase64String(Encoding.UTF8.GetBytes(value.Values[j])); value.Values[j] = newValue; } } } } } return(rqbuilder); }
/// <summary> /// contructor de la clase /// </summary> /// <param name="pulseToPersist">pulsos a enviar.</param> /// <param name="pulsesRepository">repositorio de pulsos en memoria.</param> public BPulseSenderThread(PulsesRQ pulseToPersist, IRepository pulsesRepository) { _pulseRQToPersist = pulseToPersist; _dbPulsesRepository = pulsesRepository; Run(); }
public static PulsesRQ DemoPruebasCLientes(PulsesRQ pulses) { pulses.Version = "0.1"; Pulse pulse = new Pulse(); pulse.InstanceId = "1"; pulse.TypeId = "bpulse_demo_PruebasClientes"; // var epoch = Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds); pulse.Time = Calendar.EpochinMilis; Value value = new Value(); value.Name = "dateAttr"; value.Values.Add("2017-01-23T00:01:25"); pulse.Values.Add(value); value = new Value(); value.Name = "numericAttr"; value.Values.Add("1500"); pulse.Values.Add(value); value = new Value(); value.Name = "listStringAttr"; value.Values.Add("Code01"); value.Values.Add("Code02"); value.Values.Add("Code03"); pulse.Values.Add(value); value = new Value(); value.Name = "client"; value.Values.Add("client_dotnet_demo"); pulse.Values.Add(value); value = new Value(); value.Name = "stringAttr"; value.Values.Add("gerardo"); pulse.Values.Add(value); value = new Value(); value.Name = ("attrLong"); value.Values.Add("[ { \"_id\": \"576c0e769ae931f5\", \"index\": 0, \"product\": \"HT206\", \"isActive\": true, \"price\": \"221\" } ]"); pulse.Values.Add(value); value = new Value(); value.Name = ("attrLong"); value.Values.Add("[ { \"_id\": \"576c0e769ae931f5\", \"index\": 0, \"product\": \"HT206\", \"isActive\": true, \"price\": \"221\" } ]"); pulse.Values.Add(value); value = new Value(); value.Name = ("newattrLong"); value.Values.Add("[ { \"_id\": \"576c0e769ae931f5\", \"index\": 0, \"product\": \"HT206\", \"isActive\": true, \"price\": \"221\" } ]"); pulse.Values.Add(value); //string json = """{ ""widget"":{ ""debug"":""on"",""window"":{ ""title"":""Sample Konfabulator Widget"",""name"":""main_window"",""width"":500,""height"":500},""image"":{ ""src"":""Images/Sun.png"",""name"":""sun1"",""hOffset"":250,""vOffset"":250,""alignment"":""center""},""text"":{ ""data':'Click Here','size':36,'style':'bold','name':'text1','hOffset':250,'vOffset':100,'alignment':'center','onMouseUp':'sun1.opacity = (sun1.opacity / 100) * 90;'} } }'"; pulses.Pulse.Add(pulse); Pulse pulse2 = new Pulse(); pulse2.InstanceId = "1"; pulse2.TypeId = "bpulse_bpulse_processedPulses"; pulse2.Time = Calendar.EpochinMilis; Value value2 = new Value(); value2.Name = "dateAttr"; value2.Values.Add("2017-01-23T00:01:25"); pulse2.Values.Add(value2); value2 = new Value(); value2.Name = "numericAttr"; value2.Values.Add("1500"); pulse2.Values.Add(value2); value2 = new Value(); value2.Name = "listStringAttr"; value2.Values.Add("Code01"); value2.Values.Add("Code02"); value2.Values.Add("Code03"); pulse2.Values.Add(value2); value2 = new Value(); value2.Name = "client"; value2.Values.Add("client_dotnet_demo"); pulse2.Values.Add(value2); value2 = new Value(); value2.Name = "stringAttr"; value2.Values.Add("gerardo"); pulse2.Values.Add(value2); value2 = new Value(); value2.Name = ("Long"); value2.Values.Add("[ { \"_id\": \"576c0e769ae931f5\", \"index\": 0, \"product\": \"HT206\", \"isActive\": true, \"price\": \"221\" } ]"); pulse2.Values.Add(value2); value2 = new Value(); value2.Name = ("newLong"); value2.Values.Add("[ { \"_id\": \"576c0e769ae931f5\", \"index\": 0, \"product\": \"HT206\", \"isActive\": true, \"price\": \"221\" } ]"); pulse2.Values.Add(value2); pulses.Pulse.Add(pulse2); return(pulses); }
/// <summary> /// metodo que maneja los envios por rest de los pulsos. /// </summary> private void executeRestPulsesSending() { try { //obtain the current key list IRepository pulsesRepository = _bpulseSender.getPulsesRepository(); object[] keys = pulsesRepository.getSortedbpulseRQMapKeys(); List <string> keyPulseListToDelete = new List <string>(); PulsesRQ summarizedPulsesRQToSend = null; PulsesRQ pulses = new PulsesRQ(); int totalOfPulsesToSend = BPulsesConstants.COMMON_NUMBER_0; int totalOfProcessedPulses = BPulsesConstants.COMMON_NUMBER_0; long summarizedTime = BPulsesConstants.COMMON_NUMBER_0; long init = BPulsesConstants.COMMON_NUMBER_0; long initGets = BPulsesConstants.COMMON_NUMBER_0; long summarizeGets = BPulsesConstants.COMMON_NUMBER_0; // logger.Info("BEGIN TIMER PULSES PROCESSING..." + " RECORDS READ FROM DB: " + pulsesRepository.countBpulsesRQ() + " IN PROGRESS: " + pulsesRepository.countMarkBpulseKeyInProgress()); foreach (object keyToProcess in keys) { string keyPulse = (string)keyToProcess; //obtain the associated pulse initGets = Calendar.EpochinMilis; PulsesRQ selectedPulsesRQ = null; try { selectedPulsesRQ = pulsesRepository.getBpulseRQByKey(keyPulse); } catch (Exception e) { logger.Error("ERROR TIMER PROCESSING", e); continue; } summarizeGets = summarizeGets + (Calendar.EpochinMilis - initGets); int totalPulsesOfCurrentKey = BPulsesConstants.COMMON_NUMBER_0; if (selectedPulsesRQ != null) { totalPulsesOfCurrentKey = selectedPulsesRQ.Pulse.Count; } if (selectedPulsesRQ != null) { //mark bpulse key as INPROGRESS pulsesRepository.markBpulseKeyInProgress(keyPulse); totalOfProcessedPulses++; //System.out.println("CURRENT NUMBER OF PULSES TO PROCESS: " + cantidadpulsosreal + " " + Calendar.getInstance().getTime() + " GET AVERAGEMILLIS " + summarizeGets + " PULSE PROCESSING AVERAGE TIME: " + summarizedTime); if (totalOfPulsesToSend + totalPulsesOfCurrentKey <= BPulsesConstants.DEFAULT_TIMER_MAX_NUMBER_GROUPED_PULSES) { init = Calendar.EpochinMilis; pulses.Version = selectedPulsesRQ.Version; pulses.Pulse.Add(selectedPulsesRQ.Pulse); totalOfPulsesToSend = totalOfPulsesToSend + totalPulsesOfCurrentKey; keyPulseListToDelete.Add(keyPulse); summarizedTime = summarizedTime + (Calendar.EpochinMilis - init); } else { //prepare to send the pulsesRQ to the RestService summarizedPulsesRQToSend = pulses; invokeBPulseRestService(_bpulseSender, summarizedPulsesRQToSend, keyPulseListToDelete, 0); summarizedPulsesRQToSend = null; pulses = new PulsesRQ(); pulses.Version = selectedPulsesRQ.Version; keyPulseListToDelete = new List <string>(); pulses.Pulse.Add(selectedPulsesRQ.Pulse); totalOfPulsesToSend = totalPulsesOfCurrentKey; keyPulseListToDelete.Add(keyPulse); } } } if (pulses != null && pulses.Pulse.Count > 0) { summarizedPulsesRQToSend = pulses; invokeBPulseRestService(_bpulseSender, summarizedPulsesRQToSend, keyPulseListToDelete, 0); } logger.Info("END TIMER PULSES PROCESSING...PROCESSED PULSES: " + totalOfProcessedPulses); } catch (Exception e) { logger.Error("ERROR TIMER PROCESSING", e); } }
/// <summary> /// Metodo que envia los pulsos seleccionados por Rest /// </summary> /// <param name="client">cliente </param> /// <param name="summarizedPulsesRQToSend"> pulsos a enviar</param> /// <param name="keysToDelete">lista de guis con los pulsos a eliminar del repositorio</param> /// <param name="tableIndex"></param> private void invokeBPulseRestService(BpulseSender client, PulsesRQ summarizedPulsesRQToSend, List <string> keysToDelete, int tableIndex) { client.executeBPulseRestService(summarizedPulsesRQToSend, keysToDelete, tableIndex, _dbMode); }