Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.adminSite.macros.statusCenter
on statusCenter () {
<<Changes
<<6/7/02; 2:57:43 PM by JES
<<Created.
local (pta = html.getPageTableAddress ());
local (htmltext = "", indentlevel = 0);
on add (s) {
htmltext = htmltext + (string.filledString ("\t", indentlevel) + s + "\r\n");};
on addSubItem (s) {
add ("<div class=\"small\" style=\"padding-left: 5px; padding-bottom: 5px;\">"); indentlevel++;
add (s);
add ("</div>"); indentlevel--};
<<Notes -- to do?
<<Add "web server" and "xml-rpc/soap" sections?
<<Support center? (probably not yet)
bundle { //trial status
if defined (userland.trialVersion.flTrialVersion) {
if userland.trialVersion.flTrialVersion {
local (storeurl = mainResponder.adminSite.urls.store);
local (ctdays = 60 - ((number (clock.now ()) - number (userland.trialVersion.whenInstalled)) / (24 * 60 * 60)) );
local (serialNumberUrl = "http://127.0.0.1:" + user.inetd.config.http2.port + mainResponder.adminSite.urls.serialNumber);
add ("<div class=\"small\" style=\"padding-bottom: 5px;\"><b><a href=\"" + storeUrl + "\">Trial version</a></b></div>");
addSubItem (ctdays + " days remaining. Click <a href=\"" + serialNumberUrl + "\">here</a> to enter your serial number. A license costs $899. We accept all major credit cards. Why delay? <i>Get yours today!</i>")}}};
bundle { //server status
on tooltip (s) {
return ("title=\"Click this link for a detailed readout of " + s + " on this server.\"")};
bundle { //header-link
add ("<div class=\"small\" style=\"padding-bottom: 5px;\"><b><a href=\"" + mainResponder.adminSite.urls.readouts + "\">Server Status</a></b></div>")};
bundle { //up-since, hits
local (uphours = (number (clock.now ()) - number (user.webserver.stats.upsince)) / 3600);
addSubItem ("Up for " + uphours + " hours; " + string.addCommas (user.webserver.stats.hits) + " total <a href=\"" + mainResponder.adminSite.urls.http + "\" " + tooltip ("hits") + ">hits</a>; " + user.webserver.stats.maxConnections + " max connections.")};
bundle { //RAM usage
local (s);
if defined (system.environment.isCarbon) and system.environment.isCarbon { //the way RAM works on MacOS X is totally different
local (programName = file.fileFromPath (frontier.getProgramPath ()));
programName = string.replaceAll (programName, "™", "");
local (psout = sys.unixShellCommand ("ps -auxww | grep \"" + programName + "\"") );
while psout contains " " {
psout = string.replaceAll (psout, " ", " ")};
local (memUsage = double (string.nthField (psout, " ", 5)) * 1024);
local (resident = double (string.nthField (psout, " ", 6)) * 1024);
s = "Total memory usage: " + string.gigabyteString (memUsage) + "; Resident: " + string.gigabyteString (resident) + "."}
else { //original Windows and Mac Classic behavior
s = "Available RAM: " + string.gigabytestring (memavail ()) + "; ";
s = s + "Smallest: " + string.megabytestring (user.webserver.stats.minMemAvail) + "; ";
s = s + "Largest: " + string.megabytestring (user.webserver.stats.maxMemAvail) + "."};
addSubItem (s)};
bundle { //databases
local (totalSizeDouble = double (file.size (Frontier.getFilePath ())));
local (adr);
for adr in @system.compiler.files {
totalSizeDouble = totalSizeDouble + file.size (nameOf (adr^))};
addSubItem ((sizeOf (system.compiler.files) + 1) + " open <a href=\"" + mainResponder.adminSite.urls.databases + "\" " + tooltip ("open databases") + ">databases</a>, total size " + string.gigabyteString (totalSizeDouble) + ".")};
bundle { //Frontier disk usage
local (nomad = Frontier.pathString);
local (pc = file.getPathChar ());
while string.countFields (nomad, pc) > 1 {
nomad = file.folderFromPath (nomad)};
local (homeVolSize = file.volumeSizeDouble (nomad));
local (homeVolFree = file.freeSpaceOnVolumeDouble (nomad));
local (percentFree = (number (homeVolFree / homeVolSize * 1000)) / 10.0);
addSubItem (string.gigabyteString (homeVolFree) + " of " + string.gigaByteString (homeVolSize) + " available on <a href=\"" + mainResponder.adminSite.urls.disk + "\" " + tooltip ("disk status") + ">disk</a>. (" + percentFree + "%)")}};
bundle { //tools status
local (adr, cttools = 0);
for adr in @user.tools.databases {
try {
if adr^.flInstalled {
local (adrtool = @[adr^.path]);
if defined (adrtool^) { //is the database opened?
local (toolname = Frontier.tools.cleanToolName (file.fileFromPath (adr^.path)));
local (adrsuite = @adrtool^.[toolname + "Suite"]);
if defined (adrsuite^) { //tools aren't required to have a suite sub-table
if defined (adrsuite^.statusCenterMessage) {
local (displayname = toolname + " Tool");
local (adrinfo = @adrtool^.[toolname + "Info"]);
bundle { //get displayname
if defined (adrinfo^) {
if defined (adrinfo^.name) {
if sizeOf (adrinfo^.name) > 0 {
if adrinfo^.name != toolname {
displayname = adrinfo^.name}}}}};
local (s);
s = adrsuite^.statusCenterMessage ();
local (toollink = displayname);
local (host = pta^.host);
bundle { //set host
host = pta^.host;
if host contains ":" {
host = string.nthField (host, ":", 1)};
local (adrlisten);
if defined (adrinfo^.localUrl) {
adrlisten = @user.inetd.config.http}
else {
if defined (user.inetd.config.http2) {
adrlisten = @user.inetd.config.http2}};
local (port = adrlisten^.port);
if defined (adrlisten^.apparentPort) {
port = adrlisten^.apparentPort};
if port != 80 {
host = host + ":" + port}};
if defined (adrinfo^) and defined (adrinfo^.localUrl) {
if adrinfo^.localUrl beginsWith "http://" {
toollink = html.getLink (toollink, adrinfo^.localUrl)}
else {
local (url = adrinfo^.localUrl);
if not (url beginsWith "/") {
url = "/" + url};
toollink = html.getLink (toollink, "http://" + host + adrinfo^.localUrl)}}
else { //default link to the Tool's website
if defined (adrtool^.[toolname + "Website"]) {
toollink = html.getLink (toollink, "http://" + host + "/" + toolname + "/")}};
add ("<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"><tr><td class=\"small\" style=\"padding-bottom:5px;\"><b>" + toollink + "</b><br />" + s + "</td></tr></table>");
cttools++}}}}}}};
bundle { //version info
local (osname = system.environment.osFullNameForDisplay, osversion);
if system.environment.isMac {
if defined (system.environment.isCarbon) and system.environment.isCarbon {
osname = "MacOS X";
bundle { //set osversion
<<JES 8/4/02: MacOS X returns a version string in decimal, but the visual representation is actually the hexadecimal version -- we get something like 16.1.5, but that really should be displayed as 10.1.5. 0x10 == 16. Strange, but true...
local (firstpart = string.nthField (system.environment.osVersionString, ".", 1));
osversion = string.delete (system.environment.osVersionString, 1, sizeOf (firstpart));
osversion = number (string.nthField (string.hex (firstpart), "x", 2)) + osversion}}
else {
osname = "MacOS";
osversion = system.environment.osVersionString}}
else { //windows -- add service pack name
osversion = system.environment.osVersionString;
if defined (system.environment.winServicePackNumber) {
osversion = osversion + " " + string.trimWhiteSpace (system.environment.winServicePackNumber)}};
add ("<div class=\"small\">Frontier v" + Frontier.version () + "<br />" + osname + " v" + osversion + ".</div>")};
return (htmltext)};
<<bundle //test code
<<statusCenter ()
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.