none
Sorun halinde e-posta ile rapor gönderme RRS feed

  • Genel Tartışma

  • Merhaba,

    Sunucularımı ve içerisinde çalışan bazı işlemleri kontrol eden basit bir uygulama yaptım.

    Uygulama; sunucu adreslerine ping atıp çevrimiçi olup-olmadığını kontrol ediyor ve form içerisindeki label elemanına aktif olup-olmadığını yazıyor. Timer ile bu işlemi her 60 saniye de bir kez tekrarlıyor.

    Ek olarak, aktif olmayan sunucu ve/veya işlem varsa e-posta gövdesine yazdırmak ve iletiyi belirlenen adres(lere) göndermesini sağlamak istiyorum.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Örn :

    • Active Directory (192.168.0.1) : Sunucuya erişim yok.!
    • Chrome : İşlem Çalışmıyor.!

    ...gibi.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Takıldığım nokta; olumsuz bir işlem ve/veya sunucu olduğunda, e-posta gövdesine ekleme ve hangi işlem ve/veya sunucu olduğunu belirtme.

    Bunu nasıl yapabilirim?

    Active Directory Sunucu 

    private void AD()
            {
                try
                {
                    Ping myPing = new Ping();
                    PingReply reply = myPing.Send(textBox1.Text, 1000);
    
                    if (reply.Status == IPStatus.Success)
                    {
                        label1.Text = "Aktif";
                        label1.ForeColor = Color.Green;
                    }
    
                    else
                    {
                        label1.Text = "Pasif";
                        label1.ForeColor = Color.Red;
                    }
                }
                catch ()
                {
    
                }
            }

    Timer

    private void timer1_Tick(object sender, EventArgs e)
            {
                try
                {
                    zaman--;
                    label21.Text = ("Güncellemeye kalan süre : " + zaman.ToString());
    
                    if (zaman == 0)
                    {
                        timer1.Stop();
                        timer1.Start();
                        zaman = 60;
                    }
                }
                catch (Exception hata)
                {
                    MessageBox.Show("Hata : " + hata);
                }
            }

    E-Posta Gönderimi

    public bool EpostaGonder()
            {
                MailMessage ePosta = new MailMessage() { From = new MailAddress("px146dmn@gmail.com") };
                
                ePosta.To.Add("px146dmn@gmail.com");
    
                ePosta.Subject = "Sistem İzleme Operasyonu Hakkında...";
                ePosta.Body = "Sistem izleme esnasında aşağıdaki hatalar tespit edilmiştir.\n\n";
                
                SmtpClient smtp = new SmtpClient() { /**/Credentials = new NetworkCredential("px146dmn@gmail.com", "123456789"), Port = 587, Host = "smtp.gmail.com", EnableSsl = true };
                object userState = ePosta;
                bool kontrol = true;
                try
                {
                    smtp.SendAsync(ePosta, (object)ePosta);
                }
    
                catch (SmtpException ex)
                {
                    kontrol = false;
                    MessageBox.Show(ex.Message, "Hata : ");
                }
                return kontrol;
            }


    10 Aralık 2018 Pazartesi 10:01

Tüm Yanıtlar

  • Konu takipte...

    Yardım edebilecek kimse yok mu?

    28 Aralık 2018 Cuma 14:20
  • OmerXcf `ye katılıyorum bu iş sanki istemci tarafında pek sağlam durmuyor. Açık istemcin olmasa  sunucu çökse dursa vs haberin olmayacak. 

     NewRelic ` e  alternatif olarak bakabilirsin.


    Agha Huseynov

    28 Aralık 2018 Cuma 20:51
  • Anladığım kadarı ile sunucuda bir sorun oluştuğunda belirlenen e postaya hata ile bilgi verilmesi gerekiyor.

    1. sunucu kısmında oluşan hatayı dışardan almak fazla güvenli olmaz bu yüzden yazıcağınız program sunucu içersinde çalışmalı hata oluştuğunda direk sunucu e-mail göndermeli

    2. yok ben illa client olarak bağlanıp kontrol etmek istiyorum diyorsan server üzerinde server ile ilgili bilgiler veren bir api sayfası yapabilirsin ve client direk api üzerinden sunucu durumunu veya hata durumu var ise direk hata ile bilgileri alıp işleyebilirsin

    Yanıtınız ve tavsiyeniz için teşekkür ederim.

    Kesinlikle doğru. Küçük bir detay da; bu istek tek sunucu,servis ve uygulama ile sınırlı değil. Belirli uygulamalar (yaptırdığımız) ve (ve yine yaptırdırdığımız) servisler için geçerli.

    1. Aslında sunucularda çalışacak bir servis yazmayı deneyip, bu servislerin E-Posta ve SMS göndermelerini de düşündüm. Ama bu kez de tek uygulama yerine 9 uygulama daha doğrusu servis yazmam gerektiği için ve çalışacak uygulama sadece yerel ağ üzerinde bulunacağı için güvenlik konusunda bir sorun olmayacağını düşünüp vazgeçmiştim.

    2. Tek uygulama olsun diye bir takıntım yok, işin doğrusu (1 inci maddedeki cevabımda bahsettiğim gibi) tek uygulama yazmak 6 uygulama yazmaktan daha mantıklı gelmişti. API konusunda ise; sunucunun tüm bilgi veya hatalarının olup-olmadığını almam gerekmiyor. Sunucu çalışıyor mu ve 3 üncü parti uygulamalar devrede mi? Bu bilgiler bana yetiyor. Zaten bu bilgilerin %70'ini WMI ile alıyorum.

    Sonuç olarak; sunucunun ve içerisindeki uygulamaların aktif olup-olmadığı bilgisini E-Posta ve SMS ile göndermesi benim işimi görüyor.

    Amaç: Toplam 9 sunucu ve 35 uygulama/servis bulunuyor. Bahsedilen uygulamalar/servisler firmamız için hayatî önem taşıdıkları için mesai dışı saatlerde herhangi bir sorun olması halinde bilgi almam ve müdahale etmem gerekiyor.

    29 Aralık 2018 Cumartesi 06:10
  • Yanıtınız ve tavsiyeniz için teşekkür ederim.

    Kesinlikle doğru. Küçük bir detay da; bu istek tek sunucu,servis ve uygulama ile sınırlı değil. Belirli uygulamalar (yaptırdığımız) ve (ve yine yaptırdırdığımız) servisler için geçerli.

    1. Aslında sunucularda çalışacak bir servis yazmayı deneyip, bu servislerin E-Posta ve SMS göndermelerini de düşündüm. Ama bu kez de tek uygulama yerine 9 uygulama daha doğrusu servis yazmam gerektiği için ve çalışacak uygulama sadece yerel ağ üzerinde bulunacağı için güvenlik konusunda bir sorun olmayacağını düşünüp vazgeçmiştim.

    2. Tek uygulama olsun diye bir takıntım yok, işin doğrusu (1 inci maddedeki cevabımda bahsettiğim gibi) tek uygulama yazmak 6 uygulama yazmaktan daha mantıklı gelmişti. API konusunda ise; sunucunun tüm bilgi veya hatalarının olup-olmadığını almam gerekmiyor. Sunucu çalışıyor mu ve 3 üncü parti uygulamalar devrede mi? Bu bilgiler bana yetiyor. Zaten bu bilgilerin %70'ini WMI ile alıyorum.

    Sonuç olarak; sunucunun ve içerisindeki uygulamaların aktif olup-olmadığı bilgisini E-Posta ve SMS ile göndermesi benim işimi görüyor.

    Amaç: Toplam 9 sunucu ve 35 uygulama/servis bulunuyor. Bahsedilen uygulamalar/servisler firmamız için hayatî önem taşıdıkları için mesai dışı saatlerde herhangi bir sorun olması halinde bilgi almam ve müdahale etmem gerekiyor.

    29 Aralık 2018 Cumartesi 06:11