k8s.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import type { K8sClient } from '$lib/server/k8s';
  2. import { K8sResource } from '$lib/server/resources/k8s';
  3. import type { DocumentCR } from '$lib/types/custom-resources';
  4. import type { ResourceEvent } from '$lib/types/events';
  5. import type { CoreResources } from '$lib/types/workspace';
  6. import type { DocumentResources } from './types';
  7. class _K8sDocumentResources extends K8sResource<DocumentCR> {
  8. constructor(k8sClient: K8sClient, namespace: string) {
  9. super(
  10. k8sClient,
  11. namespace,
  12. {
  13. group: 'locostack.com',
  14. version: 'v1alpha1',
  15. namespace,
  16. resource: 'documents',
  17. },
  18. [
  19. {
  20. group: 'batch',
  21. version: 'v1',
  22. namespace,
  23. resource: 'jobs',
  24. labelSelector: 'locostack.com/kb',
  25. },
  26. {
  27. group: 'core',
  28. version: 'v1',
  29. namespace,
  30. resource: 'pods',
  31. labelSelector: 'locostack.com/kb',
  32. },
  33. ],
  34. );
  35. }
  36. }
  37. class K8sDocumentResources implements DocumentResources {
  38. #documentResources: _K8sDocumentResources;
  39. constructor(k8sClient: K8sClient, namespace: string) {
  40. this.#documentResources = new _K8sDocumentResources(k8sClient, namespace);
  41. }
  42. subscribe(handler: (event: ResourceEvent) => void): () => void {
  43. return this.#documentResources.subscribe(handler);
  44. }
  45. async getDocuments(): Promise<DocumentCR[]> {
  46. return this.#documentResources.getResources();
  47. }
  48. async getDocumentResources(docId: string): Promise<CoreResources> {
  49. return this.#documentResources.getCoreResources(`doc-${docId}`);
  50. }
  51. async getDocumentStatus(docId: string): Promise<DocumentCR['status'] | undefined> {
  52. return this.#documentResources.getResourceStatus<DocumentCR['status']>(docId);
  53. }
  54. async applyDocument(cr: DocumentCR): Promise<void> {
  55. await this.#documentResources.apply(cr);
  56. }
  57. async deleteDocument(id: string): Promise<void> {
  58. await this.#documentResources.remove(id);
  59. }
  60. }
  61. export { K8sDocumentResources };