@@ -1323,6 +1323,18 @@ func (db *Database) MaximumUserReportTimeout() (time.Duration, error) {
1323
1323
return timeout , nil
1324
1324
}
1325
1325
1326
+ func (db * Database ) FindE2ETestRealm () (* Realm , error ) {
1327
+ var realm Realm
1328
+ if err := db .db .
1329
+ Model (& Realm {}).
1330
+ Where ("is_e2e = ?" , true ).
1331
+ First (& realm ).
1332
+ Error ; err != nil {
1333
+ return nil , err
1334
+ }
1335
+ return & realm , nil
1336
+ }
1337
+
1326
1338
func (db * Database ) FindRealmByRegion (region string ) (* Realm , error ) {
1327
1339
var realm Realm
1328
1340
if err := db .db .
@@ -1924,7 +1936,7 @@ func (r *Realm) Stats(db *Database) (RealmStats, error) {
1924
1936
1925
1937
// AllRealmCodeStatsCached returns combined code issue / claimed stats for all realms
1926
1938
// in the system, but cached.
1927
- func (db * Database ) AllRealmCodeStatsCached (ctx context.Context , cacher cache.Cacher , requiredRealms int ) (RealmStats , error ) {
1939
+ func (db * Database ) AllRealmCodeStatsCached (ctx context.Context , cacher cache.Cacher , requiredRealms int , excludeRealmIDs [] uint ) (RealmStats , error ) {
1928
1940
if cacher == nil {
1929
1941
return nil , fmt .Errorf ("cacher cannot be nil" )
1930
1942
}
@@ -1935,7 +1947,7 @@ func (db *Database) AllRealmCodeStatsCached(ctx context.Context, cacher cache.Ca
1935
1947
Key : fmt .Sprintf ("all:min-%d" , requiredRealms ),
1936
1948
}
1937
1949
if err := cacher .Fetch (ctx , cacheKey , & stats , 30 * time .Minute , func () (interface {}, error ) {
1938
- return db .AllRealmCodeStats (ctx , requiredRealms )
1950
+ return db .AllRealmCodeStats (ctx , requiredRealms , excludeRealmIDs )
1939
1951
}); err != nil {
1940
1952
return nil , err
1941
1953
}
@@ -1947,13 +1959,24 @@ func (db *Database) AllRealmCodeStatsCached(ctx context.Context, cacher cache.Ca
1947
1959
// This reuses the RealmStats data structure and the realm_id is the COUNT
1948
1960
// of all realms that contributed to statistics on that day, so that filtering
1949
1961
// can be done if there are not enough data points.
1950
- func (db * Database ) AllRealmCodeStats (ctx context.Context , requiredRealms int ) (RealmStats , error ) {
1962
+ func (db * Database ) AllRealmCodeStats (ctx context.Context , requiredRealms int , excludeRealmIDs [] uint ) (RealmStats , error ) {
1951
1963
stop := timeutils .UTCMidnight (time .Now ())
1952
1964
start := stop .Add (project .StatsDisplayDays * - 24 * time .Hour )
1953
1965
if start .After (stop ) {
1954
1966
return nil , ErrBadDateRange
1955
1967
}
1956
1968
1969
+ allExcludedRealmIDs := make ([]uint , 0 )
1970
+ // Find and exclude e2e test realm if it exists.
1971
+ e2eTestRealm , err := db .FindE2ETestRealm ()
1972
+ if err != nil {
1973
+ db .logger .Warnf ("unable o find e2e test realms for exclusion from system stats" , "error" , err )
1974
+ } else {
1975
+ allExcludedRealmIDs = append (allExcludedRealmIDs , e2eTestRealm .ID )
1976
+ }
1977
+ // Exclude other explicitly listed realms
1978
+ allExcludedRealmIDs = append (allExcludedRealmIDs , excludeRealmIDs ... )
1979
+
1957
1980
sql := `
1958
1981
SELECT
1959
1982
d.date AS date,
@@ -1974,11 +1997,14 @@ func (db *Database) AllRealmCodeStats(ctx context.Context, requiredRealms int) (
1974
1997
SELECT date::date FROM generate_series($1, $2, '1 day'::interval) date
1975
1998
) d
1976
1999
LEFT JOIN realm_stats s ON s.date = d.date
2000
+ WHERE NOT s.realm_id = ANY ($3)
1977
2001
GROUP BY d.date
1978
2002
ORDER BY date DESC`
1979
2003
2004
+ values := []any {start , stop , pq .Array (allExcludedRealmIDs )}
2005
+
1980
2006
var stats []* RealmStat
1981
- if err := db .db .Raw (sql , start , stop ).Scan (& stats ).Error ; err != nil {
2007
+ if err := db .db .Raw (sql , values ).Scan (& stats ).Error ; err != nil {
1982
2008
if IsNotFound (err ) {
1983
2009
return stats , nil
1984
2010
}
0 commit comments