Alert, Event ve Log arasındaki farklar

11 Ara

Yazılımsal bir ekosistemin yönetim ortamında görülmek istenen bazı temel raporlar vardır. Bu yazıda bir birine benzeyen ve bazen karıştırılabilen alert, event ve log kavramlarından bahsedilmektedir.

Alert

Bir alert(alarm), sistemde meydana gelebilecek sıra dışı olaylar olarakdır. Örneğin;

  • Sunucu disk kapasitesinin %90 kullanım oranına ulaşması.
  • Sistemdeki IoT cihazlarının N tanesinin birden kapanması veya hata durumu bildirmesi. (N eşik değer)
  • N tane kullanıcının birden gün içinde bloklanması. (N eşik değer)

Bu ve buna benzer olaylar, sistemin yönetim biriminde raporlar veya bildirimler(sms, email, ses) şeklinde alarm olarak tutulabilirler. Alarmlar genellikle sistemin sağlıklı devam edebilmesi için bildirilen kritik uyarılardır. Belirli bir olay gerçekleştiğinde, sorumlu kişilerin veya sistemlerin harekete geçmesini sağlamak amacıyla yapılan bildirimler olarak da düşünülebilir.

Event

Bir event(olay), sistemde meydana gelebilecek sıradan olaylardır. Örneğin;

  • Yeni kullanıcı kaydı yapıldı.
  • Kullanıcı aktif edildi.
  • Kullanıcı silindi.
  • Sipariş alındı.
  • Sipariş onaylandı.

Bu ve buna benzer rutin olaylar, event olarak kaydedilirler. Sistemde meydana gelen rutin akışın takibi ve kaydı için gerekli bir kayıt kütüğü olarak düşünülebilir.

Log

Kelime anlamı günlük olan log, sistemde meydana gelen olayların otomatik olarak üretilir ve zaman damgalı olarak kaydedilir. Örneğin;

  • Veri tabanı bağlantı hataların detaylarıyla birlikte kaydedilmesi.
  • Servis talebinin olumsuz cevap alması.

Log kayıtları, istenilen seviyede tutulabilir. Bu seviyeler, Info, Warning, Error, Fetal, Debug şeklinde gruplandırılabilir.

  • Info, genellikle sistemdeki yararlı bilgiler şeklinde düşünülebilir. İhtiyaç duyulduğunda bilgi mahiyetinde bakılabilecek kayıtlardır.
  • Warning, sonuçları otomatik olarak düzeltilebilecek, uyarı niteliğindeki bilgilerdir.
  • Error, işlemlerin devam edememesi durumunda kaydedilen bilgilerdir. Sistem yöneticisinin müdahalesini gerektirir.
  • Fetal, sistemin durması veya veri kayıplarının yaşanabileceği durumlarda kaydedilen bilgilerdir.
  • Debug, geliştirme sırasında geliştiriciye bilgiler veren kayıtlardır.

Sonuç

Alert, Event ve Log bilgileri, sistemin yönetilebilirliği açısından çok önemlidir. Bu kayıtlar tutulmadığı taktirde, sistemde ne olup bittiğinden haber alınamaz. Bu tür kayıtlar, bir veritabanında veya dosyalarda tutulabilir. Proje büyüklüğüne göre genellikle log kayıtları dosyalarda, alert ve event kayıtları, veritabanı tablolarında tutulurlar. Bu sayede, alert ve event bilgileri, gösterge panelleri(dashboard) ve raporlarda çıktı olarak alınabilir.

C# events (olaylar) kavramı

18 Ara

Bir önceki yazımızda delegates (delegeler veya temsilciler) kavramından bahsetmiştik. Delegelerin amaçlarından birinin de event(olay) yakalyıcı metodları temsil eden tipler olduğunu vurgulamıştık.

Olaylar .Net platformunun ileri konularından biri olup ilk anda anlaşılması biraz karmasık gelebilir. Olayları anlamanın yolu da delegeleri anlamaktan geçer. Delegeler konusu anlaşılmışsa olayların (events) anlaşılması da çok basit bir hale gelecektir.

C# ortamında bir event tanımlamak şu şeklidedir:

<erişim belirleyici> event <delege tipi> <event adı>;

Public event QueryEventHandler QueryExecuted;

Public: erişim belirleyicisi. Public veya private olabilir.

QueryEventHandler: delege tipi.

QueryExecuted: event adı.

Event kullanımı .Net platformunda genellikle form tabanlı windows uygulamalarında, silverlight uygulamalarında, network uygulamalarında çok yaygındır. Örneğin bir windows forms uygulamasında bir butona tıklandığında Buton sınıfının Click adındaki event’ı için bir metod oluşturulur ve bu metod içerisine tıklama işlemi sonrası yürütülecek kodları yazabiliriz.

Biz bu yazımızda örnek olarak bir önceki c# delegeler yazımızdaki örneğin aynısını event kullanarak yapacağız. Bu sayede event ve delegate arasındaki bağıntıyı kurmak daha da kolaylaşacak.

Öncelikle bir önceki uygulamamızda ki büyük resme bakarak başlayabiliriz.

Client tarafında oluturduğumuz bir metodu Queryoperation tipinin ExecuteQuery metoduna parametre olarak göndermiştik. ExecuteQuery metodu da bizim gönderdiğimiz metod formunda bir delegeyi parametre aldığı için uygulamamız hiç sorunsuz çalışmıştı.

Bu sefer Queroperation sınıfımıza QueryExecuted adında bir event tanımlayarak bu event’a client tarafındaki bir metodu abone edeceğiz. Sorgu işlemi gerçekleştiğinde abone ettiğimiz metod çalışacaktır.

QueryOperation sınıfının artık QueryExecuted adında bir event’ı var. Bu event, void geri dönüş tipinde tipinde olan ve QueryEventArgs tipinde parametreler alan metodları yakalamakla sorumludur.

Client tarafında olayın nasıl gerçekleşeceğine bakacak olursak.

QueryOperation nesnesinin QueryExecuted event’ına client tarafında oluşturduğumuz, delegemize uygun olan onExecuted metodumuzu abone ediyoruz.

Bir metodun bir event’a abone edilmesi (+=) şeklinde yapılırken aboneliğin sona erdirilmesi ise (-=) şeklinde yapılır.

operation.QueryExecuted-=onExecuted;

şeklinde aboneliği sonlandırabiliriz. Bu sonlandırmadan sonra onExecuted metodu tetiklenmez.

Eğer event’a bir metod abone etmezsek QueryOperation sınıfının ExecuteQuery metodu içerisindeki if(QueryExecuted!=null) şartı false olarak değerlendirilir ve bizim client tarafındaki metodumuz çalıştırılmaz.

Bu yazımızda:

  • C# dilinde event kavramını
  • Event tanımlamasının nasıl yapıldığını
  • Event ve delegate arasındaki ilşkiyi
  • Event’a metod aboneliğini ve aboneliğin sonlandırılmasından
bahsettik.

Tekrar görüşmek dileğiyle…