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"
|
|
|
|
|
|
2023-10-03 17:25:41 +00:00
|
|
|
|
"gitlab.com/manytask/itmo-go/public/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
|
|
|
|
}
|