mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: add connection statistics for workspace agents (#6469)
* fix: don't make session counts cumulative This made for some weird tracking... we want the point-in-time number of counts! * Add databasefake query for getting agent stats * Add deployment stats endpoint * The query... works?!? * Fix aggregation query * Select from multiple tables instead * Fix continuous stats * Increase period of stat refreshes * Add workspace counts to deployment stats * fmt * Add a slight bit of responsiveness * Fix template version editor overflow * Add refresh button * Fix font family on button * Fix latest stat being reported * Revert agent conn stats * Fix linting error * Fix tests * Fix gen * Fix migrations * Block on sending stat updates * Add test fixtures * Fix response structure * make gen
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
//go:build linux
|
||||
|
||||
package database_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/coder/coder/coderd/database"
|
||||
"github.com/coder/coder/coderd/database/dbgen"
|
||||
"github.com/coder/coder/coderd/database/migrations"
|
||||
)
|
||||
|
||||
func TestGetDeploymentWorkspaceAgentStats(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Run("Aggregates", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
sqlDB := testSQLDB(t)
|
||||
err := migrations.Up(sqlDB)
|
||||
require.NoError(t, err)
|
||||
db := database.New(sqlDB)
|
||||
ctx := context.Background()
|
||||
dbgen.WorkspaceAgentStat(t, db, database.WorkspaceAgentStat{
|
||||
TxBytes: 1,
|
||||
RxBytes: 1,
|
||||
ConnectionMedianLatencyMS: 1,
|
||||
SessionCountVSCode: 1,
|
||||
})
|
||||
dbgen.WorkspaceAgentStat(t, db, database.WorkspaceAgentStat{
|
||||
TxBytes: 1,
|
||||
RxBytes: 1,
|
||||
ConnectionMedianLatencyMS: 2,
|
||||
SessionCountVSCode: 1,
|
||||
})
|
||||
stats, err := db.GetDeploymentWorkspaceAgentStats(ctx, database.Now().Add(-time.Hour))
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, int64(2), stats.WorkspaceTxBytes)
|
||||
require.Equal(t, int64(2), stats.WorkspaceRxBytes)
|
||||
require.Equal(t, 1.5, stats.WorkspaceConnectionLatency50)
|
||||
require.Equal(t, 1.95, stats.WorkspaceConnectionLatency95)
|
||||
require.Equal(t, int64(2), stats.SessionCountVSCode)
|
||||
})
|
||||
|
||||
t.Run("GroupsByAgentID", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
sqlDB := testSQLDB(t)
|
||||
err := migrations.Up(sqlDB)
|
||||
require.NoError(t, err)
|
||||
db := database.New(sqlDB)
|
||||
ctx := context.Background()
|
||||
agentID := uuid.New()
|
||||
insertTime := database.Now()
|
||||
dbgen.WorkspaceAgentStat(t, db, database.WorkspaceAgentStat{
|
||||
CreatedAt: insertTime.Add(-time.Second),
|
||||
AgentID: agentID,
|
||||
TxBytes: 1,
|
||||
RxBytes: 1,
|
||||
ConnectionMedianLatencyMS: 1,
|
||||
SessionCountVSCode: 1,
|
||||
})
|
||||
dbgen.WorkspaceAgentStat(t, db, database.WorkspaceAgentStat{
|
||||
// Ensure this stat is newer!
|
||||
CreatedAt: insertTime,
|
||||
AgentID: agentID,
|
||||
TxBytes: 1,
|
||||
RxBytes: 1,
|
||||
ConnectionMedianLatencyMS: 2,
|
||||
SessionCountVSCode: 1,
|
||||
})
|
||||
stats, err := db.GetDeploymentWorkspaceAgentStats(ctx, database.Now().Add(-time.Hour))
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, int64(2), stats.WorkspaceTxBytes)
|
||||
require.Equal(t, int64(2), stats.WorkspaceRxBytes)
|
||||
require.Equal(t, 1.5, stats.WorkspaceConnectionLatency50)
|
||||
require.Equal(t, 1.95, stats.WorkspaceConnectionLatency95)
|
||||
require.Equal(t, int64(1), stats.SessionCountVSCode)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user