SelfDiagnose for Ruby on Rails

SelfDianogse is a library of tasks to diagnose a running system with respect to its dependent external resources. Recently, I did some Rails development and was thinking about how to implement it for the Ruby on Rails framework ? Obvious choice is to make a plugin that on installation adds the SelfDiagnoseController.rb to the application. Because of the scripting nature of Rails framework, putting the configuration in XML (as it is done for Java) is not the Ruby-way.

External configuration for SelfDiagnose

Initialization of the SelfDiagnose component is done by reading the resource selfdiagnose.xml which must be located on the classpath of the Web application. This configuration declares the diagnostic tasks that are executed in the context of the Web application. The upcoming release (1.1) will have a new feature that allows you to override the local configuration and dynamically load the configuration from a provided URL: http://your-app/selfdiagnose?config=http://some-other-server/selfdiagnose.xml or even a local file can be passed: http://your-app/selfdiagnose?config=file:///some-other-path/selfdiagnose.xml You can restore to the application-defined tasks by: http://your-app/selfdiagnose?reload=true This feature allows for the following scenario in developing the configuration: Create a local empty configuration (in e.g.

Foreign compile-time dependencies in SelfDiagnose

In the upcoming release 1.1 of the SelfDiagnose task library, a new task has been added called CheckEndecaService. Endeca is commercial software that provides excellent Search services to e.g. e-commerce web applications. This particular task checks the availability of that service and can perform a simple query. To implement this, the following snippet has been used: HttpENEConnection connection = new HttpENEConnection(); connection.setHostname(host); connection.setPort(port); UrlENEQuery eneQuery = new UrlENEQuery(“N=0”, “UTF-8”); ENEQueryResults eneResults = connection.query(eneQuery); Navigation navigation = eneResults.getNavigation(); long numERecs = navigation.getTotalNumERecs(); double time = eneResults.getTotalNetworkAndComputeTime(); Without a full understanding, you can see that this snippet is using classes which belong to the Endeca API package.

Application Diagnoses Itself

How can I provide programs with self diagnostic behavior? How can I implement this in a way that has low impact on the way I write programs (or Java classes to be more specific). If programs could run such a self diagnose then perhaps it takes less time to find the cause of an observed problem. These thoughts are sprung when I found an error in an application that went into production just a few days earlier.