Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3834089

Browse files
committed
Revert "feat(coderd/database): rewriteGetTemplateAppInsightsByTemplate to usetemplate_usage_stats"
This reverts commit 7502e72ee35127b7705deb5845ec00bc438b2404.
1 parent3a76148 commit3834089

File tree

4 files changed

+95
-105
lines changed

4 files changed

+95
-105
lines changed

‎coderd/database/dbmem/dbmem.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3280,7 +3280,7 @@ func (q *FakeQuerier) GetTemplateAppInsightsByTemplate(ctx context.Context, arg
32803280
for_,usageKey:=rangeusageKeys {
32813281
r:= database.GetTemplateAppInsightsByTemplateRow{
32823282
TemplateID:usageKey.TemplateID,
3283-
DisplayName:usageKey.DisplayName,
3283+
DisplayName:sql.NullString{String:usageKey.DisplayName,Valid:true},
32843284
SlugOrPort:usageKey.Slug,
32853285
}
32863286
for_,mUserUsage:=rangeusageByTemplateAppUser[usageKey] {

‎coderd/database/queries.sql.go

Lines changed: 50 additions & 55 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries/insights.sql

Lines changed: 43 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -294,56 +294,51 @@ GROUP BY
294294
t.template_ids,ai.app_name,ai.display_name,ai.icon,ai.is_app;
295295

296296
-- name: GetTemplateAppInsightsByTemplate :many
297-
SELECT
298-
tus.template_id,
299-
COUNT(DISTINCTtus.user_id)AS active_users,
300-
app_usage.key::textAS slug_or_port,
301-
COALESCE(wa.display_name,'')AS display_name,
302-
(SUM(app_usage.value::int)*60)::bigintAS usage_seconds
303-
FROM
304-
template_usage_statsAS tus, jsonb_each(app_usage_mins)AS app_usage
305-
LEFT JOIN LATERAL (
306-
-- The joins in this query are necessary to associate an app with a
307-
-- template, we use this to get the app metadata like display name
308-
-- and icon.
297+
WITH app_stats_by_user_and_agentAS (
309298
SELECT
310-
app.display_name,
311-
app.slug
312-
FROM
313-
workspace_appsAS app
314-
JOIN
315-
workspace_agentsAS agent
316-
ON
317-
agent.id=app.agent_id
318-
JOIN
319-
workspace_resourcesAS resource
320-
ON
321-
resource.id=agent.resource_id
322-
JOIN
323-
workspace_buildsAS build
324-
ON
325-
build.job_id=resource.job_id
326-
JOIN
327-
workspacesAS workspace
328-
ON
329-
workspace.id=build.workspace_id
299+
s.start_time,
300+
60as seconds,
301+
w.template_id,
302+
was.user_id,
303+
was.agent_id,
304+
was.slug_or_port,
305+
wa.display_name,
306+
(wa.slugIS NOT NULL)::booleanAS is_app
307+
FROM workspace_app_stats was
308+
JOIN workspaces wON (
309+
w.id=was.workspace_id
310+
)
311+
-- We do a left join here because we want to include user IDs that have used
312+
-- e.g. ports when counting active users.
313+
LEFT JOIN workspace_apps waON (
314+
wa.agent_id=was.agent_id
315+
ANDwa.slug=was.slug_or_port
316+
)
317+
-- This table contains both 1 minute entries and >1 minute entries,
318+
-- to calculate this with our uniqueness constraints, we generate series
319+
-- for the longer intervals.
320+
CROSS JOIN LATERAL generate_series(
321+
date_trunc('minute',was.session_started_at),
322+
-- Subtract 1 microsecond to avoid creating an extra series.
323+
date_trunc('minute',was.session_ended_at-'1 microsecond'::interval),
324+
'1 minute'::interval
325+
) s(start_time)
330326
WHERE
331-
-- Requires lateral join.
332-
app.slug=app_usage.key
333-
ANDworkspace.owner_id=tus.user_id
334-
ANDworkspace.template_id=tus.template_id
335-
ORDER BY
336-
app.created_atDESC
337-
LIMIT1
338-
) wa
339-
ON
340-
true
341-
WHERE
342-
tus.start_time>= @start_time::timestamptz
343-
ANDtus.end_time<= @end_time::timestamptz
344-
ANDwa.slugIS NOT NULL-- Check is_app.
345-
GROUP BY
346-
tus.template_id,app_usage.key::text,wa.display_name;
327+
s.start_time>= @start_time::timestamptz
328+
-- Subtract one minute because the series only contains the start time.
329+
ANDs.start_time< (@end_time::timestamptz)-'1 minute'::interval
330+
GROUP BYs.start_time,w.template_id,was.user_id,was.agent_id,was.slug_or_port,wa.display_name,wa.slug
331+
)
332+
333+
SELECT
334+
template_id,
335+
display_name,
336+
slug_or_port,
337+
COALESCE(COUNT(DISTINCT user_id))::bigintAS active_users,
338+
SUM(seconds)AS usage_seconds
339+
FROM app_stats_by_user_and_agent
340+
WHERE is_app IS TRUE
341+
GROUP BY template_id, display_name, slug_or_port;
347342

348343
-- name: GetTemplateInsightsByInterval :many
349344
-- GetTemplateInsightsByInterval returns all intervals between start and end

‎coderd/prometheusmetrics/insights/metricscollector.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ func (mc *MetricsCollector) Collect(metricsCh chan<- prometheus.Metric) {
194194
// Custom apps
195195
for_,appRow:=rangedata.apps {
196196
metricsCh<-prometheus.MustNewConstMetric(applicationsUsageSecondsDesc,prometheus.GaugeValue,float64(appRow.UsageSeconds),data.templateNames[appRow.TemplateID],
197-
appRow.DisplayName,appRow.SlugOrPort)
197+
appRow.DisplayName.String,appRow.SlugOrPort)
198198
}
199199

200200
// Built-in apps

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp