Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/components/gitpod-cli/pkg/utils/logError.go
2500 views
1
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
2
// Licensed under the GNU Affero General Public License (AGPL).
3
// See License.AGPL.txt in the project root for license information.
4
5
package utils
6
7
import (
8
"bytes"
9
"encoding/json"
10
"fmt"
11
"net/http"
12
"net/url"
13
"os"
14
15
"github.com/gitpod-io/gitpod/gitpod-cli/pkg/gitpod"
16
ide_metrics "github.com/gitpod-io/gitpod/ide-metrics-api"
17
"github.com/gitpod-io/gitpod/supervisor/api"
18
"github.com/go-errors/errors"
19
log "github.com/sirupsen/logrus"
20
)
21
22
func LogError(errToReport error, errorMessage string, wsInfo *api.WorkspaceInfoResponse) {
23
log.WithError(errToReport).Error(errorMessage)
24
25
file, err := os.OpenFile(os.TempDir()+"/gitpod-cli-errors.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
26
if err == nil {
27
log.SetOutput(file)
28
} else {
29
log.SetLevel(log.FatalLevel)
30
}
31
32
if wsInfo == nil {
33
log.WithError(err).Error("failed to retrieve workspace info")
34
return
35
}
36
37
parsedUrl, err := url.Parse(wsInfo.GitpodHost)
38
if err != nil {
39
log.WithError(err).Error("cannot parse GitpodHost")
40
return
41
}
42
43
ideMetricsUrl := fmt.Sprintf("https://ide.%s/metrics-api/reportError", parsedUrl.Host)
44
45
reportErrorRequest := &ide_metrics.ReportErrorRequest{
46
ErrorStack: errors.New(errToReport).ErrorStack(),
47
Component: "gitpod-cli",
48
Version: gitpod.Version,
49
UserId: "", // todo: retrieve this from server
50
WorkspaceId: wsInfo.WorkspaceId,
51
InstanceId: wsInfo.InstanceId,
52
Properties: map[string]string{},
53
}
54
55
payload, err := json.Marshal(reportErrorRequest)
56
if err != nil {
57
log.WithError(err).Error("failed to marshal json while attempting to report error")
58
return
59
}
60
61
req, err := http.NewRequest("POST", ideMetricsUrl, bytes.NewBuffer(payload))
62
if err != nil {
63
log.WithError(err).Error("failed to init request for ide-metrics-api")
64
return
65
}
66
67
client := &http.Client{}
68
_, err = client.Do(req)
69
if err != nil {
70
log.WithError(err).Error("cannot report error to ide-metrics-api")
71
return
72
}
73
}
74
75