shad-go/distbuild/pkg/api/heartbeat.go
2020-04-05 00:49:25 +03:00

76 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}