// im a web connector package main import ( "http"; "io"; //"./dbibridge"; "./benchcontroller"; //"dbconnector"; "fmt"; "json"; ) type JSONdata struct { currentJob int; // 1 = nothing, 2 = have database login, 3 = createing data, 4 = running test, 5 = finished currentStatus int; // percent complete } var comin chan string; var cominstatus chan string; var comout chan string; func JSONResponder(c *http.Conn, req *http.Request) { //stat := <- cominstatus; j, _, _ := json.StringToJson("{\"somestring\":\"somevalue\"}"); io.WriteString(c, fmt.Sprintf("%s\n", json.JsonToString(j))); /*if ret { fmt.Printf("err was true\n"); } else { fmt.Printf("err was false\n"); }*/ //fmt.Printf("errto %s\n", errto); } // hello world, the web server 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) { if req.Method != "GET" { http.Redirect(c, "/begin", 301); } else { header(c); io.WriteString(c, "

Starting hammer

"); //dbhost := req.FormValue("dbhost"); //dbuser := req.FormValue("dbuser"); //dbpass := req.FormValue("dbpass"); //dbname := req.FormValue("dbname"); //nthreads := req.FormValue("nthreads"); //dbmult := req.FormValue("dbmult"); comout <- "begin:setup"; footer(c); } } func confirmPage(c *http.Conn, req *http.Request) { header(c); io.WriteString(c, "

Confirm

"); dbhost := req.FormValue("dbhost"); dbuser := req.FormValue("dbuser"); dbpass := req.FormValue("dbpass"); dbname := req.FormValue("dbname"); nthreads := req.FormValue("nthreads"); dbmult := req.FormValue("dbmult"); var dbtype string; io.WriteString(c, "You are trying to perform a benchmark with the following values:
"); io.WriteString(c, ""); io.WriteString(c, fmt.Sprintf("", dbhost)); io.WriteString(c, fmt.Sprintf("", dbuser)); io.WriteString(c, fmt.Sprintf("", dbpass)); io.WriteString(c, fmt.Sprintf("", dbname)); io.WriteString(c, fmt.Sprintf("", dbmult)); io.WriteString(c, fmt.Sprintf("", nthreads)); io.WriteString(c, "
Host%s
User%s
Password%s
Database%s
Data Multiplier%s
Number of Threads%s
"); io.WriteString(c, "
"); io.WriteString(c, fmt.Sprintf("",dbhost)); io.WriteString(c, fmt.Sprintf("",dbuser)); io.WriteString(c, fmt.Sprintf("",dbpass)); io.WriteString(c, fmt.Sprintf("",dbname)); io.WriteString(c, fmt.Sprintf("",nthreads)); io.WriteString(c, fmt.Sprintf("",dbmult)); io.WriteString(c, ""); io.WriteString(c, "
"); dbtype = "mysql"; footer(c); comout <- fmt.Sprintf("configure:%s:%s:%s:%s:%s:%s:%s", dbtype, dbhost, dbuser, dbpass, dbname, dbmult, nthreads); } func mainPage(c *http.Conn, req *http.Request) { header(c); io.WriteString(c, "

goDBHammer


"); io.WriteString(c, "Welcome to goDBHammer, the go based database benchmarking tool
"); io.WriteString(c, "
"); io.WriteString(c, ""); io.WriteString(c, ""); io.WriteString(c, ""); io.WriteString(c, ""); io.WriteString(c, ""); io.WriteString(c, ""); io.WriteString(c, ""); io.WriteString(c, ""); io.WriteString(c, "
Database Type
Database Host
Database User
Database Password
Database
Data Multiplier
Number of Clients
"); io.WriteString(c, "
"); fmt.Printf("%s\n", req.FormValue("dbhost")); footer(c); } func header(c *http.Conn) { io.WriteString(c, ""); } func footer(c *http.Conn) { io.WriteString(c, ""); } func main() { comin = make(chan string); cominstatus = make(chan string); comout = make(chan string); bc := benchcontroller.CreateController(); go benchcontroller.MainLoop(bc, comout, comin, cominstatus); http.Handle("/", http.FileServer("./web", "/web")); http.Handle("/json", http.HandlerFunc(JSONResponder)); err := http.ListenAndServe(":22222", nil); if err != nil { panic("ListenAndServe: ", err.String()) } }