diff --git a/backend/goserver/goserver b/backend/goserver/goserver index d9b2026..f9ae3ba 100755 Binary files a/backend/goserver/goserver and b/backend/goserver/goserver differ diff --git a/backend/goserver/main.go b/backend/goserver/main.go index bf26d64..f04a143 100644 --- a/backend/goserver/main.go +++ b/backend/goserver/main.go @@ -1,56 +1,56 @@ package main import ( "fmt" "io/ioutil" sw "kritaServers/backend/goserver/server" "net/http" "time" _ "github.com/lib/pq" ) type ColorGroup struct { ID int Name string Colors []string } func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) fmt.Printf("REQUEST") bodyBuffer, _ := ioutil.ReadAll(r.Body) fmt.Printf("after parse") sw.InsertGeneralInfo(bodyBuffer) } func viewHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "

Last requests

%s
", "in console") } func main() { fmt.Printf("hello") // connectionString := // fmt.Sprintf("user=%s password=%s dbname=%s host=%s port=%s sslmode=disable", user, password, dbname, host, port) sw.InitDB() defer sw.Db.Close() http.HandleFunc("/receiver/submit/org.krita.krita", handler) http.HandleFunc("/GoogleLogin", sw.HandleGoogleLogin) http.HandleFunc("/GoogleCallback", sw.HandleGoogleCallback) http.HandleFunc("/agregatedData", sw.AgregatedDataHandler) http.HandleFunc("/", viewHandler) //ticker := time.NewTicker(time.Minute * 2) - ticker := time.NewTicker(time.Minute * 10) + ticker := time.NewTicker(time.Minute * 2) go func() { for t := range ticker.C { sw.CollectData() fmt.Println("Tick at", t) } }() http.ListenAndServe(":8080", nil) } diff --git a/backend/goserver/server/collectData.go b/backend/goserver/server/collectData.go index 2b18f26..89c36ec 100644 --- a/backend/goserver/server/collectData.go +++ b/backend/goserver/server/collectData.go @@ -1,105 +1,126 @@ package server import ( "encoding/json" "fmt" md "kritaServers/backend/goserver/server/models" "strconv" ) func count(query string, whatCount string) float64 { rows, err := Db.Query(query, whatCount) checkErr(err) var count int for rows.Next() { err := rows.Scan(&count) checkErr(err) fmt.Println("scanned!") } return float64(count) //golang хранит числа в json только в флоат64 } // //ПЕРЕМЕННОЕ КОЛИЧЕСТВО АРГУМЕНТОВ СДЕЛАТЬ // func countOther(query string, whatCount1 string, whatCount2 string) float64 { // rows, err := Db.Query(query, whatCount1, whatCount2) // checkErr(err) // var count int // for rows.Next() { // err := rows.Scan(&count) // checkErr(err) // fmt.Println("scanned other platforms!") // } // return float64(count) //golang хранит числа в json только в флоат64 // } func countOther(query string, queryNotEql string, args ...string) float64 { execQuery := query for i, _ := range args { //Зачем я использую препаред стейтмент, когда можно без него? if i != 0 { execQuery += " and " } //execQuery += queryNotEql + "'" + v + "'" execQuery += queryNotEql + "$" + strconv.Itoa(i+1) } //execQuery += ";" fmt.Println(execQuery) temp, _ := Db.Prepare(execQuery) fmt.Println(len(args)) ///rows, err := temp.Query(args) old := args new := make([]interface{}, len(old)) for i, v := range old { new[i] = v } fmt.Println(new...) rows, err := temp.Query(new...) checkErr(err) var count int for rows.Next() { err := rows.Scan(&count) checkErr(err) fmt.Println("scanned other abstruct platforms!") } return float64(count) //golang хранит числа в json только в флоат64 } func CollectData() { var result md.CollectedData + const osQuery = "select count( data -> 'platform'->>'os') as os from generalInfo where data -> 'platform'->>'os' = $1" result.Platform.Os.Linux = count(osQuery, "linux") fmt.Println(result.Platform.Os.Linux) result.Platform.Os.Windows = count(osQuery, "windows") result.Platform.Os.Mac = count(osQuery, "mac") + const osOtherQuery = "select count( data -> 'platform'->>'os') as os from generalInfo WHERE " const osOtherNotEql = "data -> 'platform'->>'os' !=" result.Platform.Os.Other = countOther(osOtherQuery, osOtherNotEql, "linux", "windows", "mac") //const osOtherQuery = "select count( data -> 'platform'->>'os') as os from generalInfo where data -> 'platform'->>'os' != $1 and data -> 'platform'->>'os'!=$2" //result.Platform.Os.Other = countOther(osOtherQuery, "windows", "linux") const archCPUQuery = "select count( data -> 'cpu'->>'architecture') from generalInfo where data -> 'cpu'->>'architecture' = $1" result.CPU.Architecture.X86_64 = count(archCPUQuery, "x86_64") result.CPU.Architecture.X86 = count(archCPUQuery, "i386") // может быть что-то другое нужно - const archCPUOtherQuery = "select count( data -> 'cpu'->>'architecture') from generalInfo where " + const archCPUOtherQuery = "select count( data -> 'cpu'->>'architecture') from generalInfo where " const archCPUOtherNotEql = "data -> 'cpu'->>'architecture' !=" result.CPU.Architecture.Other = countOther(archCPUOtherQuery, archCPUOtherNotEql, "x86_64", "i386") + const coreCountQuery = "select data -> 'cpu'->>'count' from generalInfo where data -> 'cpu'->>'count' = $1" + result.CPU.Cores.One = count(coreCountQuery, "1") + result.CPU.Cores.Two = count(coreCountQuery, "2") + result.CPU.Cores.Three = count(coreCountQuery, "3") + result.CPU.Cores.Four = count(coreCountQuery, "4") + result.CPU.Cores.Six = count(coreCountQuery, "6") + result.CPU.Cores.Eight = count(coreCountQuery, "8") + + const coreCountOtherQuery = "select count( data -> 'cpu'->>'count') from generalInfo where " + const coreCountOtherNotEql = "data -> 'cpu'->>'count' !=" + result.CPU.Cores.Other = countOther(coreCountOtherQuery, coreCountOtherNotEql, "1", "2", "3", "4", "6", "8") + + const compilerTypeQuery = "select count(data->'compiler'->>'type') from generalInfo where data->'compiler'->>'type' = $1" + result.Compiler.Type.GCC = count(compilerTypeQuery, "GCC") + + const compilerTypeOtherQuery = "select count(data->'compiler'->>'type') from generalInfo where " + const compilerTypeOtherNotEql = "data->'compiler'->>'type' !=" + result.Compiler.Type.Other = countOther(compilerTypeOtherQuery, compilerTypeOtherNotEql, "GCC") + fmt.Println("BEFORE JSON") const insertQuery = "INSERT into agregatedInfo(data) VALUES($1)" b, err := json.Marshal(result) fmt.Println("SUCCESS JSON") fmt.Println(b) checkErr(err) _, err = Db.Exec(insertQuery, b) checkErr(err) } diff --git a/backend/goserver/server/models/collectModel.go b/backend/goserver/server/models/collectModel.go index 94c1862..1ec0bb3 100644 --- a/backend/goserver/server/models/collectModel.go +++ b/backend/goserver/server/models/collectModel.go @@ -1,28 +1,38 @@ package models type CollectedData struct { Platform struct { Os struct { Windows float64 Linux float64 Mac float64 Other float64 } } CPU struct { Architecture struct { X86_64 float64 X86 float64 //на самом деле x86_64 c маленькой буквы Other float64 } - // Cores struct { - // One float64 - // Two float64 - // Three float64 - // Four float64 - // Six float64 - // Eight float64 - // Other float64 - // } + Cores struct { + One float64 + Two float64 + Three float64 + Four float64 + Six float64 + Eight float64 + Other float64 + } + } + Compiler struct { + Type struct { + GCC float64 + Other float64 + } + Version struct { + V5dot4 float64 + Other float64 + } } }