Path: blob/main/components/gitpod-cli/pkg/utils/logError.go
2500 views
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package utils56import (7"bytes"8"encoding/json"9"fmt"10"net/http"11"net/url"12"os"1314"github.com/gitpod-io/gitpod/gitpod-cli/pkg/gitpod"15ide_metrics "github.com/gitpod-io/gitpod/ide-metrics-api"16"github.com/gitpod-io/gitpod/supervisor/api"17"github.com/go-errors/errors"18log "github.com/sirupsen/logrus"19)2021func LogError(errToReport error, errorMessage string, wsInfo *api.WorkspaceInfoResponse) {22log.WithError(errToReport).Error(errorMessage)2324file, err := os.OpenFile(os.TempDir()+"/gitpod-cli-errors.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)25if err == nil {26log.SetOutput(file)27} else {28log.SetLevel(log.FatalLevel)29}3031if wsInfo == nil {32log.WithError(err).Error("failed to retrieve workspace info")33return34}3536parsedUrl, err := url.Parse(wsInfo.GitpodHost)37if err != nil {38log.WithError(err).Error("cannot parse GitpodHost")39return40}4142ideMetricsUrl := fmt.Sprintf("https://ide.%s/metrics-api/reportError", parsedUrl.Host)4344reportErrorRequest := &ide_metrics.ReportErrorRequest{45ErrorStack: errors.New(errToReport).ErrorStack(),46Component: "gitpod-cli",47Version: gitpod.Version,48UserId: "", // todo: retrieve this from server49WorkspaceId: wsInfo.WorkspaceId,50InstanceId: wsInfo.InstanceId,51Properties: map[string]string{},52}5354payload, err := json.Marshal(reportErrorRequest)55if err != nil {56log.WithError(err).Error("failed to marshal json while attempting to report error")57return58}5960req, err := http.NewRequest("POST", ideMetricsUrl, bytes.NewBuffer(payload))61if err != nil {62log.WithError(err).Error("failed to init request for ide-metrics-api")63return64}6566client := &http.Client{}67_, err = client.Do(req)68if err != nil {69log.WithError(err).Error("cannot report error to ide-metrics-api")70return71}72}737475