// get the output of I_S.PROCESSLIST func selectRows(dbh *sql.DB) Rows { var t Rows var id sql.NullInt64 var user sql.NullString var host sql.NullString var db sql.NullString var command sql.NullString var time sql.NullInt64 var state sql.NullString var info sql.NullString // we collect all information even if it's mainly empty as we may reference it later sql := "SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO FROM INFORMATION_SCHEMA.PROCESSLIST" rows, err := dbh.Query(sql) if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var r Row if err := rows.Scan( &id, &user, &host, &db, &command, &time, &state, &info); err != nil { log.Fatal(err) } r.ID = uint64(id.Int64) // be verbose for debugging. u := user.String a := anonymiser.Anonymise("user", user.String) logger.Println("user:"******", anonymised:", a) r.user = a r.host = host.String if db.Valid { r.db = db.String } r.command = command.String r.time = uint64(time.Int64) if state.Valid { r.state = state.String } r.info = info.String t = append(t, r) } if err := rows.Err(); err != nil { log.Fatal(err) } return t }
// TableName returns the table name from the columns as '<schema>.<table>' func TableName(schema, table string) string { schema = anonymiser.Anonymise("schema", schema) table = anonymiser.Anonymise("table", table) var name string if len(schema) > 0 { name += schema } if len(name) > 0 { if len(table) > 0 { name += "." + table } } else { if len(table) > 0 { name += table } } return name }