diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..cec9940 --- /dev/null +++ b/README.MD @@ -0,0 +1,2 @@ +# KDE krita backend and frontend servers. +[Official repository](https://cgit.kde.org/websites/telemetry-krita-org.git/) diff --git a/backend/goserver/goserver b/backend/goserver/goserver index 8c72b44..035856e 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 797775f..9a6e866 100644 --- a/backend/goserver/main.go +++ b/backend/goserver/main.go @@ -1,52 +1,55 @@ package main import ( "fmt" "io/ioutil" sw "kritaServers/backend/goserver/server" "net/http" + "time" ) type ColorGroup struct { ID int Name string Colors []string } func handlerInstall(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") - // fmt.Println(string(bodyBuffer)) + fmt.Println(string(bodyBuffer)) sw.InsertGeneralInfo(bodyBuffer) } func handlerTools(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) fmt.Printf("hadle tools!") bodyBuffer, _ := ioutil.ReadAll(r.Body) - fmt.Printf("after parse") - fmt.Println(string(bodyBuffer)) + //fmt.Printf("after parse") + //fmt.Println(string(bodyBuffer)) sw.InsertToolInfo(bodyBuffer) } -type Person struct { - Name string - Phone string -} - func main() { fmt.Printf("hello") sw.InitDB() defer sw.Session.Close() http.HandleFunc("/install/receiver/submit/org.krita.krita/", handlerInstall) http.HandleFunc("/tools/receiver/submit/org.krita.krita/", handlerTools) http.HandleFunc("/GoogleLogin", sw.HandleGoogleLogin) http.HandleFunc("/GoogleCallback", sw.HandleGoogleCallback) - + ticker := time.NewTicker(time.Second * 10) + + go func() { + for t := range ticker.C { + sw.AgregateInstalInfo() + fmt.Println("Tick at", t) + } + }() http.ListenAndServe(":8080", nil) } diff --git a/backend/goserver/server/agregateInfo.go b/backend/goserver/server/agregateInfo.go new file mode 100644 index 0000000..16b1b0f --- /dev/null +++ b/backend/goserver/server/agregateInfo.go @@ -0,0 +1,88 @@ +package server + +import ( + "fmt" + md "kritaServers/backend/goserver/server/models" + + "gopkg.in/mgo.v2/bson" +) + +func getFloat64(n int, err error) float64 { + checkErr(err) + return float64(n) +} +func checkOtherCount(count float64) float64 { + if count < 0 { + return 0 + } + return count + +} + +func AgregateInstalInfo() { + var result md.CollectedData + c := Session.DB("telemetry").C("installInfo") + //Some error takes place. We lose a little bit of data + countRecords := getFloat64(c.Find(bson.M{}).Count()) + + //compiler + result.Compiler.Type.GCC = getFloat64(c.Find(bson.M{"compiler.type": "GCC"}).Count()) + result.Compiler.Type.Clang = getFloat64(c.Find(bson.M{"compiler.type": "Clang"}).Count()) + result.Compiler.Type.MSVC = getFloat64(c.Find(bson.M{"compiler.type": "MSVC"}).Count()) + result.Compiler.Type.Other = countRecords - result.Compiler.Type.GCC - result.Compiler.Type.Clang - result.Compiler.Type.MSVC + result.Compiler.Type.Other = checkOtherCount(result.Compiler.Type.Other) + //os + result.Platform.Os.Linux = getFloat64(c.Find(bson.M{"platform.os": "linux"}).Count()) + result.Platform.Os.Windows = getFloat64(c.Find(bson.M{"platform.os": "windows"}).Count()) + result.Platform.Os.Mac = getFloat64(c.Find(bson.M{"platform.os": "mac"}).Count()) + result.Platform.Os.Other = countRecords - result.Platform.Os.Linux - result.Platform.Os.Windows - result.Platform.Os.Mac + result.Platform.Os.Other = checkOtherCount(result.Platform.Os.Other) + fmt.Println("LINUX") + fmt.Println(result.Platform.Os.Linux) + fmt.Println(result.Platform.Os.Other) + + //version os windows + result.Platform.Version.Windows.V7 = getFloat64(c.Find(bson.M{"platform.version": "7"}).Count()) + result.Platform.Version.Windows.V8 = getFloat64(c.Find(bson.M{"platform.version": "8"}).Count()) + result.Platform.Version.Windows.V81 = getFloat64(c.Find(bson.M{"platform.version": "8.1"}).Count()) + result.Platform.Version.Windows.V10 = getFloat64(c.Find(bson.M{"platform.version": "10"}).Count()) + result.Platform.Version.Windows.Other = result.Platform.Os.Windows - result.Platform.Version.Windows.V7 - result.Platform.Version.Windows.V8 - result.Platform.Version.Windows.V81 - result.Platform.Version.Windows.V10 + result.Platform.Version.Windows.Other = checkOtherCount(result.Platform.Version.Windows.Other) + + //version os linux + //не уверен, что именно так пишется нужные версии linux + result.Platform.Version.Linux.Ubuntu1404 = getFloat64(c.Find(bson.M{"platform.version": "ubuntu-14.04"}).Count()) + result.Platform.Version.Linux.Ubuntu1410 = getFloat64(c.Find(bson.M{"platform.version": "ubuntu-14.10"}).Count()) + result.Platform.Version.Linux.Ubuntu1504 = getFloat64(c.Find(bson.M{"platform.version": "ubuntu-15.04"}).Count()) + result.Platform.Version.Linux.Ubuntu1510 = getFloat64(c.Find(bson.M{"platform.version": "ubuntu-15.10"}).Count()) + result.Platform.Version.Linux.Ubuntu1604 = getFloat64(c.Find(bson.M{"platform.version": "ubuntu-16.04"}).Count()) + result.Platform.Version.Linux.Other = result.Platform.Os.Linux - result.Platform.Version.Linux.Ubuntu1404 - result.Platform.Version.Linux.Ubuntu1410 - result.Platform.Version.Linux.Ubuntu1504 - result.Platform.Version.Linux.Ubuntu1510 - result.Platform.Version.Linux.Ubuntu1604 - result.Platform.Version.Linux.Ubuntu1610 - result.Platform.Version.Linux.Ubuntu1704 + result.Platform.Version.Linux.Other = checkOtherCount(result.Platform.Version.Linux.Other) + + result.Platform.Version.Mac.V1012 = getFloat64(c.Find(bson.M{"platform.version": "10.12"}).Count()) + result.Platform.Version.Mac.Other = result.Platform.Os.Mac - result.Platform.Version.Mac.V1012 + result.Platform.Version.Mac.Other = checkOtherCount(result.Platform.Version.Linux.Other) + + //cpu + result.CPU.Architecture.X86_64 = getFloat64(c.Find(bson.M{"cpu.architecture": "x86_64"}).Count()) + result.CPU.Architecture.X86 = getFloat64(c.Find(bson.M{"cpu.architecture": "i386"}).Count()) + result.CPU.Architecture.Other = countRecords - result.CPU.Architecture.X86_64 - result.CPU.Architecture.X86 + result.CPU.Architecture.Other = checkOtherCount(result.CPU.Architecture.Other) + + result.CPU.Cores.C1 = getFloat64(c.Find(bson.M{"cpu.count": "1"}).Count()) + result.CPU.Cores.C2 = getFloat64(c.Find(bson.M{"cpu.count": "2"}).Count()) + result.CPU.Cores.C3 = getFloat64(c.Find(bson.M{"cpu.count": "3"}).Count()) + result.CPU.Cores.C4 = getFloat64(c.Find(bson.M{"cpu.count": "4"}).Count()) + result.CPU.Cores.C6 = getFloat64(c.Find(bson.M{"cpu.count": "6"}).Count()) + result.CPU.Cores.C8 = getFloat64(c.Find(bson.M{"cpu.count": "8"}).Count()) + result.CPU.Cores.Other = countRecords - result.CPU.Cores.C1 - result.CPU.Cores.C2 - result.CPU.Cores.C3 - result.CPU.Cores.C4 - result.CPU.Cores.C6 - result.CPU.Cores.C8 + + result.Locale.Language.English = getFloat64(c.Find(bson.M{"locale.language": "English"}).Count()) + result.Locale.Language.Russian = getFloat64(c.Find(bson.M{"locale.language": "Russian"}).Count()) + result.Locale.Language.Other = countRecords - result.Locale.Language.English - result.Locale.Language.Russian + result.Locale.Language.Other = checkOtherCount(result.Locale.Language.Other) + fmt.Println("COUNT OS UBUNTU") + fmt.Println(result.Platform.Version.Linux.Ubuntu1604) + fmt.Println(result.Platform.Version.Linux.Ubuntu1404) + +} diff --git a/backend/goserver/server/infsertInfo.go b/backend/goserver/server/infsertInfo.go index d4a384c..b490ea9 100644 --- a/backend/goserver/server/infsertInfo.go +++ b/backend/goserver/server/infsertInfo.go @@ -1,28 +1,28 @@ package server import ( "encoding/json" "fmt" md "kritaServers/backend/goserver/server/models" ) func InsertGeneralInfo(request []byte) { var model md.Request err := json.Unmarshal(request, &model) checkErr(err) c := Session.DB("telemetry").C("installInfo") c.Insert(model) fmt.Println("inserted info!") } func InsertToolInfo(request []byte) { var err error - var tools []md.Tool + var tools md.Tool err = json.Unmarshal(request, &tools) checkErr(err) c := Session.DB("telemetry").C("tools") c.Insert(tools) fmt.Println("inserted TOOL info!") } diff --git a/backend/goserver/server/models/collectModel.go b/backend/goserver/server/models/collectModel.go new file mode 100644 index 0000000..9b4e909 --- /dev/null +++ b/backend/goserver/server/models/collectModel.go @@ -0,0 +1,70 @@ +package models + +type CollectedData struct { + Platform struct { + Os struct { + Windows float64 + Linux float64 + Mac float64 + Other float64 + } + Version struct { + Windows struct { + V7 float64 + V8 float64 + V81 float64 + V10 float64 + Other float64 + } + Linux struct { + Ubuntu1404 float64 + Ubuntu1410 float64 + Ubuntu1504 float64 + Ubuntu1510 float64 + Ubuntu1604 float64 + Ubuntu1610 float64 + Ubuntu1704 float64 + Other float64 + } + Mac struct { + V1012 float64 + Other float64 + } + } + } + CPU struct { + Architecture struct { + X86_64 float64 + X86 float64 //на самом деле x86_64 c маленькой буквы + Other float64 + } + Cores struct { + C1 float64 + C2 float64 + C3 float64 + C4 float64 + C6 float64 + C8 float64 + Other float64 + } + } + Compiler struct { + Type struct { + GCC float64 + Clang float64 + MSVC float64 + Other float64 + } + // Version struct { //подумать что можно сделать + // V5dot4 float64 + // Other float64 + // } + } + Locale struct { + Language struct { + English float64 + Russian float64 + Other float64 + } + } +} diff --git a/backend/goserver/server/models/toolsInfo.go b/backend/goserver/server/models/toolsInfo.go index a65bfcb..9515a84 100644 --- a/backend/goserver/server/models/toolsInfo.go +++ b/backend/goserver/server/models/toolsInfo.go @@ -1,6 +1,10 @@ package models type Tool struct { - Time string `json:"timeUseSeconds"` - ToolName string `json:"toolname"` + Tools []ToolsInternal `json:"Tools"` +} +type ToolsInternal struct { + CountUse float64 `json:"countUse"` + Time float64 `json:"timeUseMSeconds"` + ToolName string `json:"toolName"` }