Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        /// <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
        }
Ejemplo n.º 3
0
 /// <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.");
     }
 }
Ejemplo n.º 5
0
 /// <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);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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();
 }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
        /// <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);
            }
        }
Ejemplo n.º 15
0
 /// <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);
 }