@@ -2073,7 +2073,92 @@ func (q *FakeQuerier) GetTemplateParameterInsights(ctx context.Context, arg data
2073
2073
return nil , err
2074
2074
}
2075
2075
2076
- panic ("not implemented" )
2076
+ q .mutex .RLock ()
2077
+ defer q .mutex .RUnlock ()
2078
+
2079
+ // WITH latest_workspace_builds ...
2080
+ latestWorkspaceBuilds := make (map [uuid.UUID ]database.WorkspaceBuild )
2081
+ for _ , wb := range q .workspaceBuilds {
2082
+ if wb .CreatedAt .Before (arg .StartTime ) || wb .CreatedAt .Equal (arg .EndTime ) || wb .CreatedAt .After (arg .EndTime ) {
2083
+ continue
2084
+ }
2085
+ if latestWorkspaceBuilds [wb .WorkspaceID ].BuildNumber < wb .BuildNumber {
2086
+ latestWorkspaceBuilds [wb .WorkspaceID ] = wb
2087
+ }
2088
+ }
2089
+ if len (arg .TemplateIDs ) > 0 {
2090
+ for wsID := range latestWorkspaceBuilds {
2091
+ ws , err := q .getWorkspaceByIDNoLock (ctx , wsID )
2092
+ if err != nil {
2093
+ return nil , err
2094
+ }
2095
+ if slices .Contains (arg .TemplateIDs , ws .TemplateID ) {
2096
+ delete (latestWorkspaceBuilds , wsID )
2097
+ }
2098
+ }
2099
+ }
2100
+ // WITH unique_template_params ...
2101
+ num := int64 (0 )
2102
+ uniqueTemplateParams := make (map [string ]* database.GetTemplateParameterInsightsRow )
2103
+ uniqueTemplateParamWorkspaceBuildIDs := make (map [string ][]uuid.UUID )
2104
+ for _ , wb := range latestWorkspaceBuilds {
2105
+ tv , err := q .getTemplateVersionByIDNoLock (ctx , wb .TemplateVersionID )
2106
+ if err != nil {
2107
+ return nil , err
2108
+ }
2109
+ for _ , tvp := range q .templateVersionParameters {
2110
+ if tvp .TemplateVersionID != tv .ID {
2111
+ continue
2112
+ }
2113
+ key := fmt .Sprintf ("%s:%s:%s:%s" , tvp .Name , tvp .DisplayName , tvp .Description , tvp .Options )
2114
+ if _ , ok := uniqueTemplateParams [key ]; ! ok {
2115
+ num ++
2116
+ uniqueTemplateParams [key ] = & database.GetTemplateParameterInsightsRow {
2117
+ Num : num ,
2118
+ Name : tvp .Name ,
2119
+ DisplayName : tvp .DisplayName ,
2120
+ Description : tvp .Description ,
2121
+ Options : tvp .Options ,
2122
+ }
2123
+ }
2124
+ uniqueTemplateParams [key ].TemplateIDs = append (uniqueTemplateParams [key ].TemplateIDs , tv .TemplateID .UUID )
2125
+ uniqueTemplateParamWorkspaceBuildIDs [key ] = append (uniqueTemplateParamWorkspaceBuildIDs [key ], wb .ID )
2126
+ }
2127
+ }
2128
+ // SELECT ...
2129
+ counts := make (map [string ]map [string ]int64 )
2130
+ for key , utp := range uniqueTemplateParams {
2131
+ for _ , wbp := range q .workspaceBuildParameters {
2132
+ if ! slices .Contains (uniqueTemplateParamWorkspaceBuildIDs [key ], wbp .WorkspaceBuildID ) {
2133
+ continue
2134
+ }
2135
+ if wbp .Name != utp .Name {
2136
+ continue
2137
+ }
2138
+ if counts [key ] == nil {
2139
+ counts [key ] = make (map [string ]int64 )
2140
+ }
2141
+ counts [key ][wbp.Value ]++
2142
+ }
2143
+ }
2144
+
2145
+ var rows []database.GetTemplateParameterInsightsRow
2146
+ for key , utp := range uniqueTemplateParams {
2147
+ for value , count := range counts [key ] {
2148
+ rows = append (rows , database.GetTemplateParameterInsightsRow {
2149
+ Num : utp .Num ,
2150
+ TemplateIDs : utp .TemplateIDs ,
2151
+ Name : utp .Name ,
2152
+ DisplayName : utp .DisplayName ,
2153
+ Description : utp .Description ,
2154
+ Options : utp .Options ,
2155
+ Value : value ,
2156
+ Count : count ,
2157
+ })
2158
+ }
2159
+ }
2160
+
2161
+ return rows , nil
2077
2162
}
2078
2163
2079
2164
func (q * FakeQuerier ) GetTemplateVersionByID (ctx context.Context , templateVersionID uuid.UUID ) (database.TemplateVersion , error ) {
0 commit comments