Last updated on April 30th, 2005

Also check out the forerunner of Mohawk, TkApache!


Welcome to the next generation of TkApache... Mohawk!

Mohawk is the next evolutionary step of TkApache in that it will provide a much better platform for future features. Completely re-written from the ground up in C, using the GTK+/GNOME GUI, it's much faster than Perl/Tk and will allow more flexibility and new features. A version for MacOS X utilizing the Carbon API is also in the works.

Mohawk aims to pick up where TkApache left off and quickly gain the multitude of new features that are planned. Below is a run-down of some of these:


Mohawk is being designed from the ground-up to support not only an individual, simple Apache server configuration - not just one with virtual hosts - but both of these cases across multiple remote or local servers.

Below is a visual representation of this architecture and how the pieces fit together with different aspects of the GUI:


This is accomplished via authenticated, encrypted socket communications between Mohawk and Mohawk-agents running on each server. Mutliple server instances on the same box can be handled by multiple instances of the Mohawk-agent on different ports (or just a smarter agent).

Mohawk-agents are small daemons running on the Apache server that you wish to interact with, whether it's the same host, a remote host or multiple remote hosts in a server farm. The question here is how to implement that best. Can off-the-shelf tools be used like LDAP or secure shell? Surely. But on the server side itself, should the agents be:

Upon initial connection once authenticated (set via the hosts configuration panel on Mohawk), there is a handshake that transfers information back to Mohawk including:

Mohawk then would retrieve the remote host's configuration file for storage within an array for immediate use, which is reflected in the GUI. They can also transfer other important information in a realtime-monitoring mode such as performance metrics of the server:

Other values are derived for the graphing functions of Mohawk such as hits per second, overall "performance indice" (for graphing servers overall) and so on. The agents also allow for remote stop/start and restart functions pertaining to the server.

Internal Data Structure

The internal data structure is being set up in such a way that all the various configuration information for multiple virtual/real servers for each physical host reside in arrays for fast and easy access. The only time this information is written out to disk (obviously) is when something has changed. After Mohawk initially contacts a host and does the proper handshake with authentication, the configuration information is pulled into Mohawk for manipulation or simply for viewing. After changes are made, they can be sent back to the physical host, after which either a manual or timed restart affects the changes. Below is a draft of the internal data structure for configuration information:


Below you will see the status of the GUI as it is designed. It's subject to change and will usually reflect the latest state of Mohawk. If you spot things strange or have suggestions or comments, feel free to let me know.

I'm trying to make the GUI as intuitive and to-the-point as possible. The idea is that you select a server to work on from the drop-down listbox, which then loads the information for the respective notebook pages. You have the notebook pages which correspond to global, virtual host and other options for each server. Toolbar buttons generally effect the particular server you're working on and it's status (up or down) is shown by an indicator light on the status bar.


April 30, 2005:
Mohawk isn't really a live project anymore. I've tossed around the idea of picking it up again a few times over the years, but who knows if I'll ever get to it. I'd like to, so if you're interested feel free to drop me a line!

January 18, 2001:
I've rejuvenated the project a little bit and started getting in gear again after slacking on this for a while. I've successfully compiled the software (such that it is) under Solaris 7 which is running the Ximian GNOME packages.

Aug 1, 2000:
I'm working on the GUI, which is nearing completion as far as design and layout. It'll still need tweaks as it's developed - it's modelled after TkApache right now, but in GTK+ form. Some new GUI elements were added to allow for the new features planned. Documentation is forming, mostly what you see on this page is what's available. Lukas has some basic parsing code in progress, using his "dot.conf" library, and once that's done - we'll integrate it into the GUI with file I/O. This should be the very first usable code, if for nothing else than to edit Apache config files.


Well, there's really not too much to download since I've decided to go commercial with this software. For historical purposes, I've left the following binaries up. They're based on early developmental code and really just pop up the GUI of the program as it was being designed. As such, the binaries below may or may not work on your system, depending greatly on library versions installed. Do not ask how to download or run these binaries, or if they'll be ported to platform XYZ. Use at your own risk, blah blah blah...

Available: a Linux binary or Solaris 7 binary.

The Linux binary was compiled on Red Hat v6.1 for Intel, using the following versions of software, which are dependencies:

The Solaris binary was compiled on Solaris 7 for SPARC, using the same versions of software, save for the compiler used:

All images are (C) 1994-2005 by Michael Holve