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