예제 #1
0
파일: Monitor.cs 프로젝트: gmahomarf/SAT
        private void monitorear()
        {
            try
            {
                Logger.Log("Monitoreo iniciado.");
                string queryAlertas =
                    "SELECT nombre, id_satelital, alerta_id, umbral_nivel_verde, umbral_nivel_amarilla," +
                    "       umbral_nivel_roja, umbral_lluvia_verde, umbral_lluvia_amarilla " +
                    "FROM" +
                    "(" +
                    "    SELECT nombre, id_satelital, alerta_id" +
                    "    FROM SAT.Estaciones" +
                    "    WHERE activa = 1 AND alerta_id IS NOT NULL" +
                    ") AS e " +
                    "INNER JOIN (" +
                    "    SELECT id, umbral_nivel_verde, umbral_nivel_amarilla, umbral_nivel_roja, " +
                    "    umbral_lluvia_verde, umbral_lluvia_amarilla" +
                    "    FROM SAT.alertas" +
                    ") AS a ON a.id = e.alerta_id;";
                string queryDatos;
                MySqlConnection con;
                MySqlCommand cmd;
                MySqlDataReader rdrMonitoreo;
                System.Collections.ArrayList alertasEstaciones;
                alerta alertaEstacion;
                while (true)
                {
                    con = new MySqlConnection(Properties.Resources.MySqlConn);
                    cmd = new MySqlCommand(queryAlertas, con);
                    if (con.State != System.Data.ConnectionState.Open)
                    {
                        con.Open();
                        Logger.Log("Conexion a BD abierta");
                    }
                    rdrMonitoreo = cmd.ExecuteReader();
                    Logger.Log("Query de estaciones y alertas ejecutado");
                    string ids = "";
                    alertasEstaciones = new System.Collections.ArrayList(50);
                    Logger.Log("Preparando para leer estaciones");
                    while (rdrMonitoreo.Read())
                    {
                        alertaEstacion = new alerta(rdrMonitoreo.GetString("id_satelital"));
                        //alertaEstacion.idSatelital = ;
                        alertaEstacion.nombre = rdrMonitoreo.GetString("nombre");
                        alertaEstacion.idAlerta = rdrMonitoreo.GetUInt32("alerta_id");
                        alertaEstacion.uNivelVerde = rdrMonitoreo.IsDBNull(3) ? -1.0 : rdrMonitoreo.GetDouble("umbral_nivel_verde");
                        alertaEstacion.uNivelAmarilla = rdrMonitoreo.IsDBNull(4) ? -1.0 : rdrMonitoreo.GetDouble("umbral_nivel_amarilla");
                        alertaEstacion.uNivelRoja = rdrMonitoreo.IsDBNull(5) ? -1.0 : rdrMonitoreo.GetDouble("umbral_nivel_roja");
                        alertaEstacion.uLluviaVerde = rdrMonitoreo.IsDBNull(6) ? -1.0 : rdrMonitoreo.GetDouble("umbral_lluvia_verde");
                        alertaEstacion.uLluviaAmarilla = rdrMonitoreo.IsDBNull(7) ? -1.0 : rdrMonitoreo.GetDouble("umbral_lluvia_amarilla");
                        alertasEstaciones.Add(alertaEstacion);
                        ids += "'" + alertaEstacion.idSatelital + "',";
                    }
                    Logger.Log("Datos de estaciones leidos");
                    rdrMonitoreo.Close();
                    queryDatos =
                        "SELECT sta.SATELLITE_ID, dat.*, d.ED_VALUE " +
                        "FROM xc_data.xc_data1 as d " +
                        "INNER JOIN " +
                        "( " +
                        "SELECT STATION_ID, MAX(TIME_TAG) AS TIME_TAG, SENSORNAME " +
                        "FROM xc_data.xc_data1 " +
                        "WHERE SENSORNAME IN ('LLUVIA', 'NIVEL') " +
                        "GROUP BY STATION_ID, SENSORNAME " +
                        ") as dat on dat.TIME_TAG = d.TIME_TAG AND dat.STATION_ID = d.STATION_ID AND d.SENSORNAME = dat.SENSORNAME " +
                        "INNER JOIN " +
                        "( " +
                        "  SELECT STATION_ID, SATELLITE_ID " +
                        "  FROM xc_data.xc_sites " +
                        //"-- \"  WHERE SATELLITE_ID IN ('5042B196', '5045D644', '504484C2', '5042977A', '50469240', '50439580', '5040E41E')" +
                        "  WHERE SATELLITE_ID IN (" + ids.Substring(0, ids.Length - 1) + ") " +
                        ") as sta ON sta.STATION_ID = dat.STATION_ID;";
                    cmd.CommandText = queryDatos;
                    rdrMonitoreo = cmd.ExecuteReader();
                    Logger.Log("Query de datos ejectuado");
                    Logger.Log("Leyendo datos");
                    while (rdrMonitoreo.Read())
                    {
                        int idx = alertasEstaciones.IndexOf(new alerta(rdrMonitoreo.GetString("SATELLITE_ID")));
                        string msg = "";
                        switch (rdrMonitoreo.GetString("SENSORNAME"))
                        {
                            case "NIVEL":
                                if (rdrMonitoreo.GetDouble("ED_VALUE") >= ((alerta)(alertasEstaciones[idx])).uNivelRoja)
                                {
                                    /*System.Windows.Forms.MessageBox.Show(
                                    "ALERTA ROJA!\n" +
                                    "Estación: " + rdrMonitoreo.GetString("STATION_ID") + "\n" +
                                    "Sensor: " + rdrMonitoreo.GetString("SENSORNAME") + "\n" +
                                    "Umbral:" + ((alerta)(alertasEstaciones[idx])).uNivelRoja.ToString() + "\n" +
                                    "Valor: " + rdrMonitoreo.GetDouble("ED_VALUE").ToString() + "\n" +
                                    "Fecha/Hora: " + rdrMonitoreo.GetString("TIME_TAG") + "\n", "ALERTA!!!");*/
                                    msg = "ALERTA ROJA!\n" +
                                    "Estación: " + rdrMonitoreo.GetString("STATION_ID") + "\n" +
                                    "Sensor: " + rdrMonitoreo.GetString("SENSORNAME") + "\n" +
                                    "Umbral:" + ((alerta)(alertasEstaciones[idx])).uNivelRoja.ToString() + "\n" +
                                    "Valor: " + rdrMonitoreo.GetDouble("ED_VALUE").ToString() + "\n" +
                                    "Fecha/Hora: " + rdrMonitoreo.GetString("TIME_TAG") + "\n";
                                }
                                else if (rdrMonitoreo.GetDouble("ED_VALUE") >= ((alerta)(alertasEstaciones[idx])).uNivelAmarilla)
                                {
                                    /*System.Windows.Forms.MessageBox.Show(
                                    "ALERTA AMARILLA!\n" +
                                    "Estación: " + rdrMonitoreo.GetString("STATION_ID") + "\n" +
                                    "Sensor: " + rdrMonitoreo.GetString("SENSORNAME") + "\n" +
                                    "Umbral:" + ((alerta)(alertasEstaciones[idx])).uNivelAmarilla.ToString() + "\n" +
                                    "Valor: " + rdrMonitoreo.GetDouble("ED_VALUE").ToString() + "\n" +
                                    "Fecha/Hora: " + rdrMonitoreo.GetString("TIME_TAG") + "\n", "ALERTA!!!");*/
                                    msg = "ALERTA AMARILLA!\n" +
                                    "Estación: " + rdrMonitoreo.GetString("STATION_ID") + "\n" +
                                    "Sensor: " + rdrMonitoreo.GetString("SENSORNAME") + "\n" +
                                    "Umbral:" + ((alerta)(alertasEstaciones[idx])).uNivelAmarilla.ToString() + "\n" +
                                    "Valor: " + rdrMonitoreo.GetDouble("ED_VALUE").ToString() + "\n" +
                                    "Fecha/Hora: " + rdrMonitoreo.GetString("TIME_TAG") + "\n";
                                }
                                else if (rdrMonitoreo.GetDouble("ED_VALUE") >= ((alerta)(alertasEstaciones[idx])).uNivelVerde)
                                {
                                    /*System.Windows.Forms.MessageBox.Show(
                                    "ALERTA VERDE!\n" +
                                    "Estación: " + rdrMonitoreo.GetString("STATION_ID") + "\n" +
                                    "Sensor: " + rdrMonitoreo.GetString("SENSORNAME") + "\n" +
                                    "Umbral:" + ((alerta)(alertasEstaciones[idx])).uNivelVerde.ToString() + "\n" +
                                    "Valor: " + rdrMonitoreo.GetDouble("ED_VALUE").ToString() + "\n" +
                                    "Fecha/Hora: " + rdrMonitoreo.GetString("TIME_TAG") + "\n", "ALERTA!!!");**/
                                    msg = "ALERTA VERDE!\n" +
                                    "Estación: " + rdrMonitoreo.GetString("STATION_ID") + "\n" +
                                    "Sensor: " + rdrMonitoreo.GetString("SENSORNAME") + "\n" +
                                    "Umbral:" + ((alerta)(alertasEstaciones[idx])).uNivelVerde.ToString() + "\n" +
                                    "Valor: " + rdrMonitoreo.GetDouble("ED_VALUE").ToString() + "\n" +
                                    "Fecha/Hora: " + rdrMonitoreo.GetString("TIME_TAG") + "\n";
                                }
                                if (msg != "")
                                {
                                    Logger.Log(msg);
                                    Dictionary<string, string[]> dict =
                                        getContactos(((alerta)(alertasEstaciones[idx])).idAlerta);
                                    //Correos
                                    foreach (string dir in dict["Correos"])
                                    {
                                        try
                                        {
                                            if (dir != null)
                                            {
                                                Cartero.enviarCorreo(dir, msg);
                                                Logger.Log("Envio de alerta por correo a " + dir);
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            Logger.Log("Error: " + ex.Message + "@-> " + dir);
                                        }
                                    }
                                    //Sms
                                    foreach (string tel in dict["Sms"])
                                    {
                                        try
                                        {
                                            if (tel != null)
                                            {
                                                //Mensajero.enviarMensaje(tel, msg);
                                                Logger.Log("Envio de alerta por SMS a " + tel);
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            Logger.Log("Error: " + ex.Message + "@-> " + tel);
                                        }
                                    }
                                    //Llamadas
                                    foreach (string tel in dict["Llamadas"])
                                    {
                                        try
                                        {
                                            if (tel != null)
                                            {
                                                //Operadora.Llamar(tel, msg);
                                                Logger.Log("Envio de alerta por Teléfono a " + tel);
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            Logger.Log("Error: " + ex.Message + "@-> " + tel);
                                        }
                                    }
                                }
                                break;
                            case "LLUVIA":
                                /* if (rdrMonitoreo.GetDouble("ED_VALUE") >= ((alerta)(alertasEstaciones[idx])).uLluviaVerde)
                                 {
                                     System.Windows.Forms.MessageBox.Show(
                                     "ALERTA ROJA!\n" +
                                     "Estación: " + rdrMonitoreo.GetString("STATION_ID") + "\n" +
                                     "Sensor: " + rdrMonitoreo.GetString("SENSORNAME") + "\n" +
                                     "Umbral:" + ((alerta)(alertasEstaciones[idx])).uNivelRoja.ToString() + "\n" +
                                     "Valor: " + rdrMonitoreo.GetDouble("ED_VALUE").ToString() + "\n" +
                                     "Fecha/Hora: " + rdrMonitoreo.GetString("TIME_TAG") + "\n", "ALERTA!!!");
                                 }
                                 else if (rdrMonitoreo.GetDouble("ED_VALUE") >= ((alerta)(alertasEstaciones[idx])).uLluviaAmarilla)
                                 {
                                     System.Windows.Forms.MessageBox.Show(
                                     "ALERTA AMARILLA!\n" +
                                     "Estación: " + rdrMonitoreo.GetString("STATION_ID") + "\n" +
                                     "Sensor: " + rdrMonitoreo.GetString("SENSORNAME") + "\n" +
                                     "Umbral:" + ((alerta)(alertasEstaciones[idx])).uNivelAmarilla.ToString() + "\n" +
                                     "Valor: " + rdrMonitoreo.GetDouble("ED_VALUE").ToString() + "\n" +
                                     "Fecha/Hora: " + rdrMonitoreo.GetString("TIME_TAG") + "\n", "ALERTA!!!");
                                 }*/
                                break;
                        }
                    }
                    rdrMonitoreo.Close();
                    if (con.State == System.Data.ConnectionState.Open)
                    {
                        con.Close();
                    }
                    Logger.Log("Datos leidos. A dormir " + Parametros.Intervalo.ToString("HH:mm:ss") + " ...");
                    Thread.Sleep(
                        new TimeSpan(
                            Parametros.Intervalo.Hour,
                            Parametros.Intervalo.Minute,
                            Parametros.Intervalo.Second
                        )
                    );
                }

            }
            catch (ThreadAbortException abortEx)
            {
                Logger.Log("Monitoreo detenido.");
                Logger.Log(abortEx.Message);
                return;
            }
            catch (ThreadInterruptedException interruptEx)
            {
                Logger.Log("Despertando...");
                mon = new Thread(this.monitorear);
                mon.Start();
                return;
            }
            catch (MySqlException mySqlEx)
            {
                Logger.Log("Error en el monitoreo: " + mySqlEx.Message);
                return;
            }
            catch (Exception Ex)
            {
                Logger.Log("Error en el monitoreo: " + Ex.Message);
                return;
            }
        }
        private void crearCiudad_Click(object sender, RoutedEventArgs e)
        {
            if (this.textCiudad.Text != "")
            {
                if (this.ciudades.ContainsKey(this.textCiudad.Text) == false)
                {
                    if (this.comboRegion.SelectedIndex > -1)
                    {

                        string nombre = (string)this.textCiudad.Text;
                        int numero = (int)this.comboRegion.SelectedIndex;

                        // OBTENER NUMERO REGION BY REGION
                        try
                        {
                            //btenerNumeroCiudadByRegion(comboRegion.Text)
                            MySqlConnection con = conexionDB.ObtenerConexion();
                            string insertString = "INSERT INTO CIUDAD (NOMBRE,REGION,NUMERO) VALUES (?nombre,?region,?numero)";

                            MySqlCommand cmd = new MySqlCommand(insertString, con);
                            cmd.Parameters.Add("?nombre", nombre);
                            cmd.Parameters.Add("?region", comboRegion.Text);
                            cmd.Parameters.Add("?numero", obtenerNumeroCiudadByRegion(comboRegion.Text));

                            cmd.ExecuteNonQuery();
                            con.Close();

                            textCiudad.Text = "";
                            comboRegion.SelectedIndex = -1;
                            alerta alert = new alerta();
                            alert.show("Ciudad Ingresada Correctamente");

                            try
                            {
                                con.Open();
                                this.ciudades.Clear();
                                this.listCiudad.Items.Clear();
                                string sql = "SELECT C.ID, C.NOMBRE FROM CIUDAD AS C INNER JOIN REGION AS R ON (C.NUMERO=R.ID) ORDER BY R.ID";
                                cmd = new MySqlCommand(sql, con);
                                MySqlDataReader dr = cmd.ExecuteReader();

                                while (dr.Read())
                                {
                                    ciudades.Add(dr.GetString(1), dr.GetInt32(0));
                                    this.listCiudad.Items.Add(dr.GetString(1));
                                }
                                dr.Close();
                                con.Close();
                            }
                            catch (Exception ex)
                            {
                                validar alerta = new validar();
                                alerta.show("LISTAR CIUDAD: " + ex.ToString());
                            }
                        }
                        catch (Exception ex)
                        {
                            validar alert = new validar();
                            alert.show("INGRESA CIUDAD: " + ex.ToString());
                        }
                        finally
                        {
                            //con.Close();
                        }
                    }
                    else
                    {
                        validar alert = new validar();
                        alert.show("Debe seleccionar una Region");
                        this.comboRegion.Focus();
                    }
                }
                else
                {
                    validar alert = new validar();
                    alert.show("La ciudad ingresada ya existe");
                    this.textCiudad.Focus();
                }
            }
            else
            {
                validar alert = new validar();
                alert.show("Debe ingresar un nombre para la Parada");
                this.textCiudad.Focus();

            }
        }