Added struct StatForTime
This commit is contained in:
68
src/main.go
68
src/main.go
@@ -2,6 +2,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"database/sql"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
@@ -10,13 +11,22 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
_ "github.com/mattn/go-sqlite3"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SLEEP_TIME = 3 * time.Second
|
SLEEP_TIME = 3 * time.Second
|
||||||
KEYBOARD_BUFER_SIZE = 10000
|
KEYBOARD_BUFER_SIZE = 10000
|
||||||
|
DATABASE_NAME = "./gokeystat.db"
|
||||||
|
CAPTURE_TIME = 5 * time.Second // time between capturing keyboard to db
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type StatForTime struct {
|
||||||
|
time int
|
||||||
|
keys map[string]int
|
||||||
|
}
|
||||||
|
|
||||||
// Return map from key numbers to key names like "F1", "Tab", "d"
|
// Return map from key numbers to key names like "F1", "Tab", "d"
|
||||||
func GetKeymap() map[uint8]string {
|
func GetKeymap() map[uint8]string {
|
||||||
return GetKeymapFromOutput(GetKeymapOutput())
|
return GetKeymapFromOutput(GetKeymapOutput())
|
||||||
@@ -66,9 +76,52 @@ func GetKeyNumsFromOutput(buf []byte) []uint8 {
|
|||||||
return keyNums
|
return keyNums
|
||||||
}
|
}
|
||||||
|
|
||||||
type StatForTime struct {
|
func InitDb(db *sql.DB, keyMap map[uint8]string) {
|
||||||
time int
|
keyNums := make([]int, 0, len(keyMap))
|
||||||
keys map[string]int
|
for keyNum := range keyMap {
|
||||||
|
keyNums = append(keyNums, int(keyNum))
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlInit := `CREATE TABLE IF NOT EXISTS keylog (
|
||||||
|
time INTEGER primary key`
|
||||||
|
|
||||||
|
for keyNum := range keyNums {
|
||||||
|
sqlInit += ",\n" + "KEY" + strconv.Itoa(keyNum) + " INTEGER"
|
||||||
|
}
|
||||||
|
sqlInit += "\n);"
|
||||||
|
_, err := db.Exec(sqlInit)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%q: %s\n", err, sqlInit)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inserting keymap to table
|
||||||
|
sqlInit = `CREATE TABLE IF NOT EXISTS keymap (
|
||||||
|
num INTEGER primary key,
|
||||||
|
value STRING
|
||||||
|
);`
|
||||||
|
|
||||||
|
_, err = db.Exec(sqlInit)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%q: %s\n", err, sqlInit)
|
||||||
|
}
|
||||||
|
|
||||||
|
tx, err := db.Begin()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
stmt, err := tx.Prepare("insert into keymap(num, value) values(?, ?)")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer stmt.Close()
|
||||||
|
|
||||||
|
for keyNum, keyName := range keyMap {
|
||||||
|
_, err = stmt.Exec(keyNum, keyName)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tx.Commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -82,6 +135,15 @@ func main() {
|
|||||||
flag.PrintDefaults()
|
flag.PrintDefaults()
|
||||||
return
|
return
|
||||||
case *keyboardId != -1:
|
case *keyboardId != -1:
|
||||||
|
// Opening database
|
||||||
|
db, err := sql.Open("sqlite3", DATABASE_NAME)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer db.Close()
|
||||||
|
keyMap := GetKeymap()
|
||||||
|
|
||||||
|
InitDb(db, keyMap)
|
||||||
cmd := exec.Command("xinput", "test", strconv.Itoa(*keyboardId))
|
cmd := exec.Command("xinput", "test", strconv.Itoa(*keyboardId))
|
||||||
|
|
||||||
stdout, err := cmd.StdoutPipe()
|
stdout, err := cmd.StdoutPipe()
|
||||||
|
|||||||
Reference in New Issue
Block a user