Monday, November 08, 2010 at 12:04 AM.

system.verbs.builtins.mainResponder.controlPanel.domains

on domains () {
	<<Display the list of domains on this server.
		<<Changes:
			<<06/10/00; 10:53:10 PM by PBS
				<<Domains can be tables.
	local (pta = html.getPageTableAddress ());
	pta^.title = "Domains";
	
	local (htmlText = "");
	on add (s) {
		htmlText = htmlText + s + "\r"};
	
	if not defined (user.webserver.prefs.flDomainStats) {
		user.webserver.prefs.flDomainStats = false};
	local (flShowStats = user.webserver.prefs.flDomainStats);
	
	local (infoTable);
	new (tableType, @infoTable);
	bundle { //build a table of information about the domains
		local (i, adrStats = @user.webserver.stats.domains);
		for i = 1 to sizeOf (config.mainResponder.domains) {
			local (adrItem = @config.mainResponder.domains [i]);
			
			<<Get info about this domain.
			local (domainName = nameOf (adrItem^));
			local (domainValue);
			if typeOf (adrItem^) == tableType { //PBS 06/10/00: domains can be tables
				domainValue = "Table"}
			else {
				domainValue = adrItem^};
			local (bytes = 0, hits = 0, ticks = 0);
			
			<<Look up stats for this domain.
			if defined (adrStats^.[domainName]) {
				bytes = adrStats^.[domainName].bytes;
				hits = adrStats^.[domainName].hits;
				ticks = adrStats^.[domainName].ticks};
			
			<<Create a new table entry for this domain.
			local (adrEntry = @infoTable.[domainName]);
			new (tableType, adrEntry);
			
			<<Populate the table entry.
			adrEntry^.name = domainName;
			try {
				adrEntry^.documentsRoot = domainValue}
			else {
				adrEntry^.documentsRoot = ""};
			adrEntry^.bytes = bytes;
			adrEntry^.hits = hits;
			adrEntry^.ticks = ticks}};
	
	local (adrTable = html.table.new (border:0, cellspacing:8, cellpadding:3));
	bundle { //build the table that will be rendered as HTML
		html.table.addColumn (adrTable, "Domain");
		if flShowStats {
			html.table.addColumn (adrTable, "Hits", align:"right");
			html.table.addColumn (adrTable, "Bytes", align:"right")};
		html.table.addColumn (adrTable, "Folder or Address");
		
		local (i);
		for i = 1 to sizeOf (infoTable) {
			local (adrItem = @infoTable [i]);
			
			local (url = "http://" + adrItem^.name + "/");
			if string.lower (adrItem^.name) == "default" {
				url = "http://127.0.0.1"};
			local (link = html.getLink (adrItem^.name, url));
			local (docsRoot = adrItem^.documentsRoot);
			if typeOf (docsRoot) == addressType {
				docsRoot = string.popFileFromAddress (docsRoot)}
			else {
				docsRoot = string.replaceAll (docsRoot, "\\", "\\\\")};
			
			with adrItem^ {
				if flShowStats {
					html.table.addRow (adrTable)^.cells = {link, string.addCommas (hits), string.megabyteString (bytes), docsRoot}}
				else {
					html.table.addRow (adrTable)^.cells = {link, docsRoot}}}}};
	
	<<add ("Shown here are the domains hosted on this server, and the ")
	<<if flShowStats
		<<add ("hits, bytes served, and ")
	<<add ("document root for each.<p>")
	add (html.table.render (adrTable));
	html.table.delete (adrTable);
	
	return (htmlText)}



This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.