The Instrumentation Record Language (IRL) has been developed since 2013 as a central element of Kieker and an approach for model-driven instrumentation. Both required a declarative and compact model to specify record structures for monitoring.
In Kieker more and more languages are supported through specific language modules which communicate with the Kieker core over data bridges, like Kieker4COM or the Kieker Data Bride (KDB). To ensure compatibility records must have the same structure and use the same serialization across all languages. Furthermore, other tooling can use the record declaration to generate code for other purposes.
For the model-driven instrumentation, it is important to be able to express monitoring data structures as a model, be able to support the data structure model at program code level, and be able to relate both structures to each other.
The IRL, as a language, provides such abstract data model notation. Its tooling comprises Eclipse editors and generators to produce data structures and serialization code for C, Perl, and Java. And additional generators can be added to support other languages. The IRL wiki provides information on hot to write new generators and how to integrate them in the editors. In addition the Eclipse tooling for the IRL includes an export of IRL declaration to EMF models.
For users which do not intend to use Eclipse and therefore cannot or wish not to install Eclipse just to be able to generate code based on the IRL, we provide a command line compiler supporting the same features as the generators in Eclipse.
The language itself can best be categorized as a class and template based object-oriented language which supports a flat data model, meaning records cannot use other record types as data types for their own structure. As data types only primitive types: boolean, byte, char, double, float, int, long, short, and string are allowed. Furthermore, the language supports two experimental features which are not realized in the generators. First, all types can be used in arrays which can have a fixed or flexible size. And second, foreign meta-models can be imported. This feature will allow to access and serialize the state of a monitored software system.