import (
"http";
"io";
- "./dbibridge";
+ //"./dbibridge";
+ "./benchcontroller";
+ "fmt";
)
+var comin chan string;
+var comout chan string;
+
// hello world, the web server
-func HelloServer(c *http.Conn, req *http.Request) {
- io.WriteString(c, "<html><form method=post><input type=\"input\"><input type=\"submit\" name=\"go\" value=\"go\"></html>\n");
+func ServerResponder(c *http.Conn, req *http.Request) {
+ //comout <- 2;
+ //comout <- 3;
+ //comout <- 1;
+ fmt.Printf("lk: %s %s %s\n", req.Method, req.RawURL, req.URL);
+ if req.RawURL == "/" {
+ mainPage(c, req);
+ }
+
+ if req.RawURL == "/confirm" {
+ confirmPage(c, req);
+ }
+
+ if req.RawURL == "/begin" {
+ beginPage(c, req);
+ }
+
+ //k := <- comin;
+ //fmt.Printf("%d\n", k);
+}
+
+func beginPage(c *http.Conn, req *http.Request)
+{
+ header(c);
+ io.WriteString(c, "<h1>Starting hammer</h1>");
+ //dbhost := req.FormValue("dbhost");
+ //dbuser := req.FormValue("dbuser");
+ //dbpass := req.FormValue("dbpass");
+ //dbname := req.FormValue("dbname");
+ //nthreads := req.FormValue("nthreads");
+ //dbmult := req.FormValue("dbmult");
+
+ footer(c);
+
+}
+
+func confirmPage(c *http.Conn, req *http.Request)
+{
+ header(c);
+ io.WriteString(c, "<h1>Confirm</h1>");
+ dbhost := req.FormValue("dbhost");
+ dbuser := req.FormValue("dbuser");
+ dbpass := req.FormValue("dbpass");
+ dbname := req.FormValue("dbname");
+ nthreads := req.FormValue("nthreads");
+ dbmult := req.FormValue("dbmult");
+
+ io.WriteString(c, "You are trying to perform a benchmark with the following values:<br>");
+ io.WriteString(c, "<table border=\"1\">");
+ io.WriteString(c, fmt.Sprintf("<tr><td>Host</td><td>%s</td></tr>", dbhost));
+ io.WriteString(c, fmt.Sprintf("<tr><td>User</td><td>%s</td></tr>", dbuser));
+ io.WriteString(c, fmt.Sprintf("<tr><td>Password</td><td>%s</td></tr>", dbpass));
+ io.WriteString(c, fmt.Sprintf("<tr><td>Database</td><td>%s</td></tr>", dbname));
+ io.WriteString(c, fmt.Sprintf("<tr><td>Data Multiplier</td><td>%s</td></tr>", dbmult));
+ io.WriteString(c, fmt.Sprintf("<tr><td>Number of Threads</td><td>%s</td></tr>", nthreads));
+ io.WriteString(c, "</table>");
+ io.WriteString(c, "<form method=\"post\" action=\"/begin\">");
+ io.WriteString(c, fmt.Sprintf("<input type=\"hidden\" name=\"dbhost\" value=\"%s\">",dbhost));
+ io.WriteString(c, fmt.Sprintf("<input type=\"hidden\" name=\"dbuser\" value=\"%s\">",dbuser));
+ io.WriteString(c, fmt.Sprintf("<input type=\"hidden\" name=\"dbpass\" value=\"%s\">",dbpass));
+ io.WriteString(c, fmt.Sprintf("<input type=\"hidden\" name=\"dbname\" value=\"%s\">",dbname));
+ io.WriteString(c, fmt.Sprintf("<input type=\"hidden\" name=\"nthreads\" value=\"%s\">",nthreads));
+ io.WriteString(c, fmt.Sprintf("<input type=\"hidden\" name=\"dbmult\" value=\"%s\">",dbmult));
+ io.WriteString(c, "<input type=\"submit\" name=\"Begin\" value=\"Begin\">");
+ io.WriteString(c, "</form>");
+
+ footer(c);
+ comout <- fmt.Sprintf("configure:%s:%s:%s:%s:%s:%s", dbhost, dbuser, dbpass, dbname, dbmult, nthreads);
+
}
-func main() {
+func mainPage(c *http.Conn, req *http.Request)
+{
+ header(c);
+ io.WriteString(c, "<h1>goDBHammer</h1><br>");
+ io.WriteString(c, "Welcome to goDBHammer, the go based database benchmarking tool<br>");
+ io.WriteString(c, "<form method=\"post\" action=\"/confirm\">");
+ io.WriteString(c, "<table><tr><td>Database Type</td><td><input type=\"text\" name=\"dbtype\" value=\"ignored for now\"></td></tr>");
+ io.WriteString(c, "<tr><td>Database Host</td><td><input type=\"text\" name=\"dbhost\"></td></tr>");
+ io.WriteString(c, "<tr><td>Database User</td><td><input type=\"text\" name=\"dbuser\"></td></tr>");
+ io.WriteString(c, "<tr><td>Database Password</td><td><input type=\"text\" name=\"dbpass\"></td></tr>");
+ io.WriteString(c, "<tr><td>Database</td><td><input type=\"text\" name=\"dbname\"></td></tr>");
+ io.WriteString(c, "<tr><td>Data Multiplier</td><td><input type=\"text\" name=\"dbmult\"></td></tr>");
+ io.WriteString(c, "<tr><td>Number of Clients</td><td><input type=\"text\" name=\"nthreads\"></td></tr>");
+ io.WriteString(c, "<tr><td><input type=\"submit\" name=\"Setup\" value=\"Setup\"></td></tr>");
+ io.WriteString(c, "</table>");
+ io.WriteString(c, "</form>");
+ fmt.Printf("%s\n", req.FormValue("dbhost"));
+ footer(c);
+}
+
+func header(c *http.Conn)
+{
+ io.WriteString(c, "<html><head></head><body>");
+}
+
+func footer(c *http.Conn)
+{
+ io.WriteString(c, "</body></html>");
+}
- var Dbconn *dbibridge.DBIConnection;
+func main()
+{
+ comin = make(chan string);
+ comout = make(chan string);
- Dbconn = dbibridge.DBICreate();
+ bc := benchcontroller.CreateController();
+ go benchcontroller.MainLoop(bc, comout, comin);
- dbibridge.DBIConnect(Dbconn, "mysql", "localhost", "root", "password", "zm");
- dbibridge.ExecSQL(Dbconn, "create table asdf (asdf int)");
- dbibridge.DBIDisconnect(Dbconn);
- //http.Handle("/hello", http.HandlerFunc(HelloServer));
- //err := http.ListenAndServe(":12345", nil);
- //if err != nil {
- ////panic("ListenAndServe: ", err.String())
- //}
+ http.Handle("/", http.HandlerFunc(ServerResponder));
+ err := http.ListenAndServe(":22222", nil);
+ if err != nil {
+ panic("ListenAndServe: ", err.String())
+ }
}