the way i'm doing the web itnerface kinda sucks.
[goDBhammer.git] / src / webconnector.go
1 // im a web connector
2
3 package main
4
5
6 import (
7         "http";
8         "io";
9         //"./dbibridge";
10         "./benchcontroller";
11         "fmt";
12 )
13
14 var comin chan string;
15 var comout chan string;
16
17 // hello world, the web server
18 func ServerResponder(c *http.Conn, req *http.Request) {
19         //comout <- 2;
20         //comout <- 3;
21         //comout <- 1;
22         fmt.Printf("lk: %s %s %s\n", req.Method, req.RawURL, req.URL); 
23         if req.RawURL == "/" {
24                 mainPage(c, req);
25         }
26         
27         if req.RawURL == "/confirm" {
28                 confirmPage(c, req);
29         }
30
31         if req.RawURL == "/begin" {
32                 beginPage(c, req);
33         }
34         
35         //k := <- comin;
36         //fmt.Printf("%d\n", k);
37 }
38
39 func beginPage(c *http.Conn, req *http.Request)
40 {
41         header(c);
42         io.WriteString(c, "<h1>Starting hammer</h1>");
43         //dbhost := req.FormValue("dbhost");
44         //dbuser := req.FormValue("dbuser");
45         //dbpass := req.FormValue("dbpass");
46         //dbname := req.FormValue("dbname");
47         //nthreads := req.FormValue("nthreads");
48         //dbmult := req.FormValue("dbmult");
49         
50         footer(c);
51         
52 }
53
54 func confirmPage(c *http.Conn, req *http.Request)
55 {
56         header(c);
57         io.WriteString(c, "<h1>Confirm</h1>");
58         dbhost := req.FormValue("dbhost");
59         dbuser := req.FormValue("dbuser");
60         dbpass := req.FormValue("dbpass");
61         dbname := req.FormValue("dbname");
62         nthreads := req.FormValue("nthreads");
63         dbmult := req.FormValue("dbmult");
64         
65         io.WriteString(c, "You are trying to perform a benchmark with the following values:<br>");
66         io.WriteString(c, "<table border=\"1\">");
67         io.WriteString(c, fmt.Sprintf("<tr><td>Host</td><td>%s</td></tr>", dbhost));
68         io.WriteString(c, fmt.Sprintf("<tr><td>User</td><td>%s</td></tr>", dbuser));
69         io.WriteString(c, fmt.Sprintf("<tr><td>Password</td><td>%s</td></tr>", dbpass));
70         io.WriteString(c, fmt.Sprintf("<tr><td>Database</td><td>%s</td></tr>", dbname));
71         io.WriteString(c, fmt.Sprintf("<tr><td>Data Multiplier</td><td>%s</td></tr>", dbmult));
72         io.WriteString(c, fmt.Sprintf("<tr><td>Number of Threads</td><td>%s</td></tr>", nthreads));
73         io.WriteString(c, "</table>");
74         io.WriteString(c, "<form method=\"post\" action=\"/begin\">");
75         io.WriteString(c, fmt.Sprintf("<input type=\"hidden\" name=\"dbhost\" value=\"%s\">",dbhost));
76         io.WriteString(c, fmt.Sprintf("<input type=\"hidden\" name=\"dbuser\" value=\"%s\">",dbuser));
77         io.WriteString(c, fmt.Sprintf("<input type=\"hidden\" name=\"dbpass\" value=\"%s\">",dbpass));
78         io.WriteString(c, fmt.Sprintf("<input type=\"hidden\" name=\"dbname\" value=\"%s\">",dbname));
79         io.WriteString(c, fmt.Sprintf("<input type=\"hidden\" name=\"nthreads\" value=\"%s\">",nthreads));
80         io.WriteString(c, fmt.Sprintf("<input type=\"hidden\" name=\"dbmult\" value=\"%s\">",dbmult));
81         io.WriteString(c, "<input type=\"submit\" name=\"Begin\" value=\"Begin\">");
82         io.WriteString(c, "</form>");
83         
84         footer(c);
85         comout <- fmt.Sprintf("configure:%s:%s:%s:%s:%s:%s", dbhost, dbuser, dbpass, dbname, dbmult, nthreads);
86
87 }
88
89 func mainPage(c *http.Conn, req *http.Request)
90 {
91         header(c);
92         io.WriteString(c, "<h1>goDBHammer</h1><br>");
93         io.WriteString(c, "Welcome to goDBHammer, the go based database benchmarking tool<br>");
94         io.WriteString(c, "<form method=\"post\" action=\"/confirm\">");
95         io.WriteString(c, "<table><tr><td>Database Type</td><td><input type=\"text\" name=\"dbtype\" value=\"ignored for now\"></td></tr>");
96         io.WriteString(c, "<tr><td>Database Host</td><td><input type=\"text\" name=\"dbhost\"></td></tr>");
97         io.WriteString(c, "<tr><td>Database User</td><td><input type=\"text\" name=\"dbuser\"></td></tr>");
98         io.WriteString(c, "<tr><td>Database Password</td><td><input type=\"text\" name=\"dbpass\"></td></tr>");
99         io.WriteString(c, "<tr><td>Database</td><td><input type=\"text\" name=\"dbname\"></td></tr>");  
100         io.WriteString(c, "<tr><td>Data Multiplier</td><td><input type=\"text\" name=\"dbmult\"></td></tr>");   
101         io.WriteString(c, "<tr><td>Number of Clients</td><td><input type=\"text\" name=\"nthreads\"></td></tr>");
102         io.WriteString(c, "<tr><td><input type=\"submit\" name=\"Setup\" value=\"Setup\"></td></tr>");
103         io.WriteString(c, "</table>");
104         io.WriteString(c, "</form>");
105         fmt.Printf("%s\n", req.FormValue("dbhost"));
106         footer(c);
107 }
108
109 func header(c *http.Conn)
110 {
111         io.WriteString(c, "<html><head></head><body>");
112 }
113
114 func footer(c *http.Conn)
115 {
116         io.WriteString(c, "</body></html>");
117 }
118
119 func main()
120 {
121         comin = make(chan string);
122         comout = make(chan string);
123         
124         bc := benchcontroller.CreateController();
125         go benchcontroller.MainLoop(bc, comout, comin);
126         
127         http.Handle("/", http.HandlerFunc(ServerResponder));
128         err := http.ListenAndServe(":22222", nil);
129         if err != nil {
130                 panic("ListenAndServe: ", err.String())
131         }
132
133 }