Skip to content

Commit 8448b56

Browse files
authored
Merge pull request #4001 from uselagoon/storage-resolver
feat: environment storage filtering support
2 parents 96f48b1 + 3df2cc9 commit 8448b56

File tree

3 files changed

+63
-2
lines changed

3 files changed

+63
-2
lines changed

services/api/src/resources/environment/resolvers.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,28 @@ export const getEnvironmentByBackupId: ResolverFn = async (
166166
export const getEnvironmentStorageByEnvironmentId: ResolverFn = async (
167167
{ id: eid },
168168
args,
169-
{ sqlClientPool, hasPermission }
169+
{ sqlClientPool, hasPermission, adminScopes }
170170
) => {
171+
if (args) {
172+
// set lastDays to args.lastDays, or 60 if undefined
173+
let lastDays = args.lastDays || 60;
174+
if (!adminScopes.platformOwner && !adminScopes.platformViewer) {
175+
// lastDays to 60 results for non-platform users
176+
lastDays = Math.min(args.lastDays || 60, 60);
177+
178+
// check permissions for non-platform users
179+
const project = await projectHelpers(
180+
sqlClientPool
181+
).getProjectByEnvironmentId(eid);
182+
await hasPermission('environment', 'view', {
183+
project: project.id
184+
});
185+
}
186+
const rows = await query(sqlClientPool, Sql.selectEnvironmentStorageByEnvironmentIdByDaysClaim({eid, lastDays, claim: args.claim, startDate: args.startDate, endDate: args.endDate}))
187+
// @DEPRECATE when `bytesUsed` is completely removed, this can be reverted
188+
return rows.map(row => ({ ...row, bytesUsed: row.kibUsed}));
189+
}
190+
171191
await hasPermission('environment', 'storage');
172192

173193
const rows = await query(sqlClientPool, Sql.selectEnvironmentStorageByEnvironmentId(eid))

services/api/src/resources/environment/sql.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,47 @@ export const Sql = {
134134
knex('environment_storage')
135135
.where(knex.raw('environment_storage.environment = ?', id))
136136
.toString(),
137+
selectEnvironmentStorageByEnvironmentIdByDaysClaim: ({
138+
eid,
139+
lastDays,
140+
startDate,
141+
endDate,
142+
claim,
143+
}: {
144+
eid: number;
145+
lastDays?: number;
146+
startDate?: Date;
147+
endDate?: Date;
148+
claim?: string;
149+
}) =>
150+
knex
151+
.select('id', 'environment', 'persistent_storage_claim', 'kib_used', 'updated')
152+
.from(function () {
153+
this.select(
154+
'*',
155+
knex.raw('ROW_NUMBER() OVER (PARTITION BY persistent_storage_claim ORDER BY updated ASC) as rn')
156+
)
157+
.from('environment_storage')
158+
.where('environment', eid)
159+
.modify(function (queryBuilder) {
160+
if (claim) {
161+
queryBuilder.where('persistent_storage_claim', claim);
162+
}
163+
if (startDate) {
164+
queryBuilder = queryBuilder.where('updated', '>=', startDate);
165+
}
166+
167+
if (endDate) {
168+
queryBuilder = queryBuilder.where('updated', '<=', endDate);
169+
}
170+
if (lastDays) {
171+
// last `lastDays` days including latest/today if found
172+
queryBuilder = queryBuilder.where(knex.raw('DATEDIFF(CURRENT_DATE, updated) < ?', [lastDays]));
173+
}
174+
})
175+
.as('subquery');
176+
})
177+
.toString(),
137178
selectEnvironmentByOpenshiftProjectName: (openshiftProjectName: string) =>
138179
knex('environment AS e')
139180
.select('e.*')

services/api/src/typeDefs.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -869,7 +869,7 @@ const typeDefs = gql`
869869
"""
870870
Reference to EnvironmentStorage API Object, which shows the Storage consumption of this environment per day
871871
"""
872-
storages: [EnvironmentStorage]
872+
storages(startDate: Date, endDate: Date, lastDays: Int, claim: String): [EnvironmentStorage]
873873
"""
874874
Reference to EnvironmentStorageMonth API Object, which returns how many storage per day this environment used in a specific month
875875
"""

0 commit comments

Comments
 (0)