SendStats:
PUBLIC
PROC []
RETURNS [success, terminateService, newPackage:
BOOL ←
FALSE, queueingCommands:
LIST
OF Rope.
ROPE] = {
May Raise RPC.CallFailed
controllerInterface: ComputeServerControllerRpcControl.InterfaceRecord;
numberCPUs: CARDINAL ← 1;
diskPartionSize: INT;
freePagesOnDisk: INT;
freeboard: INT;
oldestLRUFileDate: BasicTime.GMT;
freeProcesses: CARDINAL ← 0;
NowRMReclamations: INT;
ReclamationRate: REAL;
NowTime: BasicTime.GMT = BasicTime.Now[];
TimePeriod: REAL;
firstCall: BOOL;
[diskPartionSize, freePagesOnDisk, freeboard] ← FSBackdoor.VolumePages[];
Get values for freeGFI, freeMDS, freeVM, and CPULoad
watchStatsRecord ← WatchStats.GetWatchStats[];
NowRMReclamations ← VMStatistics.rmReclamations;
TimePeriod ← BasicTime.Period[LastTime, NowTime];
TimePeriod ← MAX[1.0, TimePeriod];
IF LastRMReclamations = 0 THEN ReclamationRate ← -1.0
ELSE ReclamationRate ← (NowRMReclamations - LastRMReclamations) / TimePeriod ;
LastRMReclamations ← NowRMReclamations;
oldestLRUFileDate ← FSFileOps.OldestLruDate[];
IF FSFileSpaceImpl.lru.first = NIL THEN oldestLRUFileDate ← BasicTime.nullGMT
ELSE oldestLRUFileDate ← FSFileSpaceImpl.lru.first.used;
freeProcesses ← ProcessBackdoor.CountFreeProcesses[];
CRITICAL SECTION BEGIN
TRUSTED {
pbsIndex: PrincOps.PsbIndex;
firstPBSIndex: PrincOps.PsbIndex ;
UNTIL PrincOpsUtils.Enter[@ProcessImpl.processLock] DO NULL ENDLOOP;
pbsIndex ← LOOPHOLE[ProcessImpl.rebirth, PrincOps.ConditionVariable].condition.tail;
firstPBSIndex ← pbsIndex;
IF pbsIndex # PrincOps.PsbNull THEN DO
freeProcesses ← freeProcesses + 1;
pbsIndex ← PrincOps.PDA.block[pbsIndex].link.next;
IF pbsIndex = firstPBSIndex OR pbsIndex = PrincOps.PsbNull THEN EXIT;
ENDLOOP;
PrincOpsUtils.Exit[@ProcessImpl.processLock];
};
CRITICAL SECTION END
firstCall ← ~wasUp AND ServiceEnabled;
controllerInterface ← ComputeServerInternal.ControllerInterface;
IF controllerInterface # NIL THEN [terminateService, newPackage, queueingCommands] ← controllerInterface.NewStats[serverMachineName: serverMachineName, serverMachinePupAddress: serverMachinePupAddress, serverUP: ServiceEnabled, firstCall: firstCall, machineType: SystemVersion.machineType, mainMemory: VMSideDoor.rmPages, numberCPUs: numberCPUs, diskPartionSize: diskPartionSize, freePagesOnDisk: freePagesOnDisk, freeboard: freeboard, freeGFI: watchStatsRecord.gfiFree, freeMDS: watchStatsRecord.mdsFree, freeVM: watchStatsRecord.vmFree, oldestLRUFileDate: oldestLRUFileDate, CPULoad: watchStatsRecord.cpuLoad, reclamationRate: ReclamationRate, freeProcesses: freeProcesses ];
success ← TRUE;
wasUp ← ServiceEnabled;
};