summaryrefslogtreecommitdiff
path: root/appl/svc/httpd/stats.b
blob: 3e285ef81ce24b9ba70552775bcb55e87d3f21f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
implement Stats;

include "sys.m";
	sys : Sys;

include "bufio.m";
	bufio: Bufio;
	Iobuf: 	import bufio;

include "draw.m";
	draw: Draw;

include "contents.m";
include "cache.m";
	cache : Cache;

include "httpd.m";
	Private_info: import Httpd;

include "date.m";
	date : Date;

include "parser.m";
	pars : Parser;

include "daytime.m";
	daytime: Daytime;

Stats: module
{
	init: fn(g : ref Private_info, req: Httpd->Request);
};

badmod(p: string)
{
	sys->fprint(sys->fildes(2), "stats: cannot load %s: %r\n", p);
	raise "fail:bad module";
}

init(k : ref Private_info, req: Httpd->Request)
{	
	sys = load Sys "$Sys";
	draw = load Draw "$Draw";
	
	daytime = load Daytime Daytime->PATH;
	if(daytime == nil) badmod(Daytime->PATH);

	pars = load Parser Parser->PATH;
	if(pars == nil) badmod(Parser->PATH);

	date = load Date Date->PATH;
	if(date == nil) badmod(Date->PATH);

	date->init();
	bufio=k.bufio;
	send(k, req.method, req.version, req.uri, req.search);
}

send(g: ref Private_info, meth, vers, uri, search : string)
{
	if(meth=="");
	if(uri=="");
	if(search=="");
	if(vers != ""){
		if (g.version == nil)
			sys->print("stats: version is unknown.\n");
		g.bout.puts(sys->sprint("%s 200 OK\r\n", g.version));
		g.bout.puts("Server: Charon\r\n");
		g.bout.puts("MIME-version: 1.0\r\n");
		g.bout.puts(sys->sprint("Date: %s\r\n", date->dateconv(daytime->now())));
		g.bout.puts("Content-type: text/html\r\n");
		g.bout.puts(sys->sprint("Expires: %s\r\n", date->dateconv(daytime->now())));
		g.bout.puts("\r\n");
	}
	g.bout.puts("<head><title>Cache Information</title></head>\r\n");
	g.bout.puts("<body><h1>Cache Information</h1>\r\n");
	g.bout.puts("These are the pages stored in the server cache:<p>\r\n");
	lis:=(g.cache)->dump();
	while (lis!=nil){
		(a,b,d):=hd lis;
		g.bout.puts(sys->sprint("<a href=\"%s\"> %s</a> \t size %d \t tag %d.<p>\r\n",a,a,b,d));
		lis = tl lis;
	}
	g.bout.flush();
}