Giter Club home page Giter Club logo

antenna's Introduction

Antenna: Socorro crash ingestion collector

Collector for the Socorro crash ingestion pipeline that supports breakpad-style crash reports.

Uses Python 3, Gunicorn, gevent, Falcon and some other things.

Quickstart

This is a quickstart that uses Docker so you can see how the pieces work. Docker is also used for local development of Antenna.

For more comprehensive documentation or instructions on how to set this up in production, see docs.

  1. Clone the repository:

    $ git clone https://github.com/mozilla-services/antenna
  2. Install docker 1.10.0+ and install docker-compose 1.6.0+ on your machine

  3. Download and build Antenna docker containers:

    $ make build

    Anytime you want to update the containers, you can run make build.

  4. Set up local Pub/Sub and S3 services:

    $ make setup

    Anytime you want to wipe service state and recreate them, you can run make setup.

  5. Run with a prod-like fully-functional configuration.

    1. Running:

      $ make run

      You should see a lot of output. It'll start out with something like this:

      /usr/bin/docker-compose up web
      antenna_statsd_1 is up-to-date
      antenna_localstack-s3_1 is up-to-date
      Recreating antenna_web_1
      Attaching to antenna_web_1
      web_1      | [2016-11-07 15:39:21 +0000] [7] [INFO] Starting gunicorn 19.6.0
      web_1      | [2016-11-07 15:39:21 +0000] [7] [INFO] Listening at: http://0.0.0.0:8000 (7)
      web_1      | [2016-11-07 15:39:21 +0000] [7] [INFO] Using worker: gevent
      web_1      | [2016-11-07 15:39:21 +0000] [10] [INFO] Booting worker with pid: 10
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.app: Setting up metrics: <class 'antenna.metrics.DogStatsdMetrics'>
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.metrics: DogStatsdMetrics configured: statsd:8125 mcboatface
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.app: BASEDIR=/app
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.app: LOGGING_LEVEL=DEBUG
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.app: METRICS_CLASS=antenna.metrics.DogStatsdMetrics
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.app: DUMP_FIELD=upload_file_minidump
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.app: DUMP_ID_PREFIX=bp-
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.app: CRASHSTORAGE_CLASS=antenna.ext.s3.crashstorage.S3CrashStorage
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.app: THROTTLE_RULES=antenna.throttler.mozilla_rules
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.app: CRASHSTORAGE_ACCESS_KEY=foo
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.app: CRASHSTORAGE_SECRET_ACCESS_KEY=*****
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.app: CRASHSTORAGE_REGION=us-east-1
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.app: CRASHSTORAGE_ENDPOINT_URL=http://localstack-s3:4572
      web_1      | [2016-11-07 15:39:21 +0000] [INFO] antenna.app: CRASHSTORAGE_BUCKET_NAME=antennabucket
      
    2. Verify things are running:

      In another terminal, you can verify the proper containers are running with:

      $ docker-compose ps

      You should see containers with names web, statsd and localstack-s3.

    3. Send in a crash report:

      You can send a crash report into the system and watch it go through the steps:

      $ ./bin/send_crash_report.sh
      ...
      <curl http output>
      ...
      CrashID=bp-6c43aa7c-7d34-41cf-85aa-55b0d2160622
      *  Closing connection 0

      You should get a CrashID back from the HTTP POST. You'll also see docker logging output something like this:

      web_1      | [2016-11-07 15:48:45 +0000] [INFO] antenna.breakpad_resource: a448814e-16dd-45fb-b7dd-b0b522161010 received with existing crash_id
      web_1      | [2016-11-07 15:48:45 +0000] [INFO] antenna.breakpad_resource: a448814e-16dd-45fb-b7dd-b0b522161010: matched by is_firefox_desktop; returned ACCEPT
      web_1      | [2016-11-07 15:48:45 +0000] [INFO] antenna.breakpad_resource: a448814e-16dd-45fb-b7dd-b0b522161010 accepted
      web_1      | [2016-11-07 15:48:45 +0000] [INFO] antenna.breakpad_resource: a448814e-16dd-45fb-b7dd-b0b522161010 saved
      
    4. See the data in localstack-s3:

      The localstack-s3 container stores data in memory and the data doesn't persist between container restarts.

      You can use the aws-cli to access it. For example:

      AWS_ACCESS_KEY_ID=foo AWS_SECRET_ACCESS_KEY=foo \
          aws --endpoint-url=http://localhost:5000 \
              --region=us-east-1 \
              s3 ls s3://antennabucket/
      

      If you do this a lot, turn it into a shell script.

    5. Look at runtime metrics with Grafana:

      The statsd container has Grafana. You can view the statsd data via Grafana in your web browser http://localhost:9000.

      To log into Grafana, use username admin and password admin.

      You'll need to set up a Graphite datasource pointed to http://localhost:8000.

      The statsd namespace set in the dev.env file is "mcboatface".

    6. When you're done--stopping Antenna:

      When you're done with the Antenna process, hit CTRL-C to gracefully kill the docker web container.

    If you want to run with a different Antenna configuration in the local dev environment, adjust your my.env file.

    See docs for configuration options.

  6. Run tests:

    $ make test

    If you need to run specific tests or pass in different arguments, you can run bash in the base container and then run pytest with whatever args you want. For example:

    $ make shell
    app@...$ pytest
    
    <pytest output>
    
    app@...$ pytest tests/unittest/test_crashstorage.py

    We're using pytest for a test harness and test discovery.

For more details on running Antenna or hacking on Antenna, see the docs.

antenna's People

Contributors

willkg avatar dependabot-preview[bot] avatar pyup-bot avatar milescrabill avatar lonnen avatar mozilla-github-standards avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.