You've already forked speedtest-go
Migrate code from Go branch to new repo
This commit is contained in:
66
database/mysql/mysql.go
Normal file
66
database/mysql/mysql.go
Normal file
@ -0,0 +1,66 @@
|
||||
package mysql
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
|
||||
"github.com/librespeed/speedtest/database/schema"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
const (
|
||||
connectionStringTemplate = `%s:%s@%s/%s`
|
||||
)
|
||||
|
||||
type MySQL struct {
|
||||
db *sql.DB
|
||||
}
|
||||
|
||||
func Open(hostname, username, password, database string) *MySQL {
|
||||
connStr := fmt.Sprintf(connectionStringTemplate, username, password, hostname, database)
|
||||
conn, err := sql.Open("mysql", connStr)
|
||||
if err != nil {
|
||||
log.Fatalf("Cannot open MySQL database: %s", err)
|
||||
}
|
||||
return &MySQL{db: conn}
|
||||
}
|
||||
|
||||
func (p *MySQL) Insert(data *schema.TelemetryData) error {
|
||||
stmt := `INSERT INTO speedtest_users (ip, ispinfo, extra, ua, lang, dl, ul, ping, jitter, log, uuid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);`
|
||||
_, err := p.db.Exec(stmt, data.IPAddress, data.ISPInfo, data.Extra, data.UserAgent, data.Language, data.Download, data.Upload, data.Ping, data.Jitter, data.Log, data.UUID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *MySQL) FetchByUUID(uuid string) (*schema.TelemetryData, error) {
|
||||
var record schema.TelemetryData
|
||||
row := p.db.QueryRow(`SELECT * FROM speedtest_users WHERE uuid = ?`, uuid)
|
||||
if row != nil {
|
||||
var id string
|
||||
if err := row.Scan(&id, &record.Timestamp, &record.IPAddress, &record.ISPInfo, &record.Extra, &record.UserAgent, &record.Language, &record.Download, &record.Upload, &record.Ping, &record.Jitter, &record.Log, &record.UUID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return &record, nil
|
||||
}
|
||||
|
||||
func (p *MySQL) FetchLast100() ([]schema.TelemetryData, error) {
|
||||
var records []schema.TelemetryData
|
||||
rows, err := p.db.Query(`SELECT * FROM speedtest_users ORDER BY "timestamp" DESC LIMIT 100;`)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if rows != nil {
|
||||
var id string
|
||||
|
||||
for rows.Next() {
|
||||
var record schema.TelemetryData
|
||||
if err := rows.Scan(&id, &record.Timestamp, &record.IPAddress, &record.ISPInfo, &record.Extra, &record.UserAgent, &record.Language, &record.Download, &record.Upload, &record.Ping, &record.Jitter, &record.Log, &record.UUID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
records = append(records, record)
|
||||
}
|
||||
}
|
||||
return records, nil
|
||||
}
|
60
database/mysql/telemetry_mysql.sql
Normal file
60
database/mysql/telemetry_mysql.sql
Normal file
@ -0,0 +1,60 @@
|
||||
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||
SET AUTOCOMMIT = 0;
|
||||
START TRANSACTION;
|
||||
SET time_zone = "+00:00";
|
||||
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8mb4 */;
|
||||
|
||||
--
|
||||
-- Database: `speedtest_telemetry`
|
||||
--
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `speedtest_users`
|
||||
--
|
||||
|
||||
CREATE TABLE `speedtest_users` (
|
||||
`id` int(11) NOT NULL,
|
||||
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`ip` text NOT NULL,
|
||||
`ispinfo` text,
|
||||
`extra` text,
|
||||
`ua` text NOT NULL,
|
||||
`lang` text NOT NULL,
|
||||
`dl` text,
|
||||
`ul` text,
|
||||
`ping` text,
|
||||
`jitter` text,
|
||||
`log` longtext,
|
||||
`uuid` text
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
--
|
||||
-- Indexes for dumped tables
|
||||
--
|
||||
|
||||
--
|
||||
-- Indexes for table `speedtest_users`
|
||||
--
|
||||
ALTER TABLE `speedtest_users`
|
||||
ADD PRIMARY KEY (`id`);
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT for dumped tables
|
||||
--
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT for table `speedtest_users`
|
||||
--
|
||||
ALTER TABLE `speedtest_users`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;COMMIT;
|
||||
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
Reference in New Issue
Block a user