Commit Graph

532 Commits

Author SHA1 Message Date
softwarefactory-project-zuul[bot]
889dae357b Merge pull request #3235 from ryanpetrello/sql-profiling
add a custom DB backend that provides system-level SQL profiling

Reviewed-by: https://github.com/softwarefactory-project-zuul[bot]
2019-02-15 21:56:28 +00:00
Ryan Petrello
eed94b641e add a custom DB backend that provides system-level SQL profiling
run this command on _any_ node in an awx cluster:

$ awx-manage profile_sql --threshold=2.0 --minutes=1

...and for 1 minute, the timing for _every_ SQL query in _every_ awx
Python process that uses the Django ORM will be measured

queries that run longer than (in this example) 2 seconds will be
written to a per-process sqlite database in /var/lib/awx/profile, and
the file will contain an EXPLAIN VERBOSE for the query and the full
Python stack that led to that SQL query's execution (this includes not
just WSGI requests, but background processes like the runworker and
dispatcher)

$ awx-manage profile_sql --threshold=0

...can be used to disable profiling again (if you don't want to wait for
the minute to expire)
2019-02-14 15:04:46 -05:00
Ryan Petrello
9bebf3217e remove usage of import * and enforce F405 in our linter
import * is a scourge upon the earth
2019-02-13 17:10:33 -05:00
Ryan Petrello
daeeaf413a clean up unnecessary usage of the six library (awx only supports py3) 2019-01-25 00:19:48 -05:00
Tyler Cross
0da0a8e67b CORS Support
Added the django-cors-headers app and middleware to make CORS possible.
2019-01-18 12:49:00 -05:00
Ryan Petrello
f223df303f convert py2 -> py3 2019-01-15 14:09:01 -05:00
AlanCoding
cccc038600 Updates to logging, specifically for unit tests 2019-01-15 11:34:54 -05:00
softwarefactory-project-zuul[bot]
aa8cda0001 Merge pull request #2801 from ryanpetrello/more-robust-isolated-capacity
collect isolated capacity using a cache plugin, not stdout parsing

Reviewed-by: https://github.com/softwarefactory-project-zuul[bot]
2018-12-20 20:01:00 +00:00
AlanCoding
65e110cdbf catch python error when unable to find user 2018-12-13 11:47:54 -05:00
chris meyers
d1705dd0cc more sane default log handlers
* Removed the emailing of admins on request error. When turned on, the
handler will include all django settings in the email. This is not
desirable from a security standpoint.
2018-12-05 09:38:27 -05:00
Ryan Petrello
d5c6c589b2 add an AWX_ISOLATED_VERBOSITY setting for debugging isolated connections 2018-11-26 23:47:16 -05:00
AlanCoding
53716a4c5a include migration middleware in timings and profiling 2018-11-18 10:55:37 -05:00
Ryan Petrello
661cc896a9 add a user agent for requests to Insights 2018-11-16 16:25:08 -05:00
AlanCoding
7417f9925f Minor cleanup of task environment vars 2018-11-16 13:28:42 -05:00
softwarefactory-project-zuul[bot]
b9f35e5b50 Merge pull request #2536 from ryanpetrello/deprecated_auth_token_middleware
remove DeprecatedAuthTokenMiddleware

Reviewed-by: https://github.com/softwarefactory-project-zuul[bot]
2018-10-26 14:27:29 +00:00
Ryan Petrello
28512e042b remove DeprecatedAuthTokenMiddleware 2018-10-26 10:11:53 -04:00
AlanCoding
482395eb6a reduce default verbosity of devel-specific callback logging 2018-10-26 10:03:46 -04:00
Ryan Petrello
ff1e8cc356 replace celery task decorators with a kombu-based publisher
this commit implements the bulk of `awx-manage run_dispatcher`, a new
command that binds to RabbitMQ via kombu and balances messages across
a pool of workers that are similar to celeryd workers in spirit.
Specifically, this includes:

- a new decorator, `awx.main.dispatch.task`, which can be used to
  decorate functions or classes so that they can be designated as
  "Tasks"
- support for fanout/broadcast tasks (at this point in time, only
  `conf.Setting` memcached flushes use this functionality)
- support for job reaping
- support for success/failure hooks for job runs (i.e.,
  `handle_work_success` and `handle_work_error`)
- support for auto scaling worker pool that scale processes up and down
  on demand
- minimal support for RPC, such as status checks and pool recycle/reload
2018-10-11 10:53:30 -04:00
Ryan Petrello
da74f1d01f refactor and test the callback receiver as a base for a task dispatcher 2018-10-11 10:53:26 -04:00
Shane McDonald
580004b395 Merge remote-tracking branch 'downstream/release_3.3.0' into devel
# Conflicts:
#	awx/main/notifications/slack_backend.py
2018-09-18 08:11:50 -04:00
Ryan Petrello
5561eb30f7 emulate /api/v2/authtoken/ to help customers transition to OAuth2.0 2018-08-24 11:05:41 -04:00
AlanCoding
3f841180da Change loggers from non-propagating to INFO filter 2018-08-20 09:02:55 -04:00
Ryan Petrello
18f6f68540 Merge remote-tracking branch 'tower/release_3.3.0' into devel 2018-08-10 11:54:34 -04:00
Ryan Petrello
6f5259d017 remove the network UI 2018-07-30 11:03:53 -04:00
adamscmRH
df6b7627bc fix sdb, update host var 2018-07-26 17:48:00 -04:00
Ryan Petrello
af84b25726 prevent cross site request forgery in websockets w/ the CSRF token
now that we have the CSRF middleware, we have a reliable token
available to us which we can use to verify individual ws_receive
payloads;  this is _simpler_ than making sure you've properly configured
trusted origins, and it's also more secure than Origin header checks

see: https://github.com/ansible/tower/issues/2661
2018-07-25 09:47:53 -04:00
mabashian
bf40dc4793 Adds websocket origin whitelist 2018-07-24 16:53:48 -04:00
Ryan Petrello
4b3ca080d4 improve robustness of host comparision for wss:// Origin headers
see: https://github.com/ansible/tower/issues/2647
2018-07-24 13:30:04 -04:00
John Westcott IV
0ba8022eac #2073 - Support setting to prevent Tower from pulling from requirements.yml files for an SCM project 2018-07-23 09:37:49 -04:00
Ryan Petrello
df0e28ec65 don't allow OAuth2 token creation for "external" users
see: https://github.com/ansible/tower/issues/2326
2018-07-12 14:33:59 -04:00
adamscmRH
ae0793f374 Hookup UI session expiration 2018-07-03 16:53:27 -04:00
Ryan Petrello
504dfd32ee properly enforce CSRF validation
see: https://github.com/ansible/tower/issues/2339
2018-06-27 21:09:26 -04:00
adamscmRH
c5f2b9a471 upgrade django-oauth-toolkit to 1.1.2 2018-06-15 09:50:34 -04:00
chris meyers
88bb98c967 flake8 2018-05-17 13:38:37 -04:00
chris meyers
40ef30a914 reduce chance of collision on cache namespace 2018-05-17 13:37:04 -04:00
chris meyers
04767641af isolate cache 2018-05-17 12:58:11 -04:00
Chris Meyers
7f214f5ad2 Merge pull request #1766 from chrismeyersfsu/i_like_parallel_tests_and_I_can_not_lie
parallelize test running
2018-05-16 15:13:20 -04:00
chris meyers
97ab6449b9 parallelize test running 2018-05-16 14:29:15 -04:00
Ryan Petrello
d5fbb2d3b6 remove md5 password hashing in dev 2018-05-15 14:57:47 -04:00
AlanCoding
59744e421f send our oddball loggers to external logger too 2018-05-02 15:33:58 -04:00
chris meyers
9f745dd3b8 control celery routes using celery router
* Each time a route is needed (i.e. when a task is sumitted to celery).
The router will be queried. This is ideal. With the previous method we
had to consider how a change in the routes would propogate to all celery
workers and nodes.

* fully describe the default awx queue
* Our dynamic queue registration would correct awx_private_queue.
However, we don't want celery to even create an "invalid"/extra
queue-exchange-route. This change makes sure we don't create extranious
things in rabbitmq.

* reduce the cluster queue registration output. Only output when the
queue registration list changes.
2018-05-02 12:57:36 -04:00
AlanCoding
ac20aa954a Replace logging-related restart with dynamic handler
refactor existing handlers to be the related
  "real" handler classes, which are swapped
  out dynamically by external logger "proxy" handler class

real handler swapout only done on setting change

remove restart_local_services method
get rid of uWSGI fifo file

change TCP/UDP return type contract so that it mirrors
  the request futures object
add details to socket error messages
2018-05-02 09:47:22 -04:00
chris meyers
648d9165ff broadcast queues get a per-node stable queue name
* Using Kombu's default Broadcast() constructor requires only 1
parameter. That parameter defines the exchange name and the queue name
is randomly generated per-node.
* This caused problems if/when celery enters an infinite restart loop
because too many rabbit queues get created and rabbit OOM's
(gracefully).
* To remedy this we tell Broadcast the queue name to use, which is
derived from some constant + the node name so that the per-node queue
name is stable.
2018-05-01 13:09:10 -04:00
Ryan Petrello
1eb5e98743 Merge branch 'release_3.2.4' into release_3.3.0 2018-04-26 11:10:28 -04:00
chris meyers
a56771c8f0 send all tower work to a user-hidden queue
* Before, we had a special group, tower, that ran any async work that
tower needed done. This allowed users fine grain control over which
nodes did background work. However, this granularity was too complicated
for users. So now, all tower system work goes to a special non-user
exposed celery queue. Tower remains the fallback instance group to
execute jobs on. The tower group will be created upon install and
protected from deletion.
2018-04-20 13:04:36 -04:00
Ryan Petrello
fe47b75aad use a three-prong setting for Jinja extra vars policy 2018-04-17 12:08:07 -04:00
Ryan Petrello
88c243c92a mark all unsafe launch-time extra vars as !unsafe
see: https://github.com/ansible/tower/issues/1338
see: https://bugzilla.redhat.com/show_bug.cgi?id=1565865
2018-04-16 16:47:44 -04:00
Ryan Petrello
5560dc1da9 Merge pull request #1252 from ryanpetrello/celery-failure-handler
implement celery failure logging using CELERY_ANNOTATIONS
2018-04-06 13:40:34 -04:00
Ryan Petrello
4c0096a524 implement celery failure logging using CELERY_ANNOTATIONS
see: https://github.com/ansible/awx/issues/1720
see: https://github.com/ansible/tower/issues/1190
2018-04-06 11:23:23 -04:00
adamscmRH
881688dd77 fix authentication order 2018-04-05 12:04:07 -04:00