Skip to content

Commit 0311f1e

Browse files
committed
WIP format
1 parent 031d71e commit 0311f1e

File tree

3 files changed

+112
-112
lines changed

3 files changed

+112
-112
lines changed

coderd/database/dbauthz/dbauthz.go

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -645,25 +645,6 @@ func authorizedTemplateVersionFromJob(ctx context.Context, q *querier, job datab
645645
}
646646
}
647647

648-
func (q *querier) GetTemplateInsightsByInterval(ctx context.Context, arg database.GetTemplateInsightsByIntervalParams) ([]database.GetTemplateInsightsByIntervalRow, error) {
649-
for _, templateID := range arg.TemplateIDs {
650-
template, err := q.db.GetTemplateByID(ctx, templateID)
651-
if err != nil {
652-
return nil, err
653-
}
654-
655-
if err := q.authorizeContext(ctx, rbac.ActionUpdate, template); err != nil {
656-
return nil, err
657-
}
658-
}
659-
if len(arg.TemplateIDs) == 0 {
660-
if err := q.authorizeContext(ctx, rbac.ActionUpdate, rbac.ResourceTemplate.All()); err != nil {
661-
return nil, err
662-
}
663-
}
664-
return q.db.GetTemplateInsightsByInterval(ctx, arg)
665-
}
666-
667648
func (q *querier) AcquireLock(ctx context.Context, id int64) error {
668649
return q.db.AcquireLock(ctx, id)
669650
}
@@ -1285,6 +1266,25 @@ func (q *querier) GetTemplateInsights(ctx context.Context, arg database.GetTempl
12851266
return q.db.GetTemplateInsights(ctx, arg)
12861267
}
12871268

1269+
func (q *querier) GetTemplateInsightsByInterval(ctx context.Context, arg database.GetTemplateInsightsByIntervalParams) ([]database.GetTemplateInsightsByIntervalRow, error) {
1270+
for _, templateID := range arg.TemplateIDs {
1271+
template, err := q.db.GetTemplateByID(ctx, templateID)
1272+
if err != nil {
1273+
return nil, err
1274+
}
1275+
1276+
if err := q.authorizeContext(ctx, rbac.ActionUpdate, template); err != nil {
1277+
return nil, err
1278+
}
1279+
}
1280+
if len(arg.TemplateIDs) == 0 {
1281+
if err := q.authorizeContext(ctx, rbac.ActionUpdate, rbac.ResourceTemplate.All()); err != nil {
1282+
return nil, err
1283+
}
1284+
}
1285+
return q.db.GetTemplateInsightsByInterval(ctx, arg)
1286+
}
1287+
12881288
func (q *querier) GetTemplateParameterInsights(ctx context.Context, arg database.GetTemplateParameterInsightsParams) ([]database.GetTemplateParameterInsightsRow, error) {
12891289
for _, templateID := range arg.TemplateIDs {
12901290
template, err := q.db.GetTemplateByID(ctx, templateID)

coderd/database/dbfake/dbfake.go

Lines changed: 86 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -692,92 +692,6 @@ func minTime(t, u time.Time) time.Time {
692692
return u
693693
}
694694

695-
func (q *FakeQuerier) GetTemplateInsightsByInterval(ctx context.Context, arg database.GetTemplateInsightsByIntervalParams) ([]database.GetTemplateInsightsByIntervalRow, error) {
696-
err := validateDatabaseType(arg)
697-
if err != nil {
698-
return nil, err
699-
}
700-
701-
q.mutex.RLock()
702-
defer q.mutex.RUnlock()
703-
704-
type dailyStat struct {
705-
startTime, endTime time.Time
706-
userSet map[uuid.UUID]struct{}
707-
templateIDSet map[uuid.UUID]struct{}
708-
}
709-
dailyStats := []dailyStat{{arg.StartTime, arg.StartTime.AddDate(0, 0, 1), make(map[uuid.UUID]struct{}), make(map[uuid.UUID]struct{})}}
710-
for dailyStats[len(dailyStats)-1].endTime.Before(arg.EndTime) {
711-
dailyStats = append(dailyStats, dailyStat{dailyStats[len(dailyStats)-1].endTime, dailyStats[len(dailyStats)-1].endTime.AddDate(0, 0, 1), make(map[uuid.UUID]struct{}), make(map[uuid.UUID]struct{})})
712-
}
713-
if dailyStats[len(dailyStats)-1].endTime.After(arg.EndTime) {
714-
dailyStats[len(dailyStats)-1].endTime = arg.EndTime
715-
}
716-
717-
for _, s := range q.workspaceAgentStats {
718-
if s.CreatedAt.Before(arg.StartTime) || s.CreatedAt.Equal(arg.EndTime) || s.CreatedAt.After(arg.EndTime) {
719-
continue
720-
}
721-
if len(arg.TemplateIDs) > 0 && !slices.Contains(arg.TemplateIDs, s.TemplateID) {
722-
continue
723-
}
724-
if s.ConnectionCount == 0 {
725-
continue
726-
}
727-
728-
for _, ds := range dailyStats {
729-
if s.CreatedAt.Before(ds.startTime) || s.CreatedAt.Equal(ds.endTime) || s.CreatedAt.After(ds.endTime) {
730-
continue
731-
}
732-
ds.userSet[s.UserID] = struct{}{}
733-
ds.templateIDSet[s.TemplateID] = struct{}{}
734-
}
735-
}
736-
737-
for _, s := range q.workspaceAppStats {
738-
w, err := q.getWorkspaceByIDNoLock(ctx, s.WorkspaceID)
739-
if err != nil {
740-
return nil, err
741-
}
742-
743-
if len(arg.TemplateIDs) > 0 && !slices.Contains(arg.TemplateIDs, w.TemplateID) {
744-
continue
745-
}
746-
747-
for _, ds := range dailyStats {
748-
// (was.session_started_at >= ts.from_ AND was.session_started_at < ts.to_)
749-
// OR (was.session_ended_at > ts.from_ AND was.session_ended_at < ts.to_)
750-
// OR (was.session_started_at < ts.from_ AND was.session_ended_at >= ts.to_)
751-
if !(((s.SessionStartedAt.After(ds.startTime) || s.SessionStartedAt.Equal(ds.startTime)) && s.SessionStartedAt.Before(ds.endTime)) ||
752-
(s.SessionEndedAt.After(ds.startTime) && s.SessionEndedAt.Before(ds.endTime)) ||
753-
(s.SessionStartedAt.Before(ds.startTime) && (s.SessionEndedAt.After(ds.endTime) || s.SessionEndedAt.Equal(ds.endTime)))) {
754-
continue
755-
}
756-
757-
ds.userSet[s.UserID] = struct{}{}
758-
ds.templateIDSet[w.TemplateID] = struct{}{}
759-
}
760-
}
761-
762-
var result []database.GetTemplateInsightsByIntervalRow
763-
for _, ds := range dailyStats {
764-
templateIDs := make([]uuid.UUID, 0, len(ds.templateIDSet))
765-
for templateID := range ds.templateIDSet {
766-
templateIDs = append(templateIDs, templateID)
767-
}
768-
slices.SortFunc(templateIDs, func(a, b uuid.UUID) int {
769-
return slice.Ascending(a.String(), b.String())
770-
})
771-
result = append(result, database.GetTemplateInsightsByIntervalRow{
772-
StartTime: ds.startTime,
773-
EndTime: ds.endTime,
774-
TemplateIDs: templateIDs,
775-
ActiveUsers: int64(len(ds.userSet)),
776-
})
777-
}
778-
return result, nil
779-
}
780-
781695
func (*FakeQuerier) AcquireLock(_ context.Context, _ int64) error {
782696
return xerrors.New("AcquireLock must only be called within a transaction")
783697
}
@@ -2495,6 +2409,92 @@ func (q *FakeQuerier) GetTemplateInsights(_ context.Context, arg database.GetTem
24952409
return result, nil
24962410
}
24972411

2412+
func (q *FakeQuerier) GetTemplateInsightsByInterval(ctx context.Context, arg database.GetTemplateInsightsByIntervalParams) ([]database.GetTemplateInsightsByIntervalRow, error) {
2413+
err := validateDatabaseType(arg)
2414+
if err != nil {
2415+
return nil, err
2416+
}
2417+
2418+
q.mutex.RLock()
2419+
defer q.mutex.RUnlock()
2420+
2421+
type dailyStat struct {
2422+
startTime, endTime time.Time
2423+
userSet map[uuid.UUID]struct{}
2424+
templateIDSet map[uuid.UUID]struct{}
2425+
}
2426+
dailyStats := []dailyStat{{arg.StartTime, arg.StartTime.AddDate(0, 0, 1), make(map[uuid.UUID]struct{}), make(map[uuid.UUID]struct{})}}
2427+
for dailyStats[len(dailyStats)-1].endTime.Before(arg.EndTime) {
2428+
dailyStats = append(dailyStats, dailyStat{dailyStats[len(dailyStats)-1].endTime, dailyStats[len(dailyStats)-1].endTime.AddDate(0, 0, 1), make(map[uuid.UUID]struct{}), make(map[uuid.UUID]struct{})})
2429+
}
2430+
if dailyStats[len(dailyStats)-1].endTime.After(arg.EndTime) {
2431+
dailyStats[len(dailyStats)-1].endTime = arg.EndTime
2432+
}
2433+
2434+
for _, s := range q.workspaceAgentStats {
2435+
if s.CreatedAt.Before(arg.StartTime) || s.CreatedAt.Equal(arg.EndTime) || s.CreatedAt.After(arg.EndTime) {
2436+
continue
2437+
}
2438+
if len(arg.TemplateIDs) > 0 && !slices.Contains(arg.TemplateIDs, s.TemplateID) {
2439+
continue
2440+
}
2441+
if s.ConnectionCount == 0 {
2442+
continue
2443+
}
2444+
2445+
for _, ds := range dailyStats {
2446+
if s.CreatedAt.Before(ds.startTime) || s.CreatedAt.Equal(ds.endTime) || s.CreatedAt.After(ds.endTime) {
2447+
continue
2448+
}
2449+
ds.userSet[s.UserID] = struct{}{}
2450+
ds.templateIDSet[s.TemplateID] = struct{}{}
2451+
}
2452+
}
2453+
2454+
for _, s := range q.workspaceAppStats {
2455+
w, err := q.getWorkspaceByIDNoLock(ctx, s.WorkspaceID)
2456+
if err != nil {
2457+
return nil, err
2458+
}
2459+
2460+
if len(arg.TemplateIDs) > 0 && !slices.Contains(arg.TemplateIDs, w.TemplateID) {
2461+
continue
2462+
}
2463+
2464+
for _, ds := range dailyStats {
2465+
// (was.session_started_at >= ts.from_ AND was.session_started_at < ts.to_)
2466+
// OR (was.session_ended_at > ts.from_ AND was.session_ended_at < ts.to_)
2467+
// OR (was.session_started_at < ts.from_ AND was.session_ended_at >= ts.to_)
2468+
if !(((s.SessionStartedAt.After(ds.startTime) || s.SessionStartedAt.Equal(ds.startTime)) && s.SessionStartedAt.Before(ds.endTime)) ||
2469+
(s.SessionEndedAt.After(ds.startTime) && s.SessionEndedAt.Before(ds.endTime)) ||
2470+
(s.SessionStartedAt.Before(ds.startTime) && (s.SessionEndedAt.After(ds.endTime) || s.SessionEndedAt.Equal(ds.endTime)))) {
2471+
continue
2472+
}
2473+
2474+
ds.userSet[s.UserID] = struct{}{}
2475+
ds.templateIDSet[w.TemplateID] = struct{}{}
2476+
}
2477+
}
2478+
2479+
var result []database.GetTemplateInsightsByIntervalRow
2480+
for _, ds := range dailyStats {
2481+
templateIDs := make([]uuid.UUID, 0, len(ds.templateIDSet))
2482+
for templateID := range ds.templateIDSet {
2483+
templateIDs = append(templateIDs, templateID)
2484+
}
2485+
slices.SortFunc(templateIDs, func(a, b uuid.UUID) int {
2486+
return slice.Ascending(a.String(), b.String())
2487+
})
2488+
result = append(result, database.GetTemplateInsightsByIntervalRow{
2489+
StartTime: ds.startTime,
2490+
EndTime: ds.endTime,
2491+
TemplateIDs: templateIDs,
2492+
ActiveUsers: int64(len(ds.userSet)),
2493+
})
2494+
}
2495+
return result, nil
2496+
}
2497+
24982498
func (q *FakeQuerier) GetTemplateParameterInsights(ctx context.Context, arg database.GetTemplateParameterInsightsParams) ([]database.GetTemplateParameterInsightsRow, error) {
24992499
err := validateDatabaseType(arg)
25002500
if err != nil {

coderd/database/dbmetrics/dbmetrics.go

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)