On 2007-09-04 07:59:15 -0700, JT Moree wrote: > > $instance_id # could be opaque or structured to include server name > > # or IP, PID, etc. > > $instance_id.$connection_id # identifies a connection handled > > # by this instance > > $instance_id.$connection_id.$transaction_id # identifies a > > # transaction within > > # this connection. > > I notice that svn code has moved to this model but it still has these > lines in it > > my $SALT_HOST = crypt(hostname, chr(65+rand(57)).chr(65+rand(57))); > $SALT_HOST =~ tr/A-Za-z0-9//cd; > > Is this being used anymore? I don't find a reference to $SALT_HOST in > the same file.
I was playing around a bit on the weekend, yes. Since neither Matt nor Ask have cried out in horror on what I did, I guess it's time to present that to a wider audience: The instance id basically identifies Qpsmtpd::SMTP object. Looking through the sources of various servers I found that there is always exactly one per process (although with forkserver it is inherited by the child processes), so I thought that time when object was created (seconds.microseconds since the epoch) "host_id" process id should always be unique. I replaced $SALT_HOST as the "host_id" with the primary IP address (in hex), because I think a predictable host id is useful (so that you can find the relevant host from the log entry - otherwise the host id could be removed). It may be useful to replace the IP address with something else, most likely the (abbreviated) hostname. That could be a configuration option. (So this answers your question: $SALT_HOST is obsolete and I just forgot to delete it) The connection id and transaction id are simple counters. So a complete log entry (without timestamp or whatever else the logging mechanism may add) looks like this: 1188729346.156197.7f000101.3165.2.1 Accepted connection 0/15 from 127.0.1.1 / Unknown So this is instance "1188729346.156197.7f000101.3165" (started at 1188729346.156197 on host 127.0.1.1 (oops - the joys of dhcp and strange /etc/hosts files) in process 3165). This is connection number 2 (i.e. the first "real" connection (connection number 1 is used up during startup) on this instance, and the first transaction within this connection (since a "mail from" command always starts a new transaction, you can think of transaction 2 as the first "real" transaction). Apart from the fact that the "host id" thingy should probably be configurable, there are some other things I'm not completely happy with: * The id is rather long. That is written into every log line and the first 33 characters are always the same until you restart the instance. If you have only a handful of instances (which is quite likely) that's 33 characters for a few bits of information (at least it will compress well with gzip). We could use base64 instead of base 10/16. Then the timestamp reduces to 6+4 (or 6+3 if we are content with 4 µs resolution) characters, the IP address to 6 characters and the PID to 3 characters. Now that's 20 characters including the dot, but it's quite opaque. * The same delimiter is used within the instance id and between the instance id and the connection and transaction ids. This may make life unnecessarily hard for log analysis tools. hp -- _ | Peter J. Holzer | I know I'd be respectful of a pirate |_|_) | Sysadmin WSR | with an emu on his shoulder. | | | [EMAIL PROTECTED] | __/ | http://www.hjp.at/ | -- Sam in "Freefall"
signature.asc
Description: Digital signature