[0001]
[0002]
[0003]
[0004]
[0005]
[0006]
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]
[0037]
[0038]
[0039]
[0040]
[0041]
[0042]
[0043]
[0044]
[0045]
[0046]
[0047]
[0048]
[0049]
[0050]
[0051]
[0052]
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065]
[0066]
[0067]
[0068]
[0069]
[0070]
[0071]
[0072]
[0073]
[0074]
[0075]
[0076]
[0077]
[0078]
[0079]
[0080]
[0081]
[0082]
[0083]
[0084]
[0085]
[0086]
[0087]
[0088]
[0089]
[0090]
[0091]
[0092]
[0093]
[0094]
[0095]
[0096]
[0097]
[0098]
[0099]
[0100]
[0101]
[0102]
[0103]
[0104]
[0105]
[0106]
[0107]
[0108]
[0109]
[0110]
[0111]
[0112]
[0113]
[0114]
[0115]
[0116]
[0117]
[0118]
[0119]
[0120]
[0121]
[0122]
[0123]
[0124]
[0125]
[0126]
[0127]
[0128]
[0129]
[0130]
[0131]
[0132]
[0133]
[0134]
[0135]
[0136]
[0137]
[0138]
[0139]
[0140]
[0141]
[0142]
[0143]
[0144]
[0145]
[0146]
[0147]
[0148]
[0149]
[0150]
[0151]
[0152]
[0153]
[0154]
[0155]
[0156]
[0157]
[0158]
[0159]
[0160]
[0161]
[0162]
[0163]
[0164]
[0165]
[0166]
[0167]
[0168]
[0169]
[0170]
[0171]
[0172]
[0173]
[0174]
[0175]
[0176]
[0177]
[0178]
[0179]
[0180]
[0181]
[0182]
[0183]
[0184]
[0185]
[0186]
[0187]
[0188]
[0189]
[0190]
[0191]
[0192]
[0193]
[0194]
[0195]
[0196]
[0197]
[0198]
[0199]
[0200]
[0201]
[0202]
[0203]
[0204]
[0205]
[0206]
[0207]
[0208]
[0209]
[0210]
[0211]
[0212]
[0213]
[0214]
[0215]
[0216]
[0217]
[0218]
[0219]
[0220]
[0221]
[0222]
[0223]
[0224]
[0225]
[0226]
[0227]
[0228]
[0229]
[0230]
[0231]
[0232]
[0233]
[0234]
[0235]
[0236]
[0237]
[0238]
[0239]
[0240]
[0241]
[0242]
[0243]
[0244]
[0245]
[0246]
[0247]
[0248]
[0249]
[0250]
[0251]
[0252]
[0253]
[0254]
[0255]
[0256]
[0257]
[0258]
[0259]
[0260]
[0261]
[0262]
[0263]
[0264]
[0265]
[0266]
[0267]
[0268]
[0269]
[0270]
[0271]
[0272]
[0273]
[0274]
[0275]
[0276]
[0277]
[0278]
[0279]
[0280]
[0281]
[0282]
[0283]
[0284]
[0285]
[0286]
[0287]
[0288]
[0289]
[0290]
[0291]
[0292]
[0293]
[0294]
[0295]
[0296]
[0297]
[0298]
[0299]
[0300]
[0301]
[0302]
[0303]
[0304]
[0305]
[0306]
[0307]
[0308]
[0309]
[0310]
[0311]
[0312]
[0313]
[0314]
[0315]
[0316]
[0317]
[0318]
[0319]
[0320]
[0321]
[0322]
[0323]
[0324]
[0325]
[0326]
[0327]
[0328]
[0329]
[0330]
[0331]
[0332]
[0333]
[0334]
[0335]
[0336]
[0337]
[0338]
[0339]
[0340]
[0341]
[0342]
[0343]
[0344]
[0345]
[0346]
[0347]
[0348]
[0349]
[0350]
[0351]
[0352]
[0353]
[0354]
[0355]
[0356]
[0357]
[0358]
[0359]
[0360]
[0361]
[0362]
[0363]
[0364]
[0365]
[0366]
[0367]
[0368]
[0369]
[0370]
[0371]
[0372]
[0373]
[0374]
[0375]
[0376]
[0377]
[0378]
[0379]
[0380]
[0381]
[0382]
[0383]
[0384]
[0385]
[0386]
[0387]
[0388]
[0389]
[0390]
[0391]
[0392]
[0393]
[0394]
[0395]
[0396]
[0397]
[0398]
[0399]
[0400]
[0401]
[0402]
[0403]
[0404]
[0405]
[0406]
[0407]
[0408]
[0409]
[0410]
[0411]
[0412]
[0413]
[0414]
[0415]
[0416]
[0417]
[0418]
[0419]
[0420]
[0421]
[0422]
[0423]
[0424]
[0425]
[0426]
[0427]
[0428]
[0429]
[0430]
[0431]
[0432]
[0433]
[0434]
[0435]
[0436]
[0437]
[0438]
[0439]
[0440]
[0441]
[0442]
[0443]
[0444]
[0445]
[0446]
[0447]
[0448]
[0449]
[0450]
[0451]
[0452]
[0453]
[0454]
[0455]
[0456]
[0457]
[0458]
[0459]
[0460]
[0461]
[0462]
[0463]
[0464]
[0465]
[0466]
[0467]
[0468]
[0469]
[0470]
[0471]
[0472]
[0473]
[0474]
[0475]
[0476]
[0477]
[0478]
[0479]
[0480]
[0481]
[0482]
[0483]
[0484]
[0485]
[0486]
[0487]
[0488]
[0489]
[0490]
[0491]
[0492]
[0493]
[0494]
[0495]
[0496]
[0497]
[0498]
[0499]
[0500]
[0501]
[0502]
[0503]
[0504]
[0505]
[0506]
[0507]
[0508]
[0509]
[0510]
[0511]
[0512]
[0513]
[0514]
[0515]
[0516]
[0517]
[0518]
[0519]
[0520]
[0521]
[0522]
[0523]
[0524]
[0525]
[0526]
[0527]
[0528]
[0529]
[0530]
[0531]
[0532]
[0533]
[0534]
[0535]
[0536]
[0537]
[0538]
[0539]
[0540]
[0541]
[0542]
[0543]
[0544]
[0545]
[0546]
[0547]
[0548]
[0549]
[0550]
[0551]
[0552]
[0553]
[0554]
[0555]
[0556]
[0557]
[0558]
[0559]
[0560]
[0561]
[0562]
[0563]
[0564]
[0565]
[0566]
[0567]
[0568]
[0569]
[0570]
[0571]
[0572]
[0573]
[0574]
[0575]
[0576]
[0577]
[0578]
[0579]
[0580]
[0581]
[0582]
[0583]
[0584]
[0585]
[0586]
[0587]
[0588]
[0589]
[0590]
[0591]
[0592]
[0593]
[0594]
[0595]
[0596]
[0597]
[0598]
[0599]
[0600]
[0601]
[0602]
[0603]
[0604]
[0605]
[0606]
[0607]
[0608]
[0609]
[0610]
[0611]
[0612]
[0613]
[0614]
[0615]
[0616]
[0617]
[0618]
[0619]
[0620]
[0621]
[0622]
[0623]
[0624]
[0625]
[0626]
[0627]
[0628]
[0629]
[0630]
[0631]
[0632]
[0633]
[0634]
[0635]
[0636]
[0637]
[0638]
[0639]
[0640]
[0641]
[0642]
[0643]
[0644]
[0645]
[0646]
[0647]
[0648]
[0649]
[0650]
[0651]
[0652]
[0653]
[0654]
[0655]
[0656]
[0657]
[0658]
[0659]
[0660]
[0661]
[0662]
[0663]
[0664]
[0665]
[0666]
[0667]
[0668]
[0669]
[0670]
[0671]
[0672]
[0673]
[0674]
[0675]
[0676]
[0677]
[0678]
[0679]
[0680]
[0681]
[0682]
[0683]
[0684]
[0685]
[0686]
[0687]
[0688]
[0689]
[0690]
[0691]
[0692]
[0693]
[0694]
[0695]
[0696]
[0697]
[0698]
[0699]
[0700]
[0701]
[0702]
[0703]
[0704]
[0705]
[0706]
[0707]
[0708]
[0709]
[0710]
[0711]
[0712]
[0713]
[0714]
[0715]
[0716]
[0717]
[0718]
[0719]
[0720]
[0721]
[0722]
[0723]
[0724]
[0725]
[0726]
[0727]
[0728]
[0729]
[0730]
[0731]
[0732]
[0733]
[0734]
[0735]
[0736]
[0737]
[0738]
[0739]
[0740]
[0741]
[0742]
[0743]
[0744]
[0745]
[0746]
[0747]
[0748]
[0749]
[0750]
[0751]
[0752]
[0753]
[0754]
[0755]
[0756]
[0757]
[0758]
[0759]
[0760]
[0761]
[0762]
[0763]
[0764]
[0765]
[0766]
[0767]
[0768]
[0769]
[0770]
[0771]
[0772]
[0773]
[0774]
[0775]
[0776]
[0777]
[0778]
[0779]
[0780]
[0781]
[0782]
[0783]
[0784]
[0785]
[0786]
[0787]
[0788]
[0789]
[0790]
[0791]
[0792]
[0793]
[0794]
[0795]
[0796]
[0797]
[0798]
[0799]
[0800]
[0801]
[0802]
[0803]
[0804]
[0805]
[0806]
[0807]
[0808]
[0809]
[0810]
[0811]
[0812]
[0813]
[0814]
[0815]
[0816]
[0817]
[0818]
[0819]
[0820]
[0821]
[0822]
[0823]
[0824]
[0825]
[0826]
[0827]
[0828]
[0829]
[0830]
[0831]
[0832]
[0833]
[0834]
[0835]
[0836]
[0837]
[0838]
[0839]
[0840]
[0841]
[0842]
[0843]
[0844]
[0845]
[0846]
[0847]
[0848]
[0849]
[0850]
[0851]
[0852]
[0853]
[0854]
[0855]
[0856]
[0857]
[0858]
[0859]
[0860]
[0861]
[0862]
[0863]
[0864]
[0865]
[0866]
[0867]
[0868]
[0869]
[0870]
[0871]
[0872]
[0873]
[0874]
[0875]
[0876]
[0877]
[0878]
[0879]
[0880]
[0881]
[0882]
[0883]
[0884]
[0885]
[0886]
[0887]
[0888]
[0889]
[0890]
[0891]
[0892]
[0893]
[0894]
[0895]
[0896]
[0897]
[0898]
[0899]
[0900]
[0901]
[0902]
[0903]
[0904]
[0905]
[0906]
[0907]
[0908]
[0909]
[0910]
[0911]
[0912]
[0913]
[0914]
[0915]
[0916]
[0917]
[0918]
[0919]
[0920]
[0921]
[0922]
[0923]
[0924]
[0925]
[0926]
[0927]
[0928]
[0929]
[0930]
[0931]
[0932]
[0933]
[0934]
[0935]
[0936]
[0937]
[0938]
[0939]
[0940]
[0941]
[0942]
[0943]
[0944]
[0945]
[0946]
[0947]
[0948]
[0949]
[0950]
[0951]
[0952]
[0953]
[0954]
[0955]
[0956]
[0957]
[0958]
[0959]
[0960]
[0961]
[0962]
[0963]
[0964]
[0965]
[0966]
[0967]
[0968]
[0969]
[0970]
[0971]
[0972]
[0973]
[0974]
[0975]
[0976]
[0977]
[0978]
[0979]
[0980]
[0981]
[0982]
[0983]
[0984]
[0985]
[0986]
[0987]
[0988]
[0989]
[0990]
[0991]
[0992]
[0993]
[0994]
[0995]
[0996]
[0997]
[0998]
[0999]
[1000]
[1001]
[1002]
[1003]
[1004]
[1005]
[1006]
[1007]
[1008]
[1009]
[1010]
[1011]
[1012]
[1013]
[1014]
[1015]
[1016]
[1017]
[1018]
[1019]
[1020]
[1021]
[1022]
[1023]
[1024]
[1025]
[1026]
[1027]
[1028]
[1029]
[1030]
[1031]
[1032]
[1033]
[1034]
[1035]
[1036]
[1037]
[1038]
[1039]
[1040]
[1041]
[1042]
[1043]
[1044]
[1045]
[1046]
[1047]
[1048]
[1049]
[1050]
[1051]
[1052]
[1053]
[1054]
[1055]
[1056]
[1057]
[1058]
[1059]
[1060]
[1061]
[1062]
[1063]
[1064]
[1065]
[1066]
[1067]
[1068]
[1069]
[1070]
[1071]
[1072]
[1073]
[1074]
[1075]
[1076]
[1077]
[1078]
[1079]
[1080]
[1081]
[1082]
[1083]
[1084]
[1085]
[1086]
[1087]
[1088]
[1089]
[1090]
[1091]
[1092]
[1093]
[1094]
[1095]
[1096]
[1097]
[1098]
[1099]
[1100]
[1101]
[1102]
[1103]
[1104]
[1105]
[1106]
[1107]
[1108]
[1109]
[1110]
[1111]
[1112]
[1113]
[1114]
[1115]
[1116]
[1117]
[1118]
[1119]
[1120]
[1121]
[1122]
[1123]
[1124]
[1125]
[1126]
[1127]
[1128]
[1129]
[1130]
[1131]
[1132]
[1133]
[1134]
[1135]
[1136]
[1137]
[1138]
[1139]
[1140]
[1141]
[1142]
[1143]
[1144]
[1145]
[1146]
[1147]
[1148]
[1149]
[1150]
[1151]
[1152]
[1153]
[1154]
[1155]
[1156]
[1157]
[1158]
[1159]
[1160]
[1161]
[1162]
[1163]
[1164]
[1165]
[1166]
[1167]
[1168]
[1169]
[1170]
[1171]
[1172]
[1173]
[1174]
[1175]
[1176]
[1177]
[1178]
[1179]
[1180]
[1181]
[1182]
[1183]
[1184]
[1185]
[1186]
[1187]
[1188]
[1189]
[1190]
[1191]
[1192]
[1193]
[1194]
[1195]
[1196]
[1197]
[1198]
[1199]
[1200]
[1201]
[1202]
[1203]
[1204]
[1205]
[1206]
[1207]
[1208]
[1209]
[1210]
[1211]
[1212]
[1213]
[1214]
[1215]
[1216]
[1217]
[1218]
[1219]
[1220]
[1221]
[1222]
[1223]
[1224]
[1225]
[1226]
[1227]
[1228]
[1229]
[1230]
[1231]
[1232]
[1233]
[1234]
[1235]
[1236]
[1237]
[1238]
[1239]
[1240]
[1241]
[1242]
[1243]
[1244]
[1245]
[1246]
[1247]
[1248]
[1249]
[1250]
[1251]
[1252]
[1253]
[1254]
[1255]
[1256]
[1257]
[1258]
[1259]
[1260]
[1261]
[1262]
[1263]
[1264]
[1265]
[1266]
[1267]
[1268]
[1269]
[1270]
[1271]
[1272]
[1273]
[1274]
[1275]
[1276]
[1277]
[1278]
[1279]
[1280]
[1281]
[1282]
[1283]
[1284]
[1285]
[1286]
[1287]
[1288]
[1289]
[1290]
[1291]
[1292]
[1293]
[1294]
[1295]
[1296]
[1297]
[1298]
[1299]
[1300]
[1301]
[1302]
[1303]
[1304]
[1305]
[1306]
[1307]
[1308]
[1309]
[1310]
[1311]
[1312]
[1313]
[1314]
[1315]
[1316]
[1317]
[1318]
[1319]
[1320]
[1321]
[1322]
[1323]
[1324]
[1325]
[1326]
[1327]
[1328]
[1329]
[1330]
[1331]
[1332]
[1333]
[1334]
[1335]
[1336]
[1337]
[1338]
[1339]
[1340]
[1341]
[1342]
[1343]
[1344]
[1345]
[1346]
[1347]
[1348]
[1349]
[1350]
[1351]
[1352]
[1353]
[1354]
[1355]
[1356]
[1357]
[1358]
[1359]
[1360]
[1361]
[1362]
[1363]
[1364]
[1365]
[1366]
[1367]
[1368]
[1369]
[1370]
[1371]
[1372]
[1373]
[1374]
[1375]
[1376]
[1377]
[1378]
[1379]
[1380]
[1381]
[1382]
[1383]
[1384]
[1385]
[1386]
[1387]
[1388]
[1389]
[1390]
[1391]
[1392]
[1393]
[1394]
[1395]
[1396]
[1397]
[1398]
[1399]
[1400]
[1401]
[1402]
[1403]
[1404]
[1405]
[1406]
[1407]
[1408]
[1409]
[1410]
[1411]
[1412]
[1413]
[1414]
[1415]
[1416]
[1417]
[1418]
[1419]
[1420]
[1421]
[1422]
[1423]
[1424]
[1425]
[1426]
[1427]
[1428]
[1429]
[1430]
[1431]
[1432]
[1433]
[1434]
[1435]
[1436]
[1437]
[1438]
[1439]
[1440]
[1441]
[1442]
[1443]
[1444]
[1445]
[1446]
[1447]
[1448]
[1449]
[1450]
[1451]
[1452]
[1453]
[1454]
[1455]
[1456]
[1457]
[1458]
[1459]
[1460]
[1461]
[1462]
[1463]
[1464]
[1465]
[1466]
[1467]
[1468]
[1469]
[1470]
[1471]
[1472]
[1473]
[1474]
[1475]
[1476]
[1477]
[1478]
[1479]
[1480]
[1481]
[1482]
[1483]
[1484]
[1485]
[1486]
[1487]
[1488]
[1489]
[1490]
[1491]
[1492]
[1493]
[1494]
[1495]
[1496]
[1497]
[1498]
[1499]
[1500]
[1501]
[1502]
[1503]
[1504]
[1505]
[1506]
[1507]
[1508]
[1509]
[1510]
[1511]
[1512]
[1513]
[1514]
[1515]
[1516]
[1517]
[1518]
[1519]
[1520]
[1521]
[1522]
[1523]
[1524]
[1525]
[1526]
[1527]
[1528]
[1529]
[1530]
[1531]
[1532]
[1533]
[1534]
[1535]
[1536]
[1537]
[1538]
[1539]
[1540]
[1541]
[1542]
[1543]
[1544]
[1545]
[1546]
[1547]
[1548]
[1549]
[1550]
[1551]
[1552]
[1553]
[1554]
[1555]
[1556]
[1557]
[1558]
[1559]
[1560]
[1561]
[1562]
[1563]
[1564]
[1565]
[1566]
[1567]
<!DOCTYPE html>
<!-- WASDOC AXP-2.0.0 (CGILIB AXP-1.9.9) -->
<!-- wasDOC Copyright (C) 2019,2020 Mark G.Daniel - Apache-2.0 licenced -->
<!--  3-NOV-2021 02:50 -->
<noscript>NOTE: SOME FUNCTIONALITY EMPLOYS JAVASCRIPT</noscript>
<div id="erreport1" style="display:none;"></div>
<script>
function errorReport(string) {
   for (var cnt = 1; cnt <= 2; cnt++) {
      var err = document.getElementById('erreport'+cnt);
      err.style.display = 'block';
      err.innerHTML += string;
   }
}
</script>
<style type="text/css">
html { font-family: arial, verdana, sans-serif; font-size:12pt; margin:1em; }
h1 { font-size:124%; font-style:bold;
     margin-top:1em; margin-bottom:0.5em; }
h2 { font-size:120%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.4em; }
h3 { font-size:116%; font-style:bold;
     margin-top:1.0em; margin-bottom:0.3em; }
h4 { font-size:112%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.3em; }
h5 { font-size:112%; font-style:bold; 
     margin-top:1.1em; margin-bottom:0.3em; }
h6 { font-size:112%; font-style:bold; padding:0; margin:0; }

h1 .text { text-decoration:underline; }
h1 .numb { padding-right:0.8em; }
h1 .numb:empty { display:none; padding-right:0; }
h2 .numb { padding-right:0.8em; }
h2 .numb:empty { display:none; padding-right:0; }
h3 .numb { padding-right:0.8em; }
h3 .numb:empty { display:none; padding-right:0; }
h4 .numb { padding-right:0.8em; }
h4 .numb:empty { display:none; padding-right:0; }
h5 .numb { display:none; padding-right:0; }
h6 .numb { display:none; padding-right:0; }

kbd { font-family:monospace; }

noscript { font-size:1.2em; }

p { line-height:1.1em; margin-top:1em; margin-bottom:1em; }

.chunk { font-size:130%; text-decoration:underline; }
.head {}
.high {}
.bold { font-weight:bold; }
.center { text-align:center; }
.italic { font-style:italic; }
.left { text-align:left; }
.nowrap { white-space:nowrap; }
.prewrap { white-space:pre; }
.right { text-align:right; }
.strike { text-decoration:line-through; }
.under { text-decoration:underline; }

.backlight { background-color:#f2f2f2; }
.display0 { display:none; }

img { max-width:100%; }
.imglink { }

.link { }
.blank { }

.list { margin-bottom:1em; }
.list li { margin-top:0.5em; }
.list0 li { margin-top:0; }
.item {}

.tabl { border-collapse:collapse; text-align:left; margin:0.4em 2em 0.5em 2em; }
.tabu { border-collapse:collapse; text-align:right; margin:0.4em 2em 0.5em 2em; }

.tabr { vertical-align:top; }
.tabh { padding:0.2em 0 0 2em; margin:0; }
.tabd { padding:0.1em 0 0 2em; margin:0; }
.tabh:first-of-type, td:first-of-type { padding-left:0; }

.tabu .tabh,
.tabu .tabd { border:1px solid gray; padding:0.2em 0.3em 0.2em 0.3em; }
.tab0 { border:none; visibility:hidden; max-width:1em; 
        white-space:nowrap; overflow:hidden; }

.tabauto { margin-left:auto; margin-right:auto; }

.tabr:empty { height:0.2em; }
.tabu .tabh:empty, .tabu .tabd:empty { border:none; visibility:hidden; }

.error { font-size:110%; color:black; background-color:yellow;
         font-family:sans-serif; font-weight:bold; font-style:normal;
         width:95%; border:solid 1px gray; padding:0.5em 1em 0.5em 1em; }
.error::before { content:'\026a0\00a0'; }
.image { }
.page { width:98%; border:1px dashed gray; margin:1.5em 0 1.8em 0; }
.epage { width:98%; border:1px dashed black; margin:1.5em 0 1.8em 0; }
.monosp { font-family:monospace; }
.ppage { display:none; }
.simple { list-style-type:none; }
.valtop { vertical-align:top; }
.valmid { vertical-align:middle; }
.valbot { vertical-align:bottom; }

.code { border-style:solid; border-width:0 0 0 1px; padding-left:1em;
        font-family:monospace; white-space:pre; }
.block { }
.blockof { margin:0.4em 2em 0.5em 2em; }
.example { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
           margin-top:0.5em; margin-bottom:0.5em; white-space:pre; }
.indent { margin-left:2em; margin-right:2em; }
.noindent { margin-left:0; margin-right:0; }
.inblock { display:inline-block; }
.mono { white-space:pre; font-family:monospace; }
.note { margin:0.4em 2em 0.5em 2em; page-break-inside:avoid; }
.note h5 { margin-top:0 }
.note_hr { width:80%; border:1px solid gray; }
.prop { padding-left:1em; margin-top:0.5em; margin-bottom:0.5em; }
.quote { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
         margin-top:0.5em; margin-bottom:0.5em; }
.this { display:none; }

a:link,a:visited { color:black; text-decoration:none; }
a:hover,a:active { text-decoration:underline; }
a:focus { outline:0; } 

:target:before { content:''; display:block; height:0.1em; margin:-0.1em; }
a.link:link, a.link:visited,a.link:active 
{ color:midnightBlue; text-decoration:underline; text-decoration-style:solid; }

.TOC1cols1 { width:80%; max-width:80%; }
.TOC1cols2 { column-count:2; width:80%; max-width:80%; }
.TOC1cols3 { column-count:3; max-width:90%; max-width:90%; }
.TOC1cols4 { column-count:4; max-width:100%; max-width:100%; }
.TOC1table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC1table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC1table td+td { padding:0 0 0 0.5em; }
.TOC1table .numb { width:3em; max-width:3em; }
.TOC1table .sepr { width:5em; max-width:6em; overflow:hidden; }
.TOC1table .majr { font-weight:bold; }
.TOC1table .text { white-space:normal; }

/* These are due to Firefox (at least <= 76) recalcitrant multi-column handling.
   Web search "Split table into css columns, issue in Firefox" (stackoverflow).
   "Good grief, Charlie Brown!" */
 
.TOC1cols2 table,
.TOC1cols2 tbody,
.TOC1cols2 tr,
.TOC1cols3 table,
.TOC1cols3 tbody,
.TOC1cols3 tr,
.TOC1cols4 table,
.TOC1cols4 tbody,
.TOC1cols4 tr { display:block; padding:0; }

.TOC2cols1 { width:60%; max-width:60%; }
.TOC2cols2 { column-count:2; width:70%; max-width:70%; }
.TOC2cols3 { column-count:3; width:80%; max-width:80%; }
.TOC2cols4 { column-count:4; width:90%; max-width:90%; }
.TOC2table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC2table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC2table .numb { font-weight:bold; padding-right:0.5em; }
.TOC2table .text { width:100%; white-space:normal; }

/* see "recalcitrant" above */
.TOC2cols2 table,
.TOC2cols2 tbody,
.TOC2cols2 tr,
.TOC2cols3 table,
.TOC2cols3 tbody,
.TOC2cols3 tr,
.TOC2cols4 table,
.TOC2cols4 tbody,
.TOC2cols4 tr { display:block; padding:0; }

.NAVtable { margin:0.1em 0 0 2em; }
.NAVtable td { font-size:110%; font-weight:bold; padding:0; margin:0; }
.NAVtable a { padding:0 0.5em 0 0.5em; text-decoration:none; }

.IDXcols1 { width:80%; max-width:80%; }
.IDXcols2 { column-count:2; width:90%; max-width:90%; }
.IDXcols3 { column-count:3; width:95%; max-width:95%;  }
.IDXcols4 { column-count:4; width:100%; max-width:100%;  }
.IDXtable { margin:1em 0 1em 2em; white-space:nowrap; break-inside:auto; }
.IDXtable tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.IDXtable .alpha { font-weight:bold; min-width:2em; }
.IDXtable .text  { width:100%; white-space:normal; }
.IDXtable .para:before { content:'\00b6\00a0'; }

/* see "recalcitrant" above */
.IDXcols2 table,
.IDXcols2 tbody,
.IDXcols2 tr,
.IDXcols3 table,
.IDXcols3 tbody,
.IDXcols3 tr,
.IDXcols4 table,
.IDXcols4 tbody,
.IDXcols4 tr { display:block; padding:0; }

.insight { background-color:cyan; font-family:monospace;
           padding:0 0.2em 0 0.2em; margin:0 0.2em 0 0.2em;
           font-size:100%; font-style:normal; font-weight:normal;
           text-decoration:none; }

.wasdoc { font-family: "Lucida Console", Monaco, monospace; 
          letter-spacing:-0.07em; }

@media screen { .blank::after { content:"\2924"; } 
                .print { display:none; }
}

@media print {
   table { page-break-inside:avoid; }
   .noprint { display:none; }
   .page { border:none; page-break-after: always; }
   .epage { display:none; }
   .ppage { page-break-after:always; }
   .NAVtable { display:none; }
   .NAVprint { display:block!important; }
}

@page { margin:2cm 1cm 2cm 1cm;  }
</style>
<!-- source:0000_features.WASDOC -->

<style type="text/css">._smiley::after { font-size:150%; vertical-align:middle; content:'\263a' }</style>
<style type="text/css">._frowny::after { font-size:150%; vertical-align:middle; content:'\2639' }</style>
<style type="text/css">._button { border: 1px gray solid; border-radius:3px; padding:0.1em; margin:0.1em; font-size:90%; }</style>

<a id="0." href="#"></a>
<title>WASD Features and Facilities &ndash; Server Administration</title>
<a id="9." href="#"></a>
<a id="9.serveradministration" href="#"></a>
<a id="serveradministration" href="#"></a>
<h1 class="head chunk">WASD Features and Facilities</h1>
<h1 class="head"><span class="numb">9.</span><span class="text">Server Administration</span></h1>

<div class="TOC2cols2">
<table class="TOC2table">
<tr><td><a href="features009.html#9.1.accessbeforeconfiguration"><span class="numb">9.1</span><span class="text">Access Before Configuration</span></a>
<tr><td><a href="features009.html#9.2.accessconfiguration"><span class="numb">9.2</span><span class="text">Access Configuration</span></a>
<tr><td><a href="features009.html#9.3.serverinstances"><span class="numb">9.3</span><span class="text">Server Instances</span></a>
<tr><td><a href="features009.html#9.4.httpdserverreports"><span class="numb">9.4</span><span class="text">HTTPd Server Reports</span></a>
<tr><td><a href="features009.html#9.5.httpdserverrevise"><span class="numb">9.5</span><span class="text">HTTPd Server Revise</span></a>
<tr><td><a href="features009.html#9.6.httpdserveraction"><span class="numb">9.6</span><span class="text">HTTPd Server Action</span></a>
<tr><td><a href="features009.html#9.7.httpdcommandline"><span class="numb">9.7</span><span class="text">HTTPd Command Line</span></a>
<tr><td><a href="features009.html#9.7.1.accounting"><span class="numb">9.7.1</span><span class="text">Accounting</span></a>
<tr><td><a href="features009.html#9.7.2.alignmentfaults"><span class="numb">9.7.2</span><span class="text">Alignment Faults</span></a>
<tr><td><a href="features009.html#9.7.3.authentication"><span class="numb">9.7.3</span><span class="text">Authentication</span></a>
<tr><td><a href="features009.html#9.7.4.cache"><span class="numb">9.7.4</span><span class="text">Cache</span></a>
<tr><td><a href="features009.html#9.7.5.configurationcheck"><span class="numb">9.7.5</span><span class="text">Configuration Check</span></a>
<tr><td><a href="features009.html#9.7.6.dclscriptingprocesses"><span class="numb">9.7.6</span><span class="text">DCL/Scripting Processes</span></a>
<tr><td><a href="features009.html#9.7.7.decnetscriptingconnections"><span class="numb">9.7.7</span><span class="text">DECnet Scripting Connections</span></a>
<tr><td><a href="features009.html#9.7.8.hhelppp"><span class="numb">9.7.8</span><span class="text">Hhelppp!</span></a>
<tr><td><a href="features009.html#9.7.9.http2connection"><span class="numb">9.7.9</span><span class="text">HTTP/2 Connection</span></a>
<tr><td><a href="features009.html#9.7.10.instances"><span class="numb">9.7.10</span><span class="text">Instances</span></a>
<tr><td><a href="features009.html#9.7.11.instancestatus"><span class="numb">9.7.11</span><span class="text">Instance Status</span></a>
<tr><td><a href="features009.html#9.7.12.logging"><span class="numb">9.7.12</span><span class="text">Logging</span></a>
<tr><td><a href="features009.html#9.7.13.mapping"><span class="numb">9.7.13</span><span class="text">Mapping</span></a>
<tr><td><a href="features009.html#9.7.14.networkconnection"><span class="numb">9.7.14</span><span class="text">Network Connection</span></a>
<tr><td><a href="features009.html#9.7.15.shutdownandrestart"><span class="numb">9.7.15</span><span class="text">Shutdown and Restart</span></a>
<tr><td><a href="features009.html#9.7.16.securesocketslayer"><span class="numb">9.7.16</span><span class="text">Secure Sockets Layer</span></a>
<tr><td><a href="features009.html#9.7.17.throttle"><span class="numb">9.7.17</span><span class="text">Throttle</span></a>
<tr><td><a href="features009.html#9.7.18.websocket"><span class="numb">9.7.18</span><span class="text">WebSocket</span></a>
</table>
</div>

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="features008.html#8.">&#8598;&#xFE0E;</a>
<td><a href="features000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="features010.html#10.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>

<p> The online Server Administration facility provides a rich collection of
functionality, including server control, reports and configuration.  Some of
these are intended as general administration tools while others provide more
detailed information intended for server debugging and development purposes. 

<p> The administration interface also provides some basic server statistics in
the lower right panel;&nbsp; local date/time, internet (UTC) equivalent,
client host, connection protocol, and request RTT (the essential network
overhead between client and server), up-times for system, server process,
server executable, CPU consumed by it, along with current connection and
requests-in-progress statistics.  Alerts (in red) also can appear in this
panel.

<a class="imglink" target="_blank" href="./admin.png"><img class="image" src="./admin.png"></a>

<p> The value of the WATCH facility <a class="link" href="features010.html#10.watchfacility">10. WATCH Facility</a> as a general
configuration and problem-solving tool cannot be overstated.

<p> All server configuration files, with the exception of the authentication
databases, are plain text and may be modified with any prefered editor. 
However the majority of these can also be administered online through a
browser.  In addition the <span class="high italic">update</span> facility allows some administration of file
system portions of the Web. See <a class="link" href="features012.html#12.httpdwebupdate">12. HTTPd Web Update</a>.

<p> Access to many portions of the package is constrained by file protections
and directory listing access files.  See
 for a method for circumventing these
restrictions.

<a id="9.1" href="#"></a>
<a id="9.1.accessbeforeconfiguration" href="#"></a>
<a id="accessbeforeconfiguration" href="#"></a>
<h2 class="head"><span class="numb">9.1</span><span class="text">Access Before Configuration</span></h2>

<p> It is often a significant advantage for the inexperienced administrator on a
new and largely unconfigured installation to be able to gain access to the
facilities offered by Server Administration, particularly the WATCH facility
(<a class="link" href="features010.html#10.watchfacility">10. WATCH Facility</a>).  This can be done quite simply by using the
authentication skeleton-key (<a class="link" href="features003.html#3.12.skeletonkeyauthentication">3.12 Skeleton-Key Authentication</a>).  This allows
the site administrator to register a username and password from the
command-line that can be used to gain access to the server.  In addition, the
server ensures that requesting an otherwise non-authorized Server
Administration facility generates a challenge which invokes a username/password
dialog at the browser allowing the user to enter the previously registered
username and password and gain access. 

<a id="9.1.0.0.1" href="#"></a>
<a id="9.1.method" href="#"></a>
<a id="method" href="#"></a>
<h5 class="head"><span class="text">Method</span></h5>

<ul class="list">

<li class="item"> Register the skeleton-key username and password.
<div class="blockof code">&dollar; HTTPD == &quot;&dollar;WASD_EXE:HTTPD_SSL.EXE&quot;
&dollar;! HTTPD == &quot;&dollar;WASD_EXE:HTTPD.EXE&quot;
&dollar; HTTPD /DO=AUTH=SKELKEY=<span class="high italic under">username:password</span>
</div>
<p> Note that the username must begin with an underscore, be at least 6
characters, is delimited by a colon, and that the password must be at least 8
characters.  By default this username and password remains valid for 60
minutes.  <span class="high bold">Choose strings that are less-than-obvious!</span>

<li class="item"> Access the server via a browser and use the server Server Administration
facility.

<p class="indent"> <a class="link blank" target="_blank" href="/httpd/-/admin/">https://the.host.name:port/httpd/-/admin/</a>

<li class="item"> After use the skeleton-key may be explicitly cancelled if desired.
<div class="blockof code">&dollar; HTTPD /DO=AUTH=SKELKEY=0
</div>

</ul>

<a id="9.2" href="#"></a>
<a id="9.2.accessconfiguration" href="#"></a>
<a id="accessconfiguration" href="#"></a>
<h2 class="head"><span class="numb">9.2</span><span class="text">Access Configuration</span></h2>

<p> Once established the site should make the Server Administration facility a
configured facility of the site.  The value of its facilities cannot be
overstated.

<p> It is also recommended that for production sites the path to these reports
be controlled via authentication and authorization, using both host and
username restrictions, similar to the following:

<div class="blockof code">[WHATEVER-REALM]
/httpd/-/admin/*  host.ip.addr,~WebMaster,~WhoEverElse,r+w
</div>

<p> If a full authorization environment is not required but
administration via browser is still desired restrict access to browsers
executing on the server system itself, using an appropriate
SYSUAF-authenticated username. Provision of a VMS account for server
administration only is quite feasable, see <a class="link" href="features003.html#3.10.6.nilaccessvmsaccounts">3.10.6 Nil-Access VMS Accounts</a>.

<div class="blockof code">[VMS]
/httpd/-/admin/*  #localhost,~<span class="high italic">username</span>,r+w
</div>

<p> If SSL is in use (<a class="link" href="features004.html#4.transportlayersecurity">4. Transport Layer Security</a>) then username/password
privacy is inherently secured via the encrypted communications. To restrict
server administration functions to this secure environment add the following
to the WASD_CONFIG_MAP configuration file:

<div class="blockof code">/httpd/-/admin/*  &quot;403 Access denied.&quot;  ![sc:https]
</div>

<p> When using the <span class="high italic">revise</span> capability of the Server Administration facility it
is necessary to comply with all the requirements for Web update of files. This
is discussed in general terms in <a class="link" href="features012.html#12.httpdwebupdate">12. HTTPd Web Update</a>.  Revision of server
configuration files requires path permissions allowing write access for the
username(s) doing the administration, as well as the required ACL on the target
directory (in the following example WASD_ROOT:[LOCAL]).

<div class="blockof code">[VMS]
/httpd/-/admin/*  #localhost,~<span class="high italic">username</span>,r+w
/wasd_root/local/*  #localhost,~<span class="high italic">username</span>,r+w
</div>

<p> It is possible to allow general access to the Server Administration facility
and reports while restricting the ability to initiate server actions such as a
restart! Using the WORLD realm against the path is necessary, for the obvious
security reason, the server administration module will not allow itself to be
used without an authenticated username, provided as a pseudo-authenticated
&quot;WORLD&quot;.

<div class="blockof code">[VMS]
/httpd/-/admin/control/*  #localhost,~<span class="high italic">username</span>,r+w
[WORLD]
/httpd/-/admin/* r
</div>

<p> When GZIP compression is configured for the server (see 
<a class="link blank" target="_blank" href="../config/#gzipencoding">GZIP Encoding</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>)
it is not by default applied to Server Admin reports or other pages.  It can be
applied, selectively if desired, using mapping rules.  For instance, to apply
it to all requests not from the local intranet a rule similar to the following
can be added before the Server Admin path mapping itself.

<div class="blockof code">if (!remote-addr:192.168.0.0/8) set /httpd/-/admin/* response=GZIP=all
pass /httpd/-/admin/* /httpd/-/admin/*
</div>

<p> GZIP content-encoding can never be applied to WATCH reports.

<a id="9.3" href="#"></a>
<a id="9.3.serverinstances" href="#"></a>
<a id="serverinstances" href="#"></a>
<h2 class="head"><span class="numb">9.3</span><span class="text">Server Instances</span></h2>

<p> With a single instance (see <a class="link" href="features008.html#8.1.serverinstances">8.1 Server Instances</a>) access to Server
Administration reports, etc. is always serviced by the one server process.  If
multiple instances are configured then in common with all requests
administration requests will be serviced by any one of the associated processes
depending on the momentary state of the round-robin distribution. 

<p> There are many circumstances where it is preferable to access only the one
server.  This can be accomplished for two differing objectives.

<ol class="list">

<li class="item"> To facilitate access to a specific instance's Server Administration page,
including instance-specific reports etc.  This is provided through the use of
an <span class="high italic">administration service</span> port (see
<a class="link blank" target="_blank" href="../config/#administrationservices">Administration Services</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>)
available from the Server Administration page.

<li class="item"> The Server Administration page (<a class="link" href="features009.html#9.6.controlsection">&lsquo;Control Section&rsquo; in 9.6 HTTPd Server Action</a>) and the
command-line <a class="link" href="features009.html#9.7.10.instances">9.7.10 Instances</a>) provides the capability to explicitly set the
number of instances supported, overriding any configuration directive.  After
explicitly setting this, using either means, the server must be restarted.  The
explicit startup setting remains in effect until it is changed to &quot;max&quot;
allowing the WASD_CONFIG_GLOBAL configuration directive [InstanceMax] to once
again determine the number of instances required.

</ol>

<p> The latter approach is particularly useful when performing detailed WATCH
activities (<a class="link" href="features010.html#10.watchfacility">10. WATCH Facility</a>).

<p> When multiple per-node instances are executing the Server Administration
pages and reports all include an indication of which process serviced the
request.  When accessing no instance in particular the process name is
presented in parentheses after the page title

<div class="blockof code">HTTPd www.example.com:80
Server Administration  (HTTPd:80)
</div>

When a particular instance's administration service port is being used the
process name is separated from the page title by a hyphen

<div class="blockof code">HTTPd www.example.com:80
Server Administration - HTTPd:80
</div>

<p> Multi-instance status (see <a class="link" href="features008.html#8.1.4.status">8.1.4 Status</a>)
snapshots are available via HTTPDMON, the Server Admin main page and can be
reported from the command line using 

<div class="blockof code">&dollar; HTTPD /DO=STATUS
</div>

<a id="9.4" href="#"></a>
<a id="9.4.httpdserverreports" href="#"></a>
<a id="httpdserverreports" href="#"></a>
<h2 class="head"><span class="numb">9.4</span><span class="text">HTTPd Server Reports</span></h2>

<p> The server provides a number of internally generated reports.  Some of
these are of general interest.  Others are more for evaluating WASD behaviour
and performance for development purposes.  Appropriate reports have a refresh
selector allowing the report to be updated at the selected period.  The
following list is in the approximate order in which they occur top-to-bottom,
left-to-right in the menu layout.

<p> It is possible to use this facility standalone, without configuring
authorisation (<a class="link" href="features009.html#9.1.accessbeforeconfiguration">9.1 Access Before Configuration</a>).

<ul class="list">

<li class="item"> <span class="high bold">Statistics &ndash; </span>
Server process up-time, CPU-time and other resources consumed, number of
connections processed, number of requests of each HTTP method, type of
processing involved (HTTPd module used), number of bytes processed, etc.

<li class="item"> <span class="high bold">Log+&nbsp; &ndash; </span>
Display the server process (SYS&dollar;OUTPUT) log.
The <span class="high italic">plus</span> displays all accessible server process log files for selection.
Just click on the <span class="high monosp" style="background-color:yellow;">&nbsp;+ </span> in
<span class="highinline monosp _button">&thinsp;Log<span class="high" style="background-color:yellow;">+&thinsp;</span></span>. 

<li class="item"> <span class="high bold">Configuration &ndash; </span>
A tabular summary of the server's current configuration.  This is a convenient
method for viewing the information from the WASD_CONFIG_GLOBAL file.

<li class="item"> <span class="high bold">Services &ndash; </span>
A tabular report listing the current services (virtual servers) and the
service-specific parameters.

<li class="item"> <span class="high bold">Messages &ndash; </span>
A tabular report of the server's current message database, multiple
languages shown if configured that way.

<li class="item"> <span class="high bold">Mapping &ndash; </span>
All loaded mapping rules and any cached USER rule paths.  A selector allows
rules applying only to one particular virtual server to be displayed.

<li class="item"> <span class="high bold">Path Authorization &ndash; </span>
If authorization is in use (<a class="link" href="features003.html#3.authenticationandauthorization">3. Authentication and Authorization</a>) this
report lists the paths with associated authorization and access control.

<li class="item"> <span class="high bold">User Authentication &ndash; </span>
List any users that have been authorized since the server was last
started, the realm authorized from, the group it applies to (if any), and what
the user's capabilities are (allowed HTTP methods). A time-stamp and counters
provide additional information.

<li class="item"> <span class="high bold">Secure Sockets &ndash; </span>
The SSL report lists counts of the number of SSL transactions initiated
and completed, along with session cache statistics for the currently connected
SSL service.  It also lists the ciphers available and current session
information.  Other reports allow the Certificate Authority (CA) database to be
view and edited, if available due to X.509 authentication being enabled.

<li class="item"> <span class="high bold">AlnFlt &ndash; </span>
Memory access alignment faults are constantly monitored.   This displays the
accumulated statistics since the most recent startup.  Should always be zero!

<li class="item"> <span class="high bold">Cache &ndash; </span>
Allows monitoring of cache behaviour and performance, as well as the files
currently in the cache (see
<a class="link blank" target="_blank" href="../config/#cacheconfiguration">Cache Configuration</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>).

<li class="item"> <span class="high bold">Cluster &ndash; </span>
For clustered systems generates a report similar to the <span class="high italic">System Report</span> but
with a cluster emphasis.

<li class="item"> <span class="high bold">DCL Scripting &ndash; </span>
Provides some DCL, CGI and CGIplus scripting information.

<p>  DCL module statistics (same information as displayed in the server
statistics report).  These are cumulative for the entire life of the system
(unless zeroed).

<p> Process information shows how many actual processes exist at the time of the
report, as indicated by the PID and bolded, non-zero liftime (in minutes). The
<span class="high italic">soft-limit</span> specifies how many CGIplus scripts are allowed to continue
existing before the least used is deleted and the <span class="high italic">hard-limit</span> show how many
processes may actually exist at any one time (the margin allows for process
deletion latency). A count of how many times the CGIplus processes have been
explicitly purged (button available on this report page). The <span class="high italic">life-time</span> of
zombie processes (in minutes, zero implying use of zombies is disabled) and the
number that have been purged due to expiry. CGIplus process life-time (in
minutes, zero implying indefinite), the number purged due to life-time expiry
and the number of CGIplus processes that the server has actually purged
(deleted) to maintain the soft-limit margin specified above.

<p> Each of the allocated process data structures is listed.  There may be zero
up to hard-limit items listed here depending on demand for DCL activities and
the life of the server.  Items with a PID shown indicate an actual process
existing.  This can be a zombie process or a CGIplus process.  If no process is
indicated then the other information represents the state the last time the
item's associated process completed. Information includes the script (URL-style
path) or DCL command, total count of times the item has been used and the last
time it was.  The zombie count indicates the number of time the same process
finished a request and entered the <span class="high italic">zombie</span> state.  The CGIplus column
indicates it is/was a CGIplus script and shows the total number of times that
particular script has been/was used.  If the process is currently in use the
client information show the client host name.

<p> If any processes are associated with any data structure a <span class="high italic">purge</span> button is
provided that forces all processes to be deleted.  This can be useful if a new
script image is compiled and it is required all scripts now use this.  If a
script is currently processing a request the process deletion occurs when that
processing is complete. The purge button <span class="high bold">does not force</span> a process to delete,
so a second button <span class="high bold">forces</span> all processes to delete immediately.  This can be
used to forceably clear errant scripts, etc., but be warned script processing
is indiscrimately stopped!

<li class="item"> <span class="high bold">DECnet Scripting &ndash; </span>
DECnet module information shows totals for DECnet scripting usage and the
DECnet connection list.

<p> This list will grow, up to the specified configuration maximum, as
conconurrent scripting demand occurs. Maintained connections are indicated by
the bolded, non-zero lifetime (in minutes). When this reaches zero the task is
disconnected. The current/last task for that connection is indicated, along
with the number of times the connection was reused and a total number of uses
for that list item.

<p> <span class="high italic">Purge</span> and <span class="high italic">force</span> buttons allow current links to be broken after request
completion or forcibly disconnected.

<li class="item"> <span class="high bold">HTTP &ndash; </span>
Reports HTTP/2 and HTTP/1.<span class="high italic">n</span> statistics together as well as providing a list
of current HTTP/2 connections with some per-connection data. See <a class="link" href="features005.html#5.http2">5. HTTP/2</a>
for details.

<li class="item"> <span class="high bold">Lock &ndash; </span>
Lists the names and status of all lock resources used to manage single and
multiple instances across single systems or a cluster.  This report is more
relevant for evaluating and debugging WASD behaviour.

<li class="item"> <span class="high bold">Match &ndash; </span>
To assist with the refinement of string matching patterns (see
<a class="link blank" target="_blank" href="../config/#stringmatching">String Matching</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>).
This report allows the input of target and match strings and allows direct
access to the server's wildcard and regular expression matching routines. 
Successful matches show the matching elements and a substitution field allows
resultant strings to be assessed.

<li class="item"> <span class="high bold">Memory+&nbsp; &ndash; </span>
Provides a report and does an integrity check on each of the Virtual Memory
(VM) zones employed by the WASD HTTPd.  The <span class="high italic">plus</span> displays all server process
memory zones.
Just click on the <span class="high monosp" style="background-color:yellow;">&nbsp;+ </span> in
<span class="highinline monosp _button">&thinsp;Memory<span class="high" style="background-color:yellow;">+&thinsp;</span></span>. 

<li class="item"> <span class="high bold">Process &ndash; </span>
Lists all processes on the current system owned by the server account. 
From this list a process can be selected to have a &quot;SHOW PROCESS /ALL&quot;
performed on it, displayed on a report page.

<li class="item"> <span class="high bold">Proxy &ndash; </span>
If proxy serving is enabled a report providing statistics on the various
HTTP methods used, network and cache traffic, cache reads and writes, requests
not cachable, and host name lookup are provided.  This may used to help guage
the effectiveness of the cache.

<li class="item"> <span class="high bold">Request &ndash; </span>
Lists in-progress requests (always shows at least your own connection accessing
this report :-)  Additional buttons after the report allow selection of a report
that in addition displays current persistent network connections, requests
currently under throttle control, and if enabled a list (history) of  the most
recent requests (enabled by the configuration  parameter [RequestHistory]). 
Current requests may be selected for <span class="high italic">one-shot</span> WATCH-processing reports from
this page ().

<p> Two other diagnostic tools are available from the same link.  The first,
<span class="high italic">WATCH-peek Report</span>, providing a snapshot of the contents selected internal
fields and data structures of the request.  This is primarily intended as a
problem investiagtion and development tool, and will be  of limited value
without an understanding of server internals.  The second accesses the &quot;peek&quot;
internals plus a one-shot WATCH-processing report. 

<p> For servers handling a great quantity of concurrent traffic this can
generate a very large report.  The <span class="high italic">Supervisor</span> report can also provide a
profile of the servers current load.

<li class="item"> <span class="high bold">System+&nbsp; &ndash; </span>
Shows the system, all users, memory and CPU status as a single report.

<a id="9.4.0.0.0.1" href="#"></a>
<a id="9.4.serverclisysplus" href="#"></a>
<a id="serverclisysplus" href="#"></a>
<h6 class="head display0"><span class="text">Server CLI /SYSPLUS</span></h6>
<div class="note">
<a id="9.4.0.0.1" href="#"></a>
<a id="9.4.systemreportplus" href="#"></a>
<a id="systemreportplus" href="#"></a>
<h5 class="head center"><span class="text">System Report PLUS</span></h5>
<hr class="note_hr">
The standard system report uses a scripting process to present some of this
data in familiar formats (using DCL commands).  If the system is faltering for
some reason (e.g. resource exhaustion) this may not be possible &ndash; and just
when it might be really useful!  It <span class="high bold">may</span> still be possible to gain some
insight into system status using the <span class="high monosp">system+</span> report.  This uses only
internal code and provides significant technical data on system, cluster,
device and process status.
Just click on the <span class="high monosp" style="background-color:yellow;">&nbsp;+ </span> in
<span class="highinline monosp _button">&thinsp;System<span class="high" style="background-color:yellow;">+&thinsp;</span></span>. 
It can also be considered an alternate or supplementary view of the system for
those that don't mind, or who thrive on, more technical content.
<p> <span class="high bold monosp">&dollar; HTTPD /SYSPLUS&nbsp;</span> can provide the same report data at the command-line for
circumstances where the server is unresponsive but an interactive session is
available.  Requires a 132 character width terminal session. The /SYSPLUS
report generator may be used with /OUTPUT=&lt;filename&gt; to capture and store
report data.  See
<a class="link blank" target="_blank" href="../config/#serverimagecommandlineparameters">Server Image Command-Line Parameters</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>).
<hr class="note_hr">
</div>

<li class="item"> <span class="high bold">Throttle &ndash; </span>
This report provides a list of paths with throttle rules mapped against them. 
It provides the throttle values along with current and history activity
counters.

<li class="item"> <span class="high bold">WATCH &ndash; </span>
This report provides an online, real-time, in-browser-window view of request
processing on the <span class="high bold">running server</span>. See <a class="link" href="features010.html#10.watchfacility">10. WATCH Facility</a> for details.

<li class="item"> <span class="high bold">WebDAV &ndash; </span>
Provides configuration and statistics.

<li class="item"> <span class="high bold">WebSocket &ndash; </span>
Lists in-progress WebSocket requests with connection statistics and the
scripting process associated with.

<li class="item"> <span class="high bold">Activity &ndash; </span>
Provide a graphical <span class="high italic">snapshot</span> of server activity of a given period.

<p> The statistics are stored in a permanent global section and so carry-over
between server restarts.  Where multiple instances are executing the data
represents an accumulation of all instances' processing. It is enabled by the
configuration parameter [ActivityDays]. The Server Administration facility
provides several, represented as a period of hours before the present time.
Number of requests and bytes sent to the client are represented by a histogram
with respective means for each by a line graph.  A bar across the column of the
request histogram indicates the peak number of concurrent requests during the
period.  A <span class="high italic">greyed</span> area indicates no data available for that time (i.e.
before the latest server startup, or in the future).

<p> Server startup and shutdown events are indicated by solid, vertical lines
the full height of the graph (see example for a restart event).

<ul class="list simple list0">
<li class="item"> startup - green
<li class="item"> shutdown - black
<li class="item"> restart - grey
<li class="item"> error exit - red
</ul>

<p> Activity data is accumulated on a per-minute basis. This is the maximum
granularity of any report. When reports are selected that can display less than
this one minute granularity (i.e. with periods greater than four hours) the
value shown is the <span class="high bold">peak</span> of the number of minutes sampled for display. This
better represents the load on the server than would a mean of those samples.

<p> The graph is an image map, various regions of which allow the selection of
other reports with different periods or durations. This allows previous periods
to be examined at various levels of detail using the graph for navigation.
Various sections may have no mapping as appropriate to the current report.

<p> For multiple hour reports the upper and lower sections have distinct
functions. The middle 50% of the upper section allows the same end time (most
commonly the current hour) to be examined over twice the current period, in
this case it would be over eight hours. The left 25% allows the previous fours
hours to be viewed (if such data exists), and for non-current reports the right
25% allows the next four hours to be viewed. The lower half can be divided into
sections representing hours or days depending on the period of the current
report. This allows that period to be viewed in greater detail. For single hour
reports this section, of course, is not mapped.

<p> Remember that the URL of the mapped section will be displayed in the status
bar of the browser. As the URL contains time components it is not a difficult
task to decipher the URL displayed to see the exact time and period being
selected.
<a class="imglink" target="_blank" href="./activity.png"><img class="image" src="./activity.png"></a>

</ul>

<a id="9.5" href="#"></a>
<a id="9.5.httpdserverrevise" href="#"></a>
<a id="httpdserverrevise" href="#"></a>
<h2 class="head"><span class="numb">9.5</span><span class="text">HTTPd Server Revise</span></h2>

<p> The server provides a comprehensive configuration revision facility.

<ul class="list">

<li class="item"> <span class="high bold">Configuration &ndash; </span>
A form-driven interface allows the current configuration of the server to be
altered online.  This configuration may then be saved to the on-disk file and
then the server could be restarted using the new parameters.  The source of the
current configuration can be either the server itself (from its volatile,
in-memory parameters) or from the on-disk configuration file.  In addition it
is possible to directly edit and update the on-disk file.

<li class="item"> <span class="high bold">Services &ndash; </span>
A form-driven interface allows service (virtual server) configuration.
It is also possible to directly edit and update the on-disk file.  The server
must be restarted for service changes to take effect.

<li class="item"> <span class="high bold">Messages &ndash; </span>
A form-driven interface allows the the server messages to be modified.
It is also possible to directly edit and update the on-disk file.  The
server can then be restarted to use the modified database (<a class="link" href="features009.html#9.6.httpdserveraction">9.6 HTTPd Server Action</a>).

<li class="item"> <span class="high bold">Mapping &ndash; </span>
No form-driven interface is currently available for changing the mapping rules. 
However it is possible to directly edit and update the on-disk file.  The
mapping rules could then be reloaded, changing the current server rules
(<a class="link" href="features009.html#9.6.httpdserveraction">9.6 HTTPd Server Action</a>).

<li class="item"> <span class="high bold">Path Authorization &ndash; </span>
No form-driven interface is currently available for changing the path
authorization configuration. However it is possible to directly edit and update
the on-disk file.  The path authorization directives could the be reloaded,
changing the current server authorization (<a class="link" href="features009.html#9.6.httpdserveraction">9.6 HTTPd Server Action</a>).

<li class="item"> <span class="high bold">User Authentication &ndash; </span>
User authentication comprises a number of dialogues that allow the
WASD-specific (HTA) authentication databases to be administered.  These
include:

<p>
<ul class="list simple list0">
<li class="item"> creating databases
<li class="item"> deleting databases
<li class="item"> accessing databases for administering usernames
<li class="item"> listing usernames within databases
<li class="item"> adding usernames
<li class="item"> deleting usernames
<li class="item"> modifying username permissions and other data
<li class="item"> reseting in-server (cached) authentication information
</ul>

<p> <a class="link" href="features003.html#3.authenticationandauthorization">3. Authentication and Authorization</a> covers authentication detail.

<li class="item"> <span class="high bold">Site Log &ndash; </span>
This accesses a plain-text file that could be used to record server or other
significant site configuration changes if desired.  Two methods of access are
provided.

<ol class="list list0">
<li class="item"> Site-Log - open the file for editing, placing a date/time/author timestamp
at the top
<li class="item"> Edit - open the file editing
</ol>

<p> The file name and/or location may be specified using the logical name
WASD_SITELOG.

</ul>

<a id="9.5.0.0.1" href="#"></a>
<a id="9.5.enablingserveraccess" href="#"></a>
<a id="enablingserveraccess" href="#"></a>
<h5 class="head"><span class="text">Enabling Server Access</span></h5>

<p> Many of the server activites listed above require server account write
access to the directory in which the configuration files are stored.  Where an
autononmous scripting account is in use this poses minimal threat to server
configuration integrity.

<ol class="list">

<li class="item"> Specifically map the /wasd_root/local/ path and mark it as access always
requiring authorization (ensure this is one on the first mappings in the file
and certainly before any other /wasd_root/ ones).
<div class="blockof code"># WASD_CONFIG_MAP
pass /wasd_root/local/* auth=all
</div>

<li class="item"> Add appropriate authorization rules (example from
<a class="link blank" target="_blank" href="../config/#authorizationconfigurationbasics">Authorization Configuration (Basics)</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>).
<div class="blockof code"># WASD_CONFIG_AUTH
[&quot;Web Admin&quot;=WASD_WEBADMIN=id]
/httpd/-/admin/* r+w
/wasd_root/local/* r+w
</div>

<li class="item"> Update access to the directory can be applied using the SECHAN utility
(<a class="link" href="features013.html#13.12.sechanutility">13.12 SECHAN Utility</a>).
<div class="blockof code">&dollar; SECHAN /WRITE WASD_ROOT:[000000]LOCAL.DIR
&dollar; SECHAN /WRITE WASD_ROOT:[LOCAL]
</div>

<li class="item"> Load the new mapping and authorization rules.
<div class="blockof code">&dollar; HTTPD /DO=MAP
&dollar; HTTPD /DO=AUTH=LOAD
</div>

</ol>

<a id="9.5.0.0.2" href="#"></a>
<a id="9.5.alternativeusingprofile" href="#"></a>
<a id="alternativeusingprofile" href="#"></a>
<h5 class="head"><span class="text">Alternative Using /PROFILE</span></h5>

<p> If a site is using SYSUAF authentication and security profiles enabled using
the /PROFILE startup qualifier (<a class="link" href="features013.html#13.12.sechanutility">13.12 SECHAN Utility</a>) then a more restrictive
set up is possible, retaining the default no-access to the [LOCAL] directory. 
This relies on the administering account(s) having read and write access to the
[LOCAL] directory. It is then not necessary to grant that to the server
account.  It is possible to limit the application of VMS user profiles.  This
is an example.

<div class="blockof code"># WASD_CONFIG_MAP
set /wasd_root/local/* profile auth=all
set * noprofile
</div>

<p> To use this approach perform steps 1, 2 and 4 from above, substituting the
following for step 3.

<div class="blockof code">&dollar; SECHAN /PACKAGE WASD_ROOT:[000000]LOCAL.DIR
&dollar; SECHAN /PACKAGE WASD_ROOT:[LOCAL]
&dollar; SECHAN /CONTROL WASD_ROOT:[000000]LOCAL.DIR
</div>

<a id="9.6" href="#"></a>
<a id="9.6.httpdserveraction" href="#"></a>
<a id="httpdserveraction" href="#"></a>
<h2 class="head"><span class="numb">9.6</span><span class="text">HTTPd Server Action</span></h2>

<p> The server allows certain run-time actions to be initiated.  Many of these
functions can also be initiated from the command line, see
<a class="link" href="features009.html#9.7.httpdcommandline">9.7 HTTPd Command Line</a>.

<p> When multiple servers are executing on a single node or within a cluster a
JavaScript-driven checkbox appears in the bottom left of the administration
menu. <span class="high bold">Checking that box applies any subsequently selected action to all
servers!</span>

<a id="9.6.0.0.1" href="#"></a>
<a id="9.6.controlsection" href="#"></a>
<a id="controlsection" href="#"></a>
<h5 class="head"><span class="text">Control Section</span></h5>

<ul class="list">

<li class="item"> <span class="high bold">Server Restart/restartNOW/restartQuiet/Exit/exitNOW &ndash; </span>
The difference between restart/exit and restartNOW/exitNOW is the former waits
for any current requests to be completed, while the latter does it immediately
regardless of any current connections.  The restartQuiet variant continues
processing until demand drops to zero for more than one second at which point
it commences restart.  If the browser has JavaScript enabled a cautionary alert
requesting confirmation is generated (otherwise there is no confirmation).

<li class="item"> <span class="high bold">Logging On/Off/Flush &ndash; </span>
The WASD_CONFIG_LOG logical must be configured to allow access logging to be
enabled and disabled from this menu.

<li class="item"> <span class="high bold">Caching On/Off/Purge &ndash; </span>
Caching may be enabled and disabled in an ad hoc fashion using these controls.
When being disabled after being enabled all previous data is retained.  If
subsequently reenabled that data is then again available for use.  This allows
convenient assessment of the subject or even object benefits on the cahing.
If purged all entries in the cache are removed.

<li class="item"> <span class="high bold">Instance Startup &ndash; </span>
An instance value may be set that overrides the configuration directive
[InstanceMax] at next startup.  This may be used to change the number of server
processes on an ad hoc basis.  Reset to &quot;max&quot; to return to configuration
control.  Note that this can be applied to the current node only or to all
servers within a cluster, and that a subsequent restart is required.

<li class="item"> <span class="high bold italic">DO= Button and Field &ndash; </span>
Provides a on-line facility parallel to that provided by the command-line /DO
qualifier (<a class="link" href="features009.html#9.7.httpdcommandline">9.7 HTTPd Command Line</a>).  Any directive available via the
command-line can be entered using this interface and applied on a per-node or
per-cluster basis.

</ul>

<a id="9.6.0.0.2" href="#"></a>
<a id="9.6.configurationactionsection" href="#"></a>
<a id="configurationactionsection" href="#"></a>
<h5 class="head"><span class="text">Configuration Action Section</span></h5>

<ul class="list">

<li class="item"> <span class="high bold">Statistics Zeroed &ndash; </span>
All counters are zeroed (except the <span class="high italic">number-of-times-zeroed</span> counter!)

<li class="item"> <span class="high bold">Mapping Rules Reload &ndash; </span>
Reloads the path mapping rules from the on-disk file into the running server,
clears the user SYSUAF mapping cache.

<p> <span class="high bold">Caution!</span> If changing CGIplus script mapping it is advised to restart the
server rather than reload.  Some conflict is possible when using new rules
while existing CGIplus scripts are executing.

<li class="item"> <span class="high bold">Path Authorization Reload &ndash; </span>
Reloads the path authorization directives from the on-disk file into the
running server.

<li class="item"> <span class="high bold">User Authentication Cache Purge &ndash; </span>
For efficiency reasons authenticated user information is cached for a limited
period within the running server.  All this cached information may be
completely purged using this action, forcing subsequent requests to be
reauthenticated from the on-disk database.

</ul>

<a id="9.7" href="#"></a>
<a id="9.7.httpdcommandline" href="#"></a>
<a id="httpdcommandline" href="#"></a>
<h2 class="head"><span class="numb">9.7</span><span class="text">HTTPd Command Line</span></h2>

<p> A foreign command for the HTTPD control functionality will need to be 
assigned in the adminstration users' LOGIN.COM, for example: 

<div class="blockof code">&dollar; HTTPD == &quot;&dollar;WASD_EXE:HTTPD&quot;
</div>
 or (perhaps more likely)

<div class="blockof code">&dollar; HTTPD == &quot;&dollar;WASD_EXE:HTTPD_SSL&quot;
</div>

<p> Some control of the executing server is available from the DCL command
line on the system on which it is executing. This functionality, <span class="high bold">via
the /DO= qualifier</span>, is available to the privileged user.

<p> These directives are communicated from the command-line (and Server
Administration page analogue - <a class="link" href="features009.html#9.6.controlsection">&lsquo;Control Section&rsquo; in 9.6 HTTPd Server Action</a>) to the per-node or
per-cluster servers using the Distributed Lock Manager.  On pre-VMS V8.2 the
command buffer is limited to 15 bytes.  From VMS V8.2 the buffer space
available is 63 bytes.  In a cluster all systems must support the larger buffer
before WASD enables it.  The smaller buffer space limits some of the directives
that take free-form parameters (e.g. /DO=DCL=PURGE=USER=DANIEL).

<a id="9.7.0.0.1" href="#"></a>
<a id="9.7.multiserverclusterwide" href="#"></a>
<a id="multiserverclusterwide" href="#"></a>
<h5 class="head"><span class="text">Multi-Server/Cluster-Wide</span></h5>

<p> If multiple servers are executing on a host or cluster it is possible to
control all of them by adding the /CLUSTER or /ALL qualifiers.  Of course,
these commands are available from batch jobs as well as interactively.  In a
clustered WASD environment the same functionality is available via checkboxes
from the online Server Administration facility.

<a id="9.7.0.0.2" href="#"></a>
<a id="9.7.needittobejogged" href="#"></a>
<a id="needittobejogged" href="#"></a>
<h5 class="head"><span class="text">Need it to be jogged?</span></h5>

<p> Can't quite remember what it can (and by implication can't) do?

<div class="blockof code">&dollar; HTTPD /DO=HELP
</div>

<a id="9.7.0.0.3" href="#"></a>
<a id="9.7.serverlogannotation" href="#"></a>
<a id="serverlogannotation" href="#"></a>
<h5 class="head"><span class="text">Server Log Annotation</span></h5>

<p> Significant server events (e.g. restart, exit, mapping rule change) can
often benefit (post-mortem :-) from an annotation in the server process log,
especially in a production environment.  The command-line /NOTE=&quot;&lt;string&gt;&quot; can
be used to insert the supplied string as an ad hoc annotation, or in
conjunction with a /DO=&quot;..&quot; CLI command.

<div class="blockof code">&dollar; HTTPD /NOTE=&quot;just a note test!&quot;
&dollar; HTTPD /DO=RESTART /NOTE=&quot;adding services &quot;&quot;download.&quot;&quot; and &quot;&quot;mail.&quot;&quot;&quot;
</div>

<p> The server process log annotation appear as follows.

<div class="blockof code">%HTTPD-I-NOTE, 10-DEC-2017 22:32:30, just a note test!
%HTTPD-I-NOTE, 10-DEC-2017 22:33:05, adding services &quot;download.&quot; and &quot;mail.&quot;
</div>

<p> Note may also be inserted from the Server Admin main page by using the
[/DO=] button and field and prefixing the string with /NOTE= (string
delimitting quotation marks are not required).  Using the Server Admin page
annotation and commands cannot be combined.

<a id="9.7.1" href="#"></a>
<a id="9.7.1.accounting" href="#"></a>
<a id="accounting" href="#"></a>
<h3 class="head"><span class="numb">9.7.1</span><span class="text">Accounting</span></h3>

<p> Server counters may be zeroed.  These counters are those visible from the
<span class="high italic">statistics</span> Server Admininstration item and when using the HTTPDMON utility.

<div class="blockof code">&dollar; HTTPD /DO=ZERO
</div>

<p> The HTTPDMON utility displays a status line during startup or server exit on
error.  For example:

<div class="blockof code">KLAATU:: 1            HTTPDMON v2.6.0 AXP         Friday, 21-SEP-2018 21:40:54

Process: WASD:80  PID: 00001F9B  User: HTTP&dollar;SERVER  Version: 11.3.0
     Up: 6 18:21:20.96  CPU: 0 00:07:25.54  Startup: 55  Exit: %X00000001
8&lt; snip 8&lt;
     Rx: 1,365,809 (0 err) Tx: 26,965,420 (0 err) (477kB/s)

 STATUS: %HTTPD-I-STARTUP, 21-SEP-2018 21:40:52, WASD:80
</div>

<p> On occasion this can status message become constantly displayed (e.g.
command-line misoperation) with

<div class="blockof code">&dollar; HTTPD /DO=ZERO=STATUS
</div>
 restoring normal request information. 

<a id="9.7.2" href="#"></a>
<a id="9.7.2.alignmentfaults" href="#"></a>
<a id="alignmentfaults" href="#"></a>
<h3 class="head"><span class="numb">9.7.2</span><span class="text">Alignment Faults</span></h3>

<p> Alignment faults can be a significant performance issue and considerable
effort has been invested in completely eliminating them.  This was done using a
internal reporting tool (primarily intended for the WASD developer) available
from the Server Admin interface.  Defining the logical name WASD_ALIGN_MAP to
be a linker map of the build provides additional information.

<div class="blockof code">&dollar; HTTPD /DO=ALIGN=START
&dollar; HTTPD /DO=ALIGN=STOP
&dollar; HTTPD /DO=ALIGN=ZERO
&dollar; HTTPD /DO=ALIGN=FAULT=1
</div>

<a id="9.7.3" href="#"></a>
<a id="9.7.3.authentication" href="#"></a>
<a id="authentication" href="#"></a>
<h3 class="head"><span class="numb">9.7.3</span><span class="text">Authentication</span></h3>

<p> See <a class="link" href="features003.html#3.authenticationandauthorization">3. Authentication and Authorization</a>.

<p> The authorization rule file (HTTP&dollar;AUTH) may be reloaded using either of
these variants.

<div class="blockof code">&dollar; HTTPD /DO=AUTH
&dollar; HTTPD /DO=AUTH=LOAD
</div>

<p> The authentication cache may be purged, resulting in re-authentication for
all subsequent authorization-controlled accesses. This may be useful when
disabling authorization or if a user has been locked-out due to too many
invalid password attempts (<a class="link" href="features003.html#3.9.authorizationcache">3.9 Authorization Cache</a>).

<div class="blockof code">&dollar; HTTPD /DO=AUTH=PURGE
</div>

<p> A &quot;skeleton-key&quot; username and password may be entered, amongst things
allowing access to the Server Administration facility
(<a class="link" href="features009.html#9.serveradministration">9. Server Administration</a>).

<div class="blockof code">&dollar; HTTPD /DO=AUTH=SKELKEY=_&lt;username&gt;:&lt;password&gt;[:&lt;period&gt;]
</div>

<a id="9.7.4" href="#"></a>
<a id="9.7.4.cache" href="#"></a>
<a id="cache" href="#"></a>
<h3 class="head"><span class="numb">9.7.4</span><span class="text">Cache</span></h3>

<p> Server cache control may also be exercised from the Server Administration
page (<a class="link" href="features009.html#9.serveradministration">9. Server Administration</a>).  The file cache (see
<a class="link blank" target="_blank" href="../config/#cacheconfiguration">Cache Configuration</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>)
may be enabled, disabled and have the contents  purged (declared invalid and
reloaded) using

<div class="blockof code">&dollar; HTTPD /DO=CACHE=ON
&dollar; HTTPD /DO=CACHE=OFF
&dollar; HTTPD /DO=CACHE=PURGE
</div>

<a id="9.7.5" href="#"></a>
<a id="9.7.5.configurationcheck" href="#"></a>
<a id="configurationcheck" href="#"></a>
<h3 class="head"><span class="numb">9.7.5</span><span class="text">Configuration Check</span></h3>

<p> Changes to configuration files can be validated at the command-line before
reload or restart.  This detects and reports any syntactical and fatal
configuration errors but of course cannot check the <span class="high italic">intent</span> of the rules.

<div class="blockof code">&dollar; HTTPD /DO=AUTH=CHECK
&dollar; HTTPD /DO=CONFIG=CHECK
&dollar; HTTPD /DO=GLOBAL=CHECK
&dollar; HTTPD /DO=MAP=CHECK
&dollar; HTTPD /DO=MSG=CHECK
&dollar; HTTPD /DO=SERVICE=CHECK
</div>

<p> The <span class="high italic">config</span> check sequentially processes each of the <span class="high italic">authorization</span>,
<span class="high italic">global</span>, <span class="high italic">mapping</span>, <span class="high italic">message</span> and <span class="high italic">service</span> configuration files.

<p> If additional server startup qualifiers are required to enable specific
configuration features then these must also be provided when checking.  For
example:

<div class="blockof code">&dollar; HTTPD /DO=AUTH=CHECK /SYSUAF /PROFILE
</div>

<a id="9.7.6" href="#"></a>
<a id="9.7.6.dclscriptingprocesses" href="#"></a>
<a id="dclscriptingprocesses" href="#"></a>
<h3 class="head"><span class="numb">9.7.6</span><span class="text">DCL/Scripting Processes</span></h3>

<p> These commands can be useful for flushing any currently executing CGIplus
applications from the server, enabling a new version to be loaded with the
next access. See &quot;Scripting Environment&quot; document.

<p> All scripting processes, busy with a request or not, can be deleted (this
may cause the client to lose data).

<div class="blockof code">&dollar; HTTPD /DO=DCL=DELETE
</div>

<p> A gentler alternative is to delete idle processes and mark busy ones for
deletion when completed processing.

<div class="blockof code">&dollar; HTTPD /DO=DCL=PURGE
</div>

<p> A more selective DELETE and PURGE is possible, where user name, script name,
or script file name is supplied and only matching tasks have the specified
action peformed.

<div class="blockof code">&dollar; HTTPD /DO=DCL=PURGE=USER=<span class="high italic">username</span>
&dollar; HTTPD /DO=DCL=PURGE=SCRIPT=<span class="high italic">script-path</span>
&dollar; HTTPD /DO=DCL=PURGE=FILE=<span class="high italic">script-file-name</span>
</div>

<p> When using the proctor facility
(<a class="link blank" target="_blank" href="../scripting/#scriptproctor">Script Proctor</a> in <a class="link blank" target="_blank" href="../scripting/#0.">WASD Scripting</a>)
revised rules in WASD_CONFIG_GLOBAL may be <span class="high italic">applied</span> to the running server
(proctored scripting processes created and deleted), or merely <span class="high italic">loaded</span> into
the server ruleset (requiring subsequent DCL=PURGE or DCL=DELETE to activate). 

<div class="blockof code">&dollar; HTTPD /DO=DCL=PROCTOR=APPLY
&dollar; HTTPD /DO=DCL=PROCTOR=LOAD
</div>

<a id="9.7.7" href="#"></a>
<a id="9.7.7.decnetscriptingconnections" href="#"></a>
<a id="decnetscriptingconnections" href="#"></a>
<h3 class="head"><span class="numb">9.7.7</span><span class="text">DECnet Scripting Connections</span></h3>

<p> All DECnet connections, busy with a request or not, can be disconnected
(this may cause the client to lose data).

<div class="blockof code">&dollar; HTTPD /DO=DECNET=DISCONNECT
</div>

<p> Purging is a better alternative, disconnecting idle tasks and marking busy
ones for disconnection when complete.

<div class="blockof code">&dollar; HTTPD /DO=DECNET=PURGE
</div>

<a id="9.7.8" href="#"></a>
<a id="9.7.8.hhelppp" href="#"></a>
<a id="hhelppp" href="#"></a>
<h3 class="head"><span class="numb">9.7.8</span><span class="text">Hhelppp!</span></h3>

<div class="blockof code">&dollar; HTTPD /DO=HELP

  o  ALIGN=        START, STOP, ZERO with [&lt;buf-size&gt;,&lt;items&gt;,&lt;mask&gt;]
  o  AUTH          reload authorization file
  o  AUTH=CHECK    elementary check of authorization file
&hellip;
  o  ZERO          zero all accounting
  o  ZERO=NOTICED  zero the 'errors noticed' accounting
  o  ZERO=PROXY    zero proxy accounting

&dollar;
</div>

<a id="9.7.9" href="#"></a>
<a id="9.7.9.http2connection" href="#"></a>
<a id="http2connection" href="#"></a>
<h3 class="head"><span class="numb">9.7.9</span><span class="text">HTTP/2 Connection</span></h3>

<p> Disconnect idle HTTP/2 connections.

<div class="blockof code">&dollar; HTTPD /DO=HTTP2=PURGE
</div>

<p> All HTTP/2 connections can be disconnected (this may cause clients to lose
data), or a specific connection number.

<div class="blockof code">&dollar; HTTPD /DO=HTTP2=PURGE=ALL
&dollar; HTTPD /DO=HTTP2=PURGE=<span class="high italic">number</span>
</div>

<a id="9.7.10" href="#"></a>
<a id="9.7.10.instances" href="#"></a>
<a id="instances" href="#"></a>
<h3 class="head"><span class="numb">9.7.10</span><span class="text">Instances</span></h3>

<p> The number of server instances (see <a class="link" href="features008.html#8.1.serverinstances">8.1 Server Instances</a>) may be set
from the command line.  This overrides any configuration file directive and
applies at the next startup.  Any configuration directive value may be used
from the command line.

<div class="blockof code">&dollar; HTTPD /DO=INSTANCE=MAX
&dollar; HTTPD /DO=INSTANCE=CPU
&dollar; HTTPD /DO=INSTANCE=<span class="high italic">integer</span>
</div>

<p> <span class="high bold">Note that the server must be restarted for this to take effect</span>, that this
can be applied to the current node only or to all servers within a cluster, and
that it remains in effect until explicitly changed to &quot;MAX&quot; allowing the
WASD_CONFIG_GLOBAL configuration directive [InstanceMax] to once again
determine the number of instances required.  The same functionality is
available from the Server Administration page (<a class="link" href="features009.html#9.6.httpdserveraction">9.6 HTTPd Server Action</a>).

<p> There are also directives to assist with WATCH activities
(<a class="link" href="features008.html#8.1.serverinstances">8.1 Server Instances</a>).

<div class="blockof code">&dollar; HTTPD /DO=INSTANCE=PASSIVE
&dollar; HTTPD /DO=INSTANCE=ACTIVE
</div>

<a id="9.7.11" href="#"></a>
<a id="9.7.11.instancestatus" href="#"></a>
<a id="instancestatus" href="#"></a>
<h3 class="head"><span class="numb">9.7.11</span><span class="text">Instance Status</span></h3>

<p> Multi-instance (see <a class="link" href="features008.html#8.1.serverinstances">8.1 Server Instances</a>) status (see <a class="link" href="features008.html#8.1.4.status">8.1.4 Status</a>)
can be reported from the command line using

<div class="blockof code">&dollar; HTTPD /DO=STATUS
</div>

<p> In addition, stale entries in the status table may be purged using

<div class="blockof code">&dollar; HTTPD /DO=STATUS=PURGE
</div>

and the table completely emptied then repopulated over the next minute using

<div class="blockof code">&dollar; HTTPD /DO=STATUS=RESET
</div>

<a id="9.7.12" href="#"></a>
<a id="9.7.12.logging" href="#"></a>
<a id="logging" href="#"></a>
<h3 class="head"><span class="numb">9.7.12</span><span class="text">Logging</span></h3>

<p> Server logging control may also be exercised from the server administration
menu (<a class="link" href="features009.html#9.serveradministration">9. Server Administration</a>).

<p> Open the access log file(s). 

<div class="blockof code">&dollar; HTTPD /DO=LOG=OPEN
</div>

<p> Close the access log file(s). 

<div class="blockof code">&dollar; HTTPD /DO=LOG=CLOSE
</div>

<p> Close then reopen the access log file(s). 

<div class="blockof code">&dollar; HTTPD /DO=LOG=REOPEN
</div>

<p> Unwritten log records may be flushed to the file(s).

<div class="blockof code">&dollar; HTTPD /DO=LOG=FLUSH
</div>

<a id="9.7.13" href="#"></a>
<a id="9.7.13.mapping" href="#"></a>
<a id="mapping" href="#"></a>
<h3 class="head"><span class="numb">9.7.13</span><span class="text">Mapping</span></h3>

<p> See
<a class="link blank" target="_blank" href="../config/#requestprocessingconfiguration">Request Processing Configuration</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>.

<p> The mapping rule file (WASD_CONFIG_MAP) may be reloaded using either of these
variants.

<div class="blockof code">&dollar; HTTPD /DO=MAP
&dollar; HTTPD /DO=MAP=LOAD
</div>

<a id="9.7.14" href="#"></a>
<a id="9.7.14.networkconnection" href="#"></a>
<a id="networkconnection" href="#"></a>
<h3 class="head"><span class="numb">9.7.14</span><span class="text">Network Connection</span></h3>

<p> Current network connections can be listed at the CLI.

<div class="blockof code">&dollar; HTTPD /DO=NET=LIST
</div>

<p> This can display in an 80 character terminal depending on column widths
(e.g. service and client names) but in some circumstances will require 132
characters to use effectively.  The CLI command requests the running server to
generate a report and return that via the &dollar;BRKTHRU service.

<p> Note that with HTTP/1.n there is a one-to-one relationship between requests
in progress and a network connection, displayed as a single integer, e.g.
<span class="high monosp">1651</span>.  With HTTP/2 there can be a many to one, where listed &quot;connections&quot;
being processed (i.e. requests in progress) are <span class="high italic">virtual</span> connections being
transported by an independent actual connection, and displayed as
<span class="high monosp">1639-&gt;1632</span>, where <span class="high monosp">-&gt;1632</span> is the actual connection.

<div class="blockof code">Connect     Service / Request    Client      Time      Duration
----------  -------------------  ----------  --------  --------
1651        https:wasd.lan:4443  router.lan  08:05:02  6.636s
            [persistent:4]
1639-&gt;1632  https:wasd.lan:443   router.lan  08:00:52  4.147s
            GET /httpd/-/admin/report/WATCH?rqp=1&amp;rsp=1&amp;con=1&amp;err=1&amp;htp=i&amp;cl...
1626-&gt;1606  https:wasd.lan:443   router.lan  07:59:57  00:10:45
            GET /cgi-bin/smonitor?classes=&amp;MODES=2&amp;PROCESSES=3&amp;SYSTEM=1&amp;inte...
-&gt;1632      https:wasd.lan:443   router.lan  08:00:36  19.88s
            current:1 peak:1 count:5
-&gt;1606      https:wasd.lan:443   router.lan  07:25:41  00:35:14
            current:1 peak:4 count:13

1 HTTP/1.n, 2 via HTTP/2, 2 HTTP/2, 17-SEP-2021 07:58:17
</div>

<p> Disconnect <span class="high italic">idle</span> (persistent HTTP/1.n and HTTP/2) connections.

<div class="blockof code">&dollar; HTTPD /DO=NET=PURGE
</div>

<p> All network connections can be disconnected (this may cause clients to
lose data), selectively idle HTTP/1.n or HTTP/2 connections, a specific
connection number and those matching the specified URI.

<div class="blockof code">&dollar; HTTPD /DO=NET=PURGE=ALL
&dollar; HTTPD /DO=NET=PURGE=HTTP1
&dollar; HTTPD /DO=NET=PURGE=HTTP2
&dollar; HTTPD /DO=NET=PURGE=<span class="high italic">number</span>
&dollar; HTTPD /DO=NET=PURGE=URI=<span class="high italic">pattern</span>
</div>

<p> Additionally, network connection acceptance can be suspended (leaving
in-progress requests to complete), suspended and in-progress disconnected, and
resumed.

<div class="blockof code">&dollar; HTTPD /DO=NET=SUSPEND
&dollar; HTTPD /DO=NET=SUSPEND=NOW
&dollar; HTTPD /DO=NET=RESUME
</div>

<a id="9.7.15" href="#"></a>
<a id="9.7.15.shutdownandrestart" href="#"></a>
<a id="shutdownandrestart" href="#"></a>
<h3 class="head"><span class="numb">9.7.15</span><span class="text">Shutdown and Restart</span></h3>

<p> Server shutdown may also be exercised from the Server Administration page
(<a class="link" href="features009.html#9.serveradministration">9. Server Administration</a>).

<p> The server may be shut down, without loss of existing client requests.
Connection acceptance is stopped and any existing requests continue to be
processed until conclusion.

<div class="blockof code">&dollar; HTTPD /DO=EXIT
</div>

<p> The server may be immediately and unconditionally shut down.

<div class="blockof code">&dollar; HTTPD /DO=EXIT=NOW
</div>

<p> The server may be restarted, without loss of existing client requests.
Connection acceptance is stopped and any existing requests continue to be
processed until conclusion.  This effectively causes the server to exit
normally and the DCL <span class="high italic">wrapper</span> procedure to restart it.

<div class="blockof code">&dollar; HTTPD /DO=RESTART
</div>

<p> The <span class="high italic">now</span> variant restarts the server immediately regardless of existing
connections.

<div class="blockof code">&dollar; HTTPD /DO=RESTART=NOW
</div>

<p> The when&ndash; <span class="high italic">quiet</span> variant restarts the server whenever request processing
drops to zero for more than one second.  It allows (perhaps non-urgent) changes
to be put into effect through restart when everything has gone &quot;quiet&quot; and no
demands are being placed on the server.

<div class="blockof code">&dollar; HTTPD /DO=RESTART=QUIET
</div>

<p> Significant server events such as these are prime candidates for server log
annotation!

<div class="blockof code">&dollar; HTTPD /DO=RESTART=NOW /NOTE=&quot;Restarting the server just so I can note it :-)&quot;
</div>

<a id="9.7.16" href="#"></a>
<a id="9.7.16.securesocketslayer" href="#"></a>
<a id="securesocketslayer" href="#"></a>
<h3 class="head"><span class="numb">9.7.16</span><span class="text">Secure Sockets Layer</span></h3>

<p> If the optional SSL component is installed and configured these directives
become effective.

<p> If X.509 authentication is enabled the Certificate Authority (CA)
verification list can be reloaded.

<div class="blockof code">&dollar; HTTPD /DO=SSL=CA=LOAD
</div>

<p> Server certificates, after being updated, may be reloaded into the running
services (i.e. without restart).  This is a synonym for /DO=SERVICE=LOAD.

<div class="blockof code">&dollar; HTTPD /DO=SSL=CERT=LOAD
</div>

<p> If a private key password is not included with the encode key it is
requested by the server during startup.  The following example shows the
directive and the resulting prompt.  When entered the password is not echoed.

<div class="blockof code">&dollar; HTTPD /DO=SSL=KEY=PASSWORD
Enter private key password []:
</div>

<a id="9.7.17" href="#"></a>
<a id="9.7.17.throttle" href="#"></a>
<a id="throttle" href="#"></a>
<h3 class="head"><span class="numb">9.7.17</span><span class="text">Throttle</span></h3>

<p> Unconditionally release all queued requests for immediate processing.

<div class="blockof code">&dollar; HTTPD /DO=THROTTLE=RELEASE
</div>

<p> Unconditionally terminate all requests queued waiting for processing. 
Clients receive a 503 &quot;server too busy&quot; response.

<div class="blockof code">&dollar; HTTPD /DO=THROTTLE=TERMINATE
</div>

<p> For VMS V8.2 and later, a more selective RELEASE and TERMINATE is possible. 
A user name or script name can be supplied and only matching requests have the
specified action peformed.

<div class="blockof code">&dollar; HTTPD /DO=THROTTLE=TERMINATE=REMOTE=<span class="high italic">pattern</span>
&dollar; HTTPD /DO=THROTTLE=TERMINATE=SCRIPT=<span class="high italic">pattern</span>
</div>

<a id="9.7.18" href="#"></a>
<a id="9.7.18.websocket" href="#"></a>
<a id="websocket" href="#"></a>
<h3 class="head"><span class="numb">9.7.18</span><span class="text">WebSocket</span></h3>

<p> Unconditionally disconnects all WebSocket applications.

<div class="blockof code">&dollar; HTTPD /DO=WEBSOCKET=DISCONNECT
</div>

<p> For VMS V8.2 and later, more selective disconnects are possible. 
Disconnects WebSocket applications with connection number, with matching script
names, and with matching scripting account usernames, respectively.

<div class="blockof code">&dollar; HTTPD /DO=WEBSOCKET=DISCONNECT=<span class="high italic">number</span>
&dollar; HTTPD /DO=WEBSOCKET=DISCONNECT=SCRIPT=<span class="high italic">pattern</span>
&dollar; HTTPD /DO=WEBSOCKET=DISCONNECT=USER=<span class="high italic">pattern</span>
</div>

<!-- source:1000_WATCH.WASDOC -->

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="features008.html#8.">&#8598;&#xFE0E;</a>
<td><a href="features000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="features010.html#10.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>