-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
* first commit * add some tests * add test cases and services * add new (almost empty for now) batch deletion app * refactor config vars * add optional env var for specifying delay between the API calls * add usecases and test cases * fix importing * add type in uc * fix import * add references service that'll load all the references to the data we want to delete * fix most of issue form review * add deletion API client with just a single method for now that allows for sending a deletion request * refactor the env vars for configurting the Admin API * add exporting DeletionClientConfig * move references service to the deletion module * delete unused code * add batch deletion service that makes it possible ot queue deletion for many references at once * move some parts of the interface to the interface subdir * add an interface for the batch deletion summary * move some interfaces to a separate subdir * refactor the batch deletion summary interface * add uc for the batch deletion * remove unused annotation * refactor deletion client implementation * add batch deletion service implementation * add UC for the batch deletion * add a console app for the deletion module and a console command to manage deletion requests queue * remove no longer used app, add param to make it possible to define delay between the client calls for the case one would like to queue many thousands of deletion requests at once * remove no longer used separate batch-deletion module (it became a part of the main deletion module) * fix invalid key * remove no longer used config vars * remove no longer used commands * remove no longer used Nest cli config * remove no longer used code * change name of the method that prepares default headers * add builders for most of the interfaces * add builders for the remaining interfaces * add type in catch clause * do some adjustments, move PushDeletionRequestsOptions interface to a separate file * remove unused import * rollback * remove unnecessary indent * remove unnecessary indents * remove empty line * remove repeated imports * refactor some imports to omit calling Configuration.get() on every subpackage import * add builder for the DeletionRequestOutput class * add unit tests for the batch deletion service * add unit tests for the BatchDeletionUc * modify env keys for the Admin API client configuration, refactor the way the deletion module's console is bootstrapped * fix invalid import, remove unused undefined arg * add comment to ignore console.ts file for coverage * move deletion client config interface to a separate file, refactor function that prepares current config, add unit tests for it * fix invalid import * add more test cases to the deletion client unit tests * change invalid import Co-authored-by: WojciechGrancow <[email protected]> * fix invalid import * add builder for the PushDeletionRequestsOptions class, add unit tests for the DeletionQueueConsole * rename the file containing the deletion module console to deletion.console.ts, add coverage exclusion for it for the Sonar coverage analysis * remove deletion.console.ts from the sonar.coverage.exclusions param as it doesn't seem to work anyway * add deletion.console.ts file to the coverage exclusions (another try with different path) * change name of the file containing the deletion console app * add deletion client method that allows for triggering a deletion requests executions * fix some imports * move default value for the ADMIN_API_CLIENT object to default.schema.json * move default for the BASE_URL * move Deletion module console app to the apps/ dir * add separate functino to log error and set exit code * add handling of the case that only CR chars are used as a line separators * add use of the BatchDeletionSummaryBuilder in place of an anonymous object creation * fix some imports/exports * add an interface for the deletion execution trigger result, add builder for it as well * add use case for the deletion executions * add new interface for the deletion execution trigger options, add builder for it * add console command for triggering the deletion execution * add Admin API client secret provisioned by 1Password * add data deletion trigger cronjob * add metadata to the data deletion trigger CronJob * add task to add data deletion trigger CronJob * rewrite HTTP client execution to try/catch block, modify types of returned errors to meet current project's convention * modify the solution to not catch the client's exception in the use case, but in the console app's command * add more test cases * delete unnecessary cronjob label Co-authored-by: mamutmk5 <[email protected]> * merge labels into metadata Co-authored-by: mamutmk5 <[email protected]> * BC-5628 - move logic of errors * adjusted the second client method according to Sergej's proposal * Update apps/server/src/modules/deletion/client/deletion.client.ts Co-authored-by: Sergej Hoffmann <[email protected]> * remove unnecessary label --------- Co-authored-by: WojciechGrancow <[email protected]> Co-authored-by: WojciechGrancow <[email protected]> Co-authored-by: mamutmk5 <[email protected]> Co-authored-by: SevenWaysDP <[email protected]> Co-authored-by: Sergej Hoffmann <[email protected]>
- Loading branch information
1 parent
fd8dd82
commit af700bb
Showing
20 changed files
with
561 additions
and
34 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
57 changes: 57 additions & 0 deletions
57
ansible/roles/schulcloud-server-core/templates/data-deletion-trigger-cronjob.yml.j2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
apiVersion: batch/v1 | ||
kind: CronJob | ||
metadata: | ||
namespace: {{ NAMESPACE }} | ||
labels: | ||
app: data-deletion-trigger | ||
app.kubernetes.io/part-of: schulcloud-verbund | ||
app.kubernetes.io/version: {{ SCHULCLOUD_SERVER_IMAGE_TAG }} | ||
app.kubernetes.io/name: data-deletion-trigger | ||
app.kubernetes.io/component: data-deletion | ||
app.kubernetes.io/managed-by: ansible | ||
git.branch: {{ SCHULCLOUD_SERVER_BRANCH_NAME }} | ||
git.repo: {{ SCHULCLOUD_SERVER_REPO_NAME }} | ||
name: data-deletion-trigger-cronjob | ||
spec: | ||
concurrencyPolicy: Forbid | ||
schedule: "{{ SERVER_DATA_DELETION_TRIGGER_CRONJOB_SCHEDULE|default("@hourly", true) }}" | ||
jobTemplate: | ||
metadata: | ||
labels: | ||
app: data-deletion-trigger | ||
app.kubernetes.io/part-of: schulcloud-verbund | ||
app.kubernetes.io/version: {{ SCHULCLOUD_SERVER_IMAGE_TAG }} | ||
app.kubernetes.io/name: data-deletion-trigger | ||
app.kubernetes.io/component: data-deletion | ||
app.kubernetes.io/managed-by: ansible | ||
git.branch: {{ SCHULCLOUD_SERVER_BRANCH_NAME }} | ||
git.repo: {{ SCHULCLOUD_SERVER_REPO_NAME }} | ||
spec: | ||
template: | ||
spec: | ||
containers: | ||
- name: data-deletion-trigger-cronjob | ||
image: {{ SCHULCLOUD_SERVER_IMAGE }}:{{ SCHULCLOUD_SERVER_IMAGE_TAG }} | ||
envFrom: | ||
- secretRef: | ||
name: admin-api-client-secret | ||
command: ['/bin/sh', '-c'] | ||
args: ['npm run nest:start:deletion-console -- execution trigger'] | ||
resources: | ||
limits: | ||
cpu: {{ API_CPU_LIMITS|default("2000m", true) }} | ||
memory: {{ API_MEMORY_LIMITS|default("2Gi", true) }} | ||
requests: | ||
cpu: {{ API_CPU_REQUESTS|default("100m", true) }} | ||
memory: {{ API_MEMORY_REQUESTS|default("150Mi", true) }} | ||
restartPolicy: OnFailure | ||
metadata: | ||
labels: | ||
app: data-deletion-trigger | ||
app.kubernetes.io/part-of: schulcloud-verbund | ||
app.kubernetes.io/version: {{ SCHULCLOUD_SERVER_IMAGE_TAG }} | ||
app.kubernetes.io/name: data-deletion-trigger | ||
app.kubernetes.io/component: data-deletion | ||
app.kubernetes.io/managed-by: ansible | ||
git.branch: {{ SCHULCLOUD_SERVER_BRANCH_NAME }} | ||
git.repo: {{ SCHULCLOUD_SERVER_REPO_NAME }} |
7 changes: 7 additions & 0 deletions
7
ansible/roles/schulcloud-server-core/templates/onepassword-admin-api-client.yml.j2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
apiVersion: onepassword.com/v1 | ||
kind: OnePasswordItem | ||
metadata: | ||
name: admin-api-client-secret | ||
namespace: {{ NAMESPACE }} | ||
spec: | ||
itemPath: "vaults/{{ ONEPASSWORD_OPERATOR_VAULT }}/items/admin-api-client" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 45 additions & 0 deletions
45
...er/src/modules/deletion/console/builder/deletion-execution-trigger-result.builder.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
import { DeletionExecutionTriggerResult, DeletionExecutionTriggerStatus } from '../interface'; | ||
import { DeletionExecutionTriggerResultBuilder } from './deletion-execution-trigger-result.builder'; | ||
|
||
describe(DeletionExecutionTriggerResultBuilder.name, () => { | ||
describe(DeletionExecutionTriggerResultBuilder.buildSuccess.name, () => { | ||
describe('when called', () => { | ||
const setup = () => { | ||
const expectedOutput: DeletionExecutionTriggerResult = { status: DeletionExecutionTriggerStatus.SUCCESS }; | ||
|
||
return { expectedOutput }; | ||
}; | ||
|
||
it('should return valid object indicating success', () => { | ||
const { expectedOutput } = setup(); | ||
|
||
const output = DeletionExecutionTriggerResultBuilder.buildSuccess(); | ||
|
||
expect(output).toStrictEqual(expectedOutput); | ||
}); | ||
}); | ||
}); | ||
|
||
describe(DeletionExecutionTriggerResultBuilder.buildFailure.name, () => { | ||
describe('when called with proper arguments', () => { | ||
const setup = () => { | ||
const error = new Error('test error message'); | ||
|
||
const expectedOutput: DeletionExecutionTriggerResult = { | ||
status: DeletionExecutionTriggerStatus.FAILURE, | ||
error: error.toString(), | ||
}; | ||
|
||
return { error, expectedOutput }; | ||
}; | ||
|
||
it('should return valid object with expected values', () => { | ||
const { error, expectedOutput } = setup(); | ||
|
||
const output = DeletionExecutionTriggerResultBuilder.buildFailure(error); | ||
|
||
expect(output).toStrictEqual(expectedOutput); | ||
}); | ||
}); | ||
}); | ||
}); |
21 changes: 21 additions & 0 deletions
21
.../server/src/modules/deletion/console/builder/deletion-execution-trigger-result.builder.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import { DeletionExecutionTriggerResult, DeletionExecutionTriggerStatus } from '../interface'; | ||
|
||
export class DeletionExecutionTriggerResultBuilder { | ||
private static build(status: DeletionExecutionTriggerStatus, error?: string): DeletionExecutionTriggerResult { | ||
const output: DeletionExecutionTriggerResult = { status }; | ||
|
||
if (error) { | ||
output.error = error; | ||
} | ||
|
||
return output; | ||
} | ||
|
||
static buildSuccess(): DeletionExecutionTriggerResult { | ||
return this.build(DeletionExecutionTriggerStatus.SUCCESS); | ||
} | ||
|
||
static buildFailure(err: Error): DeletionExecutionTriggerResult { | ||
return this.build(DeletionExecutionTriggerStatus.FAILURE, err.toString()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,3 @@ | ||
export * from './push-delete-requests-options.builder'; | ||
export * from './trigger-deletion-execution-options.builder'; | ||
export * from './deletion-execution-trigger-result.builder'; |
24 changes: 24 additions & 0 deletions
24
...r/src/modules/deletion/console/builder/trigger-deletion-execution-options.builder.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
import { TriggerDeletionExecutionOptions } from '../interface'; | ||
import { TriggerDeletionExecutionOptionsBuilder } from './trigger-deletion-execution-options.builder'; | ||
|
||
describe(TriggerDeletionExecutionOptionsBuilder.name, () => { | ||
describe(TriggerDeletionExecutionOptionsBuilder.build.name, () => { | ||
describe('when called with proper arguments', () => { | ||
const setup = () => { | ||
const limit = 1000; | ||
|
||
const expectedOutput: TriggerDeletionExecutionOptions = { limit }; | ||
|
||
return { limit, expectedOutput }; | ||
}; | ||
|
||
it('should return valid object with expected values', () => { | ||
const { limit, expectedOutput } = setup(); | ||
|
||
const output = TriggerDeletionExecutionOptionsBuilder.build(limit); | ||
|
||
expect(output).toStrictEqual(expectedOutput); | ||
}); | ||
}); | ||
}); | ||
}); |
Oops, something went wrong.