Skip to content

Commit eb1c042

Browse files
committed
Ensure no null responses
1 parent 0a9f6fc commit eb1c042

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

coderd/metrics.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,11 @@ func (api *API) daus(rw http.ResponseWriter, r *http.Request) {
2525
httpapi.Forbidden(rw)
2626
return
2727
}
28-
29-
httpapi.Write(rw, http.StatusOK, api.metricsCache.GetDAUs())
28+
resp := api.metricsCache.GetDAUs()
29+
if resp.Entries == nil {
30+
resp.Entries = []codersdk.DAUEntry{}
31+
}
32+
httpapi.Write(rw, http.StatusOK, resp)
3033
}
3134

3235
const AgentStatIntervalEnv = "CODER_AGENT_STAT_INTERVAL_MS"

coderd/metrics_test.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ func init() {
2727
}
2828
func TestWorkspaceReportStats(t *testing.T) {
2929
t.Parallel()
30+
3031
client := coderdtest.New(t, &coderdtest.Options{
3132
IncludeProvisionerD: true,
3233
})
@@ -76,6 +77,13 @@ func TestWorkspaceReportStats(t *testing.T) {
7677
Logger: slogtest.Make(t, nil).Named("client"),
7778
}
7879

80+
daus, err := client.GetDAUsFromAgentStats(context.Background())
81+
require.NoError(t, err)
82+
83+
require.Equal(t, &codersdk.GetDAUsResponse{
84+
Entries: []codersdk.DAUEntry{},
85+
}, daus, "no DAUs when stats are empty")
86+
7987
conn, err := client.DialWorkspaceAgent(ctx, resources[0].Agents[0].ID, opts)
8088
require.NoError(t, err)
8189
defer func() {
@@ -95,7 +103,7 @@ func TestWorkspaceReportStats(t *testing.T) {
95103
// and metrics cache to refresh.
96104
time.Sleep(time.Second * 5)
97105

98-
daus, err := client.GetDAUsFromAgentStats(context.Background())
106+
daus, err = client.GetDAUsFromAgentStats(context.Background())
99107
require.NoError(t, err)
100108

101109
require.Equal(t, &codersdk.GetDAUsResponse{

site/src/pages/UsersPage/DAUChart.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ import { HelpTooltip, HelpTooltipText, HelpTooltipTitle } from "components/Toolt
3131
ChartJS.register(CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend)
3232

3333
export const DAUChart: FC<DAUChartProps> = ({ userMetricsData }) => {
34+
if (userMetricsData.entries.length === 0) {
35+
return <p>DAU stats are loading. Check back later.</p>
36+
}
3437
const theme: Theme = useTheme()
3538

3639
const labels = userMetricsData.entries.map((val) => {

0 commit comments

Comments
 (0)