mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-24 03:06:38 +00:00
change api and apply new schema
This commit is contained in:
@@ -62,7 +62,7 @@ func (h *Handler) CreateJob(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
job, err := types.NewJob(userAuth.UserId, userAuth.AccountId, peerID, types.JobType(req.Type), req.Parameters)
|
||||
job, err := types.NewJob(userAuth.UserId, userAuth.AccountId, peerID, req)
|
||||
if err != nil {
|
||||
util.WriteError(ctx, err, w)
|
||||
return
|
||||
@@ -72,7 +72,7 @@ func (h *Handler) CreateJob(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
util.WriteJSONObject(ctx, w, job)
|
||||
util.WriteJSONObject(ctx, w, toSingleJobResponse(job))
|
||||
}
|
||||
|
||||
func (h *Handler) ListJobs(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -92,7 +92,12 @@ func (h *Handler) ListJobs(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
util.WriteJSONObject(ctx, w, jobs)
|
||||
respBody := make([]*api.Job, 0, len(jobs))
|
||||
for _, job := range jobs {
|
||||
respBody = append(respBody, toSingleJobResponse(job))
|
||||
}
|
||||
|
||||
util.WriteJSONObject(ctx, w, respBody)
|
||||
}
|
||||
|
||||
func (h *Handler) GetJob(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -113,7 +118,7 @@ func (h *Handler) GetJob(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
util.WriteJSONObject(ctx, w, job)
|
||||
util.WriteJSONObject(ctx, w, toSingleJobResponse(job))
|
||||
}
|
||||
|
||||
func (h *Handler) checkPeerStatus(peer *nbpeer.Peer) (*nbpeer.Peer, error) {
|
||||
@@ -496,6 +501,29 @@ func toPeerListItemResponse(peer *nbpeer.Peer, groupsInfo []api.GroupMinimum, dn
|
||||
}
|
||||
}
|
||||
|
||||
func toSingleJobResponse(job *types.Job) *api.Job {
|
||||
var parameters map[string]any
|
||||
job.DecodeParameters(¶meters)
|
||||
|
||||
return &api.Job{
|
||||
Id: job.ID,
|
||||
Status: (*api.JobStatus)(&job.Status),
|
||||
CompletedAt: job.CompletedAt,
|
||||
CreatedAt: job.CreatedAt,
|
||||
FailedReason: &job.FailedReason,
|
||||
TriggeredBy: job.TriggeredBy,
|
||||
Workload: struct {
|
||||
Parameters *map[string]any "json:\"parameters,omitempty\""
|
||||
Result *string "json:\"result,omitempty\""
|
||||
Type *api.JobWorkloadType "json:\"type,omitempty\""
|
||||
}{
|
||||
Type: (*api.JobWorkloadType)(&job.Type),
|
||||
Parameters: ¶meters,
|
||||
Result: &job.Result,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func fqdn(peer *nbpeer.Peer, dnsDomain string) string {
|
||||
fqdn := peer.FQDN(dnsDomain)
|
||||
if fqdn == "" {
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/netbirdio/netbird/shared/management/http/api"
|
||||
)
|
||||
|
||||
type JobStatus string
|
||||
@@ -65,19 +66,27 @@ type JobParametersBundle struct {
|
||||
}
|
||||
|
||||
// NewJob creates a new job with default fields and validation
|
||||
func NewJob(triggeredBy, accountID, peerID string, jobType JobType, parameters map[string]any) (*Job, error) {
|
||||
func NewJob(triggeredBy, accountID, peerID string, req *api.JobRequest) (*Job, error) {
|
||||
if req.Workload.Type == nil {
|
||||
return nil, fmt.Errorf("Job type required")
|
||||
}
|
||||
|
||||
if req.Workload.Parameters == nil {
|
||||
return nil, fmt.Errorf("Job parameters required")
|
||||
}
|
||||
|
||||
job := &Job{
|
||||
ID: uuid.New().String(),
|
||||
TriggeredBy: triggeredBy,
|
||||
PeerID: peerID,
|
||||
AccountID: accountID,
|
||||
Type: jobType,
|
||||
Type: JobType(*req.Workload.Type),
|
||||
Status: JobStatusPending,
|
||||
CreatedAt: time.Now().UTC(),
|
||||
}
|
||||
|
||||
// Encode parameters
|
||||
if err := job.encodeParameters(parameters); err != nil {
|
||||
if err := job.encodeParameters(*req.Workload.Parameters); err != nil {
|
||||
return nil, fmt.Errorf("failed to encode job parameters: %w", err)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user