## Developer Support

part of the ArsDigita Community System, by Jon Salz

- Admin interface: /www/admin/monitoring/request-info.tcl
- Procedures: /packages/developer-support-procs.tcl, with support in:
  - /tcl/ad-abstract-url.tcl
  - /tcl/ad-defs.tcl.preload
  - /tcl/ad-security.tcl.preload

### The Big Picture

Software development is a big feedback loop: a developer writes something, tests it, and then repeats until the results are satisfactory. It's important to streamline this cycle by having a development environment which makes it easy to analyze what the software is doing under the hood.

### Peeking Under the Hood

Our development environment previously consisted largely of Emacs, and `tail -f /web/servername/log/servername-error.log`. Now this has been augmented: `ad_footer` and `ad_admin_footer` now display a link entitled Developer Information. (You can use the `ds_link` procedure to generate the link yourself.) Following the link displays a screenful of information including:

- The times that the request started and ended, and its duration (with millisecond accuracy).
- The request parameters (method, url, query, headers, etc.).
- The output headers, if any.
- Information about all database queries performed while loading the page, including their respective durations (with millisecond accuracy).

In addition, the ClientDebug facility of AOLserver 2 has been re-implemented in the abstract URL system (which serves nearly all non-static pages). If an error occurs while serving a page, a stack trace is printed out.

Note that these nifty features pop up only when you are logged in as a site-wide administrator! Revealing this information to anyone else would pose a huge security risk.

### Comments

Tired of using `ns_log` to instrument your code, then grokking the error log to see what's wrong with your page? Use the `ds_comment` routine instead:

>     ds_comment "Foo is $foo"

Your comment will show up at the bottom of the page, beneath the Developer Information link (but only for site-wide administrators). It will also be displayed on the Developer Information page itself.

Comments are displayed even if an error occurs in the page!

### Enabling It

Add the following to your `parameters/yourservername.ini` file:

>     [ns/server/yourservername/acs/developer-support]
>     ; remember information about connections, for developers' benefit?
>     EnabledP=1
>     ; remember information about every database request?
>     DatabaseEnabledP=1
>     ; remember information for which client hosts?
>     EnabledIPs=*
>     ; remember this information for how long? sweep how often? (in seconds)
>     DataLifetime=900
>     DataSweepInterval=900

Note that you may not want to enable this stuff for production systems - they probably incur a slight performance hit (although this hasn't been benchmarked).

### How It Works

The security subsystem registers preauth and trace filters which store relevant connection information in shared variables (`nsv`s). The security subsystem also renames the AOLserver `ns_db` procedure and registers a wrapper which aggregates information about database queries.

Last Modified: $Id: index.html,v 1.1.1.1 2001/04/20 20:51:09 donb Exp $