Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.utilities.getHashStats
on getHashStats (flIncludeHeader=true) {
<<Get statistics about the in-memory table hierarchy.
<<10/26/01; 11:07:11 AM by PBS
<<Changes:
<<10/31/01; 11:28:58 AM by PBS
<<flIncludeHeader is a new optional parameter. If true, include general info at the top about this installation of Radio.
local (fldebug = false); //set to false if not debugging
local (text = "", indentlevel = 0);
on add (s) {
text = text + string.filledString ('\t', indentlevel) + s + "\n"};
local (stats = Frontier.hashStats ());
bundle { //header
add ("Radio UserLand hash stats for " + user.prefs.name + " run at " + clock.now () + ".");
add ("");
if flIncludeHeader {
add ("About This Installation:");
indentlevel++;
add ("Radio version: " + Frontier.version ());
local (os = "Windows");
if system.environment.isMac {
if system.environment.isCarbon {
os = "Mac OS X"}
else {
os = "Mac OS"}};
add ("Operating System: " + os);
local (osVersion = system.environment.osVersionString);
if system.environment.isCarbon {
osVersion = string.replace (osVersion, "16", "10")};
add ("OS Version: " + osVersion);
add ("IP address: " + tcp.dns.getMyDottedId ());
add ("Email: " + user.prefs.mailAddress);
add ("");
indentlevel--}};
local (firstLine = string.nthField (stats, '\r', 1));
bundle { //first line
add ("Hash stats:");
indentlevel++;
on doField (ix, name) {
local (val = string.nthField (firstLine, ',', ix));
val = string.trimWhiteSpace (val);
add (name + ": " + val)};
doField (1, "Max # table items in a hash bucket");
doField (2, "Total # tables in memory");
doField (3, "Max depth of table hierarchy");
indentlevel--};
bundle { //remaining stats
add ("");
add ("Stats by type:");
stats = string.delete (stats, 1, sizeOf (firstLine));
stats = string.trimWhiteSpace (stats);
indentlevel++;
local (s = "Type" + string.filledString (' ', 15 - 4));
s = s + "In Memory" + string.filledString (' ', 15 - sizeOf ("In Memory"));
s = s + "In Tables in memory";
add (s);
local (i);
local (lastch = ' ');
for i = 1 to sizeOf (s) {
local (ch = s [i]);
if string.isAlpha (ch) {
s [i] = "-"};
if (i < sizeOf (s)) and (lastch != ' ') {
s [i] = "-"};
lastch = ch};
add (s);
loop {
local (oneLine = string.nthField (stats, '\r', 1));
if oneLine == "" {
break};
stats = string.delete (stats, 1, sizeOf (oneLine));
stats = string.trimWhiteSpace (stats);
local (type = string.nthField (oneLine, '\t', 3));
local (inMemory = string.nthField (oneLine, '\t', 1));
local (inTables = string.nthField (oneLine, '\t', 2));
local (s = type);
s = s + string.filledString (' ', 15 - sizeOf (type));
s = s + inMemory + string.filledString (' ', 15 - sizeOf (inMemory));
s = s + inTables;
add (s)};
indentlevel--};
if fldebug {
wp.newTextObject (text, @temp.hashStats);
edit (@temp.hashStats)};
return (text)}
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.