| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- package bugsnag
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "net/http"
- )
- type payload struct {
- *Event
- *Configuration
- }
- type hash map[string]interface{}
- func (p *payload) deliver() error {
- if len(p.APIKey) != 32 {
- return fmt.Errorf("bugsnag/payload.deliver: invalid api key")
- }
- buf, err := json.Marshal(p)
- if err != nil {
- return fmt.Errorf("bugsnag/payload.deliver: %v", err)
- }
- client := http.Client{
- Transport: p.Transport,
- }
- resp, err := client.Post(p.Endpoint, "application/json", bytes.NewBuffer(buf))
- if err != nil {
- return fmt.Errorf("bugsnag/payload.deliver: %v", err)
- }
- defer resp.Body.Close()
- if resp.StatusCode != 200 {
- return fmt.Errorf("bugsnag/payload.deliver: Got HTTP %s\n", resp.Status)
- }
- return nil
- }
- func (p *payload) MarshalJSON() ([]byte, error) {
- severityReason := hash{
- "type": p.handledState.SeverityReason,
- }
- if p.handledState.Framework != "" {
- severityReason["attributes"] = hash{
- "framework": p.handledState.Framework,
- }
- }
- data := hash{
- "apiKey": p.APIKey,
- "notifier": hash{
- "name": "Bugsnag Go",
- "url": "https://github.com/bugsnag/bugsnag-go",
- "version": VERSION,
- },
- "events": []hash{
- {
- "payloadVersion": "2",
- "exceptions": []hash{
- {
- "errorClass": p.ErrorClass,
- "message": p.Message,
- "stacktrace": p.Stacktrace,
- },
- },
- "severity": p.Severity.String,
- "severityReason": severityReason,
- "unhandled": p.handledState.Unhandled,
- "app": hash{
- "releaseStage": p.ReleaseStage,
- },
- "user": p.User,
- "metaData": p.MetaData.sanitize(p.ParamsFilters),
- },
- },
- }
- event := data["events"].([]hash)[0]
- if p.Context != "" {
- event["context"] = p.Context
- }
- if p.GroupingHash != "" {
- event["groupingHash"] = p.GroupingHash
- }
- if p.Hostname != "" {
- event["device"] = hash{
- "hostname": p.Hostname,
- }
- }
- if p.AppType != "" {
- event["app"].(hash)["type"] = p.AppType
- }
- if p.AppVersion != "" {
- event["app"].(hash)["version"] = p.AppVersion
- }
- return json.Marshal(data)
- }
|