shad-go/distbuild/pkg/api/heartbeat.go

70 lines
2.4 KiB
Go
Raw Permalink Normal View History

2020-03-29 16:03:07 +00:00
package api
2020-03-10 12:08:59 +00:00
import (
2020-03-29 17:35:39 +00:00
"context"
"gitlab.com/slon/shad-go/distbuild/pkg/build"
2020-03-10 12:08:59 +00:00
)
2020-03-23 20:58:08 +00:00
// JobResult описывает результат работы джоба.
type JobResult struct {
2020-03-10 12:08:59 +00:00
ID build.ID
Stdout, Stderr []byte
ExitCode int
// Error описывает сообщение об ошибке, из-за которого джоб не удалось выполнить.
//
// Если Error == nil, значит джоб завершился успешно.
Error *string
}
2020-03-27 22:52:54 +00:00
type WorkerID string
2020-03-28 21:34:09 +00:00
func (w WorkerID) String() string {
return string(w)
}
2020-03-10 12:08:59 +00:00
type HeartbeatRequest struct {
// WorkerID задаёт персистентный идентификатор данного воркера.
//
2021-05-15 13:48:29 +00:00
// WorkerID также выступает в качестве endpoint-а, к которому можно подключиться по HTTP.
2020-03-10 12:08:59 +00:00
//
2021-05-15 13:48:29 +00:00
// В наших тестах идентификатор будет иметь вид "localhost:%d".
2020-03-27 22:52:54 +00:00
WorkerID WorkerID
2020-03-10 12:08:59 +00:00
// RunningJobs перечисляет список джобов, которые выполняются на этом воркере
// в данный момент.
RunningJobs []build.ID
2020-04-05 15:19:59 +00:00
// FreeSlots сообщает, сколько еще процессов можно запустить на этом воркере.
2020-03-10 12:08:59 +00:00
FreeSlots int
2020-03-23 20:58:08 +00:00
// JobResult сообщает координатору, какие джобы завершили исполнение на этом воркере
2020-03-10 12:08:59 +00:00
// на этой итерации цикла.
2020-03-23 20:58:08 +00:00
FinishedJob []JobResult
2020-03-10 12:08:59 +00:00
// AddedArtifacts говорит, какие артефакты появились в кеше на этой итерации цикла.
AddedArtifacts []build.ID
}
// JobSpec описывает джоб, который нужно запустить.
type JobSpec struct {
2020-04-05 15:19:59 +00:00
// SourceFiles задаёт список файлов, который должны присутствовать в директории с исходным кодом при запуске этого джоба.
2020-03-10 12:08:59 +00:00
SourceFiles map[build.ID]string
2021-05-15 13:54:26 +00:00
// Artifacts задаёт воркеров, с которых можно скачать артефакты необходимые этому джобу.
2020-04-04 21:13:45 +00:00
Artifacts map[build.ID]WorkerID
2020-04-04 21:49:25 +00:00
build.Job
2020-03-10 12:08:59 +00:00
}
2020-03-29 17:35:39 +00:00
type HeartbeatResponse struct {
JobsToRun map[build.ID]JobSpec
}
type HeartbeatService interface {
Heartbeat(ctx context.Context, req *HeartbeatRequest) (*HeartbeatResponse, error)
2020-03-10 12:08:59 +00:00
}