raven

package
v0.4.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 9, 2015 License: BSD-3-Clause, Apache-2.0 Imports: 21 Imported by: 0

README

raven Build Status

raven is a Go client for the Sentry event/error logging system.

Documentation.

Installation

go get github.com/getsentry/raven-go

Documentation

Overview

Package raven implements a client for the Sentry error logging service.

Example
// ... i.e. raisedErr is incoming error
var raisedErr error
// sentry DSN generated by Sentry server
var sentryDSN string
// r is a request performed when error occured
var r *http.Request
client, err := NewClient(sentryDSN, nil)
if err != nil {
	log.Fatal(err)
}
trace := NewStacktrace(0, 2, nil)
packet := NewPacket(raisedErr.Error(), NewException(raisedErr, trace), NewHttp(r))
eventID, ch := client.Capture(packet, nil)
if err = <-ch; err != nil {
	log.Fatal(err)
}
message := fmt.Sprintf("Captured error with id %s: %q", eventID, raisedErr)
log.Println(message)
Output:

Index

Examples

Constants

View Source
const (
	DEBUG   Severity = "debug"
	INFO             = "info"
	WARNING          = "warning"
	ERROR            = "error"
	FATAL            = "fatal"
)

http://docs.python.org/2/howto/logging.html#logging-levels

Variables

View Source
var ErrPacketDropped = errors.New("raven: packet dropped")
View Source
var MaxQueueBuffer = 100

The maximum number of packets that will be buffered waiting to be delivered. Packets will be dropped if the buffer is full. Used by NewClient.

Functions

This section is empty.

Types

type Client

type Client struct {
	Tags map[string]string

	Transport Transport

	// DropHandler is called when a packet is dropped because the buffer is full.
	DropHandler func(*Packet)
	// contains filtered or unexported fields
}

Client encapsulates a connection to a Sentry server. It must be initialized by calling NewClient. Modification of fields concurrently with Send or after calling Report for the first time is not thread-safe.

func NewClient

func NewClient(dsn string, tags map[string]string) (*Client, error)

NewClient constructs a Sentry client and spawns a background goroutine to handle packets sent by Client.Report.

func (*Client) Capture

func (client *Client) Capture(packet *Packet, captureTags map[string]string) (eventID string, ch chan error)

Capture asynchronously delivers a packet to the Sentry server. It is a no-op when client is nil. A channel is provided if it is important to check for a send's success.

func (*Client) CaptureError

func (client *Client) CaptureError(err error, tags map[string]string, interfaces ...Interface) string

CaptureErrors formats and delivers an errorto the Sentry server. Adds a stacktrace to the packet, excluding the call to this method.

func (*Client) CaptureMessage

func (client *Client) CaptureMessage(message string, tags map[string]string, interfaces ...Interface) string

CaptureMessage formats and delivers a string message to the Sentry server.

func (*Client) CapturePanic

func (client *Client) CapturePanic(f func(), tags map[string]string, interfaces ...Interface)

CapturePanic calls f and then recovers and reports a panic to the Sentry server if it occurs.

func (*Client) Close

func (client *Client) Close()

func (*Client) ProjectID

func (client *Client) ProjectID() string

func (*Client) Release

func (client *Client) Release() string

func (*Client) SetDSN

func (client *Client) SetDSN(dsn string) error

SetDSN updates a client with a new DSN. It safe to call after and concurrently with calls to Report and Send.

func (*Client) SetRelease

func (client *Client) SetRelease(release string)

func (*Client) URL

func (client *Client) URL() string

type Culpriter

type Culpriter interface {
	Culprit() string
}

type Exception

type Exception struct {
	// Required
	Value string `json:"value"`

	// Optional
	Type       string      `json:"type,omitempty"`
	Module     string      `json:"module,omitempty"`
	Stacktrace *Stacktrace `json:"stacktrace,omitempty"`
}

http://sentry.readthedocs.org/en/latest/developer/interfaces/index.html#sentry.interfaces.Exception

func NewException

func NewException(err error, stacktrace *Stacktrace) *Exception

func (*Exception) Class

func (e *Exception) Class() string

func (*Exception) Culprit

func (e *Exception) Culprit() string

type HTTPTransport

type HTTPTransport struct {
	Http http.Client
}

HTTPTransport is the default transport, delivering packets to Sentry via the HTTP API.

func (*HTTPTransport) Send

func (t *HTTPTransport) Send(url, authHeader string, packet *Packet) error

type Http

type Http struct {
	// Required
	URL    string `json:"url"`
	Method string `json:"method"`
	Query  string `json:"query_string,omitempty"`

	// Optional
	Cookies string            `json:"cookies,omitempty"`
	Headers map[string]string `json:"headers,omitempty"`
	Env     map[string]string `json:"env,omitempty"`

	// Must be either a string or map[string]string
	Data interface{} `json:"data,omitempty"`
}

http://sentry.readthedocs.org/en/latest/developer/interfaces/index.html#sentry.interfaces.Http

func NewHttp

func NewHttp(req *http.Request) *Http

func (*Http) Class

func (h *Http) Class() string

type Interface

type Interface interface {
	// The Sentry class name. Example: sentry.interfaces.Stacktrace
	Class() string
}

An Interface is a Sentry interface that will be serialized as JSON. It must implement json.Marshaler or use json struct tags.

type Message

type Message struct {
	// Required
	Message string `json:"message"`

	// Optional
	Params []interface{} `json:"params,omitempty"`
}

http://sentry.readthedocs.org/en/latest/developer/interfaces/index.html#sentry.interfaces.Message

func (*Message) Class

func (m *Message) Class() string

type Packet

type Packet struct {
	// Required
	Message string `json:"message"`

	// Required, set automatically by Client.Send/Report via Packet.Init if blank
	EventID   string    `json:"event_id"`
	Project   string    `json:"project"`
	Timestamp Timestamp `json:"timestamp"`
	Level     Severity  `json:"level"`
	Logger    string    `json:"logger"`

	// Optional
	Release    string                 `json:"release,omitempty"`
	Platform   string                 `json:"platform,omitempty"`
	Culprit    string                 `json:"culprit,omitempty"`
	Tags       Tags                   `json:"tags,omitempty"`
	ServerName string                 `json:"server_name,omitempty"`
	Modules    []map[string]string    `json:"modules,omitempty"`
	Extra      map[string]interface{} `json:"extra,omitempty"`

	Interfaces []Interface `json:"-"`
}

http://sentry.readthedocs.org/en/latest/developer/client/index.html#building-the-json-packet

func NewPacket

func NewPacket(message string, interfaces ...Interface) *Packet

NewPacket constructs a packet with the specified message and interfaces.

func (*Packet) AddTags

func (packet *Packet) AddTags(tags map[string]string)

func (*Packet) Init

func (packet *Packet) Init(project string) error

Init initializes required fields in a packet. It is typically called by Client.Send/Report automatically.

func (*Packet) JSON

func (packet *Packet) JSON() []byte

type Query

type Query struct {
	// Required
	Query string `json:"query"`

	// Optional
	Engine string `json:"engine,omitempty"`
}

http://sentry.readthedocs.org/en/latest/developer/interfaces/index.html#sentry.interfaces.Query

func (*Query) Class

func (q *Query) Class() string

type Severity

type Severity string

type Stacktrace

type Stacktrace struct {
	// Required
	Frames []*StacktraceFrame `json:"frames"`
}

http://sentry.readthedocs.org/en/latest/developer/interfaces/index.html#sentry.interfaces.Stacktrace

func NewStacktrace

func NewStacktrace(skip int, context int, appPackagePrefixes []string) *Stacktrace

Intialize and populate a new stacktrace, skipping skip frames.

context is the number of surrounding lines that should be included for context. Setting context to 3 would try to get seven lines. Setting context to -1 returns one line with no surrounding context, and 0 returns no context.

appPackagePrefixes is a list of prefixes used to check whether a package should be considered "in app".

func (*Stacktrace) Class

func (s *Stacktrace) Class() string

func (*Stacktrace) Culprit

func (s *Stacktrace) Culprit() string

type StacktraceFrame

type StacktraceFrame struct {
	// At least one required
	Filename string `json:"filename,omitempty"`
	Function string `json:"function,omitempty"`
	Module   string `json:"module,omitempty"`

	// Optional
	Lineno       int      `json:"lineno,omitempty"`
	Colno        int      `json:"colno,omitempty"`
	AbsolutePath string   `json:"abs_path,omitempty"`
	ContextLine  string   `json:"context_line,omitempty"`
	PreContext   []string `json:"pre_context,omitempty"`
	PostContext  []string `json:"post_context,omitempty"`
	InApp        *bool    `json:"in_app,omitempty"`
}

func NewStacktraceFrame

func NewStacktraceFrame(pc uintptr, file string, line, context int, appPackagePrefixes []string) *StacktraceFrame

Build a single frame using data returned from runtime.Caller.

context is the number of surrounding lines that should be included for context. Setting context to 3 would try to get seven lines. Setting context to -1 returns one line with no surrounding context, and 0 returns no context.

appPackagePrefixes is a list of prefixes used to check whether a package should be considered "in app".

type Tag

type Tag struct {
	Key   string
	Value string
}

func (*Tag) MarshalJSON

func (tag *Tag) MarshalJSON() ([]byte, error)

func (*Tag) UnmarshalJSON

func (t *Tag) UnmarshalJSON(data []byte) error

type Tags

type Tags []Tag

func (*Tags) UnmarshalJSON

func (t *Tags) UnmarshalJSON(data []byte) error

type Template

type Template struct {
	// Required
	Filename    string `json:"filename"`
	Lineno      int    `json:"lineno"`
	ContextLine string `json:"context_line"`

	// Optional
	PreContext   []string `json:"pre_context,omitempty"`
	PostContext  []string `json:"post_context,omitempty"`
	AbsolutePath string   `json:"abs_path,omitempty"`
}

http://sentry.readthedocs.org/en/latest/developer/interfaces/index.html#sentry.interfaces.Template

func (*Template) Class

func (t *Template) Class() string

type Timestamp

type Timestamp time.Time

func (Timestamp) MarshalJSON

func (t Timestamp) MarshalJSON() ([]byte, error)

func (*Timestamp) UnmarshalJSON

func (timestamp *Timestamp) UnmarshalJSON(data []byte) error

type Transport

type Transport interface {
	Send(url, authHeader string, packet *Packet) error
}

type User

type User struct {
	ID       string `json:"id"`
	Username string `json:"username,omitempty"`
	Email    string `json:"email,omitempty"`
}

http://sentry.readthedocs.org/en/latest/developer/interfaces/index.html#sentry.interfaces.User

func (*User) Class

func (h *User) Class() string

type Writer

type Writer struct {
	Client *Client
	Level  Severity
	Logger string // Logger name reported to Sentry
}

func (*Writer) Write

func (w *Writer) Write(p []byte) (int, error)

Write formats the byte slice p into a string, and sends a message to Sentry at the severity level indicated by the Writer w.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL