Metadata-Version: 2.4
Name: rasengan
Version: 0.2.6
Summary: Is a command-line tool for automated testing of multiple kind of integrations tests for domains, 
Home-page: https://github.com/apsl/rasengan
Author: Edu Herraiz
Author-email: eherraiz@apsl.net
License: GPLv3
Requires-Python: >=3.4
Requires-Dist: click==6.7
Requires-Dist: PyYAML==3.12
Requires-Dist: requests==2.18.4
Requires-Dist: dnspython==1.15.0
Requires-Dist: pyOpenSSL==17.5.0
Requires-Dist: colorlog==3.1.0
Dynamic: author
Dynamic: author-email
Dynamic: description
Dynamic: home-page
Dynamic: license
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

Rasengan
=========

.. image:: https://img.shields.io/pypi/v/rasengan.svg
    :target: https://pypi.python.org/pypi/rasengan/

.. image:: https://travis-ci.org/APSL/rasengan.svg?branch=master
    :target: https://travis-ci.org/APSL/rasengan

Overview
--------

``rasengan``, is a command-line tool for automated testing of multiple
kind of integrations tests for domains, with a simple and flexible YAML
definition syntax. The yaml file can contain multiple domains and we
could check it in a diferent ways: 

  - Check the DNS resolution 
  - Checkredirects, status code and expected URL in the redirect 
  - Check http requests and the content text 
  - Check http using different user-agents 
  - Check SSL expiration date 
  - Check SSL Qualys grade

The exit of the execution is an error if any of the checks fails. You
can use a mrpe parameter to get MRPE simple and resume output.

Install & configure
-------------------

``rasengan`` is developed and tested with a python 3 version. We require
>3.4 to install it.

To install ``rasengan`` we can use the PyPI package:

::

    pip install rasengan

You can use the publish docker image without need to install the python environment:
Where you have to share the directory where rasengan.yml is like a volume

::
    docker run -v $PWD:/rasengan rasengan

rasengan.yml
------------

At this file you can specify the different for a domain:

+------------+-----------------------------------------------------------------------+
| Field      | Description                                                           |
+============+=======================================================================+
| ``dns``    | Check the DNS resolution, expect domain\_type and result              |
+------------+-----------------------------------------------------------------------+
| ``ssl``    | Check the SSL status of the domain qualys test and expire date        |
+------------+-----------------------------------------------------------------------+
| ``http``   | Request the domain from http, expect status\_code, redirect or text   |
+------------+-----------------------------------------------------------------------+

Options in plugins
------------------

-  **dns**:

   -  *domain\_type*: CNAME, A or another type of expected resolution in
      the domain.
   -  *expected*: list of IPs or domains expected in the result.

-  **ssl**:

   -  *grade*: Qualys test expected grade.
   -  *days\_to\_expire*: expiration days limit warning in the https
      certificate for the domain.

-  **http**:

   -  *status\_code*: 200, 301, 302, 404, etc. Status code in the http
      request.
   -  *protocol*: http or https, do the request over different http
      protocol. Default https.
   -  *redirect*: expected redirect URL when you configure status code
      in 301 or 302.
   -  *path*: The url path to check in the domain. Default is '/'.
   -  *text*: check text in the result page when you expect 200 code.
   -  *user\_agent*: use a custom user\_agent for the request or stored
      one from keys: mobile, desktop, google\_desktop, google\_mobile.
   -  *auth\_user*: username in http auth.
   -  *auth\_password*: password in http auth .
Usage
-----

::

    $ rasengan --help
    Usage: rasengan [OPTIONS]

      Check all the domains in the file

    Options:
      -c, --config TEXT      Name of file to check. Default rasengan.yml
      -d, --domains TEXT     Check only this list of domain (comma separated)
      -l, --loglevel TEXT    Log level. Default INFO
      -w, --workers INTEGER  Number of threads to make the requests. Default 20.
      --mrpe / --no-mrpe     MRPE output (disable logging options). Default False, and if True disable loglevel.
      --help                 Show this message and exit.

Basic Example
-------------

::

    version: 0.2.6
    domains:
      www.apsl.net:
        ssl:
          grade: F
          days_to_expire: 10
        dns:
          domain_type: CNAME
          expected: 
            - apsl.net.
        http:
          main: 
            status_code: 301
            protocol: http
            redirect: https://www.apsl.net/
          main_https:
            status_code: 200
            text: Expertos en desarrollos web
          mobile:
            status_code: 200
            user_agent: mobile
            text: Expertos en desarrollos web           
      apsl.net:
        dns:
          domain_type: A
          expected: 
            - 148.251.84.231
        http:
          main_redirect:        
            protocol: http
            status_code: 301
            redirect: https://www.apsl.net/
          https_redirect:
            protocol: https
            status_code: 301
            redirect: https://www.apsl.net/

Usage example
-------------

::

    $ rasengan -c rasengan.yml 
    2017-12-26 03:38:01,250 INFO     www.apsl.net - DNS Check - OK -> result: ['apsl.net.']
    2017-12-26 03:38:01,309 INFO     apsl.net - DNS Check - OK -> result: ['148.251.84.231']
    2017-12-26 03:38:01,722 INFO     www.apsl.net - [desktop] - Status Code for http://www.apsl.net/ - OK -> result: 301
    2017-12-26 03:38:01,722 INFO     apsl.net - [desktop] - Status Code for http://apsl.net/ - OK -> result: 301
    2017-12-26 03:38:01,723 INFO     www.apsl.net - [desktop] - Redirect Location for http://www.apsl.net/ - OK -> result: https://www.apsl.net/                                
    2017-12-26 03:38:01,723 INFO     apsl.net - [desktop] - Redirect Location for http://apsl.net/ - OK -> result: https://www.apsl.net/
    2017-12-26 03:38:01,820 INFO     www.apsl.net - SSL Expires at 2018-01-17 23:59:59
    2017-12-26 03:38:01,936 INFO     www.apsl.net - [desktop] - Status Code for https://www.apsl.net/ - OK -> result: 200
    2017-12-26 03:38:01,938 INFO     www.apsl.net - [desktop] - Page content for https://www.apsl.net/ - OK -> Exists the phrase: Expertos en desarrollos web
    2017-12-26 03:38:01,958 INFO     apsl.net - [desktop] - Status Code for https://apsl.net/ - OK -> result: 301
    2017-12-26 03:38:01,960 INFO     www.apsl.net - [mobile] - Status Code for https://www.apsl.net/ - OK -> result: 200
    2017-12-26 03:38:01,960 INFO     apsl.net - [desktop] - Redirect Location for https://apsl.net/ - OK -> result: https://www.apsl.net/
    2017-12-26 03:38:01,962 INFO     www.apsl.net - [mobile] - Page content for https://www.apsl.net/ - OK -> Exists the phrase: Expertos en desarrollos web
    2017-12-26 03:38:03,353 INFO     www.apsl.net - SSL Qualys grade - OK -> result: F

    (rasengan) $ echo $?
    0

    (rasengan) $ rasengan -c rasengan.yml --mrpe
    Checks OK: 11 -- 

Future work
-----------

::

    - Integrate tavern to check APIs
    - Check http response time
    - Manage and show exceptions ocurred in Future threads

Acknowledgements
----------------

``rasengan`` makes use of several open-source projects:

-  `click <http://click.pocoo.org/5/>`__, for manage the command-line
   options.
-  `requests <http://docs.python-requests.org/en/master/>`__, for HTTP
   requests.
-  `pyyaml <https://github.com/yaml/pyyaml>`__, for the manage the data
   syntax.
-  `colorlog <https://github.com/borntyping/python-colorlog>`__, for
   formatting terminal outputs.
-  `dnspython <http://www.dnspython.org/>`__, for manage the DNS
   queries.
-  `pyOpenSSL <https://pypi.python.org/pypi/pyOpenSSL>`__, for manage
   the ssl expiration checks.
-  `SSL Qualys API <https://www.ssllabs.com/projects/ssllabs-apis/>`__,
   for check the grade of security in SSL.
