2023-05-31 18:14:19 +02:00
|
|
|
# filename: ch10-07-bad-script.rsc
|
|
|
|
#
|
|
|
|
# A simple script to perform a series of tests on a
|
|
|
|
# list of web sites.
|
|
|
|
|
2023-03-19 08:33:27 +00:00
|
|
|
:global Filename "ch10-07-bad-script.rsc"
|
2023-01-19 21:27:15 +00:00
|
|
|
|
|
|
|
# function to log error messages
|
|
|
|
:global LogMessageFunc do={
|
|
|
|
:global Filename;
|
|
|
|
:local ErrorMessage "$Filename: $1";
|
|
|
|
|
|
|
|
:log error $ErrorMessage;
|
|
|
|
:put $ErrorMessage; # print to CLI
|
|
|
|
}
|
|
|
|
|
|
|
|
# function to DNS resolve a site name to IP
|
|
|
|
:global DnsResolveFunc do={
|
|
|
|
:local WebSiteName $1;
|
|
|
|
:global LogMessageFunc;
|
|
|
|
|
|
|
|
# check arg type str of correct length passed
|
|
|
|
:if (([:typeof $WebSiteName] != "str") or \
|
|
|
|
([:len value=$WebSiteName] < 6)) do={
|
2023-02-19 13:53:15 +00:00
|
|
|
$LogMessageFunc ("DnsResolveFunc: arg value $WebSiteName not \
|
|
|
|
a valid string!");
|
2023-01-19 21:27:15 +00:00
|
|
|
|
|
|
|
:return "*** test failed ***";
|
|
|
|
}
|
|
|
|
|
|
|
|
# try a name lookup
|
|
|
|
:do {
|
2023-02-26 14:05:58 +00:00
|
|
|
return [:resolve $WebSiteName];
|
2023-01-19 21:27:15 +00:00
|
|
|
} on-error={
|
2023-02-19 13:53:15 +00:00
|
|
|
$LogMessageFunc ("DnsResolveFunc: name resolution failed for \
|
|
|
|
site: $WebSiteName!");
|
2023-01-19 21:27:15 +00:00
|
|
|
:return "*** test failed ***";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# function to ping an IP address 3 times
|
|
|
|
:global PingIpAddressFunc do={
|
|
|
|
:local IpAddress $1;
|
|
|
|
:global LogMessageFunc;
|
|
|
|
|
|
|
|
# check arg type ip is passed
|
|
|
|
:if ([:typeof $IpAddress] != "ip") do={
|
2023-02-19 13:53:15 +00:00
|
|
|
$LogMessageFunc ("PingIpAddressFunc: arg value $IpAddress not \
|
|
|
|
an IP address!");
|
2023-01-19 21:27:15 +00:00
|
|
|
:return "*** test failed ***";
|
|
|
|
}
|
|
|
|
|
|
|
|
# try a ping
|
|
|
|
:do {
|
|
|
|
return [/ping $IpAddress count=3];
|
2023-02-19 13:53:15 +00:00
|
|
|
} on-error={
|
|
|
|
$LogMessageFunc ("PingIpAddressFunc: ping test failed: \
|
|
|
|
$IpAddress !");
|
2023-01-19 21:27:15 +00:00
|
|
|
:return "*** test failed ***";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# function to return the result of fetching a web page
|
|
|
|
:global GetWebPageFunc do={
|
|
|
|
:local SiteName $1;
|
|
|
|
:global LogMessageFunc;
|
|
|
|
|
|
|
|
# check arg type str of correct length passed
|
2023-02-19 13:53:15 +00:00
|
|
|
:if (([:typeof $SiteName] != "str") or \
|
|
|
|
([:len value=$SiteName] < 6)) do={
|
|
|
|
$LogMessageFunc ("GetWebPageFunc: arg value $SiteName not a \
|
|
|
|
valid string!");
|
2023-01-19 21:27:15 +00:00
|
|
|
:return "*** test failed ***";
|
|
|
|
}
|
|
|
|
|
|
|
|
# try to get web page
|
|
|
|
:do {
|
|
|
|
:return [/tool fetch url=("https://$SiteName") mode=https \
|
|
|
|
http-method=get as-value keep-result=no];
|
2023-02-19 13:53:15 +00:00
|
|
|
} on-error={
|
2023-01-19 21:27:15 +00:00
|
|
|
$LogMessageFunc ("GetWebPageFunc: unable to retrieve site: \
|
|
|
|
$SiteName !");
|
|
|
|
:return { "duration"="*** test failed ***" }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
##########
|
|
|
|
# Main
|
|
|
|
##########
|
|
|
|
|
|
|
|
# define list of websites to test
|
|
|
|
:local WebSites { "badsite1234.com"; "www.google.com"; "twitter.com"};
|
|
|
|
|
|
|
|
# step through each website and perform various tests
|
|
|
|
:foreach SiteName in=$WebSites do={
|
|
|
|
|
|
|
|
# try a DNS resolution of this site
|
|
|
|
:local IpAddress [$DnsResolveFunc $SiteName];
|
|
|
|
|
|
|
|
# try pinging the IP address of this site
|
|
|
|
:local PingResult [$PingIpAddressFunc $IpAddress];
|
|
|
|
|
|
|
|
# try getting the web page of this site
|
|
|
|
:local UrlFetch [$GetWebPageFunc $SiteName];
|
|
|
|
|
|
|
|
# print out a summary report for this site
|
|
|
|
:put "==========================================";
|
|
|
|
:put ("Site: $SiteName");
|
|
|
|
:put ("IP Address = $IpAddress");
|
|
|
|
:put ("Ping success = $PingResult/3");
|
|
|
|
:put ("Page d/load duration: " . $UrlFetch->"duration");
|
|
|
|
:put "===========================================";
|
|
|
|
}
|
|
|
|
|
|
|
|
# cleanup global namespace
|
|
|
|
:set LogMessageFunc;
|
|
|
|
:set DnsResolveFunc;
|
|
|
|
:set PingIpAddressFunc;
|
|
|
|
:set GetWebPageFunc;
|
2023-03-19 08:33:27 +00:00
|
|
|
:set Filename;
|