From 11d83e1ea6c25a851b3eb7559ee85061d77337c9 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Sun, 15 May 2022 23:45:29 +0200 Subject: Dodati dugmici za napred i nazad. Napravljen api upit. --- .../src/app/_elements/form-dataset/form-dataset.component.html | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'frontend/src/app/_elements/form-dataset/form-dataset.component.html') diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.html b/frontend/src/app/_elements/form-dataset/form-dataset.component.html index b96276bd..7e836192 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -1,6 +1,5 @@
- - +
@@ -43,10 +42,14 @@
file_upload +
+ + +
-- cgit v1.2.3 From db4b8cead1c45dfc55d65942769f3ee33d6c369d Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Sun, 15 May 2022 23:53:43 +0200 Subject: Omoguceni paging na tabeli. --- .../_elements/form-dataset/form-dataset.component.html | 7 ++++--- .../app/_elements/form-dataset/form-dataset.component.ts | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) (limited to 'frontend/src/app/_elements/form-dataset/form-dataset.component.html') diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.html b/frontend/src/app/_elements/form-dataset/form-dataset.component.html index 7e836192..bce8f857 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -47,9 +47,10 @@
- - - +
+ + +
diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts index 11d7faed..fd3637f9 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts @@ -42,8 +42,17 @@ export class FormDatasetComponent { } //@ViewChild('fileImportInput', { static: false }) fileImportInput: any; cemu je ovo sluzilo? - test(){ - console.log("radi"); + goBack(){ + if(this.begin-10<=0) + this.begin=-1; + else + this.begin-=10; + this.loadExisting(); + + } + goForward(){ + this.begin+=10; + this.loadExisting(); } clear(){ this.tableData.hasInput = false; @@ -100,7 +109,7 @@ export class FormDatasetComponent { this.tableData.hasInput = true; this.tableData.loaded = false; - this.datasetsService.getDatasetFile(this.dataset.fileId).subscribe((file: string | undefined) => { + this.datasetsService.getDatasetFilePaging(this.dataset.fileId,this.begin,this.end).subscribe((file: string | undefined) => { if (file) { this.tableData.loaded = true; this.tableData.numRows = this.dataset.rowCount; -- cgit v1.2.3 From bbe3675f4909b9e8bdac7787348b0d17af8ac662 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Sun, 15 May 2022 23:59:06 +0200 Subject: Dodat broj stranice. --- frontend/src/app/_elements/form-dataset/form-dataset.component.html | 1 + 1 file changed, 1 insertion(+) (limited to 'frontend/src/app/_elements/form-dataset/form-dataset.component.html') diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.html b/frontend/src/app/_elements/form-dataset/form-dataset.component.html index bce8f857..d685458a 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -49,6 +49,7 @@
+ {{((this.begin+1)/10)+1}}
-- cgit v1.2.3 From c69f7ee7d2acbe17766f5b0f0f3cc764354cd151 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Mon, 16 May 2022 00:13:08 +0200 Subject: Element se samo prikazuje kada se izabere postojeci dataset. --- frontend/src/app/_elements/folder/folder.component.ts | 4 +++- .../src/app/_elements/form-dataset/form-dataset.component.html | 8 ++++---- frontend/src/app/_elements/form-dataset/form-dataset.component.ts | 4 +++- 3 files changed, 10 insertions(+), 6 deletions(-) (limited to 'frontend/src/app/_elements/form-dataset/form-dataset.component.html') diff --git a/frontend/src/app/_elements/folder/folder.component.ts b/frontend/src/app/_elements/folder/folder.component.ts index 665659a8..e426e2a0 100644 --- a/frontend/src/app/_elements/folder/folder.component.ts +++ b/frontend/src/app/_elements/folder/folder.component.ts @@ -65,8 +65,10 @@ export class FolderComponent implements AfterViewInit { } displayFile() { - if (this.type == FolderType.Dataset) + if (this.type == FolderType.Dataset){ this.formDataset.dataset = this.fileToDisplay; + this.formDataset.existingFlag=false; + } else if (this.type == FolderType.Model) this.formModel.newModel = this.fileToDisplay; } diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.html b/frontend/src/app/_elements/form-dataset/form-dataset.component.html index d685458a..8965d451 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -47,10 +47,10 @@
-
- - {{((this.begin+1)/10)+1}} - +
+ +
{{((this.begin+1)/10)+1}}
+
diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts index fd3637f9..03564939 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts @@ -26,6 +26,7 @@ export class FormDatasetComponent { colsNumber: number = 0; begin:number=-1; end:number=11; + existingFlag:boolean=false; @Input() dataset: Dataset; //dodaj ! potencijalno @@ -69,6 +70,7 @@ export class FormDatasetComponent { this.filename = this.files[0].name; this.tableData.loaded = false; + this.existingFlag=false; this.update(); } @@ -77,7 +79,6 @@ export class FormDatasetComponent { update() { this.firstInput = true - if (this.files.length < 1) return; @@ -104,6 +105,7 @@ export class FormDatasetComponent { } loadExisting(){ + this.existingFlag=true; this.firstInput = false; this.tableData.hasInput = true; -- cgit v1.2.3 From 717ed39075bc89aa00741cfdb6a48c27bf34c992 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Mon, 16 May 2022 00:20:07 +0200 Subject: Pozicionirano na sredinu u arhivi. Sredjen bug kada ostane zapamcena strana na kojoj se nalazimo ako promenimo dataset. --- frontend/src/app/_elements/folder/folder.component.ts | 4 +++- frontend/src/app/_elements/form-dataset/form-dataset.component.html | 2 +- frontend/src/app/_elements/form-dataset/form-dataset.component.ts | 3 +++ 3 files changed, 7 insertions(+), 2 deletions(-) (limited to 'frontend/src/app/_elements/form-dataset/form-dataset.component.html') diff --git a/frontend/src/app/_elements/folder/folder.component.ts b/frontend/src/app/_elements/folder/folder.component.ts index e426e2a0..654d5510 100644 --- a/frontend/src/app/_elements/folder/folder.component.ts +++ b/frontend/src/app/_elements/folder/folder.component.ts @@ -95,11 +95,13 @@ export class FolderComponent implements AfterViewInit { this.newFileSelected = true; this.listView = false; this.displayFile(); - if (this.type == FolderType.Dataset) + if (this.type == FolderType.Dataset){ this.formDataset.clear(); + } } selectFile(file?: FolderFile) { + this.formDataset.resetPagging(); this.selectedFile = file; this.fileToDisplay = file; if (this.type == FolderType.Experiment && file) { diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.html b/frontend/src/app/_elements/form-dataset/form-dataset.component.html index 8965d451..1f91405b 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -47,7 +47,7 @@
-
+
{{((this.begin+1)/10)+1}}
diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts index 03564939..99583437 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts @@ -43,6 +43,9 @@ export class FormDatasetComponent { } //@ViewChild('fileImportInput', { static: false }) fileImportInput: any; cemu je ovo sluzilo? + resetPagging(){ + this.begin=-1; + } goBack(){ if(this.begin-10<=0) this.begin=-1; -- cgit v1.2.3 From 49d213824ee6dda9eaf9ba75041bb059075a30e5 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Mon, 16 May 2022 00:30:15 +0200 Subject: Napravljen zahtev koji trazi header Dataseta od api-ja. Dodato da se prikazuje header na stranama posle prve. --- .../app/_elements/form-dataset/form-dataset.component.html | 2 +- .../app/_elements/form-dataset/form-dataset.component.ts | 14 ++++++++------ frontend/src/app/_services/datasets.service.ts | 3 +++ 3 files changed, 12 insertions(+), 7 deletions(-) (limited to 'frontend/src/app/_elements/form-dataset/form-dataset.component.html') diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.html b/frontend/src/app/_elements/form-dataset/form-dataset.component.html index 1f91405b..e7084c6d 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -49,7 +49,7 @@
-
{{((this.begin+1)/10)+1}}
+
{{(this.begin/10)+1}}
diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts index 99583437..aa3745d0 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts @@ -24,8 +24,8 @@ export class FormDatasetComponent { files: File[] = []; rowsNumber: number = 0; colsNumber: number = 0; - begin:number=-1; - end:number=11; + begin:number=0; + end:number=10; existingFlag:boolean=false; @Input() dataset: Dataset; //dodaj ! potencijalno @@ -44,11 +44,11 @@ export class FormDatasetComponent { //@ViewChild('fileImportInput', { static: false }) fileImportInput: any; cemu je ovo sluzilo? resetPagging(){ - this.begin=-1; + this.begin=0; } goBack(){ if(this.begin-10<=0) - this.begin=-1; + this.begin=0; else this.begin-=10; this.loadExisting(); @@ -113,16 +113,18 @@ export class FormDatasetComponent { this.tableData.hasInput = true; this.tableData.loaded = false; - + this.datasetsService.getDatasetHeader(this.dataset.fileId).subscribe((header: string | undefined)=>{ + this.datasetsService.getDatasetFilePaging(this.dataset.fileId,this.begin,this.end).subscribe((file: string | undefined) => { if (file) { this.tableData.loaded = true; this.tableData.numRows = this.dataset.rowCount; this.tableData.numCols = this.dataset.columnInfo.length; - this.tableData.data = this.csv.csvToArray(file, (this.dataset.delimiter == "razmak") ? " " : (this.dataset.delimiter == "novi red") ? "\t" : this.dataset.delimiter); + this.tableData.data = this.csv.csvToArray(header+'\n'+file, (this.dataset.delimiter == "razmak") ? " " : (this.dataset.delimiter == "novi red") ? "\t" : this.dataset.delimiter); } }); + }); } diff --git a/frontend/src/app/_services/datasets.service.ts b/frontend/src/app/_services/datasets.service.ts index 6d0e06db..f5677097 100644 --- a/frontend/src/app/_services/datasets.service.ts +++ b/frontend/src/app/_services/datasets.service.ts @@ -30,6 +30,9 @@ export class DatasetsService { getDatasetFilePaging(fileId:any,begin:any,end:any){ return this.http.get(`${Configuration.settings.apiURL}/file/csvRead/${fileId}/${begin}/${end}`, { headers: this.authService.authHeader(), responseType: 'text' }); } + getDatasetHeader(fileId:any){ + return this.http.get(`${Configuration.settings.apiURL}/file/csvRead/${fileId}/-1/1`, { headers: this.authService.authHeader(), responseType: 'text' }); + } getDatasetFilePartial(fileId: any, startRow: number, rowNum: number): Observable { return this.http.get(`${Configuration.settings.apiURL}/file/csvRead/${fileId}/${startRow}/${rowNum}`, { headers: this.authService.authHeader(), responseType: 'text' }); } -- cgit v1.2.3 From 22911bdc9c5ff39ff86d8298179b147c4580f82c Mon Sep 17 00:00:00 2001 From: Ivan Ljubisavljevic Date: Mon, 16 May 2022 00:49:30 +0200 Subject: Uvoz javnih datasetova i modela --- backend/api/api/Services/FillAnEmptyDb.cs | 2 ++ .../src/app/_elements/folder/folder.component.css | 2 +- .../src/app/_elements/folder/folder.component.html | 7 +++++- .../src/app/_elements/folder/folder.component.ts | 26 ++++++++++++++++++++++ .../form-dataset/form-dataset.component.css | 4 ++++ .../form-dataset/form-dataset.component.html | 2 +- 6 files changed, 40 insertions(+), 3 deletions(-) (limited to 'frontend/src/app/_elements/form-dataset/form-dataset.component.html') diff --git a/backend/api/api/Services/FillAnEmptyDb.cs b/backend/api/api/Services/FillAnEmptyDb.cs index 32ce5c2e..fc169853 100644 --- a/backend/api/api/Services/FillAnEmptyDb.cs +++ b/backend/api/api/Services/FillAnEmptyDb.cs @@ -83,6 +83,8 @@ namespace api.Services dataset.nullCols = 3; dataset.nullRows = 708; dataset.isPreProcess = true; + dataset.cMatrix = new float[11][]; + dataset.cMatrix[0] = new float[] {1f,-0.005006660707294941f, -0.03514399379491806f,-0.03855886310338974f,0.04293888062238693f,0.03684719651937485f}; _datasetService.Create(dataset); diff --git a/frontend/src/app/_elements/folder/folder.component.css b/frontend/src/app/_elements/folder/folder.component.css index ada2dba0..3ecba343 100644 --- a/frontend/src/app/_elements/folder/folder.component.css +++ b/frontend/src/app/_elements/folder/folder.component.css @@ -177,7 +177,7 @@ .file-content { width: 100%; - height: 100%; + height: 95%; position: relative; } diff --git a/frontend/src/app/_elements/folder/folder.component.html b/frontend/src/app/_elements/folder/folder.component.html index 8896e7e5..db4f28f0 100644 --- a/frontend/src/app/_elements/folder/folder.component.html +++ b/frontend/src/app/_elements/folder/folder.component.html @@ -78,7 +78,12 @@
+ +
+
+
diff --git a/frontend/src/app/_elements/folder/folder.component.ts b/frontend/src/app/_elements/folder/folder.component.ts index 665659a8..e62c59f9 100644 --- a/frontend/src/app/_elements/folder/folder.component.ts +++ b/frontend/src/app/_elements/folder/folder.component.ts @@ -292,6 +292,32 @@ export class FolderComponent implements AfterViewInit { } } + addFile(file: FolderFile, event: Event) { + event.stopPropagation(); + switch (this.type) { + case FolderType.Dataset: + (file)._id=""; + + (file).isPublic=false; + this.datasetsService.addDataset(file).subscribe((response) => { + this.filteredFiles.splice(this.filteredFiles.indexOf(file), 1); + this.refreshFiles(null); + }); + break; + case FolderType.Model: + this.modelsService.addModel(file).subscribe((response) => { + this.refreshFiles(null); + }); + break; + case FolderType.Experiment: + // this.experimentsService.addExperiment(file).subscribe((response) => { + // console.log(response); + // }); + //todo delete za predictor + break; + } + } + folders: { [tab: number]: FolderFile[] } = {}; tabTitles: { [tab: number]: string } = { diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.css b/frontend/src/app/_elements/form-dataset/form-dataset.component.css index 079711d0..99ed5d40 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.css +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.css @@ -63,4 +63,8 @@ .file-container input{ border-radius: 5px; left: 0%; +} + +.naslov{ + font-size: 30px; } \ No newline at end of file diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.html b/frontend/src/app/_elements/form-dataset/form-dataset.component.html index b96276bd..07a3ee1a 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -35,7 +35,7 @@
- +
-- cgit v1.2.3 From 0a5d881355a1011568f1ed3cb9b3b87f4e8dee14 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Tue, 17 May 2022 21:41:42 +0200 Subject: Dodat broj stranica. Api poziv se odvija samo ako se prelazi na validnu stranu. --- .../_elements/column-table/column-table.component.html | 2 +- .../_elements/column-table/column-table.component.ts | 18 +++++++++++++++--- .../_elements/form-dataset/form-dataset.component.html | 2 +- .../_elements/form-dataset/form-dataset.component.ts | 14 +++++++++++--- 4 files changed, 28 insertions(+), 8 deletions(-) (limited to 'frontend/src/app/_elements/form-dataset/form-dataset.component.html') diff --git a/frontend/src/app/_elements/column-table/column-table.component.html b/frontend/src/app/_elements/column-table/column-table.component.html index 3256ffee..8a4164f1 100644 --- a/frontend/src/app/_elements/column-table/column-table.component.html +++ b/frontend/src/app/_elements/column-table/column-table.component.html @@ -46,7 +46,7 @@
-
{{(this.begin/10)+1}}
+
{{(this.begin/10)+1}}...{{getPage()}}
diff --git a/frontend/src/app/_elements/column-table/column-table.component.ts b/frontend/src/app/_elements/column-table/column-table.component.ts index a3469d90..ed2f0380 100644 --- a/frontend/src/app/_elements/column-table/column-table.component.ts +++ b/frontend/src/app/_elements/column-table/column-table.component.ts @@ -54,16 +54,28 @@ export class ColumnTableComponent implements AfterViewInit { this.begin=0; } goBack(){ - if(this.begin-10<=0) + if(this.begin-10<0) this.begin=0; else + { this.begin-=10; - this.loadData(); + this.loadData(); + } } goForward(){ + if(this.dataset!=undefined){ this.begin+=10; - this.loadData(); + if(this.dataset.rowCount
-
{{(this.begin/10)+1}}
+
{{(this.begin/10)+1}}...{{getPage()}}
diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts index d801b5fb..19c0083c 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts @@ -47,20 +47,28 @@ export class FormDatasetComponent { this.begin=0; } goBack(){ - if(this.begin-10<=0) + if(this.begin-10<0) this.begin=0; else + { this.begin-=10; - this.loadExisting(); + this.loadExisting(); + } } goForward(){ this.begin+=10; - this.loadExisting(); + if(this.dataset.rowCount Date: Wed, 18 May 2022 02:51:55 +0200 Subject: Sredjivanje baze i forme dataseta --- backend/api/api/Controllers/DatasetController.cs | 7 +- backend/api/api/Models/Model.cs | 11 +++ backend/api/api/Models/NullValues.cs | 7 ++ backend/api/api/Services/FillAnEmptyDb.cs | 106 +++++++++++++++------ backend/api/api/Services/MlConnectionService.cs | 14 +++ backend/microservice/api/newmlservice.py | 2 +- .../form-dataset/form-dataset.component.html | 9 +- 7 files changed, 115 insertions(+), 41 deletions(-) (limited to 'frontend/src/app/_elements/form-dataset/form-dataset.component.html') diff --git a/backend/api/api/Controllers/DatasetController.cs b/backend/api/api/Controllers/DatasetController.cs index 7602a621..c7e05343 100644 --- a/backend/api/api/Controllers/DatasetController.cs +++ b/backend/api/api/Controllers/DatasetController.cs @@ -128,6 +128,7 @@ namespace api.Controllers [Authorize(Roles = "User,Guest")] public async Task> Post([FromBody] Dataset dataset) { + Console.WriteLine("PROBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); string uploaderId = getUserId(); dataset.uploaderId = uploaderId; @@ -145,6 +146,8 @@ namespace api.Controllers dataset.isPreProcess = false; _datasetService.Create(dataset); _mlConnectionService.PreProcess(dataset, fileModel.path, uploaderId); + + return Ok(); } } @@ -211,9 +214,9 @@ namespace api.Controllers //nesto - dataset.isPreProcess = false; + dataset.isPreProcess = true; _datasetService.Create(dataset); - _mlConnectionService.PreProcess(dataset, fileModel.path, uploaderId); + //_mlConnectionService.PreProcess(dataset, fileModel.path, uploaderId); return Ok(); } } diff --git a/backend/api/api/Models/Model.cs b/backend/api/api/Models/Model.cs index f09940d0..a807316f 100644 --- a/backend/api/api/Models/Model.cs +++ b/backend/api/api/Models/Model.cs @@ -48,6 +48,17 @@ namespace api.Models public class Layer { + + + public Layer(int layerNumber, string activationFunction, int neurons, string regularisation, float regularisationRate) + { + this.layerNumber = layerNumber; + this.activationFunction = activationFunction; + this.neurons = neurons; + this.regularisation = regularisation; + this.regularisationRate = regularisationRate; + } + public int layerNumber { get; set; } public string activationFunction { get; set; } public int neurons { get; set; } diff --git a/backend/api/api/Models/NullValues.cs b/backend/api/api/Models/NullValues.cs index a8ce4f36..8e3415e7 100644 --- a/backend/api/api/Models/NullValues.cs +++ b/backend/api/api/Models/NullValues.cs @@ -2,6 +2,13 @@ { public class NullValues { + public NullValues(string column, string option, string value) + { + this.column = column; + this.option = option; + this.value = value; + } + public string column { get; set; } public string option { get; set; } public string value { get; set; } diff --git a/backend/api/api/Services/FillAnEmptyDb.cs b/backend/api/api/Services/FillAnEmptyDb.cs index 28f293ce..404d937a 100644 --- a/backend/api/api/Services/FillAnEmptyDb.cs +++ b/backend/api/api/Services/FillAnEmptyDb.cs @@ -1,6 +1,5 @@ using api.Interfaces; using api.Models; -using Microsoft.AspNetCore.SignalR; using MongoDB.Driver; namespace api.Services @@ -31,6 +30,7 @@ namespace api.Services public Task StartAsync(CancellationToken cancellationToken) { + if (_fileService.CheckDb()) { @@ -49,6 +49,7 @@ namespace api.Services _fileService.Create(file); + Dataset dataset = new Dataset(); dataset._id = ""; @@ -59,32 +60,42 @@ namespace api.Services dataset.extension = ".csv"; dataset.isPublic = true; dataset.accessibleByLink = true; - dataset.dateCreated = DateTime.Now; - dataset.lastUpdated = DateTime.Now; + dataset.dateCreated = DateTime.UtcNow; + dataset.lastUpdated = DateTime.UtcNow; dataset.delimiter = ","; - dataset.columnInfo = new ColumnInfo[] { }; dataset.columnInfo = new[] { - new ColumnInfo( "PassengerId", true, 0, 446, 1, 891, 446, new string[]{ }, new int[] {}, new float[] {}, 0.01f,0.1f ), - new ColumnInfo( "Survived", true, 0, 0.38383838534355164f, 0, 1, 0, new string[]{ }, new int[] {}, new float[] {}, 0.01f,0.1f ), - new ColumnInfo( "Pclass", true, 0, 2.3086419105529785f, 1, 3, 3, new string[]{ }, new int[] {}, new float[] {}, 0.01f,0.1f ), - new ColumnInfo( "Name", false, 0, 0, 0, 0, 0, new string[]{"Braund, Mr. Owen Harris", "Boulos, Mr. Hanna", "Frolicher-Stehli, Mr. Maxmillian", "Gilinski, Mr. Eliezer", "Murdlin, Mr. Joseph", "Rintamaki, Mr. Matti", "Stephenson, Mrs. Walter Bertram (Martha Eustis)", "Elsbury, Mr. William James", "Bourke, Miss. Mary", "Chapman, Mr. John Henry"}, new int[] {}, new float[] {}, 0.01f,0.1f ), - new ColumnInfo( "Sex", false, 0, 0, 0, 0, 0, new string[]{ "male", "female" }, new int[] {}, new float[] {}, 0.01f,0.1f ), - new ColumnInfo( "Age", true, 177, 29.69911766052246f, 0.41999998688697815f, 80, 28, new string[]{ }, new int[] {}, new float[] {}, 0.01f,0.1f ), - new ColumnInfo( "SibSp", true, 0, 0.523007869720459f, 0, 8, 0, new string[]{ }, new int[] {}, new float[] {}, 0.01f,0.1f ), - new ColumnInfo( "Parch", true, 0, 0.3815937042236328f, 0, 6, 0, new string[]{ }, new int[] {}, new float[] {}, 0.01f,0.1f ), - new ColumnInfo( "Ticket", false, 0, 0, 0, 0, 0, new string[]{ "347082", "CA. 2343", "1601", "3101295", "CA 2144", "347088", "S.O.C. 14879", "382652", "LINE", "PC 17757" }, new int[] {}, new float[] {}, 0.01f,0.1f ), - new ColumnInfo( "Fare", true, 0, 32.20420837402344f, 0, 512.3292236328125f, 14.45419979095459f, new string[]{ }, new int[] {}, new float[] {}, 0.01f,0.1f ), - new ColumnInfo( "Cabin", false, 687, 0, 0, 0, 0, new string[]{ "B96 B98", "G6", "C23 C25 C27", "C22 C26", "F33", "F2", "E101", "D", "C78", "C93" }, new int[] {}, new float[] {}, 0.01f,0.1f ), - new ColumnInfo( "Embarked", false, 2, 0.3815937042236328f, 0, 6, 0, new string[]{ "S", "C", "Q" }, new int[] {}, new float[] {}, 0.01f,0.1f ), + new ColumnInfo( "PassengerId", true, 0, 446, 1, 891, 446, new string[]{ "1","599","588", "589", "590", "591" }, new int[] { 1, 1, 1, 1, 1, 1}, new float[] { 0.0011223345063626766f, 0.0011223345063626766f, 0.0011223345063626766f, 0.0011223345063626766f, 0.0011223345063626766f, 0.0011223345063626766f }, 223.5f, 668.5f ), + new ColumnInfo( "Survived", true, 0, 0.38383838534355164f, 0, 1, 0, new string[]{ "0", "1" }, new int[] { 549, 342}, new float[] { 0.6161616444587708f, 0.38383838534355164f}, 0f, 1f ), + new ColumnInfo( "Pclass", true, 0, 2.3086419105529785f, 1, 3, 3, new string[]{ "3", "1", "2" }, new int[] {491, 216, 184}, new float[] {0.5510662198066711f, 0.24242424964904785f, 0.2065095454454422f }, 2f, 3f ), + new ColumnInfo( "Name", false, 0, 0, 0, 0, 0, new string[]{"Braund, Mr. Owen Harris", "Boulos, Mr. Hanna", "Frolicher-Stehli, Mr. Maxmillian", "Gilinski, Mr. Eliezer", "Murdlin, Mr. Joseph", "Rintamaki, Mr. Matti"}, new int[] {1,1,1,1,1,1}, new float[] {0.0011223345063626766f, 0.0011223345063626766f, 0.0011223345063626766f, 0.0011223345063626766f, 0.0011223345063626766f, 0.0011223345063626766f }, 0f, 0f ), + new ColumnInfo( "Sex", false, 0, 0, 0, 0, 0, new string[]{ "male", "female" }, new int[] {577,314}, new float[] {0.6475870013237f, 0.35241302847862244f}, 0f,0f ), + new ColumnInfo( "Age", true, 177, 29.69911766052246f, 0.41999998688697815f, 80, 28, new string[]{ "nan", "24.0", "22.0", "18.0", "28.0", "30.0" }, new int[] {177,30,27,26,25,25}, new float[] {0.1986531913280487f,0.033670034259557724f,0.03030303120613098f,0.029180696234107018f,0.028058361262083054f,0.028058361262083054f}, 20.125f,38f ), + new ColumnInfo( "SibSp", true, 0, 0.523007869720459f, 0, 8, 0, new string[]{ "0", "1", "2", "3", "4", "3", "8" }, new int[] {608, 209, 28, 18, 16, 7}, new float[] {0.6823793649673462f, 0.23456789553165436f, 0.031425364315509796f, 0.020202020183205605f, 0.017957352101802826f, 0.007856341078877449f }, 0f, 1f ), + new ColumnInfo( "Parch", true, 0, 0.3815937042236328f, 0, 6, 0, new string[]{ "0", "1", "2", "5", "3", "4" }, new int[] { 678, 118, 80, 5, 5, 4}, new float[] {0.7609427571296692f, 0.13243547081947327f, 0.08978675305843353f, 0.005611672066152096f, 0.005611672066152096f, 0.0044893380254507065f }, 0f,0f ), + new ColumnInfo( "Ticket", false, 0, 0, 0, 0, 0, new string[]{ "347082", "CA. 2343", "1601", "3101295", "CA 2144", "347088" }, new int[] {7, 7, 7, 6, 6, 6}, new float[] {0.007856341078877449f, 0.007856341078877449f, 0.007856341078877449f, 0.006734006572514772f, 0.006734006572514772f, 0.006734006572514772f}, 0f,0f ), + new ColumnInfo( "Fare", true, 0, 32.20420837402344f, 0, 512.3292236328125f, 14.45419979095459f, new string[]{ "8.05", "13.0", "7.8958", "7.75", "26.0", "10.5"}, new int[] {43, 42, 38, 34, 31, 24}, new float[] {0.04826038330793381f, 0.047138046473264694f, 0.04264871031045914f, 0.03815937042236328f, 0.03479236736893654f, 0.02693602629005909f }, 7.910399913787842f,31f ), + new ColumnInfo( "Cabin", false, 687, 0, 0, 0, 0, new string[]{ "B96 B98", "G6", "C23 C25 C27", "C22 C26", "F33", "F2" }, new int[] {4, 4, 4, 3, 3, 3}, new float[] {0.0044893380254507065f, 0.0044893380254507065f, 0.0044893380254507065f, 0.003367003286257386f, 0.003367003286257386f, 0.003367003286257386f }, 0f,0f ), + new ColumnInfo( "Embarked", false, 2, 0, 0, 0, 0, new string[]{ "S", "C", "Q" }, new int[] {644, 168, 77}, new float[] {0.7227833867073059f, 0.18855218589305878f, 0.08641975373029709f}, 0f,0f ), }; dataset.rowCount = 891; dataset.nullCols = 3; - dataset.nullRows = 708; + dataset.nullRows = 689; dataset.isPreProcess = true; - dataset.cMatrix = new float[11][]; - dataset.cMatrix[0] = new float[] { 1f, -0.005006660707294941f, -0.03514399379491806f, -0.03855886310338974f, 0.04293888062238693f, 0.03684719651937485f }; + dataset.cMatrix = new float[12][]; + dataset.cMatrix[0] = new float[] { 1, -0.005007f, -0.035144f, -0.038559f, 0.042939f, 0.036847f, -0.057527f, -0.001652f, -0.056554f, 0.012658f, -0.035077f, 0.013083f }; + dataset.cMatrix[1] = new float[] { -0.0050066607f, 1f, -0.33848104f, -0.057343315f, -0.54335135f, -0.077221096f, -0.0353225f, 0.08162941f, -0.16454913f, 0.25730652f, -0.25488788f, -0.16351666f }; + dataset.cMatrix[2] = new float[] { -0.035143994f, -0.33848104f, 1f, 0.052830875f, 0.13190049f, -0.369226f, 0.083081365f, 0.018442672f, 0.31986925f, -0.54949963f, 0.6841206f, 0.15711245f }; + dataset.cMatrix[3] = new float[] { -0.038558863f, -0.057343315f, 0.052830875f, 1f, 0.020313991f, 0.06258293f, -0.017230336f, -0.04910539f, 0.047348045f, -0.049172707f, 0.061959103f, -0.0045570857f }; + dataset.cMatrix[4] = new float[] { 0.04293888f, -0.54335135f, 0.13190049f, 0.020313991f, 1f, 0.093253575f, -0.11463081f, -0.24548896f, 0.059371985f, -0.18233283f, 0.09668117f, 0.104057096f }; + dataset.cMatrix[5] = new float[] { 0.036847197f, -0.077221096f, -0.369226f, 0.06258293f, 0.093253575f, 1f, -0.30824676f, -0.18911926f, -0.07593447f, 0.09606669f, -0.2523314f, -0.02525195f }; + dataset.cMatrix[6] = new float[] { -0.057526834f, -0.0353225f, 0.083081365f, -0.017230336f, -0.11463081f, -0.30824676f, 1f, 0.4148377f, 0.079461284f, 0.15965104f, 0.043592583f, 0.06665404f }; + dataset.cMatrix[7] = new float[] { -0.0016520123f, 0.08162941f, 0.018442672f, -0.04910539f, -0.24548896f, -0.18911926f, 0.4148377f, 1f, 0.020003473f, 0.21622494f, -0.02832425f, 0.038322248f }; + dataset.cMatrix[8] = new float[] { -0.056553647f, -0.16454913f, 0.31986925f, 0.047348045f, 0.059371985f, -0.07593447f, 0.079461284f, 0.020003473f, 1f, -0.013885464f, 0.24369627f, -0.0060414947f }; + dataset.cMatrix[9] = new float[] { 0.012658219f, 0.25730652f, -0.54949963f, -0.049172707f, -0.18233283f, 0.09606669f, 0.15965104f, 0.21622494f, -0.013885464f, 1f, -0.5033555f, -0.22122625f }; + dataset.cMatrix[10] = new float[] { -0.035077456f, -0.25488788f, 0.6841206f, 0.061959103f, 0.09668117f, -0.2523314f, 0.043592583f, -0.02832425f, 0.24369627f, -0.5033555f, 1f, 0.19320504f }; + dataset.cMatrix[11] = new float[] { 0.013083069f, -0.16351666f, 0.15711245f, -0.0045570857f, 0.104057096f, -0.02525195f, 0.06665404f, 0.038322248f, -0.0060414947f, -0.22122625f, 0.19320504f, 1f }; _datasetService.Create(dataset); @@ -93,19 +104,30 @@ namespace api.Services model._id = ""; model.uploaderId = "000000000000000000000000"; - model.name = "Model Titanik"; + model.name = "Titanik model"; model.description = "Model Titanik"; model.dateCreated = DateTime.Now; model.lastUpdated = DateTime.Now; model.type = "binarni-klasifikacioni"; model.optimizer = "Adam"; - model.lossFunction = "mean_squared_error"; - model.hiddenLayers = 5; - model.batchSize = "8"; + model.lossFunction = "binary_crossentropy"; + model.hiddenLayers = 4; + model.batchSize = "64"; + model.learningRate = "1"; model.outputNeurons = 0; + model.layers = new[] + { + new Layer ( 0,"sigmoid", 3,"l1", 1f ), + new Layer ( 1,"sigmoid", 3,"l1", 1f ), + new Layer ( 2,"sigmoid", 3,"l1", 1f ), + new Layer ( 3,"sigmoid", 3,"l1", 1f ), + }; model.outputLayerActivationFunction = "sigmoid"; model.metrics = new string[] { }; - model.epochs = 5; + model.epochs = 50; + model.randomOrder = true; + model.randomTestSet = true; + model.randomTestSetDistribution = 0.1f; model.isPublic = true; model.accessibleByLink = true; model.validationSize = 0.1f;//proveri @@ -116,23 +138,45 @@ namespace api.Services Experiment experiment = new Experiment(); experiment._id = ""; - experiment.name = "Eksperiment Titanik"; + experiment.name = "Titanik eksperiment (binarno-klasifikacioni)"; experiment.description = "Binarno klasifikacioni, label"; + experiment.type = "binarni-klasifikacioni"; experiment.ModelIds = new string[] { }.ToList(); experiment.datasetId = _datasetService.GetDatasetId(dataset.fileId); experiment.uploaderId = "000000000000000000000000"; - experiment.inputColumns = new string[] { "Embarked", "Survived" }; + experiment.inputColumns = new string[] { "Survived", "Pclass", "Sex", "Age", "SibSp", "Parch", "Ticket", "Fare", "Embarked" }; experiment.outputColumn = "Survived"; + experiment.nullValues = "delete_rows"; experiment.dateCreated = DateTime.Now; experiment.lastUpdated = DateTime.Now; - experiment.nullValues = "delete_rows"; - experiment.nullValuesReplacers = new NullValues[] { }; + experiment.nullValuesReplacers = new[] + { + new NullValues ("Survived", "delete_rows", ""), + new NullValues ("Pclass", "delete_rows", ""), + new NullValues ("Sex", "delete_rows", ""), + new NullValues ("Age", "delete_rows", ""), + new NullValues ("SibSp", "delete_rows", ""), + new NullValues ("Parch", "delete_rows", ""), + new NullValues ("Ticket", "delete_rows", ""), + new NullValues ("Fare", "delete_rows", ""), + new NullValues ("Embarked", "delete_rows", "") + }; experiment.encodings = new[] { + new ColumnEncoding( "PassengerId", "label" ), new ColumnEncoding( "Survived", "label" ), + new ColumnEncoding( "Pclass", "label" ), + new ColumnEncoding( "Name", "label" ), + new ColumnEncoding( "Sex", "label" ), + new ColumnEncoding( "Age", "label" ), + new ColumnEncoding( "SibSp", "label" ), + new ColumnEncoding( "Parch", "label" ), + new ColumnEncoding( "Ticket", "label" ), + new ColumnEncoding( "Fare", "label" ), + new ColumnEncoding( "Cabin", "label" ), new ColumnEncoding("Embarked", "label" ) }; - experiment.columnTypes = new string[] {"categorical"}; + experiment.columnTypes = new string[] { "numerical", "categorical", "categorical", "categorical", "categorical", "numerical", "categorical", "numerical", "categorical", "numerical", "categorical", "categorical" }; _experimentService.Create(experiment); @@ -183,8 +227,8 @@ namespace api.Services dataset.delimiter = ","; dataset.columnInfo = new[] { - new ColumnInfo( "Unnamed: 0", true, 0, 26969.5f, 0, 53939, 26969.5f, new string[]{ }, new int[] {}, new float[] {}, 0.01f,0.1f ), - new ColumnInfo( "carat", true, 0, 0.7979397773742676f, 0.20000000298023224f, 5.010000228881836f, 0.699999988079071f, new string[]{ }, new int[] {}, new float[] {}, 0.01f,0.1f ), + new ColumnInfo( "Unnamed: 0", true, 0, 26969.5f, 0, 53939, 26969.5f, new string[]{ "0", "35977", "35953", "35954", "35955", "35956" }, new int[] {1,1,1,1,1,1}, new float[] {0.000018539118173066527f, 0.000018539118173066527f, 0.000018539118173066527f, 0.000018539118173066527f, 0.000018539118173066527f, 0.000018539118173066527f}, 13484.75f,40454.25f ), + new ColumnInfo( "carat", true, 0, 0.7979397773742676f, 0.20000000298023224f, 5.010000228881836f, 0.699999988079071f, new string[]{ "0.3", "0.31", "1.01", "0.7", "0.32", "1.0" }, new int[] {2604, 2249, 2242, 1981, 1840, 1558}, new float[] {0.04827586188912392f, 0.04169447720050812f, 0.0415647029876709f, 0.03672599047422409f, 0.034111976623535156f, 0.02888394519686699f}, 0.4000000059604645f,1.0399999618530273f ), new ColumnInfo( "cut", false, 0, 0, 0, 0, 0, new string[]{ "Ideal", "Premium", "Very Good", "Good", "Fair" }, new int[] {}, new float[] {}, 0.01f,0.1f ), new ColumnInfo( "color", false, 0, 0, 0, 0, 0, new string[]{"G", "E", "F", "H", "D", "I", "I", "J"}, new int[] {}, new float[] {}, 0.01f,0.1f ), new ColumnInfo( "clarity", false, 0, 0, 0, 0, 0, new string[]{ "SI1", "VS2","SI2", "VS1", "VVS2", "VVS1", "IF", "I1" }, new int[] {}, new float[] {}, 0.01f,0.1f ), diff --git a/backend/api/api/Services/MlConnectionService.cs b/backend/api/api/Services/MlConnectionService.cs index b6d422ad..0ecdb1af 100644 --- a/backend/api/api/Services/MlConnectionService.cs +++ b/backend/api/api/Services/MlConnectionService.cs @@ -62,6 +62,20 @@ namespace api.Services if (ChatHub.CheckUser(id)) foreach (var connection in ChatHub.getAllConnectionsOfUser(id)) await _ichat.Clients.Client(connection).SendAsync("NotifyDataset",newDataset.name,newDataset._id); + + + string proba = ""; + + for (int i = 0; i < newDataset.cMatrix.Length; i++) + { + proba = i +" "; + for (int j = 0; j < newDataset.cMatrix[i].Length; j++) + proba += newDataset.cMatrix[i][j] + "f, "; + + Console.WriteLine(proba); + proba = ""; + } + return; } diff --git a/backend/microservice/api/newmlservice.py b/backend/microservice/api/newmlservice.py index afcbcdd7..fd21f8ce 100644 --- a/backend/microservice/api/newmlservice.py +++ b/backend/microservice/api/newmlservice.py @@ -510,7 +510,7 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): classifier.add(tf.keras.layers.Dense(units=1)) - classifier.compile(loss =paramsModel["lossFunction"] , optimizer = opt , metrics = ['mae','mse','rmse']) + classifier.compile(loss =paramsModel["lossFunction"] , optimizer = opt , metrics = ['mae','mse']) history=classifier.fit( x=x_train, y=y_train, epochs = paramsModel['epochs'],batch_size=int(paramsModel['batchSize']),callbacks=callback(x_test, y_test,paramsModel['_id']),validation_data=(x_val, y_val)) hist=history.history diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.html b/frontend/src/app/_elements/form-dataset/form-dataset.component.html index 6736367e..7be838f1 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -3,8 +3,7 @@
- - +
@@ -32,11 +31,7 @@
- -
- - -
+
-- cgit v1.2.3 From 40e4cf81dc29d2f3a44cd56a58a5181a64295d5f Mon Sep 17 00:00:00 2001 From: Danijel Anđelković Date: Thu, 19 May 2022 21:10:36 +0200 Subject: Dodao spiner dok se izvrsavaju neke akcije. Promenio brisanje u folderu tako da se prvo postavi pitanje korisniku da li ste sigurni... Dodao pracenje da li se model/dataset promenio i mogucnost da se updateuje isti. --- backend/api/api/Controllers/DatasetController.cs | 7 +- frontend/package-lock.json | 42 +++++++ frontend/package.json | 2 + .../src/app/_elements/folder/folder.component.css | 6 +- .../src/app/_elements/folder/folder.component.html | 61 ++++++---- .../src/app/_elements/folder/folder.component.ts | 124 ++++++++++++++++----- .../form-dataset/form-dataset.component.html | 63 ++++++----- .../form-dataset/form-dataset.component.ts | 74 ++++++------ .../_elements/form-model/form-model.component.html | 26 ++--- .../_elements/form-model/form-model.component.ts | 13 ++- .../app/_elements/spinner/spinner.component.css | 78 +++++++++++++ .../app/_elements/spinner/spinner.component.html | 3 + .../_elements/spinner/spinner.component.spec.ts | 25 +++++ .../src/app/_elements/spinner/spinner.component.ts | 15 +++ .../app/_pages/experiment/experiment.component.ts | 15 +-- frontend/src/app/_services/experiments.service.ts | 4 + frontend/src/app/_services/models.service.ts | 2 +- frontend/src/app/app.module.ts | 4 +- 18 files changed, 419 insertions(+), 145 deletions(-) create mode 100644 frontend/src/app/_elements/spinner/spinner.component.css create mode 100644 frontend/src/app/_elements/spinner/spinner.component.html create mode 100644 frontend/src/app/_elements/spinner/spinner.component.spec.ts create mode 100644 frontend/src/app/_elements/spinner/spinner.component.ts (limited to 'frontend/src/app/_elements/form-dataset/form-dataset.component.html') diff --git a/backend/api/api/Controllers/DatasetController.cs b/backend/api/api/Controllers/DatasetController.cs index 849d9884..c93ac9db 100644 --- a/backend/api/api/Controllers/DatasetController.cs +++ b/backend/api/api/Controllers/DatasetController.cs @@ -251,9 +251,14 @@ namespace api.Controllers return NotFound($"Dataset with ID = {id} or user with ID = {uploaderId} not found"); dataset.lastUpdated = DateTime.UtcNow; - _datasetService.Update(uploaderId, id, dataset); + if (!dataset.isPreProcess) + { + FileModel fileModel = _fileService.getFile(dataset.fileId); + _mlConnectionService.PreProcess(dataset, fileModel.path, uploaderId); + } + return Ok($"Dataset with ID = {id} updated"); } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index ebe30390..7a0f7b3a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -33,6 +33,7 @@ "d3-graphviz": "^2.6.1", "file-saver": "^2.0.5", "jquery": "^3.6.0", + "lodash.isequal": "^4.5.0", "material-icons": "^1.10.8", "mdb-angular-ui-kit": "^2.0.0", "ng-multiselect-dropdown": "^0.3.8", @@ -55,6 +56,7 @@ "@types/d3-graphviz": "^2.6.7", "@types/file-saver": "^2.0.5", "@types/jasmine": "~3.10.0", + "@types/lodash.isequal": "^4.5.6", "@types/node": "^12.11.1", "jasmine-core": "~4.0.0", "karma": "~6.3.0", @@ -2821,6 +2823,21 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/lodash": { + "version": "4.14.182", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", + "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", + "dev": true + }, + "node_modules/@types/lodash.isequal": { + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/@types/lodash.isequal/-/lodash.isequal-4.5.6.tgz", + "integrity": "sha512-Ww4UGSe3DmtvLLJm2F16hDwEQSv7U0Rr8SujLUA2wHI2D2dm8kPu6Et+/y303LfjTIwSBKXB/YTUcAKpem/XEg==", + "dev": true, + "dependencies": { + "@types/lodash": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.2", "dev": true, @@ -6891,6 +6908,11 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, "node_modules/log-symbols": { "version": "4.1.0", "dev": true, @@ -12522,6 +12544,21 @@ "version": "7.0.9", "dev": true }, + "@types/lodash": { + "version": "4.14.182", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", + "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", + "dev": true + }, + "@types/lodash.isequal": { + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/@types/lodash.isequal/-/lodash.isequal-4.5.6.tgz", + "integrity": "sha512-Ww4UGSe3DmtvLLJm2F16hDwEQSv7U0Rr8SujLUA2wHI2D2dm8kPu6Et+/y303LfjTIwSBKXB/YTUcAKpem/XEg==", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, "@types/mime": { "version": "1.3.2", "dev": true @@ -15138,6 +15175,11 @@ "version": "4.0.8", "dev": true }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, "log-symbols": { "version": "4.1.0", "dev": true, diff --git a/frontend/package.json b/frontend/package.json index 1596072d..5d32208b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -36,6 +36,7 @@ "d3-graphviz": "^2.6.1", "file-saver": "^2.0.5", "jquery": "^3.6.0", + "lodash.isequal": "^4.5.0", "material-icons": "^1.10.8", "mdb-angular-ui-kit": "^2.0.0", "ng-multiselect-dropdown": "^0.3.8", @@ -58,6 +59,7 @@ "@types/d3-graphviz": "^2.6.7", "@types/file-saver": "^2.0.5", "@types/jasmine": "~3.10.0", + "@types/lodash.isequal": "^4.5.6", "@types/node": "^12.11.1", "jasmine-core": "~4.0.0", "karma": "~6.3.0", diff --git a/frontend/src/app/_elements/folder/folder.component.css b/frontend/src/app/_elements/folder/folder.component.css index 1a1e70ec..2b7892a3 100644 --- a/frontend/src/app/_elements/folder/folder.component.css +++ b/frontend/src/app/_elements/folder/folder.component.css @@ -105,8 +105,9 @@ .bottom-button { font-size: large; position: relative; + text-align: center; background-color: var(--ns-primary); - width: 10rem; + width: 12rem; height: 2.3rem; border-color: var(--ns-primary); border-style: solid; @@ -170,7 +171,8 @@ .folder-inside { width: 100%; - min-height: 40rem; + min-height: 33rem; + height: 100%; max-height: 100%; } diff --git a/frontend/src/app/_elements/folder/folder.component.html b/frontend/src/app/_elements/folder/folder.component.html index 97ae0d23..da182945 100644 --- a/frontend/src/app/_elements/folder/folder.component.html +++ b/frontend/src/app/_elements/folder/folder.component.html @@ -29,47 +29,48 @@
-
- +
- +
- -
+ +
-->
- - -
- - + +
@@ -107,7 +108,7 @@ {{predictor.lastUpdated | date}}
-
@@ -132,14 +133,30 @@
-
- + + +
\ No newline at end of file diff --git a/frontend/src/app/_elements/folder/folder.component.ts b/frontend/src/app/_elements/folder/folder.component.ts index 254298fb..9d19d556 100644 --- a/frontend/src/app/_elements/folder/folder.component.ts +++ b/frontend/src/app/_elements/folder/folder.component.ts @@ -14,6 +14,7 @@ import { FormModelComponent } from '../form-model/form-model.component'; import { ActivatedRoute, Router } from '@angular/router'; import Predictor from 'src/app/_data/Predictor'; import FileSaver from 'file-saver'; +import isEqual from 'lodash.isequal'; @Component({ selector: 'app-folder', @@ -105,6 +106,7 @@ export class FolderComponent implements AfterViewInit { selectFile(file?: FolderFile) { this.formDataset.resetPagging(); this.selectedFile = file; + Object.assign(this.lastFileData, this.selectedFile); this.fileToDisplay = file; if (this.type == FolderType.Experiment && file) { this.router.navigate(['/experiment/' + file._id]); @@ -118,7 +120,7 @@ export class FolderComponent implements AfterViewInit { if (this.type == FolderType.Dataset) this.formDataset.loadExisting(); } - + goToExperimentPageWithPredictor(file: FolderFile, predictor: Predictor) { this.router.navigate(['/experiment/' + file._id + "/" + predictor._id]); } @@ -138,7 +140,7 @@ export class FolderComponent implements AfterViewInit { _initialized: boolean = false; refreshFiles(selectedDatasetId: string | null = null, selectedModelId: string | null = null) { - + this.tabsToShow.forEach(tab => { this.folders[tab] = []; }); @@ -221,7 +223,7 @@ export class FolderComponent implements AfterViewInit { this.predictorsForExp[exp._id].forEach(pred => { const model = this.folders[TabType.MyModels].find(model => model._id == pred.modelId); pred.name = model?.name!; - pred.lastUpdated = model?.lastUpdated!; + //pred.lastUpdated = model?.lastUpdated!; }) /* ------------------------------------------------ */ this.searchTermsChanged(); @@ -267,7 +269,12 @@ export class FolderComponent implements AfterViewInit { searchTermsChanged() { this.filteredFiles.length = 0; if (!this.files) return; - this.filteredFiles.push(...this.files.filter((file) => file.name.toLowerCase().includes(this.searchTerm.toLowerCase()))); + this.filteredFiles.push(...this.files.filter((file) => { + return (file.name.toLowerCase().includes(this.searchTerm.toLowerCase()) + && (!this.forExperiment + || this.type != FolderType.Model + || (this.type == FolderType.Model && (file).type == this.forExperiment.type))) + })); /*if (this.selectedFile) { if (!this.filteredFiles.includes(this.selectedFile)) { if (this.hoverTab === TabType.None && this.getFolderType(this.selectedTab) === this.type) { @@ -282,41 +289,102 @@ export class FolderComponent implements AfterViewInit { listView: boolean = true; - deleteFile(file: FolderFile, event: Event) { - event.stopPropagation(); - this.filteredFiles.splice(this.filteredFiles.indexOf(file), 1); - this.files.splice(this.files.indexOf(file), 1); + loadingAction = false; + selectedFileHasChanges = false; + lastFileData = {}; + + onFileChange() { + console.log(this.selectedFile, this.lastFileData) + setTimeout(() => { + this.selectedFileHasChanges = !((this.selectedTab == TabType.NewFile) || isEqual(this.selectedFile, this.lastFileData)); + }); + } + + updateFile() { + const file = this.selectedFile; + this.loadingAction = true; switch (this.type) { case FolderType.Dataset: - this.datasetsService.deleteDataset(file).subscribe((response) => { - Shared.openDialog("Obaveštenje", "Uspešno ste obrisali odabrani izvor podataka."); - //this.filteredFiles.splice(this.files.indexOf(file), 1); - //this.refreshFiles(); + this.datasetsService.editDataset(file).subscribe((response) => { + this.fileUpdatedSuccess(); }); break; case FolderType.Model: - this.modelsService.deleteModel(file).subscribe((response) => { - Shared.openDialog("Obaveštenje", "Uspešno ste obrisali odabranu konfiguraciju neuronske mreže."); - //this.refreshFiles(); + this.modelsService.editModel(file).subscribe((response) => { + this.fileUpdatedSuccess(); }); + break; + } + } + + fileUpdatedSuccess() { + this.loadingAction = false; + this.selectedFileHasChanges = false; + Object.assign(this.lastFileData, this.selectedFile); + this.refreshFiles(); + } + + deleteFile(file: FolderFile, event: Event, deletePredictor: boolean = false) { + event.stopPropagation(); + + switch (this.type) { + case FolderType.Dataset: + const dataset = file; + Shared.openYesNoDialog("Obriši izvor podataka", "Eksperimenti i trenirani modeli nad ovim izvorom podataka će takođe biti obrisani, da li ste sigurni da želite da obrišete izvor: " + dataset.name + "?", () => { + this.filteredFiles.splice(this.filteredFiles.indexOf(file), 1); + this.files.splice(this.files.indexOf(file), 1); + this.loadingAction = true; + this.datasetsService.deleteDataset(dataset).subscribe((response) => { + this.loadingAction = false; + }); + }) + break; + case FolderType.Model: + const model = file; + Shared.openYesNoDialog("Obriši konfiguraciju neuronske mreže", "Trenirani modeli za ovu konfiguraciju će takođe biti obrisani, da li ste sigurni da želite da obrišete konfiguraciju: " + model.name + "?", () => { + this.filteredFiles.splice(this.filteredFiles.indexOf(file), 1); + this.files.splice(this.files.indexOf(file), 1); + this.loadingAction = true; + this.modelsService.deleteModel(file).subscribe((response) => { + this.loadingAction = false; + }); + }) + break; case FolderType.Experiment: - // this.experimentsService.deleteExperiment(file).subscribe((response) => { - // console.log(response); - // }); - //todo delete za predictor + if (deletePredictor) { + const predictor = file; + Shared.openYesNoDialog("Obriši trenirani model", "Da li ste sigurni da želite da obrišete trenirani model: " + predictor.name + "?", () => { + this.filteredFiles.splice(this.filteredFiles.indexOf(file), 1); + this.files.splice(this.files.indexOf(file), 1); + this.loadingAction = true; + this.predictorsService.deletePredictor(predictor).subscribe((response) => { + this.loadingAction = false; + }); + }); + } else { + const experiment = file; + Shared.openYesNoDialog("Obriši eksperiment", "Trenirani modeli za ovaj eksperiment će takođe biti obrisani, da li ste sigurni da želite da obrišete eksperiment: " + experiment.name + "?", () => { + this.filteredFiles.splice(this.filteredFiles.indexOf(file), 1); + this.files.splice(this.files.indexOf(file), 1); + this.loadingAction = true; + this.experimentsService.deleteExperiment(experiment).subscribe((response) => { + this.loadingAction = false; + }); + }); + } break; } } downloadFile(file: FolderFile, event: Event) { event.stopPropagation(); - if (this.type==FolderType.Dataset) { - const fileId=(file).fileId; - const name=(file).name; - const ext=(file).extension; - if(fileId!=undefined) - this.datasetsService.downloadFile(fileId).subscribe((response)=>{ - FileSaver.saveAs(response,name+ext); + if (this.type == FolderType.Dataset) { + const fileId = (file).fileId; + const name = (file).name; + const ext = (file).extension; + if (fileId != undefined) + this.datasetsService.downloadFile(fileId).subscribe((response) => { + FileSaver.saveAs(response, name + ext); }); @@ -333,7 +401,7 @@ export class FolderComponent implements AfterViewInit { this.datasetsService.stealDataset(file).subscribe((response) => { Shared.openDialog("Obaveštenje", "Uspešno ste dodali javni izvor podataka u vašu kolekciju."); this.refreshFiles(null); - }, (error:any) => { + }, (error: any) => { if (error.error == "Dataset with this name already exists") { Shared.openDialog("Obaveštenje", "Izvor podataka sa ovim imenom postoji u vašoj kolekciji."); } @@ -343,7 +411,7 @@ export class FolderComponent implements AfterViewInit { this.modelsService.stealModel(file).subscribe((response) => { Shared.openDialog("Obaveštenje", "Uspešno ste dodali javnu konfiguraciju neuronske mreže u vašu kolekciju."); this.refreshFiles(null); - }, (error:any) => { + }, (error: any) => { if (error.error == "Model already exisits or validation size is not between 0-1") { Shared.openDialog("Obaveštenje", "Model sa ovim imenom postoji u vašoj kolekciji."); } diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.html b/frontend/src/app/_elements/form-dataset/form-dataset.component.html index 7be838f1..78bb4bd1 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -1,49 +1,48 @@
- -
-
-
- -
-
+
+
+
+ +
+
-
-
- - Naziv - +
+
+ + Naziv + - - Naziv je obavezan - - -
-
-
- - Delimiter - - - {{ option }} - - - -
+ + Naziv je obavezan + +
+
+
+
+ + Delimiter + + + {{ option }} + + +
- +
+
file_upload - - + +
- +
{{(this.begin/10)+1}}...{{getPage()}}
diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts index 19c0083c..35d68526 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts @@ -24,11 +24,12 @@ export class FormDatasetComponent { files: File[] = []; rowsNumber: number = 0; colsNumber: number = 0; - begin:number=0; - step:number=10; - existingFlag:boolean=false; + begin: number = 0; + step: number = 10; + existingFlag: boolean = false; @Input() dataset: Dataset; //dodaj ! potencijalno + @Output() editEvent = new EventEmitter(); tableData: TableData = new TableData(); @@ -43,31 +44,30 @@ export class FormDatasetComponent { } //@ViewChild('fileImportInput', { static: false }) fileImportInput: any; cemu je ovo sluzilo? - resetPagging(){ - this.begin=0; + resetPagging() { + this.begin = 0; } - goBack(){ - if(this.begin-10<0) - this.begin=0; - else - { - this.begin-=10; + goBack() { + if (this.begin - 10 < 0) + this.begin = 0; + else { + this.begin -= 10; this.loadExisting(); } } - goForward(){ - this.begin+=10; - if(this.dataset.rowCount{ - - this.datasetsService.getDatasetFilePaging(this.dataset.fileId,this.begin,this.step).subscribe((file: string | undefined) => { - if (file) { - this.tableData.loaded = true; - this.tableData.numRows = this.dataset.rowCount; - this.tableData.numCols = this.dataset.columnInfo.length; - this.tableData.data = this.csv.csvToArray(header+'\n'+file, (this.dataset.delimiter == "razmak") ? " " : (this.dataset.delimiter == "novi red") ? "\t" : this.dataset.delimiter); - - } - else{ - this.begin-=10; - this.loadExisting(); - } + this.datasetsService.getDatasetHeader(this.dataset.fileId).subscribe((header: string | undefined) => { + + this.datasetsService.getDatasetFilePaging(this.dataset.fileId, this.begin, this.step).subscribe((file: string | undefined) => { + if (file) { + this.tableData.loaded = true; + this.tableData.numRows = this.dataset.rowCount; + this.tableData.numCols = this.dataset.columnInfo.length; + this.tableData.data = this.csv.csvToArray(header + '\n' + file, (this.dataset.delimiter == "razmak") ? " " : (this.dataset.delimiter == "novi red") ? "\t" : this.dataset.delimiter); + + } + else { + this.begin -= 10; + this.loadExisting(); + } + }); }); - }); - + } /*exportAsXLSX():void { diff --git a/frontend/src/app/_elements/form-model/form-model.component.html b/frontend/src/app/_elements/form-model/form-model.component.html index c7a9d5ca..bed69998 100644 --- a/frontend/src/app/_elements/form-model/form-model.component.html +++ b/frontend/src/app/_elements/form-model/form-model.component.html @@ -5,13 +5,13 @@
Naziv - +
Tip problema - + {{ optionName }} @@ -24,7 +24,7 @@
Optimizacija - + {{ optionName }} @@ -35,7 +35,7 @@
Funkcija troška - + {{ optionName }} @@ -48,7 +48,7 @@
Funkcija aktivacije izlaznog sloja - + {{ optionName }} @@ -58,7 +58,7 @@
Stopa učenja - + {{ optionName }} @@ -71,14 +71,14 @@
Broj epoha - +
Broj uzoraka po iteraciji - + {{option}} @@ -102,7 +102,7 @@
- +
@@ -110,13 +110,13 @@
- +
- Nasumični redosled podataka + Nasumični redosled podataka
@@ -220,7 +220,7 @@ Regularizacija - + {{ optionName }} @@ -229,7 +229,7 @@ Stopa regularizacije - + {{ optionName }} diff --git a/frontend/src/app/_elements/form-model/form-model.component.ts b/frontend/src/app/_elements/form-model/form-model.component.ts index 9e6082c4..196d575b 100644 --- a/frontend/src/app/_elements/form-model/form-model.component.ts +++ b/frontend/src/app/_elements/form-model/form-model.component.ts @@ -24,6 +24,8 @@ export class FormModelComponent implements AfterViewInit { this.forProblemType = ProblemType.BinaryClassification; } + @Output() editEvent = new EventEmitter(); + ngAfterViewInit(): void { } selectFormControl = new FormControl('', Validators.required); @@ -80,6 +82,7 @@ export class FormModelComponent implements AfterViewInit { this.newModel.layers.splice(this.newModel.layers.length - 1, 1); this.newModel.hiddenLayers -= 1; this.updateGraph(); + this.editEvent.emit(); } } @@ -89,6 +92,7 @@ export class FormModelComponent implements AfterViewInit { this.newModel.hiddenLayers += 1; this.updateGraph(); + this.editEvent.emit(); } } @@ -100,6 +104,7 @@ export class FormModelComponent implements AfterViewInit { if (this.newModel.layers[index].neurons > 1) { this.newModel.layers[index].neurons -= 1; this.updateGraph(); + this.editEvent.emit(); } } @@ -107,6 +112,7 @@ export class FormModelComponent implements AfterViewInit { if (this.newModel.layers[index].neurons < 18) { this.newModel.layers[index].neurons += 1; this.updateGraph(); + this.editEvent.emit(); } } @@ -119,22 +125,26 @@ export class FormModelComponent implements AfterViewInit { for (let i = 0; i < this.newModel.layers.length; i++) { this.newModel.layers[i].activationFunction = this.selectedActivation; } + this.editEvent.emit(); } changeAllRegularisation() { for (let i = 0; i < this.newModel.layers.length; i++) { this.newModel.layers[i].regularisation = this.selectedRegularisation; } + this.editEvent.emit(); } changeAllRegularisationRate() { for (let i = 0; i < this.newModel.layers.length; i++) { this.newModel.layers[i].regularisationRate = this.selectedRegularisationRate; } + this.editEvent.emit(); } changeAllNumberOfNeurons() { for (let i = 0; i < this.newModel.layers.length; i++) { this.newModel.layers[i].neurons = this.selectedNumberOfNeurons; - this.updateGraph(); } + this.updateGraph(); + this.editEvent.emit(); } updateTestSet(event: MatSliderChange) { this.testSetDistribution = event.value!; @@ -149,5 +159,6 @@ export class FormModelComponent implements AfterViewInit { updateValidation(event: MatSliderChange) { this.validationSize = event.value!; + this.editEvent.emit(); } } diff --git a/frontend/src/app/_elements/spinner/spinner.component.css b/frontend/src/app/_elements/spinner/spinner.component.css new file mode 100644 index 00000000..78adc872 --- /dev/null +++ b/frontend/src/app/_elements/spinner/spinner.component.css @@ -0,0 +1,78 @@ +.wrap { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; +} + +.loader { + color: #ffffff; + font-size: 20px; + margin: auto; + width: 1em; + height: 1em; + border-radius: 50%; + text-indent: -9999em; + -webkit-animation: load4 1.3s infinite linear; + animation: load4 1.3s infinite linear; + -webkit-transform: scale(0.2); + -ms-transform: scale(0.2); + transform: scale(0.2); +} + +@-webkit-keyframes load4 { + 0%, + 100% { + box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0; + } + 12.5% { + box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; + } + 25% { + box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; + } + 37.5% { + box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em; + } + 50% { + box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em; + } + 62.5% { + box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em; + } + 75% { + box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0; + } + 87.5% { + box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em; + } +} + +@keyframes load4 { + 0%, + 100% { + box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0; + } + 12.5% { + box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; + } + 25% { + box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; + } + 37.5% { + box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em; + } + 50% { + box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em; + } + 62.5% { + box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em; + } + 75% { + box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0; + } + 87.5% { + box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em; + } +} \ No newline at end of file diff --git a/frontend/src/app/_elements/spinner/spinner.component.html b/frontend/src/app/_elements/spinner/spinner.component.html new file mode 100644 index 00000000..c655abf0 --- /dev/null +++ b/frontend/src/app/_elements/spinner/spinner.component.html @@ -0,0 +1,3 @@ +
+
Loading...
+
\ No newline at end of file diff --git a/frontend/src/app/_elements/spinner/spinner.component.spec.ts b/frontend/src/app/_elements/spinner/spinner.component.spec.ts new file mode 100644 index 00000000..061f78d5 --- /dev/null +++ b/frontend/src/app/_elements/spinner/spinner.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SpinnerComponent } from './spinner.component'; + +describe('SpinnerComponent', () => { + let component: SpinnerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ SpinnerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(SpinnerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/_elements/spinner/spinner.component.ts b/frontend/src/app/_elements/spinner/spinner.component.ts new file mode 100644 index 00000000..f0080edd --- /dev/null +++ b/frontend/src/app/_elements/spinner/spinner.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-spinner', + templateUrl: './spinner.component.html', + styleUrls: ['./spinner.component.css'] +}) +export class SpinnerComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/frontend/src/app/_pages/experiment/experiment.component.ts b/frontend/src/app/_pages/experiment/experiment.component.ts index 22894131..161c619a 100644 --- a/frontend/src/app/_pages/experiment/experiment.component.ts +++ b/frontend/src/app/_pages/experiment/experiment.component.ts @@ -59,13 +59,13 @@ export class ExperimentComponent implements AfterViewInit, OnInit { this.folderDataset.selectFile(this.dataset); //sad 3. i 4. korak da se ucitaju //this.predictorsService.getPredictor(predictorId!).subscribe((response) => { - let predictor = response; - //this.modelsService.getModelById(predictor.modelId).subscribe((response) => { - this.modelsService.getModelById("62853d70696d62ceeb8db7cd").subscribe((response) => { - //imamo model - this.folderModel.formModel.newModel = response; - //this.metricView.update(predictor.metrics); - }); + let predictor = response; + //this.modelsService.getModelById(predictor.modelId).subscribe((response) => { + this.modelsService.getModelById("62853d70696d62ceeb8db7cd").subscribe((response) => { + //imamo model + this.folderModel.formModel.newModel = response; + //this.metricView.update(predictor.metrics); + }); //}); }); }); @@ -208,6 +208,7 @@ export class ExperimentComponent implements AfterViewInit, OnInit { this.columnTable.loaded = false; this.dataset = undefined; this.experiment.datasetId = ''; + this.step1 = false; return; } const d = dataset; diff --git a/frontend/src/app/_services/experiments.service.ts b/frontend/src/app/_services/experiments.service.ts index f4473c8c..4b209ff0 100644 --- a/frontend/src/app/_services/experiments.service.ts +++ b/frontend/src/app/_services/experiments.service.ts @@ -27,4 +27,8 @@ export class ExperimentsService { updateExperiment(experiment: Experiment): Observable { return this.http.put(`${Configuration.settings.apiURL}/experiment/` + experiment._id, experiment, { headers: this.authService.authHeader() }); } + + deleteExperiment(experiment: Experiment) { + return this.http.delete(`${Configuration.settings.apiURL}/experiment/` + experiment._id, { headers: this.authService.authHeader(), responseType: "text" }); + } } diff --git a/frontend/src/app/_services/models.service.ts b/frontend/src/app/_services/models.service.ts index f5d95ec1..2b8fe8f2 100644 --- a/frontend/src/app/_services/models.service.ts +++ b/frontend/src/app/_services/models.service.ts @@ -51,7 +51,7 @@ export class ModelsService { } editModel(model: Model): Observable { - return this.http.put(`${Configuration.settings.apiURL}/model/`, model, { headers: this.authService.authHeader() }); + return this.http.put(`${Configuration.settings.apiURL}/model/` + model.name, model, { headers: this.authService.authHeader() }); } deleteModel(model: Model) { diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index d44bf6ad..89d53115 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -52,6 +52,7 @@ import { DoughnutChartComponent } from './_elements/_charts/doughnut-chart/dough import { HeatmapComponent } from './_elements/_charts/heatmap/heatmap.component'; import { HeatMapAllModule } from '@syncfusion/ej2-angular-heatmap'; import { MetricViewComponent } from './_elements/metric-view/metric-view.component'; +import { SpinnerComponent } from './_elements/spinner/spinner.component'; export function initializeApp(appConfig: Configuration) { return () => appConfig.load(); @@ -91,7 +92,8 @@ export function initializeApp(appConfig: Configuration) { HeatmapComponent, MetricViewComponent, LineChartComponent, - SaveExperimentDialogComponent + SaveExperimentDialogComponent, + SpinnerComponent ], imports: [ BrowserModule, -- cgit v1.2.3 From 8d41b2ec76f7566bf51598670b51141cad9b66ef Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Thu, 19 May 2022 23:21:53 +0200 Subject: Ispravljen zahtev za updajtovanje dataseta. --- frontend/src/app/_elements/form-dataset/form-dataset.component.html | 2 +- frontend/src/app/_services/datasets.service.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'frontend/src/app/_elements/form-dataset/form-dataset.component.html') diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.html b/frontend/src/app/_elements/form-dataset/form-dataset.component.html index 78bb4bd1..024f58e8 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -10,7 +10,7 @@
Naziv - + diff --git a/frontend/src/app/_services/datasets.service.ts b/frontend/src/app/_services/datasets.service.ts index 3fb4e8f2..2775613c 100644 --- a/frontend/src/app/_services/datasets.service.ts +++ b/frontend/src/app/_services/datasets.service.ts @@ -44,8 +44,8 @@ export class DatasetsService { return this.http.get(`${Configuration.settings.apiURL}/dataset/get/${datasetId}`, { headers: this.authService.authHeader() }); } - editDataset(dataset: Dataset): Observable { - return this.http.put(`${Configuration.settings.apiURL}/dataset/` + dataset._id, dataset, { headers: this.authService.authHeader() }); + editDataset(dataset: Dataset){ + return this.http.put(`${Configuration.settings.apiURL}/dataset/` + dataset._id, dataset, { headers: this.authService.authHeader() ,responseType:'text'}); } deleteDataset(dataset: Dataset) { -- cgit v1.2.3 From b46c5702c8e2900907c355fd7569a18076c681c0 Mon Sep 17 00:00:00 2001 From: Ivan Ljubisavljevic Date: Fri, 20 May 2022 02:49:58 +0200 Subject: Folder fix --- frontend/src/app/_elements/datatable/datatable.component.css | 4 ++++ frontend/src/app/_elements/folder/folder.component.css | 1 + frontend/src/app/_elements/folder/folder.component.html | 7 ++++--- frontend/src/app/_elements/form-dataset/form-dataset.component.css | 2 +- .../src/app/_elements/form-dataset/form-dataset.component.html | 2 +- frontend/src/app/_pages/archive/archive.component.css | 3 +++ frontend/src/app/_pages/archive/archive.component.html | 2 +- 7 files changed, 15 insertions(+), 6 deletions(-) (limited to 'frontend/src/app/_elements/form-dataset/form-dataset.component.html') diff --git a/frontend/src/app/_elements/datatable/datatable.component.css b/frontend/src/app/_elements/datatable/datatable.component.css index e69de29b..4e0a3737 100644 --- a/frontend/src/app/_elements/datatable/datatable.component.css +++ b/frontend/src/app/_elements/datatable/datatable.component.css @@ -0,0 +1,4 @@ +.proba { + max-width: 1620px; + +} \ No newline at end of file diff --git a/frontend/src/app/_elements/folder/folder.component.css b/frontend/src/app/_elements/folder/folder.component.css index 97c13299..682fc645 100644 --- a/frontend/src/app/_elements/folder/folder.component.css +++ b/frontend/src/app/_elements/folder/folder.component.css @@ -1,5 +1,6 @@ #folder { width: 100%; + } #tabs { diff --git a/frontend/src/app/_elements/folder/folder.component.html b/frontend/src/app/_elements/folder/folder.component.html index da182945..66a3ab55 100644 --- a/frontend/src/app/_elements/folder/folder.component.html +++ b/frontend/src/app/_elements/folder/folder.component.html @@ -116,9 +116,10 @@
-
- - +
+ + +
diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.css b/frontend/src/app/_elements/form-dataset/form-dataset.component.css index 99ed5d40..43accd6d 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.css +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.css @@ -7,7 +7,7 @@ .topBar { display: table; width: 100%; - height: 100px; + height: 80px; margin-left: 1.5%; margin-top: 1.5% ; } diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.html b/frontend/src/app/_elements/form-dataset/form-dataset.component.html index 024f58e8..6194a1a8 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -40,7 +40,7 @@ -
+
{{(this.begin/10)+1}}...{{getPage()}}
diff --git a/frontend/src/app/_pages/archive/archive.component.css b/frontend/src/app/_pages/archive/archive.component.css index e69de29b..3a8145dc 100644 --- a/frontend/src/app/_pages/archive/archive.component.css +++ b/frontend/src/app/_pages/archive/archive.component.css @@ -0,0 +1,3 @@ +.pro-center{ + width: 80%; +} \ No newline at end of file diff --git a/frontend/src/app/_pages/archive/archive.component.html b/frontend/src/app/_pages/archive/archive.component.html index f9cce56b..0c5fa8aa 100644 --- a/frontend/src/app/_pages/archive/archive.component.html +++ b/frontend/src/app/_pages/archive/archive.component.html @@ -1,5 +1,5 @@
- +