During the last few months I took a break from ElmahR, and I did not add any big new feature. I did some bug fixing and I added little things, but the last one I introduced in 1.1.0 is actually interesting, so I decided to talk a little bit about it.
Contents tagged with elmah
Three months after my last port, this one is to announce that ElmahR has reached version 1.0! Last time I was not expecting such a long time to finish the latest "details", but some feedback I received (like this one) made me realized that I was still missing more modularity, and that has not been so easy to achieve. I had to deeply reorganize a lot of things in order to separate different concerns not only from a code perspective (that part was already fairly ok), but also from a packaging one. It's been though, but I'm very happy about what I achieved, and this allowed me to produce a set of new Nuget packages from which you can built a full ElmahR dashboard from scratch in Visual Studio, or add it to any existing monitoring application yo might have in place.
I'm enjoying my vacations, and today I was having a nice, quiet and relaxing day at home, so at some point I said "there's no better day than today to fix some ElmahR bugs" :)
After the aspConf session I slowed down a little bit because I needed some rest, and right now I'm having some vacation, so my work on ElmahR is going on at a lower pace. As I mentioned in earlier posts and im my aspConf session, ElmahR is growing but it still needs some work to make it more error proof. ElmahR is about errors happening on monitored applications, but errors can happen inside ElmahR itself, no? In the latest days I started working on this particular aspect, and soon an ElmahR dashboard will be able to treat errors happening on the dashboard itself. You might think that this is not a problem: why didn't I just configure the dashboard to post errors to itself through ELMAH + ErrorPostModule? Well, that's possible of course, but it's also very easy to fall in cases where this scenario could generate endless loops of errors. Imagine you have a problem connecting to the database where errors are stored: when ElmahR receives a new error from a monitored source, it tries to store it and it fails, the error is intercepted, posted to ElmahR itself and received, then ElmahR will try to store this one too, and that will fail, and the loop starts again... A different approach is needed, and I begun to work on it. I already released some bits of it, but soon after my short vacation I will review a couple of details to make it cleaner, and I'll tell you more about the internals of this piece.
Last time I've been already mentioning the new Appharbor integration plugin I've been working on, but there's more to tell about it, mainly for two reasons: the plugin system deserves some more details, and along with the Appharbor plugin I completed a quite deep restructuring of the whole project, which actually makes much easier to start from a repository clone and build up a fully functional and customizable ElmahR installation with just a few clicks. Nothing is perfect, and actually these advantages come with a little more maintenance burden on my side, but so far I'm happy with it and when I'll have some more time I'll work on it. But first let's see more about the finished Appharbor plugin.
Last time I blogged about ElmahR progress was less that 2 weeks ago, but to me it seemed much more than that, probably because I worked a lot on it, and amount of things I did made me feel those days have been longer. Most of the work I did has been 'behind the scenes' stuff, reorganizing projects and files in order to make room to new things, so if you will give it a try you will not notice big changes, but still there are a couple of new features, and the new structure will help a lot to build more of them.
ElmahR reached today 0.7.5, with more improvements in several areas. Let's see them very briefly.
As already mentioned, a few days ago @gsuttie offered his help in building Nuget packages for ElmahR. We discussed and agreed that the most meaningful place to start was a package to easily configure a source, and he did a good job coming out with a first version. But then I soon realized that it would have been much easier to have the process more integrated with ElmahR project itself, taking advantage of all the Nuget packaging features. So I took over the task and finalized it, and now an 'official' Nuget package is available!
Quick update about ElmahR. After preparing the ground to support persistence, and building errors persistence on top of it, I went a step further, enabling a first draft of a simple 'user settings' storage system. The functionality if really a basic one, what it does is just storing a guid in a persistent cookie, and using that guid to associate a bunch of setting to the current user and store them inside the same database used for errors persistence, provided the user activated the functionality ticking the corresponding option. The implementation itself is not really worth many words, what's maybe more worth noting is the fact that this work is been the preparation for something more useful like profiling 'real' users connecting to ElmahR through whatever authentication mechanism you'd want to use. In fact the idea here is to let user authentication as an external piece, letting implementors choose the most appropriate one or maybe even write their own ways to handle the problem, ElmahR will just leverage IIdentity interface and all the related concepts to store settings.
My work on ElmahR is going on, during the last few days I've been adding useful features which I'll describe here briefly. Then I'll spend a few words about what's going to become more and more important very soon: documentation.
ElmahR reached v0.6, and a lot of improvements happened since previous version, most of them on the UI. Finally we had time to concentrate on the visual aspects of the dashboard, trying to come up with something more reactive, better at bringing the right information and at scaling along with the number of monitored applications. This last issue has been worrying us the most, it's not easy to accomodate the potentially quite big volume of info that ElmahR handles. We let ourselves be inspired by Twitter web site user experience, and we took advantage of the Twitter bootstrap framework to build a responsive layout. It is a very interesting framework, it allowed us to greatly improve how the dashboard looks like, and now we have better support of different form factors and browsers. Now IE9 is well supported too, while we still have problems with older versions, we'll try to target IE7 and IE8 in next iterations. Twitter bootstrap is quite simple, but it can also help deliver sophisticated UIs and to do that it can get pretty complex. We cannot really say we understood everything of it, but we also wanted to deliver soon, so we found a quite good and quick compromise analyzing a sample application and modifying it to our needs. You might notice it in the css files, one of them is still quite 'in progress' and it also contains stuff coming from the original sample and that we do not really use, but it's like that because we'll try to understand more of it in the next days.
Yesterday I blogged and twitted about the v0.5 release of ElmahR, and after a few retweets an amazing sequence of interactions started to happen! In the last 24 hours I received many retweets, new Twitter followers appeared and my tweet has been favorite by several people. The demo web site received hundreds of simulated errors (which actually helped me to spot at least 2 bugs :) ), my blog post has been visited by more than 400 unique visitors, and ElmahR repository has 4 new followers. And there's more, I became member of the Software Development list, and today ElmahR was on the home page of The Morning Brew, and in a very good company indeed! Those are not particularly big numbers for most of you, of course, but for me they are :)
After releasing Elmahr v0.2, I think it's time to describe with more details what it is, how it's done and what are my plans for the next releases. ElmahR is a web dashboard where you can aggregate several monitored applications; adding them to ElmahR configuration will enable them to post error events, which will show them on all the connected client dashboards in real-time.
This is just a quick announcement about the fact that in the last 2 days I released ElmahR v0.2 (you may call it 'alpha'). ElmahR is a real-time aggregating dashboard for ELMAH, based on a module I wrote to in the official ELMAH Sandbox, and leveraging SignalR for the async real-time communication. I already described how I came up with idea of this project, and in the last weeks I've been working on it to see if I could realize it. I'm quite happy with the results so far, so I decided to share it, let's see if you find it as much interesting as I did.
The project is still very basic and it's missing features, but at the end of the day it's working, and it's been real fun to work on it because it allowed me to try a lot of great stuff out there:
During the last few days I've been working on a new idea. I've been listening and reading about SignalR since a few months, and 2 weeks ago I attended a very interesting session by Marteen Balliauw about it at the UGIALT.NET conference in Milan. At the same time I'm an ELMAH user since a while, and I have the pleasure to share my working hours and my lunches with its author Atif. So, when I was in my car coming back from the conference to where I live, and despite (or maybe thanks to...) a bad cold that was hitting me, I had this idea to join these two libraries to offer real time and interactive experience to the logging capabilities that ELMAH offers. This week I started this experiment and I had a lot of fun working on it.
First, I cloned the ELMAH Sandbox project repository following the recommended guidelines, and inside it I wrote a new ErrorPostModule for ELMAH. This module is very simple, and so far its implementation is still very basic, its goal is to process an unhandled exception that occurred in the host application and post its Json representation to a specified destination. When you have this module available, in your ELMAH-enable applications you can activate it adding a configuration key like this one: