Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions internal/db/repository/training_task_result_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ func (r *trainingTaskResultRepository) Create(ttr *models.TrainingTaskResult) er
}

func (r *trainingTaskResultRepository) GetByID(id uint) (*models.TrainingTaskResult, error) {
var trainingTask models.TrainingTaskResult
if err := r.db.First(&trainingTask, id).Error; err != nil {
var ttr models.TrainingTaskResult
if err := r.db.Table("training_task_results").Joins("File").First(&ttr, id).Error; err != nil {
return nil, err
}
return &trainingTask, nil
return &ttr, nil
}

func (r *trainingTaskResultRepository) getAll(taskId uint) *gorm.DB {
Expand Down
2 changes: 2 additions & 0 deletions internal/handler/training_task_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ func (h *TrainingTaskHandler) Show(w http.ResponseWriter, r *http.Request) {
TrainingTask models.TrainingTask
ImageFiles []models.TrainingTaskResult
OnnxFiles []models.TrainingTaskResult
LogFiles []models.TrainingTaskResult
}

idStr := r.PathValue("id")
Expand All @@ -110,6 +111,7 @@ func (h *TrainingTaskHandler) Show(w http.ResponseWriter, r *http.Request) {
TrainingTask: *tt.TrainingTask,
ImageFiles: tt.ImageFiles,
OnnxFiles: tt.OnnxFiles,
LogFiles: tt.LogFiles,
})

if err != nil {
Expand Down
8 changes: 4 additions & 4 deletions internal/hash/hash.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ import (

const (
saltLength = 16
memory = 1 * 1024 * 1024 // 1 GB
iterations = 1 // number of iterations
paralellism = 2 // number of threads
keyLength = 32 // size of the derived key
memory = 1 * 1024 * 64 // 64 MB
iterations = 1 // number of iterations
paralellism = 2 // number of threads
keyLength = 32 // size of the derived key
)

func GenerateKey(keyLength uint) (string, error) {
Expand Down
14 changes: 10 additions & 4 deletions internal/service/training_task_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ type TrainingTaskWithResults struct {
TrainingTask *models.TrainingTask
ImageFiles []models.TrainingTaskResult
OnnxFiles []models.TrainingTaskResult
LogFiles []models.TrainingTaskResult
}

type TrainingTaskHelpers struct {
Expand Down Expand Up @@ -122,8 +123,6 @@ func (s *TrainingTaskService) GetByID(id uint) (*TrainingTaskWithResults, error)
if err != nil {
return nil, errInternalServerError
}
} else {
imageFiles = nil
}

var onnxFiles []models.TrainingTaskResult
Expand All @@ -132,14 +131,21 @@ func (s *TrainingTaskService) GetByID(id uint) (*TrainingTaskWithResults, error)
if err != nil {
return nil, errInternalServerError
}
} else {
onnxFiles = nil
}

var logFiles []models.TrainingTaskResult
if trainingTask.Status != models.Queued {
logFiles, err = s.TrainingTaskResult.GetByType(trainingTask.ID, models.Log)
if err != nil {
return nil, errInternalServerError
}
}

return &TrainingTaskWithResults{
TrainingTask: trainingTask,
ImageFiles: imageFiles,
OnnxFiles: onnxFiles,
LogFiles: logFiles,
}, nil
}

Expand Down
2 changes: 1 addition & 1 deletion static/css/output.css

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion test/repository/training_task_result_repository_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ func TestTrainingTaskResultRepository_GetById(t *testing.T) {

rows := sqlmock.NewRows([]string{"id", "name", "type", "description", "file_id", "training_task_id"})
rows = rows.AddRow(1, ttr.Name, ttr.Type, ttr.Description, ttr.FileId, ttr.TrainingTaskId)
mock.ExpectQuery("SELECT (.*) FROM \"training_task_results\" WHERE \"training_task_results\".\"id\" = (.+) LIMIT (.+)").
mock.ExpectQuery("SELECT (.*) FROM \"training_task_results\" LEFT JOIN \"files\" (.+) WHERE \"training_task_results\".\"id\" = (.+) LIMIT (.+)").
WillReturnRows(rows)

result, err := trainingTaskResultRepo.GetByID(1)
Expand Down
23 changes: 23 additions & 0 deletions test/service/training_task_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ func TestTrainingTaskService_GetByID_Training(t *testing.T) {
ut.TTRepo.On("GetByID", ttId).Return(&tt, nil)
ut.TTRRepo.On("GetByType", ttId, models.Onnx).Return([]models.TrainingTaskResult{}, nil)
ut.TTRRepo.On("GetByType", ttId, models.Image).Return([]models.TrainingTaskResult{}, nil)
ut.TTRRepo.On("GetByType", ttId, models.Log).Return([]models.TrainingTaskResult{}, nil)

// Act
ttWithRes, err := ttService.GetByID(ttId)
Expand All @@ -217,6 +218,7 @@ func TestTrainingTaskService_GetByID_Training(t *testing.T) {
assert.Equal(t, tt.Status, ttWithRes.TrainingTask.Status)
assert.Equal(t, []models.TrainingTaskResult(nil), ttWithRes.OnnxFiles)
assert.Equal(t, []models.TrainingTaskResult{}, ttWithRes.ImageFiles)
assert.Equal(t, []models.TrainingTaskResult{}, ttWithRes.LogFiles)
}

func TestTrainingTaskService_GetByID_Benchmarking(t *testing.T) {
Expand All @@ -238,9 +240,15 @@ func TestTrainingTaskService_GetByID_Benchmarking(t *testing.T) {
Name: "file.onnx", Path: "./file.onnx", Size: 12312,
}, TrainingTaskId: ttId},
}
logFiles := []models.TrainingTaskResult{
{Name: "Log result file", Type: models.Log, Description: "example", FileId: 1, File: models.File{
Name: "file.log", Path: "./file.log", Size: 12312,
}, TrainingTaskId: ttId},
}
ut.TTRepo.On("GetByID", ttId).Return(&tt, nil)
ut.TTRRepo.On("GetByType", ttId, models.Onnx).Return(onnxFiles, nil)
ut.TTRRepo.On("GetByType", ttId, models.Image).Return([]models.TrainingTaskResult{}, nil)
ut.TTRRepo.On("GetByType", ttId, models.Log).Return(logFiles, nil)

// Act
ttWithRes, err := ttService.GetByID(ttId)
Expand All @@ -253,6 +261,7 @@ func TestTrainingTaskService_GetByID_Benchmarking(t *testing.T) {
assert.Equal(t, tt.Status, ttWithRes.TrainingTask.Status)
assert.True(t, reflect.DeepEqual(onnxFiles, ttWithRes.OnnxFiles))
assert.Equal(t, []models.TrainingTaskResult{}, ttWithRes.ImageFiles)
assert.True(t, reflect.DeepEqual(logFiles, ttWithRes.LogFiles))
}

func TestTrainingTaskService_GetByID_Completed(t *testing.T) {
Expand All @@ -274,6 +283,11 @@ func TestTrainingTaskService_GetByID_Completed(t *testing.T) {
Name: "file.onnx", Path: "./file.onnx", Size: 12312,
}, TrainingTaskId: ttId},
}
logFiles := []models.TrainingTaskResult{
{Name: "Log result file", Type: models.Log, Description: "example", FileId: 1, File: models.File{
Name: "file.log", Path: "./file.log", Size: 12312,
}, TrainingTaskId: ttId},
}
imageFiles := []models.TrainingTaskResult{
{Name: "Image result file", Type: models.Image, Description: "image", FileId: 2, File: models.File{
Name: "file.png", Path: "./file.png", Size: 12312231,
Expand All @@ -282,6 +296,7 @@ func TestTrainingTaskService_GetByID_Completed(t *testing.T) {
ut.TTRepo.On("GetByID", ttId).Return(&tt, nil)
ut.TTRRepo.On("GetByType", ttId, models.Onnx).Return(onnxFiles, nil)
ut.TTRRepo.On("GetByType", ttId, models.Image).Return(imageFiles, nil)
ut.TTRRepo.On("GetByType", ttId, models.Log).Return(logFiles, nil)

// Act
ttWithRes, err := ttService.GetByID(ttId)
Expand All @@ -294,6 +309,7 @@ func TestTrainingTaskService_GetByID_Completed(t *testing.T) {
assert.Equal(t, tt.Status, ttWithRes.TrainingTask.Status)
assert.True(t, reflect.DeepEqual(onnxFiles, ttWithRes.OnnxFiles))
assert.True(t, reflect.DeepEqual(imageFiles, ttWithRes.ImageFiles))
assert.True(t, reflect.DeepEqual(logFiles, ttWithRes.LogFiles))
}

func TestTrainingTaskService_GetByID_Uploaded(t *testing.T) {
Expand All @@ -315,6 +331,11 @@ func TestTrainingTaskService_GetByID_Uploaded(t *testing.T) {
Name: "file.onnx", Path: "./file.onnx", Size: 12312,
}, TrainingTaskId: ttId},
}
logFiles := []models.TrainingTaskResult{
{Name: "Log result file", Type: models.Log, Description: "example", FileId: 1, File: models.File{
Name: "file.log", Path: "./file.log", Size: 12312,
}, TrainingTaskId: ttId},
}
imageFiles := []models.TrainingTaskResult{
{Name: "Image result file", Type: models.Image, Description: "image", FileId: 2, File: models.File{
Name: "file.png", Path: "./file.png", Size: 12312231,
Expand All @@ -323,6 +344,7 @@ func TestTrainingTaskService_GetByID_Uploaded(t *testing.T) {
ut.TTRepo.On("GetByID", ttId).Return(&tt, nil)
ut.TTRRepo.On("GetByType", ttId, models.Onnx).Return(onnxFiles, nil)
ut.TTRRepo.On("GetByType", ttId, models.Image).Return(imageFiles, nil)
ut.TTRRepo.On("GetByType", ttId, models.Log).Return(logFiles, nil)

// Act
ttWithRes, err := ttService.GetByID(ttId)
Expand All @@ -335,6 +357,7 @@ func TestTrainingTaskService_GetByID_Uploaded(t *testing.T) {
assert.Equal(t, tt.Status, ttWithRes.TrainingTask.Status)
assert.True(t, reflect.DeepEqual(onnxFiles, ttWithRes.OnnxFiles))
assert.True(t, reflect.DeepEqual(imageFiles, ttWithRes.ImageFiles))
assert.True(t, reflect.DeepEqual(logFiles, ttWithRes.LogFiles))
}

type mockReadCloser struct{}
Expand Down
4 changes: 2 additions & 2 deletions web/templates/training-datasets/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
hx-delete="/training-datasets/{{.ID}}"
hx-confirm="Are you sure you want to remove {{ .Name }}?">Remove</button>
</div>
<div class="flex flex-row flex-wrap gap-3">
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-2">
{{ range .AODFiles }}
<div class="file flex items-center gap-4 p-2 rounded-md bg-sky-200 dark:bg-sky-600" data-path="{{ .Path }}">
<div class="file flex justify-between items-center gap-4 p-2 rounded-md bg-sky-200 dark:bg-sky-600" data-path="{{ .Path }}">
<div class="flex justify-start gap-2 items-center">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" class="size-4 lg:size-6">
Expand Down
2 changes: 1 addition & 1 deletion web/templates/training-tasks/image-slider.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
</style>
<div class="flex flex-col justify-center gap-2">
<div class="w-full max-h-96 overflow-y-auto rounded shadow-md">
<ul class="grid grid-cols-3 auto-cols-auto gap-2 flex-wrap">
<ul class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 auto-cols-auto gap-3 flex-wrap">
{{ range $index, $image := . }}
<li class="flex gap-2 items-center cursor-pointer group" onclick="showImage({{ $index }})">
<img src="{{ $image.File.Path }}" alt="{{ $image.Name }}"
Expand Down
36 changes: 29 additions & 7 deletions web/templates/training-tasks/show.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ <h1 class="text-xl font-bold">Image Results Gallery</h1>
{{ end }}
{{ if .OnnxFiles }}
<h1 class="text-xl font-bold">ONNX Files</h1>
<div class="grid grid-cols-7 gap-2">
<div class="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-7 gap-3">
{{ range .OnnxFiles }}
<div class="flex flex-col gap-2 items-center">
<div class="font-semibold">
<div class="flex flex-col gap-2 items-center rounded-lg p-3 bg-sky-200 dark:bg-sky-600">
<div class="font-semibold text-lg">
{{ .Name }}
</div>
<a href="{{ .File.Path }}" download class="bg-sky-800 px-4 py-2 text-white rounded-lg hover:bg-sky-700">
Expand All @@ -27,17 +27,39 @@ <h1 class="text-xl font-bold">ONNX Files</h1>
</div>
{{ end }}
{{ if .TrainingTask.Status.IsCompleted }}
<button class="bg-sky-800 hover:bg-sky-700 text-gray-50 rounded-lg text-lg font-bold py-1 px-2"
<button class="bg-sky-800 hover:bg-sky-700 text-gray-50 rounded-lg text-lg font-bold py-1 px-2 col-start-2 md:col-start-4 lg:col-start-auto"
hx-post="/training-tasks/{{ .TrainingTask.ID }}/upload-to-ccdb" hx-swap="none"
hx-confirm="Are you sure you want to upload {{ .TrainingTask.Name }}?">{{ if .TrainingTask.Status.IsUploaded }}Reupload{{ else }}Upload{{ end }} to CCDB</button>
hx-confirm="Are you sure you want to upload {{ .TrainingTask.Name }}?">{{ if .TrainingTask.Status.IsUploaded
}}Reupload{{ else }}Upload{{ end }} to CCDB</button>
{{ end }}
</div>
{{ end }}

{{ if .LogFiles }}
<h1 class="text-xl font-bold">Log Files</h1>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-3">
{{ range .LogFiles }}
<div class="flex flex-col gap-3 justify-between items-start rounded-lg p-3 bg-sky-200 dark:bg-sky-600">
<div class="text-lg">{{ .Name }}</div>
<div>{{ .Description }}</div>
<div class="flex gap-2 self-end">
<a href="{{ .File.Path }}" target="_blank" class="bg-sky-800 px-4 py-2 text-white rounded-lg hover:bg-sky-700">
Show
</a>
<a href="{{ .File.Path }}" download class="bg-sky-800 px-4 py-2 text-white rounded-lg hover:bg-sky-700">
Download
</a>
</div>
</div>
{{ end }}
</div>
{{ end }}

<h2 class="text-xl text-right">Training dataset - {{ .TrainingTask.TrainingDataset.Name }}</h2>
<div class="flex flex-wrap gap-3">
<div class="flex flex-wrap gap-3 text-sm">
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2 text-sm">
{{ range .TrainingTask.TrainingDataset.AODFiles }}
<div class="file flex items-center gap-4 p-2 rounded-md bg-sky-200 dark:bg-sky-600" data-path="{{ .Path }}">
<div class="file flex justify-between items-center gap-4 p-2 rounded-md bg-sky-200 dark:bg-sky-600" data-path="{{ .Path }}">
<div class="flex justify-start gap-2 items-center">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" class="size-4 lg:size-6">
Expand Down
Loading