Coding 4 Fun: Twitter und mein Event Log
Kurz vor Jahresende hatten wir intern eine lustige Diskussion über Twitter. Wir haben uns gefragt ob es eigentlich irgendjemanden wirklich interessiert was wir über Twitter rausblasen und konsumieren. Irgendwann kam dann der Spruch, “Ich publiziere mein Event Log über Twitter”. Das hat mich dazu angeregt einfach Just 4 Fun das mal auszuprobieren.
Zu allererst habe ich mir einen Twitter Account für mein Event Log angelegt. Zu finden unter http://twitter.com/eventlog
Dann ging es an das schreiben der kleinen Anwendung. Twitter selbst erlaubt es über ein REST Interface mit der Infrastruktur zu arbeiten und unter anderem auch Statusmeldungen zu verschicken. Vor einiger Zeit habe ich mal einen Twitter Proxy gebaut (absolut nicht vollständig) um an Twitter Updates zu schicken.
Da die notwendigen Schnittstellen da sind ist meine Vorgehensweise ganz einfach:
- Warten auf Events im Eventlog
- Publizieren mittels der Twitter API
- Konsumieren
Dieses kleine Beispiel hat absolut keine Fehlerbehandlung, noch irgendwelche Async Aufrufe zum Twitter Interface, das kann man ja verfeinern wenn man mag.
Da Twitter eine Einschränkung von 100 Nachrichten pro Stunde hat, was das posten mit der API angeht, habe ich mich dazu entschlossen nur meinen SQL Server Express zu posten (ist ja nur eine Demo).
Hier die Klasse die entsprechend auf das Event Log wartet und nach SQL Server Express events auswertet (Ich weiss man kann auch EventLogFilter nutzen…)
1: using System.Diagnostics;
2: using System.Text;
3: using Twitter.Library;
4:
5: namespace EventLogPoster
6: {
7: public class LogPoster
8: {
9: private readonly EventLog log;
10: private readonly TwitterStatusProxy proxy;
11:
12: public LogPoster()
13: {
14: proxy = new TwitterStatusProxy( "eventlog", "password" );
15:
16: log = new EventLog( "Application" );
17: log.EntryWritten += new EntryWrittenEventHandler( log_EntryWritten );
18: log.EnableRaisingEvents = true;
19: }
20:
21: void log_EntryWritten( object sender, EntryWrittenEventArgs e )
22: {
23: if ( string.Compare( e.Entry.Source, "MSSQL$SQLEXPRESS", false ) == 0 )
24: {
25: StringBuilder builder = new StringBuilder();
26: builder.AppendFormat( "{0} {1} {2}",
27: e.Entry.TimeGenerated.ToShortTimeString(),
28: e.Entry.Message.Length > 100 ?
29: e.Entry.Message.Substring( 0, 100 ) :
30: e.Entry.Message,
31: e.Entry.MachineName.Substring( 0, 10 ) );
32: proxy.Update( builder.ToString() );
33: }
34: }
35: }
36: }
Das ganze habe ich in eine Konsolenanwendung gepackt und einfach gestartet. Wenn ich nun die SQL Server Express Instanze starte und stoppe, bekomme ich entsprechend die Events und poste diese über die API an Twitter.
Unter dem RSS Feed kann man sich die momentan verschickten Logs anschauen
http://twitter.com/statuses/user_timeline/18758891.rss
Hat man einen Client wie Tweetdeck sieht es so aus:
Ist nur Just 4 Fun, aber man könnte das ganze auch Ausbauen. Zum Beispiel nur auf kritische Events einer bestimmten Anwendung warten und diese posten. Den Feed privat markieren und die Abonnenten entsprechend per SMS benachrichtigen. Immerhin sind eine gewisse Anzahl an SMS frei (ich glaube 250 pro Woche).