nix store log

This commit is contained in:
IDONTSUDO 2023-12-14 23:04:45 +03:00
parent 5d0e5f7f1c
commit 0d140e58ca
13 changed files with 81 additions and 46 deletions

View file

@ -13,6 +13,8 @@ declare global {
isEmpty(): boolean; isEmpty(): boolean;
isNotEmpty(): boolean; isNotEmpty(): boolean;
lastElement(): string; lastElement(): string;
hasPattern(pattern: string): boolean;
hasNoPattern(pattern: string): boolean;
} }
} }
export const extensions = () => { export const extensions = () => {

View file

@ -16,4 +16,14 @@ export const StringExtensions = () => {
return this[this.length - 1]; 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);
};
}
}; };

View file

@ -5,7 +5,7 @@ export interface Routes {
} }
export interface IRouteModel { export interface IRouteModel {
validationModel: any; validationModel?: any;
url: string; url: string;
databaseModel: any; databaseModel?: any;
} }

View file

@ -27,7 +27,7 @@ export class ExecutorProgramService
private async workerExecuted(command: string, workerType: WorkerType, args: Array<string> | undefined = undefined) { private async workerExecuted(command: string, workerType: WorkerType, args: Array<string> | undefined = undefined) {
cluster.setupPrimary({ 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(); const worker = cluster.fork();

View file

@ -55,13 +55,13 @@ export class StackService extends TypedEvent<Iteration[]> implements IStackServi
} }
async execStack(stackNumber: number, stackLayer: Iteration): Promise<void | boolean> { async execStack(stackNumber: number, stackLayer: Iteration): Promise<void | boolean> {
const executorService = new ExecutorProgramService(this.path); const executorService = new ExecutorProgramService(this.path);
executorService.call(stackLayer.process.process.type, stackLayer.process.process.command); executorService.call(stackLayer.process.process.type, stackLayer.process.process.command);
const filesChangeNotifierService = new FilesChangeNotifierService(this.path); const filesChangeNotifierService = new FilesChangeNotifierService(this.path);
filesChangeNotifierService.call(); filesChangeNotifierService.call();
const result = await this.waitEvent<Result<ExecError | SpawnError, ExecutorResult>>(executorService); const result = await this.waitEvent<Result<ExecError | SpawnError, ExecutorResult>>(executorService);
console.log(200);
await delay(100); await delay(100);
if (result.isSuccess()) { if (result.isSuccess()) {
this.callStack[stackNumber].result = result.value; this.callStack[stackNumber].result = result.value;

View file

@ -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<NixStoreModel> {
constructor() {
super({
url: "nix_store_api",
});
super.get(new GetNixStorePackagesUseCase().call);
}
}

View file

@ -9,6 +9,7 @@ import { ProcessPresentation } from "./features/process/process_presentation";
import { RealTimePresentation, pipelineRealTimeService } from "./features/realtime/realtime_presentation"; import { RealTimePresentation, pipelineRealTimeService } from "./features/realtime/realtime_presentation";
import { extensions } from "./core/extensions/extensions"; import { extensions } from "./core/extensions/extensions";
import { ProjectInstancePresentation } from "./features/project_instance/project_instance_presentation"; import { ProjectInstancePresentation } from "./features/project_instance/project_instance_presentation";
import { NixStoreManagerPresentation as NixStoreManagerPresentation } from "./features/nix_store_manager/nix_store_manager";
extensions(); extensions();
@ -19,6 +20,7 @@ const httpRoutes: Routes[] = [
new PipelinePresentation(), new PipelinePresentation(),
new RealTimePresentation(), new RealTimePresentation(),
new ProjectInstancePresentation(), new ProjectInstancePresentation(),
new NixStoreManagerPresentation(),
].map((el) => el.call()); ].map((el) => el.call());
const socketSubscribers = [new SocketSubscriber(pipelineRealTimeService, "realtime")]; const socketSubscribers = [new SocketSubscriber(pipelineRealTimeService, "realtime")];

View file

@ -41,25 +41,3 @@ export const mockSimplePipeline: IPipeline[] = [
stackGenerateType: StackGenerateType.SINGLETON, 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,
// },
// ]

View file

@ -28,6 +28,7 @@
"socket.io-client": "^4.7.2", "socket.io-client": "^4.7.2",
"three": "^0.159.0", "three": "^0.159.0",
"typescript": "^4.9.5", "typescript": "^4.9.5",
"urdf-loader": "^0.12.1",
"uuid": "^9.0.0", "uuid": "^9.0.0",
"web-vitals": "^2.1.4" "web-vitals": "^2.1.4"
}, },

View file

@ -76,6 +76,7 @@ export class CoreThereRepository {
getObjectsAtName(name: string): Object3D<Object3DEventMap> { getObjectsAtName(name: string): Object3D<Object3DEventMap> {
return this.scene.children.filter((el) => el.name === name)[0]; return this.scene.children.filter((el) => el.name === name)[0];
} }
loader(urls: string[], callBack: Function) {}
fitCameraToCenteredObject(objects: string[], offset = 4) { fitCameraToCenteredObject(objects: string[], offset = 4) {
// https://wejn.org/2020/12/cracking-the-threejs-object-fitting-nut/ // https://wejn.org/2020/12/cracking-the-threejs-object-fitting-nut/
const boundingBox = new Box3().setFromPoints( const boundingBox = new Box3().setFromPoints(

View file

@ -1,8 +1,5 @@
import { createBrowserRouter } from "react-router-dom"; import { createBrowserRouter } from "react-router-dom";
import { import { AllProjectScreen, AllProjectScreenPath } from "../../features/all_projects/presentation/all_projects_screen";
AllProjectScreen,
AllProjectScreenPath,
} from "../../features/all_projects/presentation/all_projects_screen";
import { import {
PipelineInstanceScreen, PipelineInstanceScreen,
PipelineInstanceScreenPath, PipelineInstanceScreenPath,
@ -15,10 +12,7 @@ import {
CreatePipelineScreen, CreatePipelineScreen,
CreatePipelineScreenPath, CreatePipelineScreenPath,
} from "../../features/create_pipeline/presentation/create_pipeline_screen"; } from "../../features/create_pipeline/presentation/create_pipeline_screen";
import { import { CreateProjectScreen, CreateProjectScreenPath } from "../../features/create_project/create_project_screen";
CreateProjectScreen,
CreateProjectScreenPath,
} from "../../features/create_project/create_project_screen";
import { import {
CreateTriggerScreenPath, CreateTriggerScreenPath,
TriggerScreen, TriggerScreen,
@ -33,7 +27,6 @@ import {
CreateProjectInstanceScreen, CreateProjectInstanceScreen,
} from "../../features/create_project_instance/create_project_instance"; } from "../../features/create_project_instance/create_project_instance";
const idURL = ":id"; const idURL = ":id";
export const router = createBrowserRouter([ export const router = createBrowserRouter([

View file

@ -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(<SceneManger />);
const car = screen;
expect(car).toBeInTheDocument();
});

View file

@ -15,8 +15,7 @@ const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement)
root.render( root.render(
<> <>
<SocketLister> <SocketLister>
{/* <RouterProvider router={router} /> */} <RouterProvider router={router} />
<SceneManger />
</SocketLister> </SocketLister>
</> </>
); );