14 var comin chan string;
15 var comout chan string;
17 // hello world, the web server
18 func ServerResponder(c *http.Conn, req *http.Request) {
22 fmt.Printf("lk: %s %s %s\n", req.Method, req.RawURL, req.URL);
23 if req.RawURL == "/" {
27 if req.RawURL == "/confirm" {
31 if req.RawURL == "/begin" {
36 //fmt.Printf("%d\n", k);
39 func beginPage(c *http.Conn, req *http.Request)
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");
54 func confirmPage(c *http.Conn, req *http.Request)
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");
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>");
85 comout <- fmt.Sprintf("configure:%s:%s:%s:%s:%s:%s", dbhost, dbuser, dbpass, dbname, dbmult, nthreads);
89 func mainPage(c *http.Conn, req *http.Request)
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"));
109 func header(c *http.Conn)
111 io.WriteString(c, "<html><head></head><body>");
114 func footer(c *http.Conn)
116 io.WriteString(c, "</body></html>");
121 comin = make(chan string);
122 comout = make(chan string);
124 bc := benchcontroller.CreateController();
125 go benchcontroller.MainLoop(bc, comout, comin);
127 http.Handle("/", http.HandlerFunc(ServerResponder));
128 err := http.ListenAndServe(":22222", nil);
130 panic("ListenAndServe: ", err.String())