From 0d140e58ca2206784be7e226d52b8b94c2dbbdc0 Mon Sep 17 00:00:00 2001 From: IDONTSUDO Date: Thu, 14 Dec 2023 23:04:45 +0300 Subject: [PATCH] nix store log --- server/src/core/extensions/extensions.ts | 2 + server/src/core/extensions/string.ts | 10 ++++ server/src/core/interfaces/router.ts | 4 +- .../core/services/executor_program_service.ts | 2 +- server/src/core/services/stack_service.ts | 2 +- .../nix_store_manager/nix_store_manager.ts | 58 +++++++++++++++++++ server/src/main.ts | 2 + server/test/model/mock_pipelines.ts | 22 ------- ui/package.json | 1 + .../core/repository/core_there_repository.ts | 1 + ui/src/core/routers/routers.tsx | 11 +--- ui/src/index.test.tsx | 9 --- ui/src/index.tsx | 3 +- 13 files changed, 81 insertions(+), 46 deletions(-) create mode 100644 server/src/features/nix_store_manager/nix_store_manager.ts delete mode 100644 ui/src/index.test.tsx diff --git a/server/src/core/extensions/extensions.ts b/server/src/core/extensions/extensions.ts index a9c94a7..ac4adea 100644 --- a/server/src/core/extensions/extensions.ts +++ b/server/src/core/extensions/extensions.ts @@ -13,6 +13,8 @@ declare global { isEmpty(): boolean; isNotEmpty(): boolean; lastElement(): string; + hasPattern(pattern: string): boolean; + hasNoPattern(pattern: string): boolean; } } export const extensions = () => { diff --git a/server/src/core/extensions/string.ts b/server/src/core/extensions/string.ts index 6f2f1a2..bdd093d 100644 --- a/server/src/core/extensions/string.ts +++ b/server/src/core/extensions/string.ts @@ -16,4 +16,14 @@ export const StringExtensions = () => { return this[this.length - 1]; }; } + if ("".hasPattern === undefined) { + String.prototype.hasPattern = function (pattern) { + return new RegExp(pattern).test(this); + }; + } + if ("".hasNoPattern === undefined) { + String.prototype.hasNoPattern = function (pattern) { + return !this.hasPattern(pattern); + }; + } }; diff --git a/server/src/core/interfaces/router.ts b/server/src/core/interfaces/router.ts index 5143d94..9fabee5 100644 --- a/server/src/core/interfaces/router.ts +++ b/server/src/core/interfaces/router.ts @@ -5,7 +5,7 @@ export interface Routes { } export interface IRouteModel { - validationModel: any; + validationModel?: any; url: string; - databaseModel: any; + databaseModel?: any; } diff --git a/server/src/core/services/executor_program_service.ts b/server/src/core/services/executor_program_service.ts index 3fa77a3..493046a 100644 --- a/server/src/core/services/executor_program_service.ts +++ b/server/src/core/services/executor_program_service.ts @@ -27,7 +27,7 @@ export class ExecutorProgramService private async workerExecuted(command: string, workerType: WorkerType, args: Array | undefined = undefined) { cluster.setupPrimary({ - exec: "./src/core/helper/worker_computed", + exec: "/Users/idontsudo/Desktop/testdeck-mocha-seed/server/build/src/core/helpers/worker_computed.js", }); const worker = cluster.fork(); diff --git a/server/src/core/services/stack_service.ts b/server/src/core/services/stack_service.ts index 8a9477b..53f8e5b 100644 --- a/server/src/core/services/stack_service.ts +++ b/server/src/core/services/stack_service.ts @@ -55,13 +55,13 @@ export class StackService extends TypedEvent implements IStackServi } async execStack(stackNumber: number, stackLayer: Iteration): Promise { const executorService = new ExecutorProgramService(this.path); - executorService.call(stackLayer.process.process.type, stackLayer.process.process.command); const filesChangeNotifierService = new FilesChangeNotifierService(this.path); filesChangeNotifierService.call(); const result = await this.waitEvent>(executorService); + console.log(200); await delay(100); if (result.isSuccess()) { this.callStack[stackNumber].result = result.value; diff --git a/server/src/features/nix_store_manager/nix_store_manager.ts b/server/src/features/nix_store_manager/nix_store_manager.ts new file mode 100644 index 0000000..dc5067b --- /dev/null +++ b/server/src/features/nix_store_manager/nix_store_manager.ts @@ -0,0 +1,58 @@ +import { CallbackStrategyWithEmpty, CoreHttpController } from "../../core/controllers/http_controller"; +import { Result } from "../../core/helpers/result"; +import { EXEC_TYPE } from "../../core/models/exec_error_model"; +import { ExecutorResult } from "../../core/models/executor_result"; +import { IPipeline, IssueType, StackGenerateType } from "../../core/models/process_model"; +import { StackService } from "../../core/services/stack_service"; +import { TriggerType } from "../triggers/models/trigger_database_model"; + +class NixStoreModel {} + +const getNixStoreFolderCommand: IPipeline[] = [ + { + process: { + type: EXEC_TYPE.EXEC, + command: `ls /nix/store`, + isGenerating: true, + isLocaleCode: false, + issueType: IssueType.WARNING, + }, + trigger: { + type: TriggerType.FILE, + value: ["context"], + }, + env: null, + stackGenerateType: StackGenerateType.SINGLETON, + }, +]; +class GetNixStorePackagesUseCase extends CallbackStrategyWithEmpty { + call = async () => { + const stackService = new StackService( + getNixStoreFolderCommand, + "/Users/idontsudo/Desktop/testdeck-mocha-seed/server/build/test/" + ); + stackService.call(); + + const promise = new Promise((resolve, _reject) => { + stackService.on((e) => { + const iteration = e[0]; + if (iteration.result instanceof ExecutorResult) { + const nixPackage = iteration.result.data; + resolve(nixPackage.split("\n").filter((e) => e.hasNoPattern(".drv"))); + } else { + return "GetNixStorePackagesUseCase unknown Error"; + } + }); + }); + return Result.ok(await promise); + }; +} + +export class NixStoreManagerPresentation extends CoreHttpController { + constructor() { + super({ + url: "nix_store_api", + }); + super.get(new GetNixStorePackagesUseCase().call); + } +} diff --git a/server/src/main.ts b/server/src/main.ts index 16a89a3..73b36da 100644 --- a/server/src/main.ts +++ b/server/src/main.ts @@ -9,6 +9,7 @@ import { ProcessPresentation } from "./features/process/process_presentation"; import { RealTimePresentation, pipelineRealTimeService } from "./features/realtime/realtime_presentation"; import { extensions } from "./core/extensions/extensions"; import { ProjectInstancePresentation } from "./features/project_instance/project_instance_presentation"; +import { NixStoreManagerPresentation as NixStoreManagerPresentation } from "./features/nix_store_manager/nix_store_manager"; extensions(); @@ -19,6 +20,7 @@ const httpRoutes: Routes[] = [ new PipelinePresentation(), new RealTimePresentation(), new ProjectInstancePresentation(), + new NixStoreManagerPresentation(), ].map((el) => el.call()); const socketSubscribers = [new SocketSubscriber(pipelineRealTimeService, "realtime")]; diff --git a/server/test/model/mock_pipelines.ts b/server/test/model/mock_pipelines.ts index 1a841c9..3dd865d 100644 --- a/server/test/model/mock_pipelines.ts +++ b/server/test/model/mock_pipelines.ts @@ -41,25 +41,3 @@ export const mockSimplePipeline: IPipeline[] = [ stackGenerateType: StackGenerateType.SINGLETON, }, ]; -// const p: IPipeline[] = [ -// { -// process: { -// type: EXEC_TYPE.EXEC, -// command: `nix run gitlab:robossembler/nix-robossembler-overlay#test-script '{ -// "filesMeta":[ -// {"type":"folder","name":"example", "path": null,"rewrite":true} -// ], -// "path":"$PATH" -// }'`, -// isGenerating: true, -// isLocaleCode: false, -// issueType: IssueType.WARNING, -// }, -// trigger: { -// type: TriggerType.FILE, -// value: ["context"], -// }, -// env: null, -// stackGenerateType: StackGenerateType.SINGLETON, -// }, -// ] diff --git a/ui/package.json b/ui/package.json index 35f227d..2aef67f 100644 --- a/ui/package.json +++ b/ui/package.json @@ -28,6 +28,7 @@ "socket.io-client": "^4.7.2", "three": "^0.159.0", "typescript": "^4.9.5", + "urdf-loader": "^0.12.1", "uuid": "^9.0.0", "web-vitals": "^2.1.4" }, diff --git a/ui/src/core/repository/core_there_repository.ts b/ui/src/core/repository/core_there_repository.ts index 2946834..2c466c7 100644 --- a/ui/src/core/repository/core_there_repository.ts +++ b/ui/src/core/repository/core_there_repository.ts @@ -76,6 +76,7 @@ export class CoreThereRepository { getObjectsAtName(name: string): Object3D { return this.scene.children.filter((el) => el.name === name)[0]; } + loader(urls: string[], callBack: Function) {} fitCameraToCenteredObject(objects: string[], offset = 4) { // https://wejn.org/2020/12/cracking-the-threejs-object-fitting-nut/ const boundingBox = new Box3().setFromPoints( diff --git a/ui/src/core/routers/routers.tsx b/ui/src/core/routers/routers.tsx index ac7f418..e71ed7b 100644 --- a/ui/src/core/routers/routers.tsx +++ b/ui/src/core/routers/routers.tsx @@ -1,8 +1,5 @@ import { createBrowserRouter } from "react-router-dom"; -import { - AllProjectScreen, - AllProjectScreenPath, -} from "../../features/all_projects/presentation/all_projects_screen"; +import { AllProjectScreen, AllProjectScreenPath } from "../../features/all_projects/presentation/all_projects_screen"; import { PipelineInstanceScreen, PipelineInstanceScreenPath, @@ -15,10 +12,7 @@ import { CreatePipelineScreen, CreatePipelineScreenPath, } from "../../features/create_pipeline/presentation/create_pipeline_screen"; -import { - CreateProjectScreen, - CreateProjectScreenPath, -} from "../../features/create_project/create_project_screen"; +import { CreateProjectScreen, CreateProjectScreenPath } from "../../features/create_project/create_project_screen"; import { CreateTriggerScreenPath, TriggerScreen, @@ -33,7 +27,6 @@ import { CreateProjectInstanceScreen, } from "../../features/create_project_instance/create_project_instance"; - const idURL = ":id"; export const router = createBrowserRouter([ diff --git a/ui/src/index.test.tsx b/ui/src/index.test.tsx deleted file mode 100644 index c4ad0ab..0000000 --- a/ui/src/index.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from "react"; -import { render, screen } from "@testing-library/react"; -import { SceneManger } from "./features/scene_manager/scene_manager"; - -test("Content contains var image", () => { - render(); - const car = screen; - expect(car).toBeInTheDocument(); -}); diff --git a/ui/src/index.tsx b/ui/src/index.tsx index e8fd3a3..35b56d8 100644 --- a/ui/src/index.tsx +++ b/ui/src/index.tsx @@ -15,8 +15,7 @@ const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement) root.render( <> - {/* */} - + );