76 lines
2.6 KiB
Go
76 lines
2.6 KiB
Go
package api
|
||
|
||
import (
|
||
"context"
|
||
|
||
"gitlab.com/slon/shad-go/distbuild/pkg/build"
|
||
)
|
||
|
||
// JobResult описывает результат работы джоба.
|
||
type JobResult struct {
|
||
ID build.ID
|
||
|
||
Stdout, Stderr []byte
|
||
|
||
ExitCode int
|
||
|
||
// Error описывает сообщение об ошибке, из-за которого джоб не удалось выполнить.
|
||
//
|
||
// Если Error == nil, значит джоб завершился успешно.
|
||
Error *string
|
||
}
|
||
|
||
type WorkerID string
|
||
|
||
func (w WorkerID) String() string {
|
||
return string(w)
|
||
}
|
||
|
||
type HeartbeatRequest struct {
|
||
// WorkerID задаёт персистентный идентификатор данного воркера.
|
||
//
|
||
// WorkerID так же выступает в качестве endpoint-а, к которому можно подключиться по HTTP.
|
||
//
|
||
// В наших тестов, идентификатор будет иметь вид "localhost:%d".
|
||
WorkerID WorkerID
|
||
|
||
// RunningJobs перечисляет список джобов, которые выполняются на этом воркере
|
||
// в данный момент.
|
||
RunningJobs []build.ID
|
||
|
||
DownloadingSources []build.ID
|
||
|
||
DownloadingArtifacts []build.ID
|
||
|
||
// FreeSlots сообщаяет, сколько еще процессов можно запустить на этом воркере.
|
||
FreeSlots int
|
||
|
||
// JobResult сообщает координатору, какие джобы завершили исполнение на этом воркере
|
||
// на этой итерации цикла.
|
||
FinishedJob []JobResult
|
||
|
||
// AddedArtifacts говорит, какие артефакты появились в кеше на этой итерации цикла.
|
||
AddedArtifacts []build.ID
|
||
|
||
// AddedSourceFiles говорит, какие файлы появились в кеше на этой итерации цикла.
|
||
AddedSourceFiles []build.ID
|
||
}
|
||
|
||
// JobSpec описывает джоб, который нужно запустить.
|
||
type JobSpec struct {
|
||
// SourceFiles задаёт список файлов, который должны присутсововать в директории с исходным кодом при запуске этого джоба.
|
||
SourceFiles map[build.ID]string
|
||
|
||
// Artifacts задаёт воркеров, с которых можно скачать артефакты необходимые этом джобу.
|
||
Artifacts map[build.ID]WorkerID
|
||
|
||
build.Job
|
||
}
|
||
|
||
type HeartbeatResponse struct {
|
||
JobsToRun map[build.ID]JobSpec
|
||
}
|
||
|
||
type HeartbeatService interface {
|
||
Heartbeat(ctx context.Context, req *HeartbeatRequest) (*HeartbeatResponse, error)
|
||
}
|