Exemple #1
0
        public async Task<string[]> GetMachines()
        {
            //invio richiesta query a microservizio database
            Utils.Query q = new Utils.Query { Type = "GetMachines" };
            var message = new AMQPMessage { Type = AMQPMessageType.Query, Data = JsonConvert.SerializeObject(q), Sender = "management" };
            await _amqpconn.SendMessageAsync("direct_message", "database", JsonConvert.SerializeObject(message));

            //ricezione query result
            string result = await taskCompletionSource.Task;
            var machines = JsonConvert.DeserializeObject<List<String>>(result).ToArray(); 
            return machines;
        }
Exemple #2
0
        public static async void GetTelemetryFromDB(string machineId, int period, string field)
        {
            try
            {
                var query = new Query();
                query.MachineId = machineId;
                query.Period    = period;
                query.Field     = field;
                var data    = JsonConvert.SerializeObject(query);
                var request = new AMQPMessage();
                request.Sender = _config.Communications.AMQP.Queue;
                request.Data   = data;
                request.Type   = AMQPMessageType.Query;

                var json = JsonConvert.SerializeObject(request);
                //Inizializzo nuovo canale dedicato e riservato al thread corrente
                var channel = _amqpconn.CreateChannel();
                //Scrivo messaggio query sul canale appena creato
                await _amqpconn.SendMessageAsync(_config.Communications.AMQP.Exchange, "database", json, channel);

                //Chiudo canale
                _amqpconn.CloseChannel(channel);
            }
            catch (Exception e)
            {
                log.Error($"Error: {e.Message}");
            }
        }
Exemple #3
0
        /// <summary>
        /// Metodo invocato ogni qual volta viene ricevuto un messaggio MQTT
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static async void OnMQTTMessageReceived(object sender, string e)
        {
            try
            {
                //Pubblicazione messaggio ricevuto su broker AMQP

                var message = new AMQPMessage {
                    Data = e, Type = AMQPMessageType.Telemetry, Sender = _config.Communications.AMQP.Queue
                };
                var json = JsonConvert.SerializeObject(message);
                await _amqpconn.SendMessageAsync(_config.Communications.AMQP.Exchange, "common", json);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("!ERROR: {0}", ex.ToString());
            }
        }
Exemple #4
0
        /// <summary>
        /// Metodo invocato ogni qual volta viene ricevuto un messaggio AMQP
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="msg"></param>
        public async static void OnAMQPMessageReceived(object sender, String msg)
        {
            try
            {
                var message = JsonConvert.DeserializeObject <AMQPMessage>(msg);
                switch (message.Type)
                {
                //Ricezione telemetrie istantanee da broker AMQP
                case AMQPMessageType.Telemetry:
                    //scrittura su database InfluxDB
                    await _dbconnection.WriteData(message.Data);

                    break;

                //Ricezione richiesta di query da parte del microservizio DATABASE
                case AMQPMessageType.Query:

                    var query      = JsonConvert.DeserializeObject <Query>(message.Data);
                    int period     = query.Period;
                    var machineId  = query.MachineId;
                    var req_sender = message.Sender;
                    var field      = query.Field;
                    var type       = query.Type;
                    var result     = "";

                    switch (type)
                    {
                    case "GetMachines":
                        result = await _dbconnection.GetMachines();

                        break;

                    case "GetFieldsByMachines":
                        var machines = JsonConvert.DeserializeObject <List <String> >(field);
                        result = await _dbconnection.GetFieldsByMachine(machines);

                        break;

                    default:
                        result = await _dbconnection.ReadData(machineId, field, period);

                        break;
                    }

                    var body = new AMQPMessage {
                        Type = AMQPMessageType.QueryResult, Data = result, Sender = _config.Communications.AMQP.Queue
                    };
                    var json = JsonConvert.SerializeObject(body);
                    //invio risposta
                    await _amqpconn.SendMessageAsync(_config.Communications.AMQP.Exchange, req_sender, json);

                    break;
                }

                Console.WriteLine("{0} - {1}: ", message.Type.ToString(), message.Data);
            }
            catch (Exception e)
            {
                log.ErrorFormat("!ERROR: {0}", e.ToString());
            }
        }