122 lines
3.2 KiB
Python
122 lines
3.2 KiB
Python
"""
|
|
raven.scripts.runner
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
:copyright: (c) 2012 by the Sentry Team, see AUTHORS for more details.
|
|
:license: BSD, see LICENSE for more details.
|
|
"""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import print_function
|
|
|
|
import logging
|
|
import os
|
|
import sys
|
|
import time
|
|
|
|
from optparse import OptionParser
|
|
|
|
from raven import Client, get_version
|
|
from raven.utils.json import json
|
|
|
|
|
|
def store_json(option, opt_str, value, parser):
|
|
try:
|
|
value = json.loads(value)
|
|
except ValueError:
|
|
print("Invalid JSON was used for option %s. Received: %s" % (opt_str, value))
|
|
sys.exit(1)
|
|
setattr(parser.values, option.dest, value)
|
|
|
|
|
|
def get_loadavg():
|
|
if hasattr(os, 'getloadavg'):
|
|
return os.getloadavg()
|
|
return None
|
|
|
|
|
|
def get_uid():
|
|
try:
|
|
import pwd
|
|
except ImportError:
|
|
return None
|
|
return pwd.getpwuid(os.geteuid())[0]
|
|
|
|
|
|
def send_test_message(client, options):
|
|
sys.stdout.write("Client configuration:\n")
|
|
for k in ('servers', 'project', 'public_key', 'secret_key'):
|
|
sys.stdout.write(' %-15s: %s\n' % (k, getattr(client, k)))
|
|
sys.stdout.write('\n')
|
|
|
|
remote_config = client.remote
|
|
if not remote_config.is_active():
|
|
sys.stdout.write("Error: DSN configuration is not valid!\n")
|
|
sys.exit(1)
|
|
|
|
if not client.is_enabled():
|
|
sys.stdout.write('Error: Client reports as being disabled!\n')
|
|
sys.exit(1)
|
|
|
|
data = options.get('data', {
|
|
'culprit': 'raven.scripts.runner',
|
|
'logger': 'raven.test',
|
|
'request': {
|
|
'method': 'GET',
|
|
'url': 'http://example.com',
|
|
}
|
|
})
|
|
|
|
sys.stdout.write('Sending a test message... ')
|
|
sys.stdout.flush()
|
|
|
|
ident = client.get_ident(client.captureMessage(
|
|
message='This is a test message generated using ``raven test``',
|
|
data=data,
|
|
level=logging.INFO,
|
|
stack=True,
|
|
tags=options.get('tags', {}),
|
|
extra={
|
|
'user': get_uid(),
|
|
'loadavg': get_loadavg(),
|
|
},
|
|
))
|
|
|
|
sys.stdout.write('Event ID was %r\n' % (ident,))
|
|
|
|
|
|
def main():
|
|
root = logging.getLogger('sentry.errors')
|
|
root.setLevel(logging.DEBUG)
|
|
# if len(root.handlers) == 0:
|
|
# root.addHandler(logging.StreamHandler())
|
|
|
|
parser = OptionParser(version=get_version())
|
|
parser.add_option("--data", action="callback", callback=store_json,
|
|
type="string", nargs=1, dest="data")
|
|
parser.add_option("--tags", action="callback", callback=store_json,
|
|
type="string", nargs=1, dest="tags")
|
|
(opts, args) = parser.parse_args()
|
|
|
|
dsn = ' '.join(args[1:]) or os.environ.get('SENTRY_DSN')
|
|
if not dsn:
|
|
print("Error: No configuration detected!")
|
|
print("You must either pass a DSN to the command, or set the SENTRY_DSN environment variable.")
|
|
sys.exit(1)
|
|
|
|
print("Using DSN configuration:")
|
|
print(" ", dsn)
|
|
print()
|
|
|
|
client = Client(dsn, include_paths=['raven'])
|
|
|
|
send_test_message(client, opts.__dict__)
|
|
|
|
# TODO(dcramer): correctly support async models
|
|
time.sleep(3)
|
|
if client.state.did_fail():
|
|
sys.stdout.write('error!\n')
|
|
sys.exit(1)
|
|
|
|
sys.stdout.write('success!\n')
|