func()

in internal/task_request/task_request.go [115:166]


func (h *taskRequestTimer) SendRequest(ctx context.Context) ([]byte, error) {
	fullURL, err := url.JoinPath(h.gitLabURL, apiBasePath, h.nodeUUID, "heartbeat")
	response := []byte{}
	if err != nil {
		return response, err
	}

	payload, err := h.buildRequestPayload()
	if err != nil {
		return response, err
	}
	requestCtx, requestCancel := context.WithTimeout(ctx, requestTimeout)
	defer requestCancel()
	req, err := http.NewRequestWithContext(requestCtx, http.MethodPost, fullURL, bytes.NewReader(payload))
	if err != nil {
		return response, err
	}

	tokenString, authErr := h.authenticator()
	if authErr != nil {
		return response, authErr
	}

	req.Header = http.Header{
		"Accept":            {"application/json"},
		apiSecretHeaderName: {tokenString},
	}

	if payload != nil {
		req.Header.Set("Content-Type", "application/json")
	}

	client := http.Client{}
	resp, err := client.Do(req) //nolint:bodyclose
	if err != nil {
		return response, err
	}

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return body, err
	}

	if resp.StatusCode != http.StatusOK {
		return body, fmt.Errorf("TaskRequest responded with [%d]", resp.StatusCode)
	}

	slog.Debug("TaskRequest", "status", resp.StatusCode, "body", body)
	slog.Info("TaskRequest", "status", resp.StatusCode)

	return body, nil
}