Path: blob/main/components/supervisor/cmd/error-report.go
2498 views
// Copyright (c) 2023 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 cmd56import (7"bytes"8"context"9"encoding/json"10"fmt"11"net/http"12"net/url"13"os"14"time"1516"github.com/gitpod-io/gitpod/supervisor/api"17log "github.com/sirupsen/logrus"18"github.com/spf13/cobra"1920ide_metrics "github.com/gitpod-io/gitpod/ide-metrics-api"21)2223var errorReportCmdOpts struct {24data string25}2627// errorReportCmd represents the errorReportCmd command28var errorReportCmd = &cobra.Command{29Use: "error-report",30Long: "Sending error report to ide-metrics",31Hidden: true,32Args: cobra.ExactArgs(0),33Run: func(cmd *cobra.Command, args []string) {34file, err := os.OpenFile(os.TempDir()+"/supervisor-errors.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)35if err == nil {36log.SetOutput(file)37defer file.Close()38} else {39log.SetLevel(log.FatalLevel)40}4142ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)43defer cancel()4445var data ide_metrics.ReportErrorRequest46err = json.Unmarshal([]byte(errorReportCmdOpts.data), &data)47if err != nil {48log.Fatal(err)49}5051conn := dialSupervisor()52defer conn.Close()53wsInfo, err := api.NewInfoServiceClient(conn).WorkspaceInfo(ctx, &api.WorkspaceInfoRequest{})54if err != nil {55log.Fatal(err)56}5758data.WorkspaceId = wsInfo.WorkspaceId59data.InstanceId = wsInfo.InstanceId60data.UserId = wsInfo.OwnerId6162parsedUrl, err := url.Parse(wsInfo.GitpodHost)63if err != nil {64log.Fatal("cannot parse GitpodHost")65return66}6768ideMetricsUrl := fmt.Sprintf("https://ide.%s/metrics-api/reportError", parsedUrl.Host)6970payload, err := json.Marshal(data)71if err != nil {72log.WithError(err).Error("failed to marshal json while attempting to report error")73return74}7576req, err := http.NewRequest("POST", ideMetricsUrl, bytes.NewBuffer(payload))77if err != nil {78log.WithError(err).Error("failed to init request for ide-metrics-api")79return80}8182client := &http.Client{}83_, err = client.Do(req)84if err != nil {85log.WithError(err).Error("cannot report error to ide-metrics-api")86return87}88},89}9091func init() {92rootCmd.AddCommand(errorReportCmd)93errorReportCmd.Flags().StringVarP(&errorReportCmdOpts.data, "data", "", "", "json data")9495_ = errorReportCmd.MarkFlagRequired("data")96}979899