chore: sync from fn-registry agent
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"embed"
|
||||
"fmt"
|
||||
|
||||
"fn-registry/functions/infra"
|
||||
)
|
||||
|
||||
//go:embed migrations/*.sql
|
||||
var migrationsFS embed.FS
|
||||
|
||||
type DB struct{ conn *sql.DB }
|
||||
|
||||
func openDB(path string) (*DB, error) {
|
||||
conn, err := infra.SQLiteOpen(path, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := infra.ApplyMigrations(conn, migrationsFS, "migrations/*.sql"); err != nil {
|
||||
conn.Close()
|
||||
return nil, fmt.Errorf("migrate: %w", err)
|
||||
}
|
||||
return &DB{conn: conn}, nil
|
||||
}
|
||||
|
||||
func (d *DB) Close() error { return d.conn.Close() }
|
||||
|
||||
type tableCount struct {
|
||||
Name string
|
||||
Rows int64
|
||||
}
|
||||
|
||||
func (d *DB) tableCounts() ([]tableCount, error) {
|
||||
tables := []string{"sessions", "calls", "code_writes", "test_runs", "e2e_runs_fn", "violations", "patterns", "function_versions", "copied_code"}
|
||||
out := make([]tableCount, 0, len(tables))
|
||||
for _, t := range tables {
|
||||
var n int64
|
||||
if err := d.conn.QueryRow("SELECT COUNT(*) FROM " + t).Scan(&n); err != nil {
|
||||
return nil, fmt.Errorf("count %s: %w", t, err)
|
||||
}
|
||||
out = append(out, tableCount{Name: t, Rows: n})
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
type funcStat struct {
|
||||
FunctionID string
|
||||
CallsTotal int64
|
||||
Calls7d int64
|
||||
ErrorsTotal int64
|
||||
ErrorRate float64
|
||||
MeanDurationMs float64
|
||||
LastUsedAt sql.NullInt64
|
||||
}
|
||||
|
||||
func (d *DB) topFunctions(limit int) ([]funcStat, error) {
|
||||
rows, err := d.conn.Query(`
|
||||
SELECT function_id, calls_total, calls_7d, errors_total, error_rate, mean_duration_ms, last_used_at
|
||||
FROM function_stats
|
||||
ORDER BY calls_total DESC
|
||||
LIMIT ?`, limit)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var out []funcStat
|
||||
for rows.Next() {
|
||||
var s funcStat
|
||||
if err := rows.Scan(&s.FunctionID, &s.CallsTotal, &s.Calls7d, &s.ErrorsTotal, &s.ErrorRate, &s.MeanDurationMs, &s.LastUsedAt); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out = append(out, s)
|
||||
}
|
||||
return out, rows.Err()
|
||||
}
|
||||
Reference in New Issue
Block a user